PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ubuntu 22.04 - Netzwerkbrücke für QEMU


Tempo
2022-08-28, 15:42:38
Ich versuche unter Ubuntu 22.04 eine Netzwerkbrücke für QEMU einzurichten, mittels folgender Befehle:

sudo ip link add name br0 type bridge
sudo ip link set dev br0 up
sudo ip link set enp0s3 up
sudo ip link set dev enp0s3 master br0

Sobald ich den letzten Befehl per putty an den Server übermittelt habe, verliert putty die Verbindung zum Ubuntu Server. Ich muss also den Server neustarten oder mich physikalisch an den Server setzen. Wenn ich mich an den Server setze, hat dann QEMU aber immer noch keine Verbindung ins Internet und ich keine Remote-Verbindung zum Ubuntu Server. Wie richte ich nun am Besten eine Bridge ein?

konkretor
2022-08-29, 09:51:29
mußt du vorher nicht ein interface mit netplan definieren?

Ich hab jetzt mal kurz google angeworfen und es wurde eigentlich immer ein yaml file erstellt wo das alles drin stand.

Gliese
2022-08-29, 18:47:01
War leider länger her, wo ich erfolgreich manuell eine Bridge eingerichtet habe.
Aber an was ich mich noch erinnern kann war dass die Brücke (brX) selbst die IP-Adresse/Maske zugewiesen bekam und sie an den "Ufern", hier (ethX, enpXsY ...), entfernt wurden.
Vielleicht ist es das was vergessen wurde.

Simon Moon
2022-09-10, 23:29:45
mußt du vorher nicht ein interface mit netplan definieren?

Ich hab jetzt mal kurz google angeworfen und es wurde eigentlich immer ein yaml file erstellt wo das alles drin stand.

Gibt da verschiedene Moeglichkeiten, je nachdem was du fuer einen Networkmanager einsetzt. Du kannst z.b. mit Systemd die Netzwerke auch in /etc/systemd/network definieren. Oder mit netctl unter /etc/netctl oder mit Networkmanager nochmal woanders. Mittels ip werden die Interfaces einfach adhoc erstellt und sind nach einem restart wieder verschwunden.

War leider länger her, wo ich erfolgreich manuell eine Bridge eingerichtet habe.
Aber an was ich mich noch erinnern kann war dass die Brücke (brX) selbst die IP-Adresse/Maske zugewiesen bekam und sie an den "Ufern", hier (ethX, enpXsY ...), entfernt wurden.
Vielleicht ist es das was vergessen wurde.

Jupp, dass ist so - die Interfaces selbst haben dann keine IP Adresse mehr.

Wie richte ich nun am Besten eine Bridge ein?

Mit den IP Utils hab ich da beim manuellen einrichten leider selber z.Z. ein Problem

Ich frag mich grad, was ich bei dem leidigen Thema "Bridge" immer falsch mache. Aktuell will ich mir grad ein kleines Router OS aus Arch zusammenbasteln. Dazu hab ich mit virsh/qemu ein paar VMs aufgesetzt und dem virtuellen Archrouter ein paar veth/macvtap Interfaces zugeteilt. Klappt wunderbar, die VMs haben untereinander eine Netzwerkverbindung als waeren sie per ethernet verbunden. Doch sobald ich die Bridge aktiviere, ist die Verbindung "tot" - ich kann die IP der Bridge nicht anpingen und erreich von dieser keine nach aussen. Lustigerweise erhalten die Hosts immer noch eine IP Adresse vom (externen) DHCP Server zugewiesen, koennen aber keine Verbindung mehr aufbauen - i.e. die Bridge uebertraegt wohl noch Multicast. Die Etherports der Bridge haben keine IPs zugewiesen, nur diese selber hat eine. Ich vermute mal, die Ports leiten die Pakete nicht an die Bridge weiter... da muss ich wohl mit sysctl irgendwo einen wert aendern - nur welchen?

Was aber problemlos funktioniert, ist ein macvtap Interface:
ip l add dev qemu-macvtap type macvtap master enp0s3
Und schon hast du quasi ein 2. Ethernet-Interface mit eigener MAC-Adresse , das du dann qemu hinzufuegen kannst.

Da ist dann die frage, machst du das direkt in qemu oder nimmst du dafuer libvirt?

fuer libvirt kannst du dann einfach ein XML erstellen
qemu-macvtap.xm

<interface type="direct">
<mac address="52:54:00:XX:XX:XX"/>
<source dev="enp0s3" mode="bridge"/>
<target dev="qemu-macvtap"/>
<model type="virtio"/>
<alias name="net0"/>
<address type="pci" domain="0x0000" bus="0x08" slot="0x00" function="0x0"/>
</interface>

Bei der MAC geben die ersten 6 Zeichen an, dass es sich um ein Qemu-Ethernet Device handelt. Kannst du lassen oder etwas eigenes einfuegen. Die letzten 6 Zeichen einfach eine Hex Zahl einfuegen. Wichtig ist, dass der Bus / Slot in deiner VM noch nicht belegt ist. Du kannst dir die config der VM mittels virsh anzeigen lassen

virsh -c qemu:///system dumpxml --domain $VM_NAME

und danach mit mittels virsh hinzufuegen

virsh -c qemu:///system attach-device --domain $VM_NAME --file qemu-macvtap.xml --persistent


Was bei macvtaps u.U. nicht geht, ist die Netzwerkverbindung von qemu guest zum ubuntu host. Wenn das nicht wichtig ist, kannst dus so lassen. Ansonsten kannst du z.b. noch ein zweites Netzwerkinterface zum qemu Host hinzufuegen und dann mittels virtuellem ethernet (veth) mit dem Host verbinden

ip l add dev host-veth type veth peer name qemu-veth

danach machst du nochmal alle schritte wie beim ersten Interface, nur diesmal source dev "qemu-veth" bzw. bei ip-link master "host-veth" und im XML noch einen anderen Alias als fuer das 1. Iface. Auf dem Host hast du dann ein neues Interface "host-veth", welches zum "qemu-veth" wie ein Netzwerkkabel funktioniert und du kannst damit problemlos den Guest ansprechen. Einfach auf dem Host / Guest fuer die Ifaces eine IP Adresse im selben netz vergeben.

raumfahrer
2022-09-11, 11:38:12
Hast du zufällig den Docker-Daemon am laufen? Der kann sich mit bridge-setups in die Quere kommen.

https://serverfault.com/questions/963759/docker-breaks-libvirt-bridge-network

Zur Einrichtung der Bridge. Ich habe folgendes auf openSUSE Tumbleweed mit systemd-networkd konfiguriert.

/etc/systemd/network/10-br0.netdev


[NetDev]
Name=br0
Kind=bridge


/etc/systemd/network/10-br0.network


[Match]
Name=br0

[Network]
Address=xxx.xxx.xxx.xxx/xx
Gateway=xxx.xxx.xxx.xxx

[Link]
RequiredForOnline=yes


/etc/systemd/network/10-enp3s0.network


[Match]
Name=enp3s0

[Network]
Bridge=br0


Damit hab ich eigentlich immer Netzwerk in mein virtuellen Maschinen bekommen (i.d.R. mit virt-manager im GUI konfiguriert). Ist aber zugegeben schon 1-2 Jahre her, wo ich zuletzt eine bei mir aufgesetzt habe.

Simon Moon
2022-09-11, 22:13:39
Netzwerk bekomme ich auf die VM. Meine bridge ist auch nicht auf dem Host, sondern laeuft in der Qemu VM. Irgendwelche Dienste laufen nicht drauf, die FW Regeln sind auf alles akzeptieren eingestellt.

Die Routin Table sieht eigentlich gut aus

default via 192.168.XX.1 dev lanbr0 proto dhcp src 192.168.XX.XX metric 1024
192.168.XX.0/24 dev control proto kernel scope link src 192.168.XX.XX
192.168.XX.0/24 dev lanbr0 proto kernel scope link src 192.168.XX.XX metric 1024
192.168.XX.1 dev lanbr0 proto dhcp scope link src 192.168.XX.XX metric 1024
192.168.XX.XX dev lanbr0 proto dhcp scope link src 192.168.XX.XX metric 1024


Auch erhaelt die Bridge per DHCP eine IP Adresse:

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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: LAN-ext: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lanbr0 state UP group LAN qlen 1000
link/ether 52:54:00:XX.XX.XX brd ff:ff:ff:ff:ff:ff
3: control: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:XX.XX.XX brd ff:ff:ff:ff:ff:ff
inet 192.168.XX.XX/24 brd 192.168.XX.255 scope global control
valid_lft forever preferred_lft forever
inet6 fe80:XX::/64 scope link
valid_lft forever preferred_lft forever
4: LAN-1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lanbr0 state UP group LAN qlen 1000
link/ether 52:54:00:XX:XX:XX brd ff:ff:ff:ff:ff:ff
5: LAN-2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lanbr0 state UP group LAN qlen 1000
link/ether 52:54:00:XX:XX:XX brd ff:ff:ff:ff:ff:ff
6: LAN-3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lanbr0 state UP group LAN qlen 1000
link/ether 52:54:00:XX:XX:XX brd ff:ff:ff:ff:ff:ff
7: LAN-4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lanbr0 state UP group LAN qlen 1000
link/ether 52:54:00:XX:XX:XX brd ff:ff:ff:ff:ff:ff
8: LAN-5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lanbr0 state UP group LAN qlen 1000
link/ether 52:54:00:XX:XX:XX brd ff:ff:ff:ff:ff:ff
9: lanbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 66:a2:9e:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet 192.168.XX.XX/24 metric 1024 brd 192.168.XX.255 scope global dynamic lanbr0
valid_lft 21044sec preferred_lft 21044sec
inet6 2a02::1/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591936sec preferred_lft 604736sec
inet6 fe80::1/64 scope link
valid_lft forever preferred_lft forever


Aber wenns dann zu ARP Table kommt, klappts offenbar nicht

192.168.XX.XX dev lanbr0 FAILED
192.168.XX.1 dev lanbr0 FAILED
192.168.XX.XX dev control lladdr 52:54:00:ed:81:57 REACHABLE


Und ich glaub, ich hab jetzt eine Idee. Die Interface sind alles Macvtap. Das klappt wohl auch, wenn die direkt angesprochen werden, aber die haben irgendso VLAN Tags. Warscheinlich kann die Bridge damit nicht umgehen.