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).
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).