我已成功在我的 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 设置如下这里
在网关上设置 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
我确实取消了
net.ipv4.ip_forward=1
注释/etc/sysctl.conf
我确实使用以下命令启用了端口转发:
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