QEMU/KVM libvirt フィルターが機能しません。

QEMU/KVM libvirt フィルターが機能しません。

デフォルトのQEMU / KVM仮想ネットワークNATアダプタを使用するVMがあります。ホストコンピュータはUbuntu Desktop 20.04を実行します。ゲストはWindows 10を実行しています。ゲストがLANを表示できないように、LANへのアクセスをブロックするために単純な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 は LAN へのアクセスをブロックする IP 範囲であり、この場合は VM に割り当てられた IP 範囲です。注:再起動後も保存されないため、維持する必要があります。

関連情報