okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

Vyattaを使ってAmazon VPC内に独自NAT環境を作る

このブログでクラウド関連の話題というと、ほとんどRackspace Cloudばかりなのですが…
今回のエントリは珍しくAWSをテーマにしてみたいと思います。
Twitterを見ているとVyattaが最近アツく、個人的にも書籍を購入したのでAmazon VPCと連携させたいです。
AWSではVPCネットワークから外部へ接続するためのNATアドレッシングインスタンスが提供されておりますが、こちらをVyattaに置き換えて使ってみるという事です。
今回はNATを構成するだけですが、Vyattaは機能が豊富で様々な可能性をVPCに付け加える事が出来そうです。
ちなみに先日Vyatta社からアナウンスされた6.3のAMIはSubscription Editionということなので、今回はVyatta Core6.1のAMIを使用しています。

[ネットワーク構成]

[VPCの設定]
VPC内にはVyattaを起動する公開サブネットと、Webサーバを起動する非公開サブネットの2つを用意します。

[Vyattaインスタンスを起動]
今回はこちらのAMIを使用し、インスタンス起動後にはSouce/Dest. CheckをDisableとします。
この設定はVyattaインスタンスを起動後にインスタンスを選択して、右クリックのメニューから変更が出来ます。
VPC内でElastic IPを取得してVyattaインスタンスに割り当てる事も忘れずに!
このIPを使用してWebサーバは通信をします。

[ルートテーブル]
Management Console(VPC)のRoute Tableメニューで公開用/非公開用のルートテーブルを設定します。
公開用サブネットはデフォルトルートがインターネットゲートウェイとなり、非公開用はVyattaインスタンスのinstance-idを指定します。

[セキュリティグループ]
Vyattaに割り当てるセキュリティグループは、
Webサーバからの必要な通信をブロックしなければ自由に設定可能です。
また、VPCで設定可能なネットワークACLも同じように自由に使えました。

[Vyattaインスタンスの設定]
起動したVyattaインスタンスSSH接続し以下のような設定を行います。

■ホスト名の設定
$ configure 
[edit]
# set system host-name vyatta61
# commit 
# exit

■時刻の設定
$ configure 
[edit]
# set system time-zone Asia/Tokyo 
# commit 
# exit
$ show date 

■NAT設定(内部から外部への変換)
$ configure 
[edit]
# set service nat rule 10 outbound-interface eth0  
# set service nat rule 10 source address 10.0.2.0/24
# set service nat rule 10 type masquerade 
# commit 

■NAT設定(外部からの8080番ポートを内部へ変換)
# set service nat rule 20 destination port 8080
# set service nat rule 20 inbound-interface eth0 
# set service nat rule 20 inside-address address 10.0.2.100
# set service nat rule 20 protocol tcp
# set service nat rule 20 type destination 
# commit 
# save

■NAT設定確認
# show service nat 
rule 10 {
outbound-interface eth0
protocol tcp
source {
address 10.0.2.0/24
}
type masquerade
}
rule 20 {
destination {
port 8080
}
inbound-interface eth0
inside-address {
address 10.0.2.100
}
protocol tcp
type destination
}

[Webサーバインスタンスの起動] そ
れでは動作確認用に適当なインスタンスを非公開用セグメントで起動します。
インスタンス起動後は外部接続の動作確認を行い、Apacheをインストールしました。

■NAT動作確認インスタンス起動
$ ping google.co.jp
$ sudo yum -y install httpd
$ sudo vi /etc/httpd/conf/httpd.conf 
136 Listen 8080
$ sudo chkconfig --level 2345 httpd on
$ sudo /etc/rc.d/init.d/httpd start
$ sudo vi /var/www/html/index.html

[ブラウザから動作確認]
Vyattaに割り当てたElastic IPにポート8080番を指定してアクセスすると以下のようにWebサーバに転送されました。

※おまけ
実はこの構成でVPCDHCP Options Setを無効にしてDHCPサーバも動かそうとしたのですが、VPCもブロードキャストの通信がサポートされてないという事なので断念しました(汗)

[投入を予定していたDHCP関連の設定]

DHCP設定
Amazon VPCの標準機能ではなくVyattaルータの設定で行います
$ configure 
[edit]
# set service dhcp-server shared-network-name oko_chang subnet 10.0.1.0/24
# set service dhcp-server shared-network-name oko_chang subnet 10.0.1.0/24 start 10.0.1.100 stop 10.0.1.200
# set service dhcp-server shared-network-name oko_chang subnet 10.0.1.0/24 default-router 10.0.1.254
# set service dhcp-server shared-network-name oko_chang subnet 10.0.1.0/24 dns-server 10.0.1.254
# commit 
# exit

■DNS設定
Amazon VPCの標準機能ではなく、Googleが提供しているルータの設定を行います
$ configure 
[edit]
# set system name-server 8.8.8.8
# commit 
# exit

■DNS転送設定
$ configure 
[edit]
# set service dns forwarding listen-on eth0 
# commit 
# exit

AWSが提供しているNATアドレッシングインスタンスも便利ですが、Vyattaユーザやルータの設定経験がある方はこのような構成にした方が理解しやすい部分もありそうですね。

[参考資料]