Windowsで同一サブネット内に複数IPを利用するときに注意すること
西澤です。今回はEC2ではなく、ほぼWindowsの話です。Windows Server 2003からWindows Server 2008に移行する際に遭遇した問題の知見が活きた機会があったので、特殊なケースなのですが改めてここでまとめておきたいと思います。
複数IP構成のルーティング
まずは、EC2 WindowsにアタッチしたENIに2つのプライベートIPを割り当て、それぞれにEIPを設定しておきます。
今回、その手順について詳しく説明はしませんが、Windows側でも静的にこの設定を施す必要がありますのでご注意ください。詳しくは、下記の公式ドキュメントをご覧ください。
それでは、このときのルーティングを確認してみましょう。
PS C:\> route print -4 =========================================================================== インターフェイス一覧 12...02 e5 e5 c8 6c 83 ......AWS PV Network Device #0 1...........................Software Loopback Interface 1 13...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface 18...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3 =========================================================================== IPv4 ルート テーブル =========================================================================== アクティブ ルート: ネットワーク宛先 ネットマスク ゲートウェイ インターフェイス メトリック 0.0.0.0 0.0.0.0 10.200.1.1 10.200.1.54 266 10.200.1.0 255.255.255.0 リンク上 10.200.1.54 266 10.200.1.54 255.255.255.255 リンク上 10.200.1.54 266 10.200.1.81 255.255.255.255 リンク上 10.200.1.54 266 10.200.1.255 255.255.255.255 リンク上 10.200.1.54 266 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 169.254.169.250 255.255.255.255 10.200.1.1 10.200.1.54 10 169.254.169.251 255.255.255.255 10.200.1.1 10.200.1.54 10 169.254.169.254 255.255.255.255 10.200.1.1 10.200.1.54 10 224.0.0.0 240.0.0.0 リンク上 127.0.0.1 306 224.0.0.0 240.0.0.0 リンク上 10.200.1.54 266 255.255.255.255 255.255.255.255 リンク上 127.0.0.1 306 255.255.255.255 255.255.255.255 リンク上 10.200.1.54 266 =========================================================================== 固定ルート: ネットワーク アドレス ネットマスク ゲートウェイ アドレス メトリック 0.0.0.0 0.0.0.0 10.200.1.1 既定 0.0.0.0 0.0.0.0 10.200.1.1 既定 ===========================================================================
ゲートウェイへの通信に利用される発信元のIPは、"10.200.1.54"です。ということは、インターネットに通信する時に使われるEIPは、"52.32.185.160"ということになります。
PS C:\> PS C:\> Invoke-RestMethod "http://checkip.amazonaws.com" 52.32.185.160
通信元が変更されるパターン
今度はさらに3つ目のIPをENIに割り当てます。先ほどと異なるのは、割り当てられたプライベートIPのうち、4オクテット目の数字が最も小さくなるようにします。
Windows側の設定も先ほどと同様にもう1つのプライベートIPを追加しておきましょう。
それでは、先ほどと同じようにルーティング情報を確認してみます。
PS C:\> route print -4 =========================================================================== インターフェイス一覧 12...02 e5 e5 c8 6c 83 ......AWS PV Network Device #0 1...........................Software Loopback Interface 1 13...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface 18...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3 =========================================================================== IPv4 ルート テーブル =========================================================================== アクティブ ルート: ネットワーク宛先 ネットマスク ゲートウェイ インターフェイス メトリック 0.0.0.0 0.0.0.0 10.200.1.1 10.200.1.27 266 10.200.1.0 255.255.255.0 リンク上 10.200.1.27 266 10.200.1.27 255.255.255.255 リンク上 10.200.1.27 266 10.200.1.54 255.255.255.255 リンク上 10.200.1.27 266 10.200.1.81 255.255.255.255 リンク上 10.200.1.27 266 10.200.1.255 255.255.255.255 リンク上 10.200.1.27 266 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 169.254.169.250 255.255.255.255 10.200.1.1 10.200.1.27 10 169.254.169.251 255.255.255.255 10.200.1.1 10.200.1.27 10 169.254.169.254 255.255.255.255 10.200.1.1 10.200.1.27 10 224.0.0.0 240.0.0.0 リンク上 127.0.0.1 306 224.0.0.0 240.0.0.0 リンク上 10.200.1.27 266 255.255.255.255 255.255.255.255 リンク上 127.0.0.1 306 255.255.255.255 255.255.255.255 リンク上 10.200.1.27 266 =========================================================================== 固定ルート: ネットワーク アドレス ネットマスク ゲートウェイ アドレス メトリック 0.0.0.0 0.0.0.0 10.200.1.1 既定 0.0.0.0 0.0.0.0 10.200.1.1 既定 ===========================================================================
デフォルトゲートウェイへの通信に利用される通信元IPが、"10.200.1.27"に変わってしまいました。インターネットに通信する時に使われるEIPは"54.69.74.245"に変わることになります。
PS C:\> Invoke-RestMethod checkip.amazonaws.com 54.69.74.245
今回は全てのプライベートIPに対してEIPを設定したので問題なかったのですが、今回通信元として利用されることになったプライベートIPである"10.200.1.27"に対応するEIPを指定しなければ、EC2インスタンスはインターネットと通信することができません。正確には、EIPへのインターネットからのアクセスは可能なのですが、EC2からインターネットに出ていくことができなくなってしまいます。
これはWindowsの仕様によるもので、 ゲートウェイに最も近いIPアドレスが通信元として選択されるという挙動となります。
異なるセグメントの場合 次のホップの IP アドレスと、上位ビットから順に評価し、一致するビット数が最も多い IP アドレスが選択されます。 この動作は Windows Server 2008 と同様です。
- Windows Server 2008 および Windows Vista での発信元 IP アドレス選択の機能が、以前のバージョンの Windows の対応する機能と異なる
- Windows Server 2012 および Windows 8 以降における発信元 IP アドレスの選択動作
まとめ
そもそもEC2に静的な設定をすることもそうですし、置き換えが難しくなるような特殊な設定をお勧めするつもりは毛頭ありません。要件によってはこのような利用パターンもあるということで、限定的な注意事項としてご認識いただければと思います。
よろしくお願いいたします。