Plný tunel v strongSwane vyžaduje 0.0.0.0/0 na oboch stranách
Plný tunel potrebuje 0.0.0.0/0 ako remote_ts klienta a ako local_ts brány, navyše forwarding, NAT a spätnú trasu. Skontrolujte všetky štyri.
Pripojenie strongSwan, ktoré funguje pre jednu privátnu podsieť, nebude prenášať internetovú prevádzku len preto, že niekto upravil jeden riadok. Plný tunel je dohoda medzi dvoma stranami o tom, ktoré adresy chráni child SA, a každá strana pomenúva druhú stranu voči sebe. Nastavte jednu stranu správne a druhú nesprávne a child SA buď nevznikne, alebo vznikne užšia, než bolo zamýšľané. Päť kontrol nižšie sleduje túto dohodu od klienta cez bránu až von do internetu.
Najprv skontrolujte selektor klienta
Klient opisuje, čo chce chrániť na vzdialenej strane, ako remote_ts, a všetko, čo odosiela, vychádza z jeho vlastnej pridelenej adresy. Pre internetovú prevádzku musí táto hodnota pokrývať ciele, ktoré používateľ skutočne dosiahne, čo v praxi znamená celý priestor IPv4. Klient, ktorý stále uvádza jednu podsieť, žiada rozdelený tunel, nech sa profil v rozhraní volá akokoľvek. Strana zdroja je zvyčajne dynamic, pretože adresa sa prideľuje pri pripojení. Pevný zdroj zapísaný tam sa pokazí hneď, ako sa zmení fond adries.
children {
net {
local_ts = dynamic
remote_ts = 0.0.0.0/0
}
}
Tento fragment nie je úplný súbor pripojenia a tento predpokladá, že overovanie, identity a fond virtuálnych adries sú už nakonfigurované. Selektor zdroja klienta a adresa, ktorú prideľuje server, sa stále musia zhodovať, inak child SA vznikne s rozsahom, ktorý žiadna strana neočakávala. Načítajte ho pomocou swanctl --load-all a prečítajte výstup, kým budete predpokladať úspech. Súbor, ktorý sa parsuje, môže byť stále odmietnutý pre selektor, ktorý sa neprekrýva s návrhom druhej strany.
Skontrolujte selektor brány na jej vlastnej strane
Brána číta ten istý pojem z opačného smeru. Internetové ciele sú pre bránu lokálne, takže jej local_ts je široký a remote_ts opisuje fond klientov. Táto inverzia je najčastejšia chyba v konfigurácii plného tunela a prejde kontrolou, pretože oba riadky vyzerajú samostatne vierohodne.
children {
rw {
local_ts = 0.0.0.0/0
remote_ts = 10.77.0.0/24
}
}
Skopírovanie fragmentu klienta do súboru brány vytvorí pár selektorov, ktorý neopisuje nič užitočné, pretože obe strany by si nárokovali rovnakú rolu. Príručka strongSwan o preposielaní výslovne dokumentuje párovanie klienta a brány a stojí za to ju čítať vedľa súboru pripojenia, nie až po zlyhaní. Súbor brány potrebuje aj definíciu fondu, na ktorý odkazuje remote_ts. Selektor pomenúvajúci neexistujúci fond sa načíta bez sťažnosti a zlyhá pri pripojení.
Starší ipsec.conf používa ľavú a pravú rolu s rôznymi kľúčmi a riadok rightsubnet nie je priamou náhradou hodnoty swanctl. Držte obe syntaxe v oddelených súboroch namiesto vkladania jednej do druhej. Miešanie v jednom adresári je spôsob, akým funkčné pripojenie po reštarte ticho prepadne späť.
Skontrolujte vyjednanú child SA, nie súbor
Uložená konfigurácia dokazuje zámer a nič viac. Druhá strana môže zúžiť požadované a existujúca child SA sa nenahradí len preto, že sa súbor pod ňou zmenil. Pred zmenou čohokoľvek iného potvrďte, čo je skutočne nainštalované.
swanctl --list-conns
swanctl --list-sas
ip xfrm policy list
Prvý príkaz ukazuje, čo načítal démon, druhý ukazuje vytvorené child SA a tretí politiky, ktoré jadro použije. Ak súbor hovorí 0.0.0.0/0 a výpis ukazuje jednu podsieť, vyjednávanie zúžilo rozsah a opätovné čítanie súboru to nevysvetlí. Ukončite child, spustite ju znova a znova porovnajte všetky tri výstupy. Child, ktorá sa vráti s rovnakým úzkym rozsahom, je zúžená vzdialenou stranou a nie lokálnym súborom, a to je rozhovor s druhým administrátorom, nie lokálna úprava.
Čítajte oba smery vo výpise politík, pretože tunel, ktorý inštaluje jeden smer a nie druhý, je problém smerovania v kostýme konfigurácie. Politiky dopredu a dozadu majú pomenovať rovnaký pár selektorov v zrkadlovom obraze a chýbajúce zrkadlo je chyba démona alebo návrhu, nie textu selektora.
Skontrolujte preposielanie a spätnú trasu
Selektor prepúšťa prevádzku k bráne, ale neprinúti bránu smerovať tú prevádzku ďalej. Preposielanie musí byť zapnuté, firewall musí povoliť tok a odpoveď musí nájsť cestu späť do fondu klientov. To sú tri samostatné požiadavky a každá zlyháva s iným príznakom. Chýbajúce pravidlo preposielania sa správa ako čierna diera, kým chýbajúca spätná trasa ako jednosmerný tunel.
sysctl net.ipv4.ip_forward
iptables -t nat -S | grep -i masq
ip route get 1.1.1.1
Privátne klientske adresy zvyčajne potrebujú zámerný preklad zdroja, kým môžu opustiť verejné rozhranie, kým explicitne smerované pridelenie vyžaduje iný postup. Ak je v hre NAT, zachovajte výnimky podporované implementáciou, aby sa prevádzka, ktorú má bezpečnostná politika skontrolovať, neprekladala mimo nej. Široké pravidlo masquerade skopírované z inej brány mení oveľa viac tokov, než jeho autor zamýšľal. Napíšte pravidlo len pre fond klientov a nechajte komentár vysvetľujúci, prečo existuje.
Na klientovi potvrďte trasy nainštalované backendom, nie trasy, ktoré ste predpokladali. Správca s vypnutou inštaláciou trás potrebuje ručne udržiavaný návrh smerovania a ten sa musí aktualizovať pri každej zmene tunela. Skontrolujte smerovaciu tabuľku po opätovnom pripojení, nielen po čerstvom štarte.
Skontrolujte, čo tunel stále nepokrýva
Pár selektorov pokrýva IPv4 a nič iné. IPv6, DNS a akákoľvek politika na úrovni aplikácie sú samostatné rozhodnutia, ktoré široký selektor IPv4 ticho ignoruje. Tunel prenášajúci každý paket IPv4 môže stále uniknúť každé hľadanie názvu.
Výslovne uveďte zamýšľanú cestu DNS, pretože plný tunel, ktorý stále prekladá názvy cez lokálny resolver, uniká dotazy mimo tunela a kazí privátne názvy. Ak klient dostane adresu IPv6, táto rodina adries potrebuje rovnaké zaobchádzanie, inak host uprednostní cestu, ktorú tunel nechráni. Testujte názvom, na ktorý môže odpovedať len privátna strana, a verejnú odpoveď považujte za únik.
resolvectl query intranet.example.internal
traceroute -n 1.1.1.1
Potvrďte reťaz týmito dvoma príkazmi plus vyjednanými selektormi z výpisu vyššie. Ak traceroute ukazuje lokálny router ako prvý skok, prevádzka tunel nepoužíva, nech selektory tvrdia čokoľvek. Prístup na internet je úplný len vtedy, keď je zvolená prevádzka prijatá, preposlaná a vrátená cez navrhnutú bránu. Nájsť 0.0.0.0/0 v profile je začiatok toho reťaza, nie jeho dôkaz.