IPsec med flere undernet mister returtrafik? Tæl reqid'erne
Ensrettet trafik gennem en tunnel med flere undernet er som regel en forskel i politik og reqid, ikke i kryptering eller routing. Læs xfrm-databaserne i den rigtige rækkefølge.
Trafik forlader det ene sted og kommer aldrig tilbage, begge gateways rapporterer en afsluttet forhandling, og det eneste spor er en bunke udgående pakker uden svar. På et Linux-endpoint er den sædvanlige årsag ikke krypteringsstyrken, MTU'en eller en routingtabel. Det er granulariteten af politikposterne og det nummer, der knytter hver politik til en sikkerhedsassociation. Proceduren nedenfor læser de to databaser, før noget andet røres.
Opdel symptomet, før du ændrer noget
En ensrettet fejl med en afsluttet IKE-forhandling indsnævrer problemet til datastien. Enten matchede den udgående politik, og svaret blev kasseret, eller svaret nåede aldrig frem, fordi den anden side ikke havde noget at sende det gennem. Fra en applikation ser begge ens ud, og xfrm-databaserne skelner dem.
Begynd ikke med MTU'en. En forkert MTU giver hak og fragmenteringssymptomer, ikke en ren retningsopdeling med stigende udgående tællere.
Læs politikdatabasen og state-databasen
Kryptering på Linux afgøres af politikposter, så en matchende politik, ikke en rute, er det, der bringer en pakke ind i tunnelen. Kør ip xfrm policy for at se selectors, retning, prioritet og skabelon for hver post, og ip xfrm state for at se de etablerede associationer med deres reqids. Politikken og associationen knyttes sammen af den reqid.
Se på alle tre retninger. Udgående og indgående dækker trafik til og fra denne vært; forward-retningen betyder noget, når værten router for andre. En manglende eller afvigende post i én retning forklarer et ensrettet resultat uden nogen kryptografisk fejl.
Den klassiske asymmetri: én reqid til flere undernet
En hyppig fejl kommer fra en peer, der installerer politikker for alle forhandlede undernet under én enkelt reqid, hvilket sker med racoons generate_policy require. Trafikken går så ud gennem den association, der blev oprettet sidst, mens den anden side beholder en separat association pr. undernet. Svar ankommer på en association, hvis reqid ikke peger på den politik, der burde acceptere dem, og kernen kasserer dem efter dekryptering.
Løsningen er en konfigurationsændring, ikke en firewallregel: generate_policy unique; giver hver politik sin egen reqid, så peerens associationer pr. politik har matchende partnere. Anvend det, forhandl igen, og tæl de forskellige reqids for de undernet, du forventer, før du erklærer succes.
Hvis to undernet stadig deler en reqid, mens den anden side forventer to, har du fundet asymmetrien. Notér koblingen, for den er beviset for, om den næste ændring har rettet den eller bevaret den.
Selectors kommer fra forhandlingen, ikke fra din konfiguration
De beskyttede områder er, hvad begge ender blev enige om, ikke hvad en af siderne bad om. En klient, der tilbyder et værtskab mod et bredt eksternt område, får gatewayens indsnævrede version, og klienten kan ikke udvide den. Læs de installerede selectors i stedet for dem i din lokale fil.
Når målet er det modsatte, at holde én destination uden for tunnelen, skal du tilføje en bypass-politik med et lavere prioritetsnummer, så den vinder over den automatisk installerede post. En politik uden skabelon tillader klartekst, hvilket gør den til en bevidst undtagelse til en ændringsregistrering i stedet for et fejlsøgningstrin.
Kontroller i denne rækkefølge, og vid, hvordan du ruller tilbage
List politikker for hvert undernet i begge retninger, inklusive forward, hvis værten router. Tæl forskellige reqids, og bekræft én pr. politik på den side, der forventer det. Sammenlign installerede selectors med de forhandlede. Læs tællere pr. association igen efter en rekey, for den association, du undersøgte, kan allerede være væk. Kontroller ruter sidst, da en manglende rute til det eksterne undernet giver et lignende ensrettet symptom med rene politiktællere.
Før du ændrer peeren, skal du gemme den aktuelle output fra begge xfrm-kommandoer. Hvis den nye indstilling ikke genskaber returretningen, er det at gendanne den output en hurtigere tilbagerulning end at genopbygge tunnelen fra hukommelsen, og det holder sammenligningen ærlig.