我有一台装有 Fedora 21 的机器,它充当两台虚拟机的主机系统。虚拟机使用 QEMU/KVM/libvirt/virt-manager 组成。一个虚拟机运行 Web 服务器,另一个虚拟机充当客户端。客户端可以访问服务器,因此到目前为止网络运行良好。我认为它以某种方式通过主机上的 virbr0 接口进行管理,该接口还充当虚拟机的默认网关。
现在,在主机上,我想过滤虚拟机的网络流量。例如,我想将其放入 netfilter 队列中,并根据特定情况接受或丢弃它。一个示例 iptables 规则是iptables -I FORWARD -i virbr0 -j NFQUEUE --queue-num 1
总体来说,这似乎有效,因为当我丢弃进入队列的每个数据包时,虚拟机将无法再访问互联网上的网站。当然不行,默认网关会丢弃数据包。到目前为止一切正常。
但我无法阻止两个虚拟机之间的流量。即使我丢弃数据包,客户端也能够加载 Web 服务器虚拟机提供的页面。我认为这是因为虚拟化形成了一个网络,两个虚拟机无需默认网关即可连接。
那么有人能告诉我如何通过 iptables 和 netfilter 队列控制两个虚拟机之间的流量吗?
我只想在主机上执行过滤工作。并不打算阻止整个流量。它只是在特定情况下进行过滤。因此,netfilter 队列。