IPv6 slutar föra trafik i samma ögonblick som OpenVPN startar om, och IPv4 fortsätter att fungera. Tunnelns gränssnitt återskapades, och något annat som hanterade dess IPv6-tillstånd förlorade antingen adressen eller rutten som gör prefixet nåbart. Tre separata delar av tillståndet är inblandade, och var och en har en annan ägare: leverantörens delegerade prefix och dess livslängd, adresserna som ges till VPN-klienter, och den uppströms rutt som skickar klientprefixet tillbaka till servern. Identifiera ägaren till varje del innan du rör någon daemon, för att starta om fel en döljer problemet i en dag och tar tillbaka det vid nästa anslutning.

Tre delar IPv6-tillstånd, tre ägare

StateTypical ownerWhat breaks when it is wrong
Delegated prefix and lifetimeUpstream router or provider via DHCPv6-PDClients keep addresses that the upstream no longer routes
Client addresses inside the tunnelOpenVPN server config or a delegation daemonNo global address, or an address outside the routed prefix
Return route for the client prefixUpstream router, or the server's own routing tableOutbound works, replies never arrive

En adress med global omfattning inne i tunneln räcker inte i sig. Uppströms routrar måste fortfarande skicka prefixet tillbaka mot VPN-servern, och de gör det inte bara för att servern råkar ha en adress från det.

Därför är det också riskabelt att kopiera ett publikt /64 till en tunnelpool. Ett prefix som routas till servern är inte samma sak som ett prefix som uppströmssidan behandlar som on-link, och grannupptäckt fyller inte igen den luckan.

Läs serverns tillstånd innan du ändrar något

Fånga tillståndet två gånger, en gång medan IPv6 fungerar och en gång efter omstarten, och jämför sedan. Skrivskyddade vyer räcker, och de kostar ingenting under ett underhållsfönster:

ip -6 addr show
ip -6 route show table all
ip -6 rule show
sysctl net.ipv6.conf.all.forwarding

Leta efter tre konkreta skillnader: en rutt som försvann, en adress som flyttades till en föråldrad eller ogiltig livslängd, och ett prefix som ändrades efter ny delegering medan VPN-konfigurationen fortfarande annonserar det gamla.

Om adressen försvann men prefixet är oförändrat har daemonen som tilldelar den slutat hantera gränssnittet. Om prefixet ändrades men inte adresserna är klientkonfigurationen föråldrad. De två felen ser identiska ut från en webbläsare och har ingenting gemensamt.

Bestäm om dhcpcd ska hantera tunneln

dhcpcd kan upptäcka gränssnitt och delegera delar av ett DHCPv6-prefix till nedströms gränssnitt, och dess konfiguration kan namnge delegeringsmålen explicit. Utan ett explicit mål kan dess dokumenterade beteende involvera andra gränssnitt, och det är så en tunnel hamnar med en adress som ingen hade planerat.

Två villkor bör driva dig mot att låta OpenVPN äga tunnelns statiska adressering: servern skjuter in fasta adresser i sin konfiguration, och tunnelnamnet ändras vid återanslutning. Om båda gäller, uteslut tunneln från delegeringsdaemonen med avsikt, med en kommentar som säger varför.

Om delegering till tunneln i stället är avsiktlig, implementera hanteringen av prefixändringar. Det innebär att reagera när det delegerade prefixet eller dess livslängd ändras, uppdatera serverns annonserade klientprefix och lägga tillbaka rutten. Att utesluta gränssnittet i den designen tar bort den enda komponent som känner till det nya prefixet.

En omstart av dhcpcd kan se ut att fixa saker eftersom den återskapar tillstånd, men den förnyar eller drar också tillbaka konfiguration för gränssnitt du inte tänkte på. Den återställningen gör det inte till ett krav efter varje VPN-omstart. Den nollställer också räknarna du använde som bevis. Föredra en riktad omladdning av det gränssnitt du faktiskt ändrade.

Validera IPv6 separat från IPv4 NAT

Bekräfta att vidarebefordran är aktiverad och att uppströmsrutten pekar på det faktiska klientprefixet, och gör sedan en ny tillåten IPv6-anslutning. Kontrollera också klientens egen IPv6-routingtabell, eftersom en klient som visar en offentlig adress inte bevisar att dess begäran använde tunneln.

IPv4-maskering löser ett annat problem: returvägen för privata källor. Den gör ingenting för ett återkallat IPv6-prefix, och att lägga till den tar inte tillbaka IPv6.

Avsluta med ägarregistret: vilken komponent som delegerar prefixet, vilken som tilldelar klientadresser, vilken som håller returvägen, och vad som händer med var och en vid återanslutning. Fyra rader i en runbook sparar nästa person från att starta om tre daemoner för att hitta den som spelade roll.

Relaterade artiklar