使用一个接口通过虚拟机重新路由流量

Reroute traffic through virtual machine with one interface

我想尝试网络方面的东西,我正在尝试为一些带有流量嗅探的练习配置测试环境,我想重新路由从第一个虚拟机 (A) 到第二个虚拟机 (B) 的所有流量,但是一个界面。类似于 Man In The Middle 但使用普通的 ip、iptables 命令。两台机器都是VirtualBox Ubuntu 18.04.

首先,我创建了这样的拓扑: VM A - 接口(内部网络) VM B - 接口(内网enp0s8),接口(NAT enp0s3)

在 VM B 上使用命令:

sysctl net.ipv4.conf.all.forwarding=1
sysctl net.ipv6.conf.all.forwarding=1
iptables -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
iptables -A FORWARD -i enp0s3 -o enp0s8 -j ACCEPT
iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE 

VM A 上的命令:

ip 路由添加默认值通过

但后来我开始怀疑是否有更优雅的解决方案。 (更优雅 == 1 个接口而不是 2 个)。我给自己写了这 3 个目标,我认为这样做是正确的:

(虚拟机 A 和虚拟机 B 在 Host-Only 网络中配置)

  1. 像前面的解决方案一样更改 VM A 上的默认路由(知道怎么做)
  2. 在 VM B 上 - 将流量从 VM A 转发到主机(但以某种方式区分 VM A 的流量与 VM B)
  3. 在 VM B 上 - 将流量从主机转发到 VM A(但是,区分流量的最佳方式是什么,也许是端口?)

如果有任何建议,我将不胜感激。特别是如果有人能告诉我我的思维方式(这3点)是否正确。

我认为没有比 nat-i​​nterface-approach 更优雅的解决方案了。

您可以尝试将 VM-A 配置为将 VM-B 作为默认网关,并将您的主机(工作站?)配置为将 VM-B 作为网关进入您的网络。 现在您必须创建防火墙规则,广播被阻止,您的 vm-a 无法解析您的工作站并建立直接连接。

因此,使用“内部网络”和 VM-B 作为主机 NAT 的方法需要两个网络接口,但工作量肯定要少得多,我什至不确定您使用一个网络的方法是否-界面真的可以用。