如果您准备进行一些编码,则可以尝试以下操作:
- 通过使用系统调用的
CLONE_NEWNET
标志clone
或使用ip netns add
和ip netns exec
命令来创建新的网络名称空间。
- 在此命名空间中,使用
tun
驱动程序或来创建一组虚拟网络接口ip link add
。
- 使用以下方式加载配置
iptables-restore
- 通过
tun
或veth
设备向规则提供大量数据包
- 观察您从
tun
或veth
设备中获得了正确的数据包
这种方法可能最适合测试转发数据包的规则。与使用iptables的机器之间的连接需要花费更多的精力,但也应该可以通过这种方式进行测试。
这是可以使用的一系列命令示例:
ip netns add test-iptables
ip netns add test-iptables-some-guy-on-the-internet
ip netns add test-iptables-lan-host
ip netns exec test-iptables ip link add eth0 type veth peer name eth0-peer
ip netns exec test-iptables ip link set eth0-peer netns test-iptables-some-guy-on-the-internet
ip netns exec test-iptables ip link add eth1 type veth peer name eth1-peer
ip netns exec test-iptables ip link set eth1-peer netns test-iptables-lan-host
ip netns exec test-iptables ifconfig eth0 192.0.2.2 netmask 255.255.255.0
ip netns exec test-iptables ifconfig eth1 203.0.113.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet ifconfig eth0-peer 192.0.2.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet route add default gateway 192.0.2.2
ip netns exec test-iptables-lan-host ifconfig eth1-peer 203.0.113.2 netmask 255.255.255.0
ip netns exec test-iptables-lan-host route add default gateway 203.0.113.1
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns exec test-iptables iptables-restore < /tmp/iptables-test
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns del test-iptables
ip netns del test-iptables-some-guy-on-the-internet
ip netns del test-iptables-lan-host
这将创建三个用于测试的网络名称空间,并在其中一个中加载一组iptables规则。另外两个充当Internet上某个人的角色,而LAN上充当主机的角色。
在上面的示例中,第一个telnet
命令获取test-iptables-lan-host
名称空间的连接被拒绝,telnet
如果规则集丢弃了数据包,第二个命令获取超时。
这不会影响初始的网络名称空间,这是您的所有生产将默认使用的名称空间。与生产产生更多分离的唯一方法是在单独的主机(物理或虚拟)上运行它。