linux – AWS VPC IPtables NAT:端口转发无法正常工作

前端之家收集整理的这篇文章主要介绍了linux – AWS VPC IPtables NAT:端口转发无法正常工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
昨天,我发了一个问题 here,但我认为我的话并不清楚.顺便说一句,这个问题不重复.

我有AWS VPC设置如下.

目标/问题:从互联网SSH到服务器A.它不起作用.

服务器A在私有子网中,因此我想在我的NAT实例上启用iptables NATing,以便我可以直接从Internet上ssh到SErver A.

我跟随thisthis

我在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.所以Access很好.

当我在笔记本电脑上运行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,sackOK],length 0
09:59:16.737009 IP xxx.xxx.xxx.xxx.51709 > 10.0.1.243.ssh: Flags [S],length 0
09:59:22.775567 IP xxx.xxx.xxx.xxx.51709 > 10.0.1.243.ssh: Flags [S],length 0

所以这意味着iptables将数据包路由到10.0.1.243. (BTW,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实例telnet到服务器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,sackOK,TS val 3013083 ecr 0,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,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,TS val 3013092 ecr 12074928],length 0

结论:

从NAT上的tcpdump输出,似乎Iptables正在转发我的数据包.

从服务器A上的TCP转储,我有从NAT到服务器A的良好连接.

但在端到端,我无法从笔记本电脑连接到服务器A.

(顺便说一句,我知道SSH隧道和其他好东西.但我只想让Iptables来帮助我.)

解决方法

最后,我破解了!!!!

在NAT实例上,我不得不更改以下命令:

从:

iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/16 -j MASQUERADE

至:

iptables -t nat -A POSTROUTING -j MASQUERADE

它工作了!!!!

因此,我将很快在ServerFault上创建一个新问题,询问使用上述两个命令有哪些优缺点.

猜你在找的Linux相关文章