AWSでプライベートサブネットをTerraformで作ったらハマった
AWS上にVPCでプライベートサブネットを作成し、VPNサーバに接続したらEC2やRDSに接続するはずなのだが、なぜか新しく作った環境ではVPNサーバ以降につながらなくなった??なぜだ
デバッグ
VPNサーバからプライベートサブネット内のEC2にはつながるので、次の3者間でtcpdumpをとって通信を眺めてみた。
① ローカルからのSSH接続(テスト用)
>ssh -i ~/.ssh/private.pem ec2-user@x.x.x.x -vvvv
② ローカル~VPNサーバの通信観察
$ tcpdump src host 10.8.0.x
③ VPNサーバ~EC2の通信観察
$ tcpdump src host 10.8.0.x
これでわかったのは、ローカルPCからのSSHのパケットがVPNサーバまで流れていてEC2までは届いていないということ。
原因
現行サーバとTerraformで作ったサーバを比べていると、EC2の「送信元/送信先チェック」が有効になっていることに気づいた。これのせいでVPNサーバからほかのEC2への通信が遮断されていた。
解決
- TerraformでこういうEC2作るときは
source_dest_check
をfalse
にしよう
resource "aws_instance" "my-server" {
source_dest_check = "false"
}