在Virtual Box上模拟NAT穿越

我已经安装了虚拟盒子(带有两个虚拟适配器(NAT型)) – 主机(Ubuntu -10.10) – Guest-Opensuse-11.4。 我的目标是模拟这里定义的所有四种types的NAT。 模拟各种NAT可以使用Linux的iptables来完成。 在这些示例中,eth0是专用networking,eth1是公用networking。

全锥:

 iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source <public ip goes here> iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination <private ip goes here> 

限制锥体:

 iptables -t nat POSTROUTING -o eth1 -p tcp -j SNAT --to-source <public ip goes here> iptables -t nat POSTROUTING -o eth1 -p udp -j SNAT --to-source <public ip goes here> iptables -t nat PREROUTING -i eth1 -p tcp -j DNAT --to-destination <private ip goes here> iptables -t nat PREROUTING -i eth1 -p udp -j DNAT --to-destination <private ip goes here> iptables -A INPUT -i eth1 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i eth1 -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i eth1 -p tcp -m state --state NEW -j DROP iptables -A INPUT -i eth1 -p udp -m state --state NEW -j DROP 

限制端口的锥体:

  iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source <public ip goes here> 

Symmentric:

 echo "1" > /proc/sys/net/ipv4/ip_forward iptables --flush iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE --random iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT 

我使用两个虚拟适配器eth0和eth1设置OpenSuse guest虚拟机。

  • 地址为10.0.3.15 / eth1:1的eth1为10.0.3.16
  • eth0地址为10.0.2.15

然后运行stund客户端/服务器…

服务器:

 eKimchi@linux-6j9k:~/sw/stun/stund> ./server -v -h 10.0.3.15 -a 10.0.3.16 

客户:

 eKimchi@linux-6j9k:~/sw/stun/stund> ./client -v 10.0.3.15 -i 10.0.2.15 

…所有四个案例它是一样的结果:

testingI = 1testingII = 1testingIII = 1testingI(2)= 1是nat = 0映射IP相同= 1发夹= 1保留端口= 1主要:开放返回值是0x000001

Q-1:请让我知道如果有任何事情,它应该像NAT一样performance,但不知道它作为一个NAT。

Q-2:家庭路由器如何实现NAT(通常是端口限制),但是这些还预先configuration了iptables规则和调整的Linux

如果您想要在任何types的虚拟机pipe理程序下运行guest虚拟机来“控制”不同types的NAT,则需要在“桥接”联网模式下运行guest虚拟机。