使用 NAT 的 Ubuntu 网关上的文件复制失败

使用 NAT 的 Ubuntu 网关上的文件复制失败

我已成功在我的 Ubuntu 14.04.4 机器上设置 NAT,以便我的计算机可以作为通过内部接口 ( eth0) 连接到外部接口 ( eth1) 的计算机的网关。

主要目的不是让内部计算机访问互联网,而是让其通过外部接口访问服务器(Subversion 等)。

NAT 工作正常,我可以从内部 PC ping 服务器。

如果我尝试从外部 PC 上的服务器复制内部 PC 上的文件,复制会开始,但会在几秒钟内停止(速度从大约 500KB/s 开始,然后下降到 0.0KB/s)。我的复制命令很简单:

$ scp user@server:/path/to/file . 
user@server's password:
file            1%  704KB 0.0KB/s - stalled -

我的网关 PC 上的完全相同的复制命令以平均 12MB/s 的速度完成。文件大约 70MB。

我该如何解决这个问题,才能使复制尽可能完整、快速?


我的设置:

NAT 设置如下这里

  1. 在网关上设置 NAT 的命令是:

    sudo iptables -A FORWARD -o eth1 -i eth0 -s 192.168.10.0/24 -m conntrack --ctstate NEW -j ACCEPT
    sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t nat -F POSTROUTING
    sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    
  2. 我确实取消了net.ipv4.ip_forward=1注释/etc/sysctl.conf

  3. 我确实使用以下命令启用了端口转发:

    sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
    

附言:我正在使用scp进行测试,它显示了速度,使用 也会出现同样的情况rsync。实际上,文件由安装程序下载,可能通过 http 下载。使用 进行测试wget,得到完全相同的行为。

答案1

我更喜欢对接口和流程方向进行非常具体的说明。建议这样做:

sudo iptables -F FORWARD
sudo iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

相关内容