らくがきちょう

なんとなく

Windows Server 2012 で ProxyArp を設定する

積極的に設定する理由はありませんが、Windows での Proxy 設定手順をメモしておきます。 今回は Windows Server 2012 でテストしました。

Step.1

ネットワークアダプターには IPv4 アドレスを設定するものの、(最初は) 意図的にデフォルトゲートウェイは未指定とします。 Step.4 で Windows 自身を NextHop に指定した経路を route add していますが、この段階で GUI から NextHop に自身を登録しても ProxyArp 動作します。 今回は「通信出来ない → ProxyArp 設定すると通信出来るようになる」という変化を観測する為、ここでは意図的にゲートウェイを設定しません。

f:id:sig9:20170916172128p:plain

Step.2

ネットワークアダプターにデフォルトゲートウェイを設定していませんので、route print の実行結果を見てもデフォルトゲートウェイ (0.0.0.0) が表示されません。

> route print
===========================================================================
インターフェイス一覧
 12...00 50 56 bc fb d3 ......vmxnet3 Ethernet Adapter
  1...........................Software Loopback Interface 1
 13...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
===========================================================================

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
        127.0.0.0        255.0.0.0            リンク上         127.0.0.1    306
        127.0.0.1  255.255.255.255            リンク上         127.0.0.1    306
  127.255.255.255  255.255.255.255            リンク上         127.0.0.1    306
       172.20.0.0    255.255.255.0            リンク上      172.20.0.155    261
     172.20.0.155  255.255.255.255            リンク上      172.20.0.155    261
     172.20.0.255  255.255.255.255            リンク上      172.20.0.155    261
        224.0.0.0        240.0.0.0            リンク上         127.0.0.1    306
        224.0.0.0        240.0.0.0            リンク上      172.20.0.155    261
  255.255.255.255  255.255.255.255            リンク上         127.0.0.1    306
  255.255.255.255  255.255.255.255            リンク上      172.20.0.155    261
===========================================================================
固定ルート:
  なし

IPv6 ルート テーブル
===========================================================================
アクティブ ルート:
 If メトリック ネットワーク宛先      ゲートウェイ
  1    306 ::1/128                  リンク上
  1    306 ff00::/8                 リンク上
===========================================================================
固定ルート:
  なし

Step.3

デフォルトゲートウェイの設定が無い為、ネットワークアダプターに割当てた IPv4 アドレスと異なるネットワーク宛のパケットを送信することが出来ません。 異なるネットワーク宛に Ping すると 「一般エラー」 と表示されます。

> ping 8.8.8.8

8.8.8.8 に ping を送信しています 32 バイトのデータ:
ping: 転送に失敗しました。一般エラーです。
ping: 転送に失敗しました。一般エラーです。
ping: 転送に失敗しました。一般エラーです。
ping: 転送に失敗しました。一般エラーです。

8.8.8.8 の ping 統計:
    パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、

Step.4

異なるネットワーク宛のパケットもネットワークアダプターから出力させる為、NextHop を Windows 自身のアドレスにした経路 を追加します (※ このネットワークにおいて、正しいゲートウェイ172.20.0.254 です)。

> route add 0.0.0.0 mask 0.0.0.0 172.20.0.155
 OK!

Step.5

route print を確認すると行かのように見えます。

> route print
===========================================================================
インターフェイス一覧
 12...00 50 56 bc fb d3 ......vmxnet3 Ethernet Adapter
  1...........................Software Loopback Interface 1
 13...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
===========================================================================

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
          0.0.0.0          0.0.0.0            リンク上      172.20.0.155      6
        127.0.0.0        255.0.0.0            リンク上         127.0.0.1    306
        127.0.0.1  255.255.255.255            リンク上         127.0.0.1    306
  127.255.255.255  255.255.255.255            リンク上         127.0.0.1    306
       172.20.0.0    255.255.255.0            リンク上      172.20.0.155    261
     172.20.0.155  255.255.255.255            リンク上      172.20.0.155    261
     172.20.0.255  255.255.255.255            リンク上      172.20.0.155    261
        224.0.0.0        240.0.0.0            リンク上         127.0.0.1    306
        224.0.0.0        240.0.0.0            リンク上      172.20.0.155    261
  255.255.255.255  255.255.255.255            リンク上         127.0.0.1    306
  255.255.255.255  255.255.255.255            リンク上      172.20.0.155    261
===========================================================================
固定ルート:
  なし

IPv6 ルート テーブル
===========================================================================
アクティブ ルート:
 If メトリック ネットワーク宛先      ゲートウェイ
  1    306 ::1/128                  リンク上
  1    306 ff00::/8                 リンク上
===========================================================================
固定ルート:
  なし

Step.6

Windows 自身とは異なるネットワーク宛に Ping してみます。 先程の Step.3 とは異なり、応答があります!

> ping -n 1 8.8.8.8

8.8.8.8 に ping を送信しています 32 バイトのデータ:
8.8.8.8 からの応答: バイト数 =32 時間 =25ms TTL=56

8.8.8.8 の ping 統計:
    パケット数: 送信 = 1、受信 = 1、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 25ms、最大 = 25ms、平均 = 25ms
> ping -n 1 8.8.4.4

8.8.4.4 に ping を送信しています 32 バイトのデータ:
8.8.4.4 からの応答: バイト数 =32 時間 =19ms TTL=58

8.8.4.4 の ping 統計:
    パケット数: 送信 = 1、受信 = 1、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 19ms、最大 = 19ms、平均 = 19ms

Step.6

Ping した 8.8.8.88.8.8.8 等が全て、同じ MAC アドレスとして学習されていることが分かります。 これは本来のゲートウェイである 172.20.0.254MAC アドレスと同じです。 172.20.0.254Cisco Catalyst を用いており、ip proxy-arp コマンドを有効にしてあるので、ProxyArp 動作をしてくれ、結果として Windows は異なるネットワーク宛に通信が出来ます。

> arp -a

インターフェイス: 172.20.0.155 --- 0xc
  インターネット アドレス 物理アドレス           種類
  8.8.4.4               00-19-aa-XX-XX-c1     動的
  8.8.8.8               00-19-aa-XX-XX-c1     動的
  104.116.243.154       00-19-aa-XX-XX-c1     動的
  172.20.0.254          00-19-aa-XX-XX-c1     動的
  172.20.0.255          ff-ff-ff-ff-ff-ff     静的
  224.0.0.22            01-00-5e-00-00-16     静的
  224.0.0.252           01-00-5e-00-00-fc     静的