FreeBSD / Bhyve / OPNsense / VLAN

pooltechniker

Well-Known Member
Ich nochmals... folgendes Setup:
Bare Metal -> FreeBSD 14.0
Darunter OPNsense 24.1 unter Bhyve
Mein ISP verlangt Einwahl mittels PPPoE, mit VLAN ID 2.

Wenn ich OPNsense auf Bare Metal installiere, funktioniert die Einwahl ohne Probleme.
Als Bhyve Gast, mit dem physischen Interface durchgereicht, und unter OPNsense ein virtuelles Interface mit VLAN ID 2 angelegt, funktioniert die Einwahl allerdings nicht. Ich hab nicht wirklich etwas dazu im Netz gefunden, außer das hier:
Das sagt,
Code:
net.link.bridge.pfil_onlyip=0
zu setzten. Hat bei mir aber auch keinen Erfolg gebracht.

Ich habe es jetzt geschafft, mich bei meinem Provider einzuwählen, indem ich am FreeBSD Host selbst ein Interface mit VLAN ID 2 angelegt habe, und dieses an die OPNsense durchreiche. Das ist aber, wie ich finde, aber keine sonderlich schöne Lösung; hat jemand eine Idee, wie ich in einem Bhyve Guest ein funktionierendes VLAN für PPPoE anlegen kann?
 
Das Problem hast du ja gefunden und verstanden. Entweder auf dem ersten/ISP-nächsten Gerät das vlan taggen oder solange durchschleifen bis in die opnsense rein. Ich mache auch ersteres, auch wenn es dann nicht so 'schlüssig/schön' wieauchimmer komplett in OPNsense ist. ;)
Je nachdem wie dein Netz verkabelt ist, kannst du das vlan auch vom switch taggen lassen oder alles von der Fritzbox.

Die sicherere und performantere Lösung für dich wäre wahrscheinlich den NICport für WAN komplett in die VM zu passthroughen (nicht zu verwechseln mit pppoe-passthrough!) und damit kannst du das tag komplett in OPNsense setzen und brauchst auch für WAN keinen vswitch in bhyve.

Edit:
 
Das WAN-Interface hängt direkt an der ONT-Box, daher kann ich leider nicht vorher taggen.
Mir war nicht bewusst, dass ich die NIC direkt mittels passthrough durchreichen kann - das klingt aber vielversprechend, das werd ich probieren. Danke!
 

Wenn das soweit passt, sollte man nach nem reboot mit pciconf -lv sehen, ob das korrekt ist (wenn ppt als Treiber davor steht).

Dann in der vm-bhyve .conf passend setzen:
Code:
#passthru0="2/0/0"              #in der vm gewünschtes ppt-device muss angegeben werden
#passthru1="3/0/0"              #zweites durchgereichtes gerät usw.
passthru0=vtnet0, passthru und nicht passthrough, ja ich weiß :belehren:
 
Passthru hab ich gestern schon geschafft:

Code:
# vm passthru
DEVICE     BHYVE ID     READY        DESCRIPTION
hostb0     0/0/0        No           -
vgapci0    0/2/0        No           Alder Lake-N [UHD Graphics]
xhci0      0/20/0       No           -
none0      0/20/2       No           -
none1      0/22/0       No           -
ahci0      0/23/0       No           -
ig4iic0    0/25/0       No           -
ig4iic1    0/25/1       No           -
pcib1      0/28/0       No           -
pcib2      0/29/0       No           -
pcib3      0/29/3       No           -
isab0      0/31/0       No           -
hdac0      0/31/3       No           -
ichsmb0    0/31/4       No           -
none2      0/31/5       No           -
ppt0       1/0/0        Yes          RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
rtw880     2/0/0        No           RTL8821CE 802.11ac PCIe Wireless Network Adapter
re0        3/0/0        No           RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
In der OPNsense sieht das dann so aus:
Code:
# ifconfig -a
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=82088<VLAN_MTU,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
        ether 68:1d:ef:35:51:47
        media: Ethernet autoselect (none)
        status: no carrier
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
vtnet0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        description: LAN (lan)
        options=80028<VLAN_MTU,JUMBO_MTU,LINKSTATE>
        ether 58:9c:fc:0b:bd:4a
        inet 192.168.89.1 netmask 0xffffff00 broadcast 192.168.89.255
        media: Ethernet autoselect (10Gbase-T <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
enc0: flags=0<> metric 0 mtu 1536
        groups: enc
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
        inet 127.0.0.1 netmask 0xff000000
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
pflog0: flags=20100<PROMISC,PPROMISC> metric 0 mtu 33160
        groups: pflog
pfsync0: flags=0<> metric 0 mtu 1500
        syncpeer: 0.0.0.0 maxupd: 128 defer: off
        syncok: 1
        groups: pfsync
re0_vlan2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        description: WAN (wan)
        options=80000<LINKSTATE>
        ether 50:e0:39:2c:04:a4
        inet6 fe80::52e0:39ff:fe2c:4a4%re0_vlan2 prefixlen 64 scopeid 0x7
        groups: vlan
        vlan: 2 vlanproto: 802.1q vlanpcp: 0 parent interface: re0
        media: Ethernet autoselect (none)
        status: no carrier
        nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
pppoe0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1492
        description: WAN (wan)
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Aber das Login klappt nicht:
Code:
<30>1 2024-02-19T23:51:27+01:00 OPNsense ppp 57037 - [meta sequenceId="281"] [wan_link0] PPPoE connection timeout after 9 seconds
<30>1 2024-02-19T23:51:27+01:00 OPNsense ppp 57037 - [meta sequenceId="282"] [wan_link0] Link: DOWN event
<30>1 2024-02-19T23:51:27+01:00 OPNsense ppp 57037 - [meta sequenceId="283"] [wan_link0] LCP: Down event
<30>1 2024-02-19T23:51:27+01:00 OPNsense ppp 57037 - [meta sequenceId="284"] [wan_link0] Link: reconnection attempt 11 in 2 seconds
<30>1 2024-02-19T23:51:29+01:00 OPNsense ppp 57037 - [meta sequenceId="285"] [wan_link0] Link: reconnection attempt 11
<30>1 2024-02-19T23:51:29+01:00 OPNsense ppp 57037 - [meta sequenceId="286"] [wan_link0] PPPoE: Connecting to ''
Irgendwas passt da noch nicht... muss mich hier wohl mal mit tcpdump oder Wireshark reinhängen.

PS: Nicht verwirren lassen von dem "No carrier" beim Output von ifconfig. Hab das ifconfig gerade eben gemacht, als kein Kabel am WAN-Interface hing.
 
Vorweg: Mit IntelNICs klappt das zu 99% (auch ports einzeln auf VMs verteilen, bei z.B. quadport), bei realtek muss man probieren, aber mit dem RTL8111/8168/8411 sollte das auch gehen, mit 8168 hatte ich schon Erfolg.

Wieder Hüftschuss: Du musst in OPNsense re0 (also das parent-dev, wo das vlan drauf soll) noch als Interface hinzufügen. Als aktiviert, aber ohne IP-config, sozusagen blank (darauf dann das vlan, wie du es hast und dann pppoe als 'echtes WAN' draufsatteln). Möglicherweise brauchts dann noch nen reboot der VM oder gar nen Kaltstart des Hosts, manche Chips hängen dann im Nirwana...einfach probieren. :)
Edit: Das Kabel sollte gesteckt sein, könnte mir das sonst als Fehlerquelle vorstellen.
Hab' auch im vorigen Post von mir Murks geschrieben...passthru0 resultiert natürlich nicht als vtnet0 ...war spät. ;)

Falls das immer noch nicht geht, vergewissere dich, ob alles an HW-Beschleunigung deaktiviert ist. Nicht jeder Chip hat das sauber implementiert.
 

Anhänge

  • Bildschirmfoto zu 2024-02-20 10-11-07.webp
    Bildschirmfoto zu 2024-02-20 10-11-07.webp
    11,5 KB · Aufrufe: 64
Egal was ich mache, es funktioniert nicht. Hab sogar einen ausrangierten Cisco Switch zwischen ONT und OPNsense gehängt (natürlich mit VLAN2) - nix.
Ich werde wohl damit leben, das VLAN am Bhyve Host anzulegen, und an die OPNsense durchzureichen.
Vielen Dank auf jeden Fall für deine Hilfe, @mr44er - Basic Internetzugang (sogar mit IPv6!) funktioniert schon (dieser Beitrag wurde schon hinter der OPNsense geschrieben :cool:), jetzt kommt der Rest (div. VLANs, erweiterte Firewallregeln, Traffic Shaping, ...) dran.
 
Schade...also entweder liegts dran wie passthrough auf dem Board/BIOS eingestellt ist mit der IOMMU (auf Kleinstboards ist das tlw. auch künstlich kastriert und man hätte auch mit einer gesteckten IntelNIC keine Chance) etc. oder wirklich am realtek. :(
Den 3/0/0wirst du wahrscheinlich auch getestet haben.
 
Zur Vollständigkeit:
Fujitsu D3045-A11 GS1 = Intel I350 (neuer und geringere Stromkosten)
Fujitsu D2745-A11 GS3 = Intel 82580EB

Mit diesen Karten funktioniert das auf jeden Fall (sofern das Mainboard mitspielt), habe beide Typen noch im Einsatz. Zwar nicht mehr direkt unter passthru/bhyve, aber das klappte damals.
Die Modelle von Fujitsu haben nur ein Label drauf, keinerlei Einschränkungen seitens FW etc. und waren ein Tip für ebay-Schnapps.
 
Das ist für mich leider keine Option, ich verwende einen Mini-Mini-PC, wo alles, außer der SSD, am Mainboard verlötet ist. PCI Slots gibts keine.
Ich hab mich inzwischen damit abgefunden, und - das ist das wichtigste - es funktioniert auch so :)
 
Zurück
Oben