我有一台 VirtualBox 机器,它有一个连接到 VB 的 NAT 模式的接口。我想做的是嗅闻来自/到任何机器的所有流量位于 NAT 后面。 (我认为我不需要同时嗅探更多机器)。
其背景是软件测试。更具体地说,我想在更大的范围内看到机器到底发出/发出了什么,而不需要过滤掉主机已经产生的所有噪音。
我曾经在使用 VMWare 的 Windows 7 上执行此操作,其中流量通过主机上的单独虚拟接口传输,因此嗅探来自 NAT 后面的(所有)计算机的流量就像仅嗅探该接口一样简单。
现在我尝试使用 VirtualBox 在 Debian 上实现相同的设置,但我发现 VirtualBox 似乎并没有以这种方式分离流量:在 Debian Wireshark 上仅提供eth0
、nflog
、lo
和any
(在所有其他设备上捕获的伪设备)。当我嗅探时eth0
,我无法轻易区分来自主人的东西和来自客人的东西。
VirtualBox 可以做到这一点吗?或者有更好(更简单)的设置吗?
两台机器都运行 Debian 7.0 Wheezy。
注意:我(也许天真地)认为可能的解决方案是:一种区分已翻译的传出数据包的方法。 (是否有NAT真的不留下痕迹?)现在我突然意识到,这至少对于传入数据包...
答案1
为此,您必须在 Linux 下创建一个桥接接口:
sudo brctl addbr br0
这将创建一个 virtualbox 可以附加的桥接口。
然后你必须配置你的虚拟机,以便它使用这个接口:
您现在可以嗅探br0
“虚拟机”网络上发生的情况。
您可能需要配置br0
接口以及 NAT:
# Assign IP address 192.168.42.2 (netmask 255.255.255.0) to br0
ip addr add 192.168.42.2/24 dev br0
# Tell your host that it should masquerade (NAT) all virtual machines
iptables -A POSTROUTING -o <lan_interface> -j MASQUERADE
请记住,网络中没有运行 DHCP 服务器br0
,因此您必须手动配置(IP 地址和默认网关)所有虚拟机。
编辑:brctl
修复了命令中的语法错误
编辑2:添加了配置桥接口的信息