目标:想要在公网做端口映射,用iptables实现,功能有些类似“haproxy的TCP转发”。
网络环境:(IP替换过)
服务器A:Azure,公网IP 8.8.8.1,内网IP 10.8.8.1;
服务器B:某VPS,网卡直接绑定公网IP 8.8.8.2;
在AB之间利用openvpn建立了隧道,Azure端IP 10.0.0.1,VPS端IP 10.0.0.2,测试通过这对IP ping wget均正常。
目标:访问http://8.8.8.1/,请求能够被发送到服务器B
目前iptables用的是这两条规则:
-A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.2
-A POSTROUTING -o eth0 -j MASQUERADE
从我的个人电脑(IP 8.8.8.3)进行了telnet 8.8.8.1 80
并且tcpdump抓包测试,结果如下:
1、服务器A上,8.8.8.3->10.8.8.1 SYN包,这是正常的外网连接Azure;
2、服务器A上,8.8.8.3->10.0.0.2 SYN包,这是第一个包经过iptables转换,目标地址变成了服务器B;
3、服务器B上,8.8.8.3->10.0.0.2 SYN包,这个SYN包被成功的发送了过来;
4、服务器B上,10.0.0.2->8.8.8.3 SYN-ACK包,进行TCP三步握手;
然后包4就丢失了……至少看起来是丢失了,#服务器A并没有收到这个ACK#,后面有几个重发的SYN与SYN-ACK包,但是都是1234中的某一个。求问这是哪里设置的问题么?
网络环境:(IP替换过)
服务器A:Azure,公网IP 8.8.8.1,内网IP 10.8.8.1;
服务器B:某VPS,网卡直接绑定公网IP 8.8.8.2;
在AB之间利用openvpn建立了隧道,Azure端IP 10.0.0.1,VPS端IP 10.0.0.2,测试通过这对IP ping wget均正常。
目标:访问http://8.8.8.1/,请求能够被发送到服务器B
目前iptables用的是这两条规则:
-A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.2
-A POSTROUTING -o eth0 -j MASQUERADE
从我的个人电脑(IP 8.8.8.3)进行了telnet 8.8.8.1 80
并且tcpdump抓包测试,结果如下:
1、服务器A上,8.8.8.3->10.8.8.1 SYN包,这是正常的外网连接Azure;
2、服务器A上,8.8.8.3->10.0.0.2 SYN包,这是第一个包经过iptables转换,目标地址变成了服务器B;
3、服务器B上,8.8.8.3->10.0.0.2 SYN包,这个SYN包被成功的发送了过来;
4、服务器B上,10.0.0.2->8.8.8.3 SYN-ACK包,进行TCP三步握手;
然后包4就丢失了……至少看起来是丢失了,#服务器A并没有收到这个ACK#,后面有几个重发的SYN与SYN-ACK包,但是都是1234中的某一个。求问这是哪里设置的问题么?