Ech hunn net.ipv6.conf.all.forwarding=1 op engem Debian-Gateway gesat, sou datt en de Verkéier vun de VPN-Cliente konnt weiderleeden, a ronn eng hallef Stonn méi spéit hat d'Maschinn keng IPv6-Standardroute méi. De Router uewendriwwer war aktiv, den Noper am link-local huet nach geäntwert, an den Uplink huet seng global Adress behalen. Wat opgehalen huet, war d'Bereetschaft vum Kernel, op deem Interface weider router advertisements unzehuelen. D'Route ass net verschwonnen, wéi ech de sysctl getippt hunn; si ass verschwonnen, wéi d'Liewensdauer vun der RA-geléierter Standardroute ofgelaf ass an näischt si renovéiert huet.

Op den éischte Bléck huet näischt futti ausgesinn. D'Weiderleeden huet funktionéiert, d'Cliente sinn nach duerchkomm, soulaang déi al Route am Cache war, an de Feeler koum méi spéit wéi d'Ännerung, déi en ausgeléist huet. Genau déi Verspéidung ass de Grond, firwat een dat op den Uplink oder op eng Firewallregel schieft, déi ni bedeelegt war.

Liest d'Routentabelle, ier Dir en sysctl ufanks

Fänkt mat ip -6 route show default un a liest d'Attributer, net just de Gateway. Eng RA-geléiert Standardroute ass mat proto ra markéiert, dréit eng Preferenz a weist en expires-Compte à rebours. Eng Route, déi Dir vun Hand bäigefüügt hutt, huet kee vun deenen zwee, an dee Virdeel seet Iech, wéi ee Mechanismus d'Route besëtzt.

$ ip -6 route show default
default via fe80::1 dev eth0 proto ra metric 1024 expires 1432sec hoplimit 64 pref medium

Kuckt dann d'Adress un: ip -6 addr show dev eth0. Eng global Adress mat bevorzugten a gültegen Liewensdaueren a Stonnen iwwerlieft eng Standardroute, där hir Routerliewensdauer a Minutte gemooss gëtt. Adress do a Standardroute feelt, dat ass d'Signature vun engem Annonceproblem. Feelt och d'Adress, da musst Dir als éischt de Link, d'Präfixinformatioun oder d'Erkennung vun duebelen Adressen nogoen.

Firwat d'Weiderleeden d'RA-Veraarbechtung ausschalt

En RA ass en ICMPv6-Paket vum Typ 134, geschéckt vun enger link-local Quell mat enger Hoplimite vun 255. Ier de Kernel en benotzt, konsultéiert en den accept_ra vum Interface. De Standardwäert ass 1, an 1 heescht net jo. Et heescht: akzeptéier nëmmen, soulaang dësen Host net weiderleet. Setzt forwarding=1 an déi Bedingung fälltaus, dofir gëtt d'Annonce verweidert, ier iergendee Präfix oder Standardrouter dran a Betruecht gezunn gëtt.

Et gëtt dräi Wäerter, an nëmmen dat drëtt iwwerlieft d'Weiderleeden:

accept_raforwarding=0forwarding=1
0ignoredignored
1 (default)acceptedignored
2acceptedaccepted

Zwee aner Fändelen entscheeden, wat tatsächlech installéiert gëtt. accept_ra_defrtr steiert, ob de Standardrouter aus der Annonce eng Route gëtt, an accept_ra_pinfo steiert, ob d'Präfixinformatioun fir d'Adresskonfiguratioun benotzt gëtt. accept_ra_defrtr ausschalten ass de gewinnten Wee, fir SLAAC-Adressen op engem weiderleedenden Host ze behalen, ouni eng Standardroute ze léieren. Dat ass en aneren Hebel wéi accept_ra, an een gräift dozou, wann een Adressen, awer keng Route wëll. D'Referenz vum Kernel fir IP sysctl listet all dräi.

Bestätegt et mat dräi Kommandoen

Liest als éischt déi lieweg Wäerter amplaz vun der Datei, vun där Dir mengt, si wier gelueden:

sysctl net.ipv6.conf.eth0.forwarding net.ipv6.conf.all.forwarding \
       net.ipv6.conf.eth0.accept_ra net.ipv6.conf.eth0.accept_ra_defrtr

Zweetens beweist, datt d'Annoncen nach ëmmer ukommen. Filtréieren op de Byte vum Typ ICMPv6 ass genuch, an et spuert Iech eng Mauer aus Noper-Entdeckungsverkéier ze liesen:

tcpdump -ni eth0 'icmp6 and ip6[40] == 134'

Wann iwwer e puer Minutten näischt erschéngt, ass accept_ra net Äre Problem. Den Uplink huet opgehalen ze annoncéieren, eppes um Wee filtréiert ICMPv6, oder dat Interface läit net wierklech um Segment, un dat Dir denkt. Drëttens freet selwer eng Annonce un a liest hir Felder:

rdisc6 eth0

rdisc6 kënnt am Pak ndisc6 op Debian an Ubuntu. Am Output kuckt op d'Routerliewensdauer an d'Preferenz, ier Dir eppes anescht ännert. Eng Annonce mat enger Routerliewensdauer vun 0 ass eng Uweisung, de Standardrouter ewechzehuelen, an kee Wäert vun accept_ra mécht doraus eng benotzbar Route. Esou erwëscht Dir och en Uplink-CPE am Bridge-Modus, dee Präfixen austeilt, awer sech ni als Router ubitt.

Maacht den Uplink zum eenzegen erlaabten Interface

Wann den Uplink de Standardrouter soll sinn, akzeptéiert do Annoncen trotz Weiderleeden, an néierens anescht:

# /etc/sysctl.d/60-ipv6-router.conf
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.eth0.accept_ra = 2
net.ipv6.conf.eth0.accept_ra_defrtr = 1

D'Ofgrenzung ass wichteg, well IPv6-Weiderleeden a Linux en eenzegen globale Schalter ass, net een pro Link. Schreift 1 an net.ipv6.conf.wg0.forwarding an liest dann net.ipv6.conf.all.forwarding: de globale Wäert klappt ëm an all Interface fänkt un weiderzeleeden. Dir kënnt net Router um Tunnel an normalen Host am LAN sinn. Wat Dir ofgrenze kënnt, ass d'Akzeptanz. Halt accept_ra=2 um Uplink an loosst d'Tunnel- an d'LAN-Interface op 1 oder 0, sou datt eng verierrt Annonce, déi iwwer den Tunnel kënnt, keng Standardroute ka installéieren, déi doranner weist.

En temporären sysctl -w iwwerlieft den nächsten Neistart net, an souwuel systemd-networkd wéi och NetworkManager schreiwen dës Wäerter aus hirer eegener Konfiguratioun. A networkd setzt Dir IPv6Forwarding=yes an IPv6AcceptRA=yes an der .network-Datei vum Uplink; networkd dokumentéiert IPv6Forwarding aus deem selwechte Kernelgrond als global. Beim NetworkManager ass ipv6.method=auto um Uplink dat, wat den accept_ra-Wäert steiert, dofir liest de sysctl no nmcli connection up nach eng Kéier, amplaz der éischter Iwwerpréiwung ze vertrauen.

Déi statesch Alternativ, ip -6 route add default via fe80::1 dev eth0, funktionéiert tatsächlech, an et ass eng raisonnabel Äntwert, wann den Uplink-Router eng stabil link-local Adress huet. Sief Iech kloer, wat Dir opgësst. Eng statesch Standardroute gëtt ni renovéiert an ni zeréckgezunn, dofir weist si no dem Ersetze vum Uplink weider op en doudegen Noper. D'RA-Route feelt sécher; déi statesch feelt roueg.

Testt e weidergeleete Paket, net dat vum Gateway selwer

D'Pinge vum Gateway selwer kënnen op enger Route geléngt, déi kee Client benotze kann, an si kënnen och geléngt, well de Gateway d'Quell ass. Testt vun engem verbonnenen Client aus a freet dann de Gateway, wat en fir d'Adress vun deem Client géif maachen:

# on the VPN client
ping -6 -c 3 2001:4860:4860::8888

# on the gateway, using a client address
ip -6 route get 2001:4860:4860::8888 from fd42:20::2

Waart dann eng Routerliewensdauer a kuckt nach eng Kéier. Den stabile Zustand, deen Dir wëllt, ass eng Standardroute mat proto ra, där hire expires-Wäert sech ëmmer erëm zrécksetzt, plus all.forwarding=1. Wann expires just erofzielt, ginn d'Annoncen nach ëmmer irgendwou verweidert, an de gewinnten Schëllege ass e Netzwierkmanager, deen accept_ra iwwerschreift, nodeems de sysctl beim Start schonn gelaf ass.

Ier Dir dat zoumaacht, bestätegt véier Saachen: d'Standardroute ass proto ra a gëtt renovéiert, accept_ra=2 gëllt nëmme fir den Uplink, d'Weiderleeden ass no engem Neistart an no engem Neistart vum Manager nach ëmmer 1, an et ass e Client an net de Gateway, deen en IPv6-Ping fäerdeg mécht. Wann de Client mat enger gesonder Route nach ëmmer feelt, ass den nächsten Verdächtegen de Retourwee oder eng Firewall uewendriwwer, net d'Annonce.

Ähnlech Artikelen