昨日、ここに質問を投稿しましたが、言葉でははっきりしていなかったと思います。ところで、この質問は重複ではありません。
以下のようにAWS VPCセットアップがあります。
目標/問題:インターネットからサーバーAにSSH接続します。そしてそれは働いていません。
サーバーAはプライベートサブネットにあるため、インターネットから直接サーバーAにSSH接続できるように、NATインスタンスでiptables NATを有効にしたい
NATインスタンスで以下のコマンドを実行しました。
NAT# iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 10.0.1.243:22
NATインスタンスでIP転送が有効になっています。
NAT# sysctl -p
net.ipv4.ip_forward = 1
MASQUERADEはNATインスタンスで実行されています:
NAT# iptables -t nat -vnL POSTROUTING
Chain POSTROUTING (policy ACCEPT 6 packets, 312 bytes)
pkts bytes target prot opt in out source destination
199 16466 MASQUERADE all -- * eth0 10.0.0.0/16 0.0.0.0/0
AWSセキュリティグループは、このテストケースに必要なさまざまなアクセスを許可するように適切に構成されています。
トラブルシューティング:
ポート22でNATからサーバーAにTelnetで接続できます。アクセスは良好です。
telnet 54.213.116.251 2222
ラップトップで実行すると、NATのtcpdumpに次のエントリが表示されます。
NAT# tcpdump -n -i eth0 dst 10.0.1.243 and port 22
09:59:13.738316 IP xxx.xxx.xxx.xxx.51709 > 10.0.1.243.ssh: Flags [S], seq 1868541786, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
09:59:16.737009 IP xxx.xxx.xxx.xxx.51709 > 10.0.1.243.ssh: Flags [S], seq 1868541786, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
09:59:22.775567 IP xxx.xxx.xxx.xxx.51709 > 10.0.1.243.ssh: Flags [S], seq 1868541786, win 8192, options [mss 1460,nop,nop,sackOK], length 0
つまり、iptablesがパケットをにルーティングしていることを意味します10.0.1.243
。(ところで、xxx.xxx.xxx.xxx
私のラップトップのパブリックIPアドレスです)
しかし、サーバーAでtcpdumpを実行すると10.0.0.54
、NATの内部/プライベートIPアドレスであるものが何も表示されません(これが問題だと思います)。
Server A# tcpdump -n src 10.0.0.54
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
しかし、NATインスタンスからサーバーAにTelnetで接続すると、サーバーAのtcpdumpに適切なものが表示されます(つまり、全体的なPREROUTING
ルールが期待どおりに機能しません)。
Server A# tcpdump -n src 10.0.0.54
05:01:47.500080 IP 10.0.0.54.44627 > 10.0.1.243.ssh: Flags [S], seq 2862522431, win 14600, options [mss 1460,sackOK,TS val 3013083 ecr 0,nop,wscale 7], length 0
05:01:47.501601 IP 10.0.0.54.44627 > 10.0.1.243.ssh: Flags [.], ack 760676524, win 115, options [nop,nop,TS val 3013083 ecr 12074896], length 0
05:01:47.535720 IP 10.0.0.54.44627 > 10.0.1.243.ssh: Flags [.], ack 22, win 115, options [nop,nop,TS val 3013092 ecr 12074928], length 0
結論:
NATのtcpdump出力から、Iptablesがパケットを正常に転送しているようです。
サーバーAのTCPダンプから、NATからサーバーAへの接続が良好です。
しかし、エンドツーエンドでは、ラップトップからサーバーAに接続できません。
(ところで、私はSSHトンネルと他の良いものを知っています。しかし、これを手助けしてくれるのはIptablesだけです。)
Disabled
NATインスタンス用であることがわかりました。