如何模拟不同的NAT行为

时间:2012-07-30 10:22:51

标签: networking network-programming udp nat hole-punching

我正在使用UDP和UDT进行Holepunching。对于最终测试,我需要在不同的NAT类型(对称,全锥,限制锥,端口限制NAT)上测试应用程序。

有什么方法可以模拟这些吗?我期待的是某种虚拟盒子设置。我可以将PC用作路由器,以便根据需要进行配置吗?

一般来说,我们如何针对不同的网络条件测试应用程序?

2 个答案:

答案 0 :(得分:7)

我认为您已经回答了自己的问题,请使用VirtualBox(或VMware,Xen等)。

通过设置VM的迷你版本,我已经成功完成了这项工作。如果您正在寻找软件作为VM中的路由器,我会从http://www.pfsense.org/开始,看看它是否符合您的需求。这是一个FreeBSD发行版,专为易于安装的路由器/防火墙而设计,具有良好的Web管理UI和所有这些。

如果pfsense不能满足您的需求,那么还有很多其他linux / bsd发行版针对这类内容量身定制,您可以在VM中安装:http://en.wikipedia.org/wiki/List_of_router_or_firewall_distributions以获得一个好的列表: )(我也听说过关于OpenWRT和ClearOS的好消息。)

答案 1 :(得分:5)

以防万一其他人希望这样做,this网站解释了如何使用IPTables设置不同的NAT环境。

更新

我做了这个已经有几年了,因为链接被放在登录后面,倒带也放在登录后面,我从后面查看了笔记,发现了以下内容。请注意这些是未经测试的。

Full Cone NAT;

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source "public IP"
iptables -t nat -A PREROUTING -i eth1 -j DNAT --to-destination "private IP"

受限制的锥形NAT;

iptables -t nat POSTROUTING -o eth1 -p udp -j SNAT --to-source "public IP"
iptables -t nat PREROUTING -i eth1 -p udp -j DNAT --to-destination "private IP"
iptables -A INPUT -i eth1 -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth1 -p udp -m state --state NEW -j DROP

Port Restricted Cone NAT;

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source "public IP"

对称NAT;

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