デフォルトの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 範囲です。注:再起動後も保存されないため、維持する必要があります。