iptables 内网两个主机 nat 后速度降低是什么原因? iptables 转发数据会影响速度吗
- 0次
- 2021-07-02 23:31:10
- idczone
两台主机,之间通过内网相连,并都有独立的公网 IP ,可以分别访问 internet 。
美国的外网 IP 是 48.13.10.42 内网网卡 IP 是 192.168.1.10
香港的外网 IP 是 118.83.10.142 内网网卡 IP 是 192.168.1.20
我的目的是从香港主机上通过内网走数据到美国的主机上,然后数据通过美国的主机的公网 IP 访问 Internet
在香港的主机上我设置了(默认 iptables 的 policy 全部是 accept 转发都允许):
iptables -t nat -A PREROUTING -d 118.83.10.142 -p tcp --dport 4003 -j DNAT --to 192.168.1.10:4003
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 4003 -j SNAT --to 192.168.1.20
在美国的主机上我设置了:
iptables -t nat -A PREROUTING -s 192.168.1.20 -p tcp --dport 4003 -j DNAT --to 48.13.10.42:4003
香港的主机上没有装 SS ,美国的主机上装有 SS 。
现在测试的电脑上用 SS 客户端连接香港的公网 IP 的 4003 端口能到达美国公网 IP 的 4003 端口,也就是说 SS 能否正常使用。说明转发应该是设置正确了(第一次用这种内网转发如果错误请指正)。
现在的问题:
设置 SS 的服务器地址为香港公网 IP 的时候, SS 速度大概只有 300Kbits 左右;
设置 SS 的服务器地址为美国公网 IP 的时候, SS 速度明显要快过上面的情况,一般都是 2000-4000Kbits
我的疑问:
1 、我这样设置转发是否有设置错误?
2 、如果设置没错,转发会不会对速度造成明显的影响?
trace 一下看看,我觉得访问速度和内网做转发的关系不大。
这种情况感觉根本不需要 iptables ,配下路由就可以了。
看错了撤销
1.10 和 1.20 之间的速度怎么样啊?
问题难道不是一个是先到香港机再到美国机,一个是直接走美国机么?港机到美机速度是瓶颈么
我也遇到这个问题了,我只在香港放了一台机子,有数据在走的时候,但延迟很大,没数据走的时候,延迟正常的,不知道以原因。
我感觉是不是应该把在香港主机上内网网卡转发改一下?你原来的设置的意思是到 192.168.1.10 的包的 IP 地址改成 192.168.1.20.
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 4003 -j SNAT --to 192.168.1.20
改成
iptables -t nat -A POSTROUTING -s 192.168.1.10 -p tcp --dport 4003 -j DNAT --to 192.168.1.20
就是说从 192.168.1.10 过来的包都转发到 192.168.1.20 去。
推测: 延迟对吞吐量产生影响。
假设从楼主到香港,从香港到美国的测速都大于 “ 2000-4000Kbits ”。
再假设楼主使用普通电信 /联通网络,连接香港路由会绕道美国,那么比如说:
楼主 ping 美国至少 200ms ;
楼主 ping 香港至少 300ms ;
香港 ping 美国至少 100ms 。
则 SS 建立 tcp 连接,实际延迟至少 400ms (楼主到香港的延迟+香港到美国的延迟+iptables 转发的延迟)。
[据说] 只要 linux 主机负载不高, iptables 的延迟可以忽略。
对于 tcp 来说,延迟和丢包的增加,都会导致吞吐量剧减,适当优化窗口大小之类的可以缓解此情形。
奇怪的是, 香港也无墙吧, 有必要多倒腾一次么。