extreme
2014-12-06 13:20:49 +08:00
你看一下TCP三次握手。
我的思路是不POSTROUTING,在目标服务器OUTPUT时把数据包DNAT到NAT服务器。
不过我做了实验,失败了,两个原因:
1. 如果不SNAT,NAT服务器就会以客户的IP发出数据包,但很多数据中心对出网数据包的来源IP有限制……
2. 目标服务器OUTPUT处DNAT不生效,这个我百思不得其解,TCPDUMP处查看到TCP三次握手的数据包仍直接发送回给访客,无法DNAT到NAT服务器。
事实上有一个更好的解决方案——IPv4隧道,因为你目标服务器知道数据包要通过那个隧道发回去到NAT服务器,NAT服务器自然也不需要使用SNAT告诉目标服务器该把数据包发到哪个IP。
具体建立IPv4隧道的方法可以Google搜索IP GRE(推荐点击属于BuyVM的WiKi的搜索结果),我目前部分服务器正采用了此解决方案。
事实上你用PPTP,L2TP也行,因为都是建立一个隧道,关闭VPN协议的加密功能,就能把传输速度都损失降到最低。