Вы можете использовать мостовую сеть, оставляя мост (на стороне хоста) без какой-либо конфигурации IP.
Обратите внимание, что в случае мостовой сети ваша виртуальная машина будет подвергаться воздействию того места, к которому подключен сетевой адаптер. В вашем случае это был бы интернет. Виртуальная машина получит IP-адрес напрямую от вашего интернет-провайдера (зависит от того, будет ли это публичный или частный IP-адрес).
Как это сделать, зависит от ваших предпочтений и от того, какой сетевой агент / менеджер вы используете. Поэтому я просто представлю концепцию с помощью ip
:
Создать мост:
ip link add name br0 type bridge
Подключите сетевой адаптер для виртуальной машины («WAN-порт») к мосту:
ip link set enp3s0 master br0
(замените enp3s0
на имя интерфейса вашего "порта WAN")
Создайте tap
для подключения виртуальной машины к мосту:
ip tuntap add name tap0 mode tap
Подключите tap
к мосту:
ip link set tap0 master br0
Чтобы избежать какой-либо автоконфигурации IPv6, вы можете использовать sysctl disable_ipv6
:
sysctl net.ipv6.conf.enp3s0.disable_ipv6=1
sysctl net.ipv6.conf.br0.disable_ipv6=1
sysctl net.ipv6.conf.tap0.disable_ipv6=1
Поднимите интерфейсы:
ip link set enp3s0 up
ip link set br0 up
ip link set tap0 up
Затем вы можете использовать -net tap
в qemu. Например, -net tap,ifname=tap0,script=no,downscript=no
. (Вы также можете добавить ,vhost=on
для лучшей производительности.)
На самом деле вы можете использовать ,script=someup.sh,downscript=somedown.sh
чтобы сообщить qemu, что сценарии должны запускаться соответственно, когда виртуальная машина / нажатие переключается вверх и вниз. Тем не менее, IMHO, это не очень хороший способ, так как сценарии, вероятно, нужно будет запускать с правами root, поэтому, если вы используете эти параметры, виртуальная машина также должна быть запущена с правами root. Поэтому я бы предпочел обернуть qemu следующим образом, если я хочу подобный подход:
#!/bin/bash
sudo /path/to/someup.sh
qemu-system-x86_64 ...
sudo /path/to/somedown.sh
Если вы предпочитаете, чтобы этот tap
динамически создавался и удалялся при загрузке и завершении работы виртуальной машины, вы можете использовать qemu-bridge-helper
. Для этого, пропустите шаги , описанные выше , которые связаны с tap
Вместо этого вам нужно создать список контроля доступа:
[tom@localhost ~]$ cat /etc/qemu/bridge.conf
allow br0
Очевидно, это список мостов, которые разрешено использовать qemu-bridge-helper
.
Как только это будет сделано, вы можете использовать -net bridge
в qemu. Вам может понадобиться или не нужно указывать используемый мост и / или путь к qemu-bridge-helper
. Например, -net bridge,br=br0,helper=/usr/lib/qemu/qemu-bridge-helper
.
Обратите внимание, что в дополнение к -net tap
или -net bridge
вам также необходимо добавить -net nic
. Речь идет о представлении интерфейса на гостевой стороне. Например, -net nic,model=virtio
. Вы можете указать MAC-адрес с помощью ,macaddr=xx:xx:xx:xx:xx:xx
. Если вы это сделаете, НЕ используйте MAC-адреса интерфейсов на стороне хоста , которые участвуют (например, enp3s0, br0 и tap0, в этом примере), иначе он не будет работать. Если вы не укажете один, qemu будет использовать значение по умолчанию 52:54:00:12:34:56
. Поэтому, если вы не собираетесь иметь несколько виртуальных машин, которые связаны между собой, это необязательно.