У меня есть виртуальная машина, использующая виртуальный сетевой NAT-адаптер QEMU/KVM по умолчанию. Хост работает под управлением Ubuntu Desktop 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
Fred 5 Ноя 2020 в 21:10
Пожалуйста, уточните, что происходит вместо этого.
 – 
Alex
5 Ноя 2020 в 23:17
Как это должно работать, так это отбрасывать любые сетевые пакеты, отправленные или полученные в локальной сети (192.168.0.0/16), но это вообще не работает, я могу свободно пинговать и получать доступ к сетевым устройствам, но в первый раз, когда я применил фильтр, это сработало, виртуальная машина не могла пропинговать или получить доступ к каким-либо устройствам в моей локальной сети, затем после перезагрузки хоста она больше никогда не работала
 – 
Fred
6 Ноя 2020 в 13:09
Я хотел бы добавить, что я переустанавливал libvirt + kvm/qemu с тем же результатом, но безуспешно.
 – 
Fred
6 Ноя 2020 в 18:36

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-адресов, которым вы хотите заблокировать доступ к локальной сети, в данном случае это те, которые назначены виртуальной машине. Примечание: они не сохраняются после перезагрузки, убедитесь, что вы сделали их постоянными.

0
Fred 7 Ноя 2020 в 20:02