WindowsでNATインスタンスを構成してみた

VPC内でNATインスタンスを構成する方法として、標準のウィザードによりAmazon Linux AMIを使う方法やVyattaを使って構成する方法(by @oko_changさん)があるが、ENIの登場によりWindowsインスタンスでも出来るようになった*1ので、実際にやってみた。

ネットワーク構成

Windowsインスタンスの準備

起動時にいきなりENIを追加して2枚刺しにするのはお勧めしない(ネットワークカードの認識順によっては、正常に起動しない可能性がある)。

  1. まずPublic Subnetにだけ接続している状態で一度起動して、ElasticIPアドレスのRDP経由でログインする
  2. 次にPublic側ネットワークインターフェースのプロパティで自動メトリックのチェックボックスを外し、メトリックを1にしておく
  3. Private SubnetのENIを追加する
  4. インスタンスにアタッチする

また、Private Subnet用のENIに対して以下の作業を行う。

  • 右クリックからChange Source/Dest Check→Disabledに変更しておく
  • 必要な通信をSecurityGroupとWindows Firewallで空けておく*2

中→外へのNAT機能を有効にする

@ITさんのこちらの記事に従って、設定していく。

  1. RRASの役割を追加
  2. ルーティングとリモート アクセスの構成と有効化
  3. NATの設定(パブリックインターフェースの選択で、Public Subnetに接続されているインターフェースを指定する)

以上で、中から外へのNATは有効になっているはずなので、Private Subnetのインスタンスから確認する。

[ec2-user@ip-10-0-1-123 ~]$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=2.88 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=2.75 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=57 time=2.72 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=57 time=2.83 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3310ms
rtt min/avg/max/mdev = 2.723/2.799/2.888/0.091 ms
[ec2-user@ip-10-0-1-123 ~]$ traceroute -n 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  10.0.1.4  0.391 ms  0.251 ms  0.459 ms
 2  175.41.192.56  1.039 ms  1.015 ms  0.992 ms
 3  27.0.0.146  38.674 ms  38.656 ms  38.636 ms
 4  27.0.0.134  2.033 ms  2.136 ms  2.104 ms
 5  203.190.230.31  3.160 ms  3.288 ms  3.270 ms
 6  72.14.239.202  2.509 ms  2.358 ms 72.14.239.48  2.164 ms
 7  209.85.243.59  3.514 ms  3.296 ms  3.280 ms
 8  209.85.241.139  3.801 ms  3.763 ms  3.880 ms
 9  8.8.8.8  2.672 ms  2.540 ms  2.545 ms

NAT用のインスタンス 10.0.1.4 を経由して外に通信しているのが分かる。

Private Subnetのサービスを公開する

Private Subnetのサービスを、NATインスタンスを通じて公開してみます(serverインスタンスsshポート)。

  1. スタートメニューの管理ツール→ルーティングとリモートアクセスを選択
  2. ローカル→IPv4→NATのローカルエリア接続をダブルクリック
  3. サービスとポートタブから、追加
  4. 外部から疎通確認
~ $ ssh ec2-user@[NATインスタンスのElasticIP]
Last login: Thu Dec 29 12:32:31 2011 from xxx.yyy.zzz

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

See /usr/share/doc/system-release/ for latest release notes.
There are 19 security update(s) out of 27 total update(s) available

無事にNATインスタンス経由で外部からsshログインを行う事が出来た。

*1:Windows OSでNATルーティングするには、NICが必ず二枚必要

*2:今回のテストでは10.0.0.0/16からはすべてのトラフィックを許可、Windows Firewallは無効化したが