Mac L2TP podijeljene rute: zašto adresa hosta ne radi
setadditionalroutes traži parove mreže i maske, zamjenjuje cijelu listu i zahtijeva doslovno ime servisa. Provjerite tabelu prije nego okrivite gateway.
VPN se povezuje, meni traka to pokazuje, a interni host i dalje ne odgovara. U toj situaciji postoje tri moguća uzroka, a koji je na djelu zavisi od toga kako je tunel konfigurisan. Ili je naredba za rutu koristila adresu hosta gdje je bila potrebna adresa mreže, ili sam profil instalira zadanu rutu koja guta odluku, ili je klijent PPP tunel kojem treba hook, a ne ključ u profilu. Provjerite ih tim redom, jer je prvi najlakše isključiti.
Odredište je adresa mreže, maska opisuje prefiks
networksetup -setadditionalroutes prima trojke odredišta, podmrežne maske i gatewaya. Poziv koji šalje jednu internu podmrežu kroz tunel izgleda ovako:
sudo networksetup -setadditionalroutes "VPN (L2TP)" 192.168.1.0 255.255.255.0 10.2.0.0
Obratite pažnju šta je odredište: adresa mreže, a ne adresa servera kojem pokušavate doći. U slučaju koji je stvorio ovaj članak, identična naredba s 192.168.1.20 na tom mjestu nije uradila ništa korisno, a zamjena s 192.168.1.0 proradila je odmah. Ista maska, isti gateway, jedan drugačiji broj. To je cijeli kvar u malom.
Razlog je aritmetika, a ne politika. Adresa hosta uparena s maskom /24 ne opisuje 192.168.1.0/24; opisuje nešto što tabela rutiranja ne može korisno držati, pa se zapis odbija ili ignorira i tunel na kraju nosi manje nego što ste namjeravali.
Kada želite tačno jedan host, koristite adresu hosta s maskom 255.255.255.255. Miješani parovi su mjesto gdje to krene po zlu, a ne korištenje adrese hosta kao takve. /32 izgrađen od jedne adrese je legitimna ruta; /24 izgrađen od jedne adrese je greška.
Poziv zamjenjuje listu, a ime je doslovno
Dva ponašanja iznenade ljude na prvom pokušaju. Naredba postavlja kompletnu listu dodatnih ruta umjesto da dodaje, pa poziv koji dodaje jedan prefiks tiho uklanja ostale koji su prije bili tu. Izgradite cijeli skup u jednom pozivu.
Ime servisa također nije oznaka koju ste izmislili. Pročitajte ga iz alata i kopirajte tačno, uključujući sufiks tipa:
networksetup -listallnetworkservices
Ime koje se razlikuje za jedan znak ne daje grešku vrijednu čitanja ni rutu. Kopiranje i lijepljenje je ispravna tehnika ovdje, a ne prepisivanje iz sjećanja.
Kada profil prisvoji zadanu rutu
Podijeljene rute gube od zadane rute za svako odredište koje eksplicitno ne pokrivaju, a L2TP profil konfigurisan za puni tunel instalira upravo to. Ako profil kaže da sve ide kroz tunel, lista dodatnih ruta se mijenja vrlo malo. Vaš zapis nije pogrešan; jednostavno je nebitan za odredišta koja nikada ne imenuje. Kontrola za to obično stoji u postavci profila za slanje cjelokupnog saobraćaja, a ne u bilo kojoj naredbi za rutu.
Odlučite koji model zaista želite prije nego uredite još zapisa. Puni tunel s izuzecima je drugačija konfiguracija od podijeljenog tunela s određenim prefiksima, a miješanje dva daje tabelu koju niko ne može predvidjeti.
Ako organizacija zahtijeva puni tunel, prestanite ga lokalno dijeliti i odnesite zahtjev onome ko posjeduje politiku. Lokalno dodana ruta koja joj protivrječi bit će uklonjena sljedećim ažuriranjem profila ionako.
PPP tunelima treba hook umjesto ključa
Za tunele zasnovane na PPP, defaultroute je ključ profila koji stvara zadanu rutu; uklonite ga i klijent prestaje prisvajati svako odredište. Rute se zatim dodaju nakon što se interfejs pojavi, obično iz /etc/ppp/ip-up:
#!/bin/sh
/sbin/route add -net 192.168.1.0 -interface ppp0
Držite skriptu u vlasništvu roota i izvršnom, i dodajte zaštitu na ime interfejsa kada na mašini postoji više od jednog profila tunela. Hook koji se izvršava za svaku PPP vezu i pretpostavlja jedno ime uređaja je mala greška s dugim životom.
Provjerite podjelu s tri zahtjeva
Zabilježite tabelu dok ste povezani i zabilježite koji interfejs opslužuje tunel. Zatim provjerite konkretno odredište umjesto da vjerujete izlaznom statusu naredbe koja ga je stvorila. Izlazni kod govori da li je alat prihvatio argumente, a ne da li saobraćaj ide putem koji ste namjeravali.
Završite s tri zahtjeva koji dokazuju podjelu: jedan interni host po adresi, jedno interno ime kroz interni resolver i jedan javni sajt koji još treba koristiti lokalnu vezu. Ako javni sajt sada također ide kroz tunel, podjele nikada nije bilo, šta god lista ruta izgledala da kaže.
Ponovo se povežite i ponovite interni zahtjev, jer rukom dodane rute mogu nadživjeti interfejs koji ih je učinio važećim i tiho pretvoriti saobraćaj u crnu rupu nakon što tunel padne.