Dve brány, jedna VPN: prečo OpenVPN volí nesprávne vzostupné rozhranie
Tunel je v poriadku; socket odchádza cez nesprávnu WAN. Prečítajte si aktívnu adresu partnera, pripnite trasu k hostiteľovi a najprv skontrolujte pravidlá politiky.
Dve vzostupné rozhrania, jeden tunel a prevádzka odchádza tým, ktoré ste si nevybrali. Privátne podsiete sú dostupné, log hlási úspešné pripojenie a nesie ho práve merané rozhranie. Nič vo výstupe OpenVPN nespomína bránu, pretože klient si nikdy žiadnu nevybral. Otvoril socket na vzdialenú adresu a nechal jadro rozhodnúť, ako sa k tejto adrese dostať.
Adresa tunela nie je koncový bod
V každej relácii existujú dve rôzne cesty. Vonkajšia cesta nesie šifrovaný transport k verejnej adrese servera. Vnútorná cesta nesie všetko, čo server strká do tunela, a pravidlá smerovania pre jednu nemajú vplyv na druhú.
Záznam remote v profile pomenúva vonkajší cieľ, takže to je adresa, ktorú treba pripútať. Je to aj hodnota, ktorá sa mení, keď sa názov hostiteľa preloží inak alebo profil uvádza niekoľko remote.
Nájdite adresu, na ktorú klient skutočne volal
Čítajte živý socket, nie konfiguračný súbor. Tabuľka socketov ukazuje partnera, ku ktorému sa proces skutočne pripojil, a to je hodnota, s ktorou sa výnimka musí zhodovať. Profil možno upraviť po začiatku relácie a socket je jediným dôkazom toho, na čo sa volalo:
ss -tunp | grep -i openvpn
journalctl -u openvpn-client@work --no-pager | grep -i "Peer Connection Initiated"
Riadok v logu uvádza adresu a port partnera v okamihu pripojenia. Ak sa nezhoduje s profilom, niečo pred klientom prepisuje cieľ skôr, než pripojenie začne.
Skontrolujte aj rodinu adries. Profil s dvoma zásobníkmi sa môže pripojiť cez IPv6, zatiaľ čo vaša výnimka pokrýva iba IPv4, a prevádzka potom sleduje iné pravidlo než to, ktoré ste napísali. To isté platí pre proxy, ktorá odpovedá v mene koncového bodu. Oba prípady vytvárajú tunel, ktorý funguje, zatiaľ čo vaša trasa nič nerobí.
Pripnite koncový bod a prečítajte si poradie politiky
Trasa k hostiteľovi je konkrétnejšia než akákoľvek predvolená trasa. Preto /32 pre adresu partnera víťazí v tabuľke, ktorá ju obsahuje. Zvyčajný tvar výslovne uvádza bránu a zariadenie:
ip route add 203.0.113.40/32 via 192.168.10.1 dev eth0
Táto trasa pomôže len vtedy, keď sa vyhľadávanie dostane do tejto tabuľky. Pravidlá politiky sa vyhodnocujú v poradí a prvá zhoda rozhoduje, takže pravidlo, ktoré posiela všetko do druhej tabuľky, obchádza vašu trasu k hostiteľovi v main. Prečítajte si pravidlá, než budete predpokladať, že trasa je smerodajná:
ip rule show
ip route get 203.0.113.40
Opýtajte sa druhého príkazu s rovnakou zdrojovou adresou alebo značkou, ktorú klient používa, keď na nich politika závisí. Hlási trasu, ktorú by jadro vybralo, čo je dôkaz o vyhľadávaní, a nie dôkaz, že živý socket používa túto cestu.
Keď sa koncový bod presunie
Názov hostiteľa, ktorý sa prekladá na niekoľko adries, zneplatní trvalú /32, hneď ako sa odpoveď zmení. Profil s viacerými riadkami remote má rovnaký problém, pretože klient môže pristáť na ktoromkoľvek z nich. Obnovujte trasu z vlastných hákov životného cyklu klienta, namiesto pridávania ručne. Skript up, ktorý číta dohodnutého partnera a inštaluje trasu k hostiteľovi, udržiava výnimku v súlade s realitou, a zodpovedajúci skript down ju odstraňuje.
Obnovenie zaznamenajte na rovnaké miesto ako zvyšok konfigurácie smerovania hostiteľa. Trasa, ktorá existuje len do ďalšieho reštartu, je test, nie oprava.
Udržujte vnútornú politiku oddelene
Presun vonkajšej cesty neposkytuje prístup k novej privátnej podsieti a nemení, ktoré ciele server strká do tunela. Trasa spodnej vrstvy volí drôt; vstrčené trasy volia, čo vstúpi do tunela. Práve oddelenie týchto dvoch rozhodnutí robí rozdelenie predvídateľným.
Ak je cieľom iba udržať šifrovaný transport mimo meraného rozhrania, nechajte predvolenú trasu na pokoji a pridajte jedinú výnimku pre hostiteľa. Nahradenie celostrojovej predvolenej trasy kvôli presunu jedného VPN pripojenia pokazí každú ďalšiu aplikáciu na hostiteľovi.
Potvrďte výsledok dvoma nezávislými pozorovaniami: miestnou adresou a zariadením socketu a trasou, na ktorú sa prekladá privátny cieľ. Keď obe zodpovedajú vášmu zámeru, rozdelenie je skutočné. Manuál OpenVPN 2.6 pokrýva voľby remote a miestneho naviazania, ktoré rozhodujú, na ktorú adresu klient volá.