Proste mostkowanie sieciowe z użyciem QEMU na GNU/Linux

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.

We use cookies
Strona internetowa zbiera informację na potrzeby analizy ruchu odwiedzających (Google Analytics). Czy zgadzasz się na przetwarzanie danych?