У меня есть хост debian-linux, на котором запущена Windows vm с qemu. При настройке сети у меня есть один интерфейс eno1, который соединяет хост Linux с Интернетом, tap_inet для qemu для доступа в Интернет и мост br_inet, связывающий эти два. С этой настройкой и командой qemu с одной сетевой картой
qemu -netdev tap,ifname=tap_inet,id=n1 -device e1000,netdev=n1,mac=00.00.00.00.00.04...
все работает найду и в вм я получаю адрес от роутера. ipconfig при запуске:
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br_inet state UP group default qlen 1000
link/ether 70:71:bc:6b:f4:b2 brd ff:ff:ff:ff:ff:ff
3: br_inet: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 70:71:bc:6b:f4:b2 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.206/24 brd 192.168.1.255 scope global dynamic br_inet
valid_lft 43031sec preferred_lft 43031sec
4: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/ether d2:b4:67:6e:b6:7e brd ff:ff:ff:ff:ff:ff
inet 172.16.17.2/24 brd 172.16.17.255 scope global tap0
valid_lft forever preferred_lft forever
Целью было подключить сетевую карту к qemu для взаимодействия с сетью openvpn. На хосте linux у меня есть работающий клиент openvpn с сетевым адаптером tap0. Но при запуске qemu с двумя сетевыми картами
qemu -netdev tap,ifname=tap_inet,id=n1 -device e1000,netdev=n1,mac=00.00.00.00.00.04 -netdev tap,ifname=tap_ovpn,id=n2 -device e1000,netdev=n2,mac=00.00.00.00.00.08...)
tap_ovpn, который я намеревался соединить с tap0, автоматически соединяется с br_inet, что я подтвердил с помощью brctl show.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br_inet state UP group default qlen 1000
link/ether 70:71:bc:6b:f4:b2 brd ff:ff:ff:ff:ff:ff
3: br_inet: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 70:71:bc:6b:f4:b2 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.206/24 brd 192.168.1.255 scope global dynamic br_inet
valid_lft 42810sec preferred_lft 42810sec
4: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/ether d2:b4:67:6e:b6:7e brd ff:ff:ff:ff:ff:ff
inet 172.16.17.2/24 brd 172.16.17.255 scope global tap0
valid_lft forever preferred_lft forever
5: tap_inet: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br_inet state UNKNOWN group default qlen 1000
link/ether 86:5f:c1:2f:f1:2b brd ff:ff:ff:ff:ff:ff
6: tap_ovpn: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br_inet state UNKNOWN group default qlen 1000
link/ether 76:d1:46:d5:74:e7 brd ff:ff:ff:ff:ff:ff
В соответствии с https://www.qemu.org/2018/05/31/nic-parameter/ этого не должно происходить. Сети не должны быть соединены мостом, как со старой командой -net nic. Но все сетевые интерфейсы, созданные qemu, автоматически назначаются мосту br_inet.
Я думаю, что конфигурация openvpn верна, на сервере linux у меня есть интерфейс tap0 со статическим ip 172.16.17.2 в качестве клиента в моей сети openvpn. В файле конфигурации для конкретного клиента я добавил iroute 172.16.17.3 255.255.255.255 в файл для сервера Linux, чтобы передавать запросы этому клиенту и перенаправлять их на виртуальную машину.
Затем я планировал соединить интерфейс tap0 172.16.17.2 с интерфейсом tap_ovpn виртуальной машины 172.16.17.3 для пересылки пакетов гостевой системе Windows.
Могу ли я напрямую использовать интерфейс openvpn tap0 для qemu? Как я могу избежать того, что qemu автоматически назначает интерфейсы сетевых ответвлений мосту br_inet?
Думаю, я нашел первопричину своей проблемы. Похоже, что Debian поставляется с файлом / etc / qemu-ifup, который ищет в "route -n ip" первый мост, имеющий шлюз по умолчанию. Если вы не укажете сценарий или команду downscript, qemu будет использовать этот сценарий по умолчанию для каждой сетевой карты, поэтому все ответвления будут добавлены к мосту br_inet. Поэтому, чтобы решить эту проблему, добавьте script = / path / to / script к параметру -netdev.
«Если вы опустите параметры script = no и downscript = no, приведенная выше команда вернет безобидное предупреждение:» (Источник: https://unix.stackexchange.com/a/563547/295515)