2013年2月3日日曜日

CloutInitでNATインスタンス(iptables)を構築

スズキです。

下記で(最初の)起動時に任意のスクリプトを実行できるようにしたので、
"cloud-init"で"User Data"を使ってEC2を最初に起動した時のみ
任意のスクリプトを実行する
次の記事で紹介しているEC2上のNATインスタンスの構築("iptables"まわり)を、
VPCのNATインスタンスを作ってみる(iptables編)
初回起動時に自動で行ってみました。

構築スクリプトはこちらを利用しています。
#!/bin/sh
set -e
trap 'echo "NG: $?"' ERR
FROM="net\.ipv4\.ip_forward = 0"
TO="net.ipv4.ip_forward = 1"
cp /etc/sysctl.conf /etc/sysctl.conf.org
sed -e "s/$FROM/$TO/" /etc/sysctl.conf.org > /etc/sysctl.conf
sysctl -p
iptables -t nat -A POSTROUTING -o eth0 -s 0.0.0.0/0 -j MASQUERADE
service iptables save
service iptables start
chkconfig iptables on
exit 0

上記のスクリプトを、EC2起動時に次のように指定します。

#include-once
https://raw.github.com/suz-lab/suz-lab-centos-ami/master/share/cloud-init/suz-lab_nat

起動してログインしたら、下記のように確認できるはずです。
# service iptables status
テーブル: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

ちなみに上記作業は、次のAMIから起動したEC2で行っているので、
SUZ-LAB謹製 CentOS AMI (6.3.9 ap-northeast-1)
他の環境だと、当然、挙動が異なる可能性があります。

"High Availability NAT"にするには、もう少し考えないと...
--------
http://www.suz-lab.com

0 コメント: