V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
itsme
V2EX  ›  Linux

iptables 内网两个主机 nat 后速度降低是什么原因? iptables 转发数据会影响速度吗

  •  
  •   itsme · 2016-06-05 22:29:26 +08:00 · 4462 次点击
    这是一个创建于 3072 天前的主题,其中的信息可能已经有所发展或是发生改变。
    两台主机,之间通过内网相连,并都有独立的公网 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 、如果设置没错,转发会不会对速度造成明显的影响?
    8 条回复    2016-06-24 11:07:13 +08:00
    sanool123
        1
    sanool123  
       2016-06-06 00:07:37 +08:00
    trace 一下看看,我觉得访问速度和内网做转发的关系不大。
    colatin
        2
    colatin  
       2016-06-06 00:21:26 +08:00
    这种情况感觉根本不需要 iptables ,配下路由就可以了。
    colatin
        3
    colatin  
       2016-06-06 00:25:57 +08:00 via iPhone
    @colatin 看错了撤销
    carlhan
        4
    carlhan  
       2016-06-06 01:09:45 +08:00 via Android
    1.10 和 1.20 之间的速度怎么样啊?
    leewangyang
        5
    leewangyang  
       2016-06-06 01:20:46 +08:00 via Android
    问题难道不是一个是先到香港机再到美国机,一个是直接走美国机么?港机到美机速度是瓶颈么
    netwboy
        6
    netwboy  
       2016-06-06 10:51:54 +08:00
    我也遇到这个问题了,我只在香港放了一台机子,有数据在走的时候,但延迟很大,没数据走的时候,延迟正常的,不知道以原因。
    fangjinmin
        7
    fangjinmin  
       2016-06-08 19:44:00 +08:00
    我感觉是不是应该把在香港主机上内网网卡转发改一下?你原来的设置的意思是到 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 去。
    Siril
        8
    Siril  
       2016-06-24 11:07:13 +08:00
    推测: 延迟对吞吐量产生影响。


    假设从楼主到香港,从香港到美国的测速都大于 “ 2000-4000Kbits ”。


    再假设楼主使用普通电信 /联通网络,连接香港路由会绕道美国,那么比如说:
    楼主 ping 美国至少 200ms ;
    楼主 ping 香港至少 300ms ;
    香港 ping 美国至少 100ms 。


    则 SS 建立 tcp 连接,实际延迟至少 400ms (楼主到香港的延迟+香港到美国的延迟+iptables 转发的延迟)。
    [据说] 只要 linux 主机负载不高, iptables 的延迟可以忽略。



    对于 tcp 来说,延迟和丢包的增加,都会导致吞吐量剧减,适当优化窗口大小之类的可以缓解此情形。



    奇怪的是, 香港也无墙吧, 有必要多倒腾一次么。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:40 · PVG 03:40 · LAX 12:40 · JFK 15:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.