在 Virtual Box 上模拟 NAT 穿越

在 Virtual Box 上模拟 NAT 穿越

我已经安装了虚拟机(带有两个虚拟适配器(NAT 类型))- 主机(Ubuntu -10.10)- Guest-Opensuse-11.4。我的目标是模拟所有四种类型的 NAT,如下所示定义在这里。可以使用 Linux 模拟各种 NAT iptables。在这些示例中,eth0 是私有网络,eth1 是公有网络。

全锥:

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>

对称:

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 客户机。

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

然后运行震惊客户端服务器...

服务器:

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

...所有四种情况都给出了相同的结果:

测试 I = 1 测试 II = 1 测试 III = 1 测试 I(2) = 1 是 nat = 0 映射 IP 相同 = 1 发夹 = 1 保护端口 = 1 主要:打开 返回值为 0x000001

问 1:如果有人曾经这样做过,请告诉我,它应该按照描述像 NAT 一样运行,但它在任何地方都不能作为 NAT 工作。

问2:家用路由器如何实现 NAT(通常有端口限制),但这些路由器也预先配置了 iptables 规则并调整了 Linux

答案1

如果您想“控制”在任何类型的虚拟机管理程序下运行的客户机的不同类型的 NAT,那么您需要在“桥接”网络模式下运行客户机。

相关内容