Voorbeeldconfiguratie dualstack router met systemd-networkd

Na een boel geklooi ben ik tot de volgende werkende configuratie gekomen, omdat networkd helaas geen ondersteuning heeft voor pppoe moet dit met een extra service gebeuren.

Als moden heb ik van een vriend een oud Zyxel VMG8324-B10A modem gekregen die bij een Online internetverbinding hoorde en ze niet meer terug hoefde. Deze zijn eenvoudig in PTM-bridge modus te zetten en met een alternatieve firmware (GitHub - johnson442/custom-zyxel-firmware) is het mogelijk om mini jumbo frames te gebruiken met een MTU van 1508. Deze of vergelijkbare modems zijn voor een prikkie te krijgen op bijvoorbeeld marktplaats. Glasvezelklanten hebben het een stuk makkelijker :wink:

Hier de configuratie voor de geinteresseerde:

/etc/systemd/network/pppoe-vlan.netdev (vergeet niet VLAN= in te stellen op de hoofd interface)

[NetDev]
Name=pppoe-vlan
Kind=vlan
MTUBytes=1508

[VLAN]
Id=6

/etc/systemd/network/pppoe-vlan.network

[Match]
Name=pppoe-vlan

[Network]
DHCP=no
IPv6AcceptRA=no
LinkLocalAddressing=no
LLMNR=no

[Link]
ARP=false

/etc/ppp/peers/freedom

ifname wan
up_sdnotify
local
noauth
defaultroute
+ipv6
persist
mtu 1500
mru 1500
plugin pppoe.so
user "blaat@freedom.nl"
nic-pppoe-vlan

De defaultroute optie is nodig omdat networkd na het herstarten van pppd de default route niet zelf opnieuw aanmaakt, voor IPv6 werkt dit wel.

/etc/ppp/pap-secrets

"blaat@freedom.nl"       *       "kokosnoot"

/etc/systemd/system/pppoe-link.service

[Service]
ExecStart=/usr/sbin/pppd call freedom
Type=notify
Restart=on-failure
RestartSec=2s

# Hardening. Dit is misschien nog wel wat meer aan te scherpen, maar helaas heeft pppd flink wat privileges nodig.
ReadWritePaths=/run
ProtectHome=yes
PrivateMounts=yes
PrivateTmp=yes
ProtectSystem=strict

[Install]
WantedBy=multi-user.target

/etc/systemd/network/wan.network (om networkd de net aangemaakte interface van pppd te laten configureren)

[Match]
Name=wan

[Network]
DHCP=ipv6
IPv6AcceptRA=yes
LinkLocalAddressing=ipv6
KeepConfiguration=static
LLMNR=false
LLDP=false
IPv6DuplicateAddressDetection=0
DefaultRouteOnDevice=true

[IPv6AcceptRA]
UseDNS=false
UseOnLinkPrefix=no
UseAutonomousPrefix=no
DHCPv6Client=always

[DHCPv6]
ForceDHCPv6PDOtherInformation=yes
UseDNS=false
UseNTP=false
UseHostname=false
UseAddress=false

Om te zorgen dat networkd ook vraagt om een prefix delegation via DHCPv6 moet je op een downstream interface het volgende instellen, als je dit niet hebt kun je ook een dummy interface gebruiken. Zonder prefix delegation is IPv6 niet actief vanuit Freedom en werken statische adressen dus ook niet.

Een voorbeeld van een downstream/interne interface:

/etc/systemd/network/intern.network

[Match]
Name=intern

[Network]
Address=10.0.0.1/24
DHCP=no
IPv6AcceptRA=false
IPv6DuplicateAddressDetection=0
IPv6SendRA=true
DHCPv6PrefixDelegation=true
DHCPServer=true

[DHCPServer]
DNS=*IP van een recursive DNS server*
EmitDNS=true

[DHCPv6PrefixDelegation]
SubnetId=1
# Als je IPv6 subnet bijvoorbeeld 2a10:3781:beef::/48 is stelt dit het adres 2a10:3781:beef:1::1/64 in
Token=::1

[IPv6SendRA]
DNS=*IP van een recursive DNS server*
EmitDNS=true
DNSLifetimeSec=7200
RouterLifetimeSec=3600

[Link]
ARP=true

Dit kun je zo nodig herhalen voor meerdere interfaces.

4 likes

Zelf overweeg ik een Mikrotik CRS305-1G-4S+IN, of een MikroTik CRS106-1C-5S in RouterOS modus uiteraard.

Moet me eerst nog eens een keer goed inlezen, maar deze lijken op zich geschikt voor het configureren van diverse soorten verkeer over een specifiek WAN. Bijvoorbeeld TV en telefoon via Freedom, latency gevoelig verkeer als VoIP (discord/TeamSpeak etc) en gaming via Freedom, vanwege de lagere latency door goede peering. En Downloads en generiek internet verkeer als Netflix via bijvoorbeeld Caiway over de Delta Fiber aansluiting.

Eea moet met static routes en iptable filters te realiseren zijn. Maar heb nog tijd, aansluiting via Delta Fiber komt op z’n vroegst Januari 2022. En misschien niet eens nodig als Delta Fiber PPPoE weet te realiseren in Q3 dit jaar, dan koop ik Caiway af en gaat Freedom over de glasvezel.

Dit was een boel gedoe. Het modem is door online dichtgezet en het is niet mogelijk om de firmware te updaten via de webinterface. Het echter wel mogelijk om het modem in PTM-bridge te zetten. Dus als je genoeg hebt aan een MTU van 1492 ben je snel klaar.

Om de firmware toch de flashen heb ik een raspberry pi aangesloten op de seriele poort van het modem, de header is hiervoor al geinstalleerd dus er hoeft niet gesoldeert te worden. Na het bootproces onderbroken te hebben kan de firmware worden geflasht met xmodem.

Nee, het is CMOS serial. Dus op 3.3v, de snelheid is inderdaad 115200.

Een raspberry pi is dus waarschijnlijk het gemakkelijkste omdat iedereen er vast wel ergens eentje heeft :wink: . En anders zul je een losse adapter moeten kopen die CMOS serial doet.

Uboot weet ik niet meer zeker, het is al een tijdje geleden. Maar je krijgt tijdens het opstarten de vraag om op een knop te drukken om het opstarten te onderbreken.

Dat is een geinig hobby project, met 2 buffer ic’s 3.3V naar 5V omzetten en omgekeerd. Vroeger op school wel eens gemaakt :sunglasses:

Er zijn kort geleden RCE zwakheden in veel Zyxel web management interfaces gevonden. Zorg ervoor dat de Zyxel NIET via het internet te managen is of zorg ervoor dat de mitigatie van Zyxel is opgenomen. Kan een dingetje zijn bij custm firmware.
Advisories:

Met name deze:

Aanvullend: de custom firmware lijkt van 2-3 jaar geleden, toen zat er een Hardcoded password (niet aanpasbaar voor gewone gebruikers), in de firmware. Dit zat ook in de custotm firmware van bv. Telefonica (Spanje, zwaar dicht getimmerde Zyxels).

2 likes

Aanvulling: Dit lijkt me een zinnig advies voor iedere router. Als je iemand remote toegang wil geven zorg dan voor IP restricties, iedere router-fabrikant is inmiddels wel eens aan de beurt geweest met een kwetsbaarheid in de webinterface.

Headsup voor mensen die dit proberen op te zetten. Het lijkt er op dat deze configuratie kapot is met systemd 251. Dit lijkt iets te maken te hebben met deze bugmelding: dhcpv6client can not get the prefix · Issue #23546 · systemd/systemd · GitHub

Symptoom is dat dat networkd geen poging doet om een DHCPv6 lease te verkrijgen.

Ik heb nu geen zin/tijd om dit te debuggen en ben maar gedowngrade naar versie 250.

Ik ben al langer blij dat ik een openrc Linux gebruik… weinig met systemd en bijkomende ellende te maken.

1 like