我是网络菜鸟。我正在创建一个用于恶意软件分析的模拟网络。这意味着,我需要一个连接到模拟网络的“真实”主机(VM)。
到目前为止,我的设置包括一个带有两个 VM 的 Xen 主机。一个是恶意软件分析 VM(窗户),另一个是 mininet VM(迷你网络世界)。第二个 mininet 网络正在运行。我使用 3 个桥接设备将此 VM 连接到管理域(dom0)。 其中之一 (埃穆布尔)仅用于将分析虚拟机连接到模拟的 mininet 网络。第二个(纳特布尔) 用于通过管理域上的 NAT 将模拟网络(和分析虚拟机)连接到互联网。我使用以下行创建了 NATing/etc/ufw/before.rules
并启用了 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
第三 (霍布尔) 桥接仅用于 SSH 连接。路由器R连接三个子网(10.0.0.0/24 - 3 个主机 + 分析虚拟机;10.0.1.0/24 - 3 个主机;10.0.2.0/24 - 3 个主机)并且他将不属于任何连接子网的流量路由到 eth1(从长远来看路由到互联网)。
概览的基本网络图像: https://i.stack.imgur.com/LOM4C.png
现在有效的是:
- 在模拟网络内执行 Ping 操作(任意主机 <-> 主机)
- 从分析虚拟机 ping 到模拟网络(任何主机)
- 从模拟网络 ping 互联网到互联网。为了使它工作,我必须在 dom0 的路由表中将条目添加到子网 (
{10.0.0.0/24, 10.0.2.0/24, 10.0.2.0/24} via 10.0.3.2 dev natbr
)
不起作用的是:
- 从分析虚拟机 Ping 互联网
问题识别 我将问题缩小到 dom0 上工作不正常的 NAT。来自分析 vm 的 ping 正在穿过 emubr 到 eth2。路由器正在将请求正确路由到 eth1。使用 tcpdump,我可以看到数据包在 dom0 上的 natbr 处进入。但是当我在 eth0(在 dom0 上)接口上分析它时,它不会更改 src ip 地址。如果我从 10.0.1.12(模拟网络中的主机)ping 互联网,情况就不同了。
如果我将 windom vm 直接连接到 natbr,则一切正常。所以这台主机应该没有问题。
我如何确定,为什么 NATing 在模拟主机上有效,但在分析虚拟机(应该等于模拟主机之一)上无效?我无法确定 natbr 发出的数据包中是否存在任何问题,这可能会导致 NATing 出现问题。