QEMU/KVM libvirt 过滤器不工作

QEMU/KVM libvirt 过滤器不工作

我有一个使用默认 QEMU/KVM 虚拟网络 NAT 适配器的 VM。主机运行 Ubuntu 桌面 20.04。访客正在运行 Windows 10。我设置了一个简单的 libvirt 过滤器来阻止对我的局域网的访问,因此访客无法看到它:

cat > no-localnet <<EOF
<filter name='no-localnet' chain='ipv4' priority='-700'>
<uuid>f49bd8c5-80ed-4f20-9132-27d3391bf3dc</uuid>
<rule action='drop' direction='out' priority='500'>
<all dstipaddr='192.168.0.0' dstipmask='16' comment='reject localnet out'/>
</rule>
<rule action='drop' direction='in' priority='500'>
<all srcipaddr='192.168.0.0' srcipmask='16' comment='reject localnet in'/>
</rule>
</filter>
EOF
virsh nwfilter-define no-localnet

还添加到 VM NIC xml 设置:

<interface type="network">
  ...
  <filterref filter="no-localnet"/>
  ...
</interface>

过滤器在我第一次添加时起作用,但重新启动主机后,无论我更改什么,它都不再起作用。

答案1

找到了使用 IPTables 的解决方法

sudo iptables -I INPUT -d 192.168.100.0/24 -s 192.168.0.0/16 -j DROP
sudo iptables -I INPUT -s 192.168.100.0/24 -d 192.168.0.0/16 -j DROP
sudo iptables -I OUTPUT -d 192.168.100.0/24 -s 192.168.0.0/16 -j DROP
sudo iptables -I OUTPUT -s 192.168.100.0/24 -d 192.168.0.0/16 -j DROP
sudo iptables -I FORWARD -d 192.168.100.0/24 -s 192.168.0.0/16 -j DROP
sudo iptables -I FORWARD -s 192.168.100.0/24 -d 192.168.0.0/16 -j DROP

其中 192.168.100.0/24 是您要阻止访问局域网的 IP 范围,在本例中是分配给 VM 的 IP 范围。注意:这些在重新启动后不会保存,请确保将它们持久化。

相关内容