3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

WindowsPCをルーター化して別セグメントにあるPCにRDP接続したい

知人より表題にあるようなネットワーク構成にしたいとの相談を受けました。
まず現状環境のネットワークは以下のとおりです。
f:id:deloreanmc12:20180526233102p:plain

本来PC1とPC2は別セグメントでありPC1は隔離セグメントになっています。
接続元PCはVPNで社内LAN2に接続されています。
LAN1は隔離セグメントなのでインターネットには接続できません。(LAN1とLAN2の通信は混在してはいけません)
要件は接続元からPC1へリモートしたいということでした。今は下記のようにPC1とPC2を直結し、まずPC1へリモート、そしてPC1からPC2へリモートしているようです。
f:id:deloreanmc12:20180526233115p:plain

しかし、リモートのリモートなのでレスポンスは相当悪いようです。 接続元から直でPC1へリモートできないかという相談でした。
つまり以下のようにしたいということです。 f:id:deloreanmc12:20180526233127p:plain

対応としてはPC2でIP転送をしLAN2のデータがLAN3に流れるようにすればいいです。
LAN3はRDPとICMPのみ流すようにします。
本来、PC1~PC2間に別途ファイアウォールをおいて、RDP,ICMP以外のプロトコルを流れないようにすればいいんですが、機材がないので、PC1,PC2のクライアント側のファイアウォールの設定をそうなるよう設定します。(ICMPはping確認のため)

条件として、接続元クライアントとPC2は同じセグメントとします。(別のセグメントだと、LAN2上のルータにルーティングを追加する必要があり面倒なため。)

PC2側での設定-IPルーティングとルーティング

LAN2とLAN3間でパケットが中継できるように、PC2でIPルーティングを有効にします。

Windows クライアントOSの場合、以下のレジストリでIPルーティングを有効にできます(サーバOSだとGUIでの設定も可)。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
IPEnableRouter
0→1

IPルーティングを有効にするために,再起動を行います。

IPルーティングが有効になると、ipconfig /all にてその旨が以下のように表示されます。

ipconfig /all 
Windows IP 構成
   IP ルーティング有効 . . . . . . . . : はい

イーサネット アダプター ローカル エリア接続 2:
   IPv4 アドレス . . . . . . . . . . : 192.168.39.161
   サブネット マスク . . . . . . . . : 255.255.255.0
   デフォルト ゲートウェイ . . . . . : 192.168.39.1

イーサネット アダプター ローカル エリア接続:
   IPv4 アドレス . . . . . . . . . . : 192.168.49.128
   サブネット マスク . . . . . . . . : 255.255.255.0
   デフォルト ゲートウェイ . . . . . :

PC1宛のルートは、PC2のNIC2にIPを設定した時点で、以下のように自動的に割り当てられているので特別設定を行う必要はありません。
(ループバックやブロードキャストは省略)

>route print
===========================================================================
インターフェイス一覧
 15...00 xx xx xx xx 85 ......Intel(R) PRO/1000 MT Network Connection #2
 11...00 xx xx xx xx 7b ......Intel(R) PRO/1000 MT Network Connection
===========================================================================

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
          0.0.0.0          0.0.0.0        192.168.39.1    192.168.39.161     10
     192.168.49.0    255.255.255.0            リンク上    192.168.49.128    266
   192.168.49.128  255.255.255.255            リンク上    192.168.49.128    266
   192.168.49.255  255.255.255.255            リンク上    192.168.49.128    266
    192.168.39.0     255.255.255.0            リンク上    192.168.39.161    266
  192.168.39.161   255.255.255.255            リンク上    192.168.39.161    266
  192.168.39.255   255.255.255.255            リンク上    192.168.39.161    266
===========================================================================

PC1側のルーティング設定

PC1側では接続元PCへのルートをルーティングテーブルに追加する必要があります。(そうしないと返りのパケットはデフォルトゲートとなっているLAN1側に流れるため)

今回接続元PCは 192.168.39.2 です。
このPCとの通信を仲介するルータはPC2となるので、39セグメント宛のパケットはPC2(49.128)をゲートウェイと指定し、LAN3につながっているNIC2を使うようにします。 以下のコマンドでルートを追加します。

route -p add 192.168.39.0 mask 255.255.255.0 192.168.49.128 if 24

これで39系への通信はLAN3を通じてPC2に送られるようになります。

(NIC2のインタフェースインデックスは24。インタフェースインデックスについてはインターフェイスを指定してrouteコマンドで静的ルートを設定する)

経路追加後のルーティングテーブルは以下のようになります。(ループバックやブロードキャストは省略)

>route print
===========================================================================
インターフェイス一覧
 13...xx xx xx xx xx 40 ......Intel(R) 82574L Gigabit Network Connection
 24...xx xx xx xx xx 4a ......Intel(R) 82574L Gigabit Network Connection #2
===========================================================================

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
          0.0.0.0          0.0.0.0       192.168.254.1   192.168.254.135     25
     192.168.49.0    255.255.255.0            リンク上    192.168.49.100    281
   192.168.49.100  255.255.255.255            リンク上    192.168.49.100    281
   192.168.49.255  255.255.255.255            リンク上    192.168.49.100    281
    192.168.39.0     255.255.255.0      192.168.49.128    192.168.49.100     26
    192.168.254.0    255.255.255.0            リンク上    192.168.254.135   281
  192.168.254.135  255.255.255.255            リンク上    192.168.254.135   281
  192.168.254.255  255.255.255.255            リンク上    192.168.254.135   281
===========================================================================
固定ルート:
  なし

接続元PCルーティング設定

接続元PCでは、49系セグメントへの通信はPC2へ投げてルーティングしてもらうよう経路を追加します。

route -p add 192.168.49.0 mask 255.255.255.0 192.168.39.161 if 6

接続元PCのルーティングテーブルは以下となります。(ループバックやブロードキャストは省略)

>route print
===========================================================================
インターフェイス一覧
 13...xx xx xx xx xx 14 ......Realtek USB GbE Family Controller
  6...xx xx xx xx xx 85 ......Intel(R) Dual Band Wireless-AC 8265
===========================================================================

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
          0.0.0.0          0.0.0.0        192.168.39.1   192.168.39.152     45
     192.168.49.0    255.255.255.0      192.168.39.161   192.168.39.152     46
    192.168.39.0     255.255.255.0            リンク上   192.168.39.152    301
  192.168.39.152   255.255.255.255            リンク上   192.168.39.152    301
  192.168.39.255   255.255.255.255            リンク上   192.168.39.152    301
===========================================================================

今回の要点をまとめると、以下のようになります。
・PC2でNIC1,NIC2間のIPルーティングON(ルーティングテーブルは自動でOK)
・接続元でPC1:NIC2宛のルート追加(GW=PC2:NIC1)
・PC1で接続元宛のルート追加(GW=PC2:NIC2)
f:id:deloreanmc12:20180526233139p:plain

参考:
ルーティングテーブルを操作しゲートウェイを設定する