Amazon VPC の Private Subnet 内から外部ネットワークに接続する場合、Public Subnet に NAT 用のインスタンスを立てることで解決できます。
Amazon Public AMI で NAT 用のインスタンスが ami-vpc-nat
で提供されています。このインスタンスでは、rc.local
から設定スクリプトを叩いて、起動時にIPマスカレードを設定していました。スクリプトの内容を抜粋すると以下の通りです。
eth0
の MAC アドレスを調べます。
ETH0_MAC=`/sbin/ifconfig | grep eth0 | awk '{print tolower($5)}' | grep '^[0-9a-f]\{2\}\(:[0-9a-f]\{2\}\)\{5\}$'`
MAC アドレスから、Amazon 提供の Instance Metadata を利用して CIDR を取得します。
VPC_CIDR_URI="http://169.254.169.254/latest/meta-data/network/interfaces/macs/${ETH0_MAC}/vpc-ipv4-cidr-block"
....
VPC_CIDR_RANGE=`curl --retry 3 --retry-delay 0 --silent --fail ${VPC_CIDR_URI}`
取得した CIDR を送信元にして、IPマスカレードを設定します。
echo 1 > /proc/sys/net/ipv4/ip_forward && \
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects && \
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s ${VPC_CIDR_RANGE} -j MASQUERADE
自前の NAT インスタンスを立てる時には、同じスクリプトをコピーして起動時設定するなり、iptables
で設定すればよいでしょう。