XFRM-standardrutten svalde IKE och ESP: behåll den yttre vägen
En policy som skyddar allt kan också fånga paketen som håller tunneln vid liv. Markera IKE och ESP, eller behåll en peer-rutt.
Trafiken är skyddad, tunneln är uppe, och sedan dör den vid nästa nyckelbyte. En standardrutt genom XFRM-gränssnittet beskrev trafiken du ville skydda. Den svalde också paketen som behövs för att fortsätta skydda den.
De två inblandade destinationerna är inte utbytbara. Routingen måste säga det explicit.
Vart peer-sökningen faktiskt tar vägen
Anteckna de aktiva reglerna, tabellen som håller XFRM-rutten och peerens publika adress. Titta sedan på den väg den yttre anslutningen skulle ta med sin riktiga källa och markering. En generisk destination säger ingenting om den kontrollvägen. Bara den faktiska källan och markeringen ger ett användbart svar.
En lyckad första anslutning bevisar också lite. Felet dyker ofta upp efter att en ruttinstallation har ändrat svaret. Starten lyckas, sedan gör inte den första förnyelsen det.
ip rule show
ip route show table 220
ip -4 route get 198.51.100.44 from 10.40.0.2
ip xfrm policy list
Om sökningen för peeren hamnar i XFRM-gränssnittet routas de yttre paketen in i tunneln som de själva bygger. Det är loopen, synlig i ett enda kommando.
Uteslutningsalternativ på en modern gateway
strongSwans dokumentation om ruttbaserad VPN lägger fram två praktiska svar. Det ena markerar IKE och ESP så att regeln mot XFRM-tabellen inte träffar dem. Det andra lämnar en peer-rutt eller en uteslutning som sökningen fortfarande kan nå.
Välj den som din regeluppsättning kan uttrycka utan bieffekter. En markering är ren när resten av stacken redan använder markeringar. Den är en fara när samma mask betyder något annat i en annan regel. Båda pakettyperna behöver behandlingen ändå.
Att bara markera IKE lämnar datapaketen på den fångade vägen. Det ger en tunnel som gör handskakningen och sedan inte bär något.
Markeringen är en bit i paketets fwmark som ingenting annat på gatewayen gör anspråk på: 0x1 med mask 0x1 är det vanliga valet, och den måste sättas på två ställen för att uteslutningen ska fungera. Charon behöver den på IKE-socketen, och barnanslutningens inkommande och utgående markinställningar behöver samma värde så att även inkapslade paket går ut markerade. En mask på 0x1 i stället för 0xffffffff lämnar de återstående bitarna fria, vilket spelar roll när ett annat delsystem redan markerar paket på samma värd. När båda är satta skrivs regeln som en uteslutning, så att markerade paket hoppar över tabellen som håller XFRM-rutten och faller igenom till huvudtabellen:
ip rule add not fwmark 0x1/0x1 lookup 220 pref 1000
ip -4 route get 198.51.100.44 from 10.40.0.2 mark 0x1
Läs sedan svaret med markeringen tillämpad. Utan den undersöker du vägen som den skyddade trafiken tar, vilket är motsatsen till frågan i det här avsnittet.
Vad automatisk installation förutsätter om bygget
Automatisk ruttinstallation för ett XFRM-gränssnitt beror på strongSwan-versionen och dess konfiguration. Gränssnitts-ID, den installerade policyn och associationen måste alla peka på de avsedda objekten. En avvikelse visar sig som en rutt som tyst pekar någonstans verkligt.
Att kopiera ett tabellnummer eller en markmask från en annan gateway är hur kollisioner börjar. Kontrollera först vad som redan använder den. En kollision påverkar trafik långt utanför tunneln du ville ändra, och symtomet pekar sällan på kopian.
Ändringar av peer-adressen hör till designen. En värdrutt för gårdagens adress är inte en återställningsplan för ändpunkten, medan en markering överlever den ändringen.
Håll koll på den första förnyelsen
Kontrollera den yttre vägen efter att de skyddade rutterna är installerade, inte före. Håll sedan koll på nästa förnyelse och ett applikationsutbyte. Felet visar sig oftast vid den övergången och inte vid start.
ip -4 route get 198.51.100.44
sudo swanctl --list-sas
sudo tcpdump -ni any 'udp port 500 or esp'
Att tillfälligt ta bort standardrutten återställer oftast anslutningen. Resultatet är diagnostiskt, inte slutgiltigt.
Målet är en stabil uppdelning mellan inre trafik och de yttre paket som bär den. Skriv den valda mekanismen och dess tabell eller markering i gatewayens anteckningar. Annars kommer nästa person som rör reglerna att återinföra loopen.