linux – AWS VPC IPtables NAT:端口转发无法正常工作
昨天,我发了一个问题
here,但我认为我的话并不清楚.顺便说一句,这个问题不重复.
我有AWS VPC设置如下. 目标/问题:从互联网SSH到服务器A.它不起作用. 服务器A在私有子网中,因此我想在我的NAT实例上启用iptables NATing,以便我可以直接从Internet上ssh到SErver A. 我跟随this和this 我在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 – 捕获直接重定向到/ dev / tty
- linux – 准备加载内核
- linux – exit()和exit_group()之间的区别是什么
- linux – iptables将本地连接重定向到远程系统/端口
- linux – 创建RAID 1阵列(MDADM)的备份磁盘映像
- Android文件系统日记功能
- 编译 – 使用cudnn编译好Caffe但是runtest失败并出现错误:
- linux – 如何为微处理器SA1100安装交叉编译器(在ubuntu 12
- linux – sendmail使用的是return-path而不是address
- redhat – RHEL 5.5服务器将大多数设备列为“未知设备”