虚拟networking,可以ping和traceroute,不能apt-get update

我正在用virtualBox中的6个虚拟机build立一个虚拟networking。 其中一个充当路由器/ NAT /防火墙。 第一台机器使用4个网卡:

eth0 -> Internet eth1 -> Subnet 1 eth2 -> Subnet 2 eth3 -> Host-Only Network 

我已经到了在子网中的机器可以通过设置nat在“路由器”连接到互联网的地步:

 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

然后,我开始使用这些网卡设置第三个从子网2中的虚拟机出来的子网:

 eth0 -> Subnet 2 eth1 -> Subnet 3 

只有一台机器连接到子网3,但是我要build立一个ssh服务器,所以我需要从路由器到子网2中的机器路由到另一台机器。 为此我使用了:

 iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 192.168.20.46:22 

在“路由器”和

 iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 192.168.30.50:22 

在ssh服务器上。 另外,为了让每台机器“看”对方,我用:

 route add default gw 192.168.20.46 route add -net 192.168.30.0 netmask 255.255.255.0 gw 192.168.20.46 

在“路由器”机器上。

现在每台机器都可以从其他机器上ping到8.8.8.8并跟踪它们。 然而,

 apt-get update 

在任何一台机器上,路由器都会把这个软件包发送给路由器,并且没有回应,所以它会卡在第一行:

  0% Connecting ftp....(82.194.78.250)... 

除此之外永远不会有任何进展。 (只是错误,当它超时)我的猜测是NAT正在发送包正确,但在回来的路上,他们无法到达子网机器。

我猜是错的。 机器正在发送请求,路由器将它们redirect到另一个子网,这个子网不知道如何处理它,或者将它弹回路由器。 解决scheme是将-i eth0添加到iptables行,以便只有外部stream量redirect。