libvirt-VMs via NAT-Bridge

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
TomL

libvirt-VMs via NAT-Bridge

Beitrag von TomL » 26.06.2019 12:30:00

Moin @ all

Auf verschiedenen Rechnern nutze ich libvirt-VMs, was prinzipiell prima funktioniert. Auf den Patchkabel-PCs habe ich die Wahl, die VMs als echte LAN-Clients mit regulärer LAN-IP einzurichten oder via dnsmasq und NAT, beides geht. Auf meinem Laptop ist wegen der WLAN-Verbindung leider nur NAT möglich. So wie ich die Man-Pages verstanden habe, ist das derzeit eine gegebene Einschränkung bei libvirt, also als LAN-Client mit eigener LAN-IP gehts anscheinend derzeit nicht.

Der Ablauf via NAT ist wie folgt:
1. Brigde-NIC einrichten
2. Paketfilter setzen
3. dnsmasq starten

Die Punkte 1 und 2 erledigt das libvirt-Tool "virsh" automatisch, wenn ich die von mir erstellte Konfiguration starte:

Code: Alles auswählen

# virsh net-start nat-bridge

# ip a
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:03:39:4d brd ff:ff:ff:ff:ff:ff
    inet 10.10.100.1/24 brd 10.10.100.255 scope global br0
       valid_lft forever preferred_lft forever
9: br0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000
    link/ether 52:54:00:03:39:4d brd ff:ff:ff:ff:ff:ff
10: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:59:ba:50 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe59:ba50/64 scope link 
       valid_lft forever preferred_lft forever
Mit dem folgenden Befehl werden die bridge-NICs und die Einträge im Paketfilter wieder entfernt:

Code: Alles auswählen

virsh net-destroy nat-bridge
Und nun das Problem: Die libvirt-Tools bringen meinen Paketfilter auf meinen Laptop durcheinander, in dem Regeln erstellt und gelöscht werden. Es gefällt mir allerdings gar nicht, wenn ein Programm im Hintergrund meinen Paketfilter verändert, gerade weil es sich um meinen Reise-Laptop handelt, der sich irgendwo im Ausland auch an möglicherweise dubiosen Accesspoints verbindet.

Um das Problem zu lösen, möchte ich die Bridge-NICs und NAT selber unter meiner Kontrolle erzeugen. Aber genau das klappt nicht. Ich habe zuerst den vom virsh-Tool generierten und funktionierenden Paketfilter exportiert, die dnsmasq-Conf lief ja ebenfalls. Mit dem zuvor funktionierenden Paketfilter und der funktionierenden dnsmasq.conf habe ich dann nur noch die Bridge-NICs mit den folgenden Befehlen erstellt, um mich der späteren vollständigen Lösung langsam anzunähern. Dabei habe ich alle Bezeichnungen und auch MACs beibehalten.

Code: Alles auswählen

# ip link add br0-nic address 52:54:00:03:39:4d type dummy
# brctl addbr br0
# brctl stp br0 on
# brctl addif br0 br0-nic
# ip address add 10.10.100.1/24 dev br0 broadcast 10.10.100.255
# ip link set dev br0 up multicast on
# ip link set dev br0-nic up multicast on
# dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/dnsmasq.conf --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper
# iptables -F -t mangle; iptables -F -t nat; iptables -F -t filter
# iptables-restore ipt_vm -v
Das kommt dabei raus:

Code: Alles auswählen

# ip a
4: br0-nic: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN group default qlen 1000
    link/ether 52:54:00:03:39:4d brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:03:39:4d brd ff:ff:ff:ff:ff:ff
    inet 10.10.100.1/24 brd 10.10.100.255 scope global br0
       valid_lft forever preferred_lft forever
7: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:59:ba:50 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe59:ba50/64 scope link 
       valid_lft forever preferred_lft forever
Nur leider funktioniert das nicht. Starte ich das virtuelle Netz mit virsh, geht es, die VM holt sich via DHCP eine IP aus dem Netz 10.10.100/24, sogar auch MIT mit dem iptables-restore. Mit meinen eigenen Bridge-Nics funktionierts hingegen nicht. Tja, und an dem Punkt angekommen kann ich jetzt nicht mal mehr die richtigen Fragen stellen, um dann nach Anworten zu suchen. Ich habe jetzt 2 Tage experimentiert.... keine Chance, mit meiner Bridge klappts nicht. Hat jemand vielleicht eine hilfreiche Idee?

https://jamielinux.com/docs/libvirt-net ... twork.html
https://bugzilla.redhat.com/show_bug.cgi?id=433484

TomL

Re: libvirt-VMs via NAT-Bridge

Beitrag von TomL » 26.06.2019 16:10:28

Ein Schritt näher zur Lösung... . nach dem ich jetzt noch mal wirklich alle Schritte sorgfältig auf Tippfehler oder Ablesefehler überprüft habe, wollte ich es noch mal testen.... unverändert erfolglos, die VM holt sich keine IP.

Aber, und das hat mich jetzt sehr verblüfft... nachdem ich der VM manuell eine IP aus dem dnsmasq-IP-Range vergeben habe und zusätzlich eine Default-Route zum Bridge-NIC 10.10.100.1 gesetzt habe, funktioniert es auf einmal, alle Netzverbindungen sind da.

Also folgendes Fazit:
1. Meine Bridge funktioniert anscheinend
2. Mein Paketfilter ist korrekt
3. Meine dnsmasq-Conf ist korrekt
4. Die VM fährt los ins Netz, NACHDEM ich sie manuell mit IP und Route angeschoben habe

Der Unterschied zum virsh-tool ist, mit dem tool muss ich meine VM nicht anschieben, der DHCP-Client funktioniert da von alleine, ebenso die Default-Route zum Bridge-Nic.

Hat keine ne Idee?

Antworten