OpenVPN iroute i kernel ruta: koja nedostaje?
Server ima rutu, a saobraćaj se ipak zaustavlja. Jedna odluka o putu pripada kernelu, druga peeru; saznajte koja nedostaje i šta provjeriti.
Paket za 10.77.20.0/24 donosi dvije odvojene odluke na OpenVPN serveru: operativni sistem ga mora predati VPN interfejsu, a OpenVPN mora znati koji povezani klijent posjeduje taj prefiks. Nedostajuća kernel ruta ga odbacuje prije tunela, a nedostajuća peer ruta poslije njega. Oba kvara izgledaju isto s udaljenog LAN-a, a dijagnostika koji imate traži po jednu komandu sa svake strane.
U klasičnoj korisničkoj putanji podataka kernel ruta ubacuje paket u tunelski proces, a iroute govori tom procesu koji peer treba da ga primi. Nijedna ne zamjenjuje drugu, a konfiguracija sa samo jednom od njih izgledat će razumno sve do prvog pinga.
Dvije odluke, a ne jedna ruta
Zamislite vezu između lokacija gdje 10.77.20.0/24 stoji iza jednog klijenta. Kernel ruta servera, na primjer ip route add 10.77.20.0/24 dev tun0, šalje odgovarajuće pakete tunelskom uređaju. OpenVPN zatim pregleda vlastitu internu tabelu, izgrađenu od iroute unosa u direktoriju konfiguracije klijenta, da odluči koja peer veza će ih primiti. Bez kernel rute paket nikada ne stigne do procesa, a bez peer rute stigne do procesa i ne ode nikuda.
Tu podjelu je lako zaboraviti, jer jedan red rute u profilu klijenta može izgledati kao da obavlja oba posla. Ne obavlja: guranje rute govori klijentima šta slati kroz tunel, dok iroute govori serveru ko posjeduje raspon adresa iza klijenta. Žive u različitim datotekama, čitaju ih različite strane i padaju u suprotnim smjerovima.
Gdje iroute pripada i šta kaže
Unos ide u datoteku za pojedinačnog klijenta nazvanu po common_name klijenta, unutar client-config-dir, kao iroute 10.77.20.0/24. Podudaranje imena datoteke nije kozmetičko: OpenVPN traži autentificirani identitet i čita datoteku s tačno tim imenom, pa datoteka site-a djeluje samo za klijenta čije je uobičajeno ime site-a. Dodajte ccd-exclusive ako klijente bez takve datoteke treba odmah odbiti, što je ispravna postavka kada je svaki klijent mrežni gateway lokacije. Držite jednu datoteku po gatewayu i nazovite je po subjektu certifikata koji zaista izdajete.
Testirajte unos sa servera prije nego okrivite udaljeni LAN. Statusna datoteka navodi povezane klijente s njihovim uobičajenim imenima, a server pokrenut s --verb 4 bilježi instalaciju iroute kada se peer poveže. Ako se pri povezivanju ništa ne pojavi, datoteka je u pogrešnom direktoriju ili imenuje pogrešan identitet.
Zamka: datoteka postoji, identitet je pogrešan
Ispravno izgledajući iroute vezan za pogrešan peer gubi više vremena od nedostajuće datoteke, jer sve na disku izgleda ispravno. Preimenovanje certifikata, duplicirana uobičajena imena i username-as-common-name koji mijenja efektivni identitet sve to proizvode. Provjerite koji je identitet server autentificirao, a ne koji ste očekivali: statusni izlaz je mjerodavan, dok je ime datoteke samo ključ za pretragu.
Ruta može nadživjeti svog vlasnika. Statičke rute i iroute unosi opisuju prefiks, a ne garanciju dostupnosti, pa se saobraćaj može nastaviti usmjeravati ka peeru koji je trenutno isključen.
Dovršite putanju iza peera
Vlasništvo nad peerom je sredina putanje, a ne kraj. Klijent mora prosljeđivati pakete iz tunela u svoj LAN, što znači da je na tom hostu omogućeno IP prosljeđivanje i da pravilo firewalla dopušta prolaz. Hostovi na udaljenom LAN-u trebaju povratnu putanju za adresu tunela: ili rutu koja pokazuje natrag na gateway, ili namjerno dizajniran NAT na strani klijenta. Potvrdite postavku prosljeđivanja na klijentu pomoću sysctl net.ipv4.ip_forward umjesto da pretpostavljate zadano distribucije.
Ako drugi VPN klijenti moraju dosegnuti tu podmrežu, raspored ponovno raste: server treba client-to-client, a ti klijenti moraju usmjeriti prefiks kroz tunel. Ništa od toga ne proizlazi iz serverove vlastite tablice ruta.
Provjerite jedno odredište s pravog izvora, a ne sa samog servera. Ping s nepovezanog LAN hosta na host iza klijenta vježba povratnu putanju, pravilo prosljeđivanja i vlasništvo nad peerom u jednom potezu, dok uspješan handshake dokazuje samo identitet. Zatim odspojite vlasničkog peera i zabilježite šta ruta radi, jer taj odgovor je vaš način kvara.