Bridge-Netzwerk

Hinweis

Verbindungsabbruch und eingeschränkte Verfügbarkeit im Netzwerk

Änderungen an den Filterregeln haben Einfluss auf die Verfügbarkeit des TwinCAT/BSD-Hosts, der virtuellen Maschine sowie deren Dienste im Netzwerk.

In einem Bridge-Netzwerk wird eine physische Netzwerkschnittstelle des TwinCAT/BSD-Hosts (z.B. igb0) über ein bridge(4) Gerät mit einem tap(4) Gerät verbunden. Das tap(4) Gerät dient wiederum als Backend für ein virtuelles Netzwerkinterfaces der virtuellen Maschine (siehe: Netzwerkkonfiguration von virtuellen Maschinen).

Bridge-Netzwerk 1:
VM-Instanz mit einer Bridge-Netzwerkkonfiguration.

Die Netzwerkkommunikation der virtuellen Maschine wird so über das jeweilige tap(4) Gerät durch ein bridge(4) Gerät auf Ethernet-Ebene mit dem physischen Netzwerkinterfaces des TwinCAT/BSD-Host gebrückt.

Konfiguration der Netzwerkkomponenten

Auf dem TwinCAT/BSD-Host wird ein bridge(4) Gerät mit Hilfe von ifconfig(8) erstellt:

doas ifconfig bridge create

Die Ausgabe bridge0 erscheint.

Ebenso wird ein tap(4) Geräte als Backend für das virtuelle Netzwerkinterface angelegt:

doas ifconfig tap create

Die Ausgabe tap0 erscheint.

Um Netzwerkpakete zwischen einem physischen Netzwerkinterface des TwinCAT/BSD-Hosts und einem tap(4) Gerät über die bridge0 weiterzuleiten, müssen die entsprechenden Geräte Mitglieder der bridge0 werden.

Der folgende Aufruf macht das physische Netzwerkinterface igb0 des TwinCAT/BSD-Host und das tap0 Gerät zu Mitgliedern der bridge0 Instanz:

doas ifconfig bridge0 addm igb0 addm tap0 up

Abhängig vom eingesetzten Industrie-PC oder der verwendeten Ethernet-Schnittstelle kann die Benennung der Netzwerkschnittstelle unter TwinCAT/BSD variieren und beispielsweise als em0, em1 oder igb1 angezeigt werden.

Damit die bridge0 Konfiguration bereits beim Systemstart angelegt wird, kann diese in der rc-Konfiguration hinterlegt werden:

doas sysrc cloned_interfaces+="bridge0 tap0"
doas sysrc ifconfig_bridge0="addm igb0 addm tap0 up"

Über ifconfig bridge0 können die Mitglieder (members) der bridge0 überprüft werden:

ifconfig bridge0
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 58:9c:fc:10:ff:e1
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
        root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
        member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 5 priority 128 path cost 2000000

        member: igb0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 1 priority 128 path cost 2000000

        groups: bridge
        nd6 options=9<PERFORMNUD,IFDISABLED>

Das entsprechende bhyve(8) Kommando nutzt lediglich die tap0 Instanz, um die virtuelle Maschine mit dem Bridge-Netzwerk zu verbinden:

doas bhyve \
-c sockets=1,cores=1,threads=1 \
-m 2G \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_BHF_UEFI.fd,fwcfg=qemu \
-s 0,hostbridge \
-s 2,fbuf,rfb=0.0.0.0:5900,w=1024,h=768 \
-s 3,xhci,tablet \
-s 20,virtio-net,tap0 \
-s 31,lpc \
-A -H -P \
samplevm

Filterregeln im Bridge-Netzwerk

Standardmäßig blockiert der Paketfilter pf(8) unter TwinCAT/BSD den Austausch von Netzwerkpaketen an einem bridge(4) Gerät.

Das Filterverhalten an bridge(4) Geräten kann über sysctl(8) deaktiviert werden. Indem die Variablen net.link.bridge.pfil_member und net.link.bridge.pfil_bridge auf 0 gesetzt werden:

doas sysctl net.link.bridge.pfil_member=0
doas sysctl net.link.bridge.pfil_bridge=0

Um die Einstellungen persistent zu setzen, müssen folgende Zeilen in der Datei /etc/sysctl.conf eingefügt werden:

net.link.bridge.pfil_member=0
net.link.bridge.pfil_bridge=0

Weitere Informationen finden sich in den man-pages zu bridge(4), sysctl(8) und sysctl.conf(5).

Alternativ können für die bridge(4) und deren Mitglieder pf(8) Filterregeln definiert werden, um den Paketaustausch im Bridge-Netzwerk zu regeln (siehe: Firewall).