昨天,我在这里发表了一个问题,但我认为我的话还不够清楚。顺便说一句,这个问题不是重复的。
我有如下的AWS VPC设置。
目标/问题:从Internet SSH到服务器A。而且它不起作用。
服务器A位于私有子网中,因此我想在NAT实例上启用iptables NAT,以便可以直接从Internet SSH到服务器A
我在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 Security组进行良好配置,以允许该测试用例进行各种访问。
故障排除:
我可以从NAT远程登录到端口22上的服务器A。因此访问是好的。
当我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,我会在服务器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实例。