NAT对仿真子网中分析VM不生效但对其他主机生效的排查请求
NAT对仿真子网中分析VM不生效但对其他主机生效的排查请求
我是个网络新手,正在搭建一个用于恶意软件分析的仿真网络——需要一台「真实」的虚拟机(VM)接入到仿真网络中。
现有架构说明
- 我的基础环境是一台Xen主机,上面运行着两台VM:
- 恶意软件分析VM(命名为
windom) - mininet VM(命名为
mininetdom),上面跑着mininet仿真网络
- 恶意软件分析VM(命名为
- 我给mininet VM连接了3个网桥设备到管理域(dom0):
emubr:仅用于将分析VM接入到仿真的mininet网络natbr:用于通过dom0的NAT功能,让仿真网络(包括分析VM)访问互联网hobr:仅用于SSH远程连接
- 仿真网络内的路由器R连接了三个子网:
- 10.0.0.0/24:包含3台仿真主机 + 分析VM
- 10.0.1.0/24:包含3台仿真主机
- 10.0.2.0/24:包含3台仿真主机
- 路由器R会将不属于上述子网的流量转发到eth1,最终导向互联网
NAT配置详情
我在dom0的/etc/ufw/before.rules中添加了以下配置来实现NAT,并启用了ufw:
*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -o ens33 -j MASQUERADE COMMIT
执行iptables -t nat -L -v的输出结果:
Chain PREROUTING (policy ACCEPT 2 packets, 120 bytes) pkts bytes target prot opt in out source destination 2 120 DOCKER all -- any any anywhere anywhere ADDRTYPE match dst-type LOCAL Chain INPUT (policy ACCEPT 2 packets, 120 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 8 packets, 594 bytes) pkts bytes target prot opt in out source destination 0 0 DOCKER all -- any any anywhere !localhost/8 ADDRTYPE match dst-type LOCAL Chain POSTROUTING (policy ACCEPT 3 packets, 232 bytes) pkts bytes target prot opt in out source destination 0 0 MASQUERADE all -- any !docker0 172.17.0.0/16 anywhere 8 580 MASQUERADE all -- any ens33 anywhere anywhere Chain DOCKER (2 references) pkts bytes target prot opt in out source destination 0 0 RETURN all -- docker0 any anywhere anywhere
执行iptables -t nat -S的输出结果:
-P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -N DOCKER -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE -A POSTROUTING -o ens33 -j MASQUERADE -A DOCKER -i docker0 -j RETURN
当前正常工作的场景
- 仿真网络内部的主机之间可以互相ping通
- 分析VM可以ping通仿真网络里的任何主机
- 仿真网络里的主机可以ping通互联网(为了实现这个功能,我已经在dom0的路由表中添加了指向三个子网的路由:
{10.0.0.0/24, 10.0.1.0/24, 10.0.2.0/24} via 10.0.3.2 dev natbr)
遇到的问题
- 分析VM无法ping通互联网
- 我已经排查到问题出在dom0的NAT功能上:从分析VM发出的ping包会通过
emubr到达eth2,路由器R也能正确将请求转发到eth1,用tcpdump可以看到包已经到达dom0的natbr接口,但当我在dom0的eth0接口抓包时,发现源IP没有被修改。而仿真网络里的主机(比如10.0.1.12)ping互联网时,NAT替换源IP的操作是正常的。 - 另外,如果我把
windomVM直接连接到natbr上,一切功能都正常,说明分析VM本身没有问题。
求助
我实在找不到问题的根源——为什么NAT对仿真网络里的主机生效,却对分析VM不生效?我检查了从natbr出来的包,没发现任何会导致NAT失效的异常,有没有大佬能指点下该怎么进一步排查?
备注:内容来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

