AWS NATインスタンス起動時の処理 ~sysctlとrc.localにやられた件~

こんにちは。渡辺です。

AWSにはNATインスタンスというものがあります。

グローバルIPを持たないEC2インスタンスとインターネットの間に設置され、NATルータとして働いてくれるものです。

ただ、実態としてはEC2インスタンスでAmazon Linuxなので、普通にsshログインもできます。

少しこのインスタンスの挙動のせいでハマったところがあり、共有しておきます。

今回試したAMIは、amzn-ami-vpc-nat-pv-2014.09.1.x86_64-ebs (ami-11d6e610) です。

 

NATインスタンスでsysctl -pしてはいけない

おもむろにsysctl -pしたら、ルーティング不能になりました。

そして、インスタンスを再起動したら復旧しました。

sysctl -pは、カーネルパラメータを設定している/etc/sysctl.confを再読み込みするコマンドですが、それを行うと設定がおかしくなります。

Linuxでルーティングを有効にするためには一般的に/etc/sysctl.confでnet.ipv4.ip_forward = 1
を設定しますが、今回はそうなっていませんでした。

 

NATインスタンス起動時のログ

インスタンス起動時のログを見ると、何やらvpc関係の表示があります。

vpc: net.ipv4.ip_forward = 1とあるので、/etc/sysctl.conf以外のどこかでルーティング設定されているようです。

 

まさかの/etc/rc.local

どこに設定が仕込まれているのか探しましたが、自力では到達できず、ググって発見しました。

インフラエンジニアに贈るAmazon VPC入門 #4 インターネット接続(後編)

まさかの/etc/rc.local。

AWSなら、cloud-initとか何か最新の仕組みなのでは・・・という先入観が敗因でした。。。

 /usr/local/sbin/configure-pat.sh

sysctlやiptablesでゴニョゴニョやってますね。

 

まとめ

sysctl -pをうっかり打ってしまったせいで、時間を無駄にし、いろいろなことがわかりました。

AWSの初見殺しにやられましたが、たいへん勉強になりました。

sysctl.confも合わせて更新してくれればいいのに・・・と、ちらっと思いましたが。。

Share on LinkedIn
LINEで送る
Pocket

claraer

claraer