銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Windows Server 2012 で Amazon VPC の NAT インスタンスを構築してみた

[VPC][EC2]WindowsでNATインスタンスを構成してみた をWindows Server 2012でやってみよう、という記事になります。最近、Amazon VPC上のNATインスタンス(インターネットに直接接続しないSubnetにおいたインスタンスとインターネットをNATでつなげるインスタンス)を構築するお仕事がありまして、せっかくなのでWindows Server でもやってみようと思い立ちました。で、上の記事を見つつ構築した手順になります。

基本的な手順は紹介した記事と同じです。まずは、公開されている Windows Server 2012 のAMIをVPCのPublic Subnetで起動します。起動したら、Elastic IPを確保して割り当てます。そして、このElastic IP経由でリモートデスクトップ接続します。 で、「次にPublic側ネットワークインターフェースのプロパティで自動メトリックのチェックボックスを外し、メトリックを1にしておく」という手順を行うのですが、ここはPowerShell でやってしまいましょう。

まず、Get-NetIPInterface でネットワークインターフェース一覧を列挙して、Public側ネットワークインターフェース(イーサネット)のInterfaceIndexを確認します。今回は12でした。ほかの記事見ても12であることが多いので、決まっているのかもしれません。そして、AutomaticMetric を Disabled にして、InterfaceMetric を1にします。

続いて、AWS Consoleに戻って、Private SubnetのENIを追加して、このインスタンスに接続します。また、必要な通信をSecurityGroupをWindows Firewallで許可しておきます。今回、Firewall は無効にしました(本番環境では絞って方がよさげ)。

ここまでで準備ができたので、Routing and Remote Access の機能を使ってNAT機能をセットアップします。まず、RRAS の機能を有効化します。これもPowerShellでやってしまいます。

インストールするとおそらく再起動を求められるので、最後に再起動しています。そして、ルーティングとリモート アクセスの構成と有効化を行うので、これもPowerShellで...と言いたいところですが、どうにもPowerShellのコマンドレットが見つからなかったので、ここからはGUIでやります(非常に負けた気分...)。

Routing and Remote Access を開きます(Windows+Qの検索画面で入力すると出て来ます)。おそらく、停止しているはずなので、「Configure and Enable Routing and Remote Access」を選択します。

f:id:tanaka733:20130915113937p:plain

Wizardを開始して、NATを選びます。

f:id:tanaka733:20130915113947p:plain

Internetにつなぐインターフェースで、Public側のインターフェースを選択します。

f:id:tanaka733:20130915114000p:plain

これでWizardを完了させると、NAT機能がセットアップされています。Private Subnetに割り当てているRoutingTableでこのインスタンスに割り当てたPrivate側のENIを指定しましょう(LinuxでのNATインスタンスだとENIが1つなのでRoutingTabkeのRuleでインスタンスIDの指定になりますが、Windowsの場合NetworkInterfaceが2つあるので、ENI単位で指定します)。これでWindows でNATインスタンスが構築できました。

ここまでできたら、次はWindows のNATインスタンスで冗長化したいねえ、という流れになるので、次はNAT冗長化スクリプトをWindows用に書き換えてみようかと思って居ます。