Wprowadzenie
Podczas pracy z qemu, narzędziem do wirtualizacji, napotkałem problem związany z brakiem dostępnej dokumentacji, która byłaby prosta, aktualna i przejrzysta. Moim celem było skonfigurowanie VM qemu, aby była routowalna w mojej sieci LAN, bez korzystania z PCI pass-through. Udało mi się osiągnąć zamierzony cel, stosując proste kroki, które przedstawiam poniżej.
Przygotowanie
Najpierw edytuj plik /etc/qemu/bridge.conf
, dodając linię:
allow virtbr0
virtbr0
to nazwa wirtualnego mostka, której możesz użyć dowolnej.
Następnie ustaw odpowiednie uprawnienia dla qemu-bridge-helper
:
chmod +s /usr/lib/qemu/qemu-bridge-helper
To pozwala użytkownikowi bez uprawnień administratora na korzystanie z mostka qemu, dzięki czemu można uruchomić VM bez przywilejów admina.
Wyłącz DHCP na interfejsie sieciowym, który zamierzasz użyć, lub przypisz mu statyczny adres IP, aby uniknąć konfliktów adresów.
Konfiguracja mostka sieciowego
Zainstaluj narzędzie bridge-utils
(na Debianie/Ubuntu):
sudo apt-get install bridge-utils
Następnie utwórz mostek sieciowy:
sudo brctl addbr virtbr0
sudo brctl addif virtbr0 enp3s0
sudo ip addr add 192.168.0.20/24 dev virtbr0
sudo ip link set virtbr0 up
W skrócie: utwórz mostek o nazwie virtbr0
, dodaj do niego swój interfejs sieciowy (w moim przypadku enp3s0
), przypisz mostkowi adres IP w sieci LAN, a następnie aktywuj interfejs mostka.
Konfiguracja iptables/nftables
Skonfiguruj iptables, aby przekierowywał ruch przez mostek:
sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
Konfiguracja VM
Skonfiguruj swoją VM, dodając odpowiednie parametry:
-net nic,model=virtio,macaddr=52:54:00:00:00:01 -net bridge,br=virtbr0
Adres MAC jest dowolny, ale musi być unikalny w twojej sieci.
Utrwalanie konfiguracji
Aby zachować konfigurację po ponownym uruchomieniu systemu, utwórz usługę systemd. Stwórz plik /lib/systemd/system/qemu-startup.service
z poniższą zawartością:
[Unit]
Description=Setup qemu network bridging
After=network-online.target
[Service]
Type=oneshot
Restart=on-failure
ExecStart=/sbin/brctl addbr virtbr0
ExecStart=/sbin/brctl addif virtbr0 enp3s0
ExecStart=/sbin/ip addr add 192.168.0.20/24 dev virtbr0
ExecStart=/sbin/ip link set virtbr0 up
ExecStart=/sbin/iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
[Install]
WantedBy=multi-user.target
Możesz dostosować sekcję After
, dodając inne usługi, które powinny być uruchomione wcześniej. Jeśli automatycznie uruchamiasz swoje VM za pomocą systemd, dodaj qemu-startup.service
do After
w konfiguracji tych VM, aby upewnić się, że najpierw skonfigurowana zostanie sieć.
Podsumowanie
Przedstawione kroki umożliwiają proste i skuteczne mostkowanie sieciowe z użyciem qemu, pozwalając na routowanie VM w sieci LAN. Dzięki temu możliwe jest pełne wykorzystanie zasobów sieciowych przy minimalnym wysiłku konfiguracyjnym.