You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NAT对仿真子网中分析VM不生效但对其他主机生效的排查请求

NAT对仿真子网中分析VM不生效但对其他主机生效的排查请求

我是个网络新手,正在搭建一个用于恶意软件分析的仿真网络——需要一台「真实」的虚拟机(VM)接入到仿真网络中。

现有架构说明

  • 我的基础环境是一台Xen主机,上面运行着两台VM:
    • 恶意软件分析VM(命名为windom)
    • mininet VM(命名为mininetdom),上面跑着mininet仿真网络
  • 我给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的操作是正常的。
  • 另外,如果我把windom VM直接连接到natbr上,一切功能都正常,说明分析VM本身没有问题。

求助

我实在找不到问题的根源——为什么NAT对仿真网络里的主机生效,却对分析VM不生效?我检查了从natbr出来的包,没发现任何会导致NAT失效的异常,有没有大佬能指点下该怎么进一步排查?

备注:内容来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:08:09