为什么 NAT 不适用于子网中的所有主机?

为什么 NAT 不适用于子网中的所有主机?

我是网络菜鸟。我正在创建一个用于恶意软件分析的模拟网络。这意味着,我需要一个连接到模拟网络的“真实”主机(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 出现问题。

相关内容