VPN klijenti se povezuju, ali nema interneta: tri nedostajuća dijela
Tunel koji odgovara na ping još uvijek treba prosljeđivanje, prevođenje i pravilo prosljeđivanja. Otkrijte koji od tri dijela nedostaje prije nego ponovo uredite klijent.
Klijent dobije adresu, server odgovara na ping, a svaka stranica i dalje istekne. Većina ljudi u ovom trenutku počne uređivati profil klijenta, što je obično uzaludan trud: kada je tunel podignut, server se mora ponašati kao ruter. Tri uslova moraju vrijediti istovremeno prije nego paket izađe i vrati se odgovor, a simptom je isti koji god da nedostaje.
Zašto radni tunel još uvijek nema izlazni put
Jezgro mora prosljeđivati pakete između interfejsa, što je prema zadanim postavkama isključeno na većini Linux distribucija. Saobraćaj se mora prevesti na adresu na koju vanjski svijet može odgovoriti, osim ako svaki uzvodni ruter već zna povratni put do podmreže tunela. Putanja prosljeđivanja firewall-a mora dopuštati saobraćaj u oba smjera, uključujući odgovore.
Svaki od njih može se popraviti zasebno, i u tome je zamka. Uključivanje prosljeđivanja bez pravila prevođenja ostavlja pakete da izlaze s privatnim izvorom i bez povratnog puta. Dodavanje prevođenja bez pravila prosljeđivanja ostavlja jezgro da ispusti paket korak kasnije.
Zato testirajte tri sloja umjesto klijenta i mijenjajte po jedno, da rezultat nešto znači.
Prosljeđivanje je prekidač jezgra koji morate zadržati
Provjerite trenutnu vrijednost prije promjene, zatim je postavite i potvrdite da je promjena stupila na snagu.
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
sysctl net.ipv4.ip_forwardPrva komanda prikazuje trenutnu vrijednost, druga je postavlja u toku rada, a treća dokazuje da je upis uspio. Vrijednost u toku rada nestaje pri sljedećem restartu, zbog čega radna sesija može puknuti nakon održavanja bez ikakve promjene konfiguracije.
Učinite je trajnom u datoteci pod /etc/sysctl.d/, zatim primijenite tu datoteku umjesto da restartujete da biste saznali. Na FreeBSD-u ekvivalent je net.inet.ip.forwarding, uz gateway_enable=YES u rc.conf za trajnost. Uređaj koji prijavljuje da je prosljeđivanje isključeno objašnjava cijelu klasu izvještaja „paketi dolaze, a ništa se ne vraća”. Provjerite postavku i nakon svakog ažuriranja, jer ponovo izgrađeno jezgro ili zamijenjena slika uređaja mogu je resetovati bez da ikome kažu.
Odaberite masquerade ili jednu fiksnu adresu prevođenja
Uz dinamičku vanjsku adresu, masquerading je najjednostavniji ispravan oblik. Navedite podmrežu tunela kao izvor, a vanjski interfejs kao izlaz.
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADEUz statičku javnu adresu, prevođenje izvora na tu tačnu adresu predvidljivije je i lakše za reviziju.
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -j SNAT --to-source 198.51.100.10Drugi oblik nosi zamku u održavanju: tvrdo kodirana adresa koja se kasnije promijeni drži tunel radnim dok pristup internetu tiho prestaje. Ili koristite masquerade ili ažurirajte pravilo kad vas provajder premjesti. Interfejs je takođe važan, jer ruter koji dijeli vlastiti uzvodni tunel mora prevoditi kroz taj tunel, a ne kroz fizički WAN.
Tabela filtera je treća kapija
Prosljeđivanje i prevođenje mogu biti ispravni, a paket ipak umire u tabeli filtera. ufw je čest krivac: njegova politika prosljeđivanja dolazi kao DROP, a ostatak postavke može izgledati savršeno ispravno dok ta jedna postavka ubija saobraćaj. Podizanje te politike je svjesna sigurnosna odluka, a ne kućica za potvrdu.
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTPrvo pravilo dopušta novi saobraćaj iz tunela prema vani, a drugo samo odgovore nazad. Suzite oba na podmrežu tunela i namijenjeno odredište, jer opće dopuštanje na interfejsu tunela pretvara VPN u otvorenu izlaznu točku za svakoga ko se može autentificirati.
Premošteni tunel traži drugačiji odgovor. Adresa pripada mostu, a ne fizičkom portu, pa podređivanje interfejsa uklanja adresu koju je prije imao i host izgleda nedostupno dok sam most ne dobije adresu, što dhclient br0 može osigurati. Taj kvar izgleda kao VPN problem, a problem je drugog sloja. Provjerite vlastitu adresu mosta prije nego dirnete firewall, jer promjena filtera ne može popraviti host koji više nema adresu s koje šalje.
Gdje tražiti kad se stranica nikada ne učita
Pingajte tunelsku adresu servera da dokažete da tunel postoji. Zatim pokrenite traceroute s klijenta na javnu adresu i pročitajte gdje se zaustavlja: na serveru paket stiže ali se ne prosljeđuje ni ne prevodi; iza servera problem je uzvodno i izvan vaših ruku.
ping -c 3 10.9.0.1
traceroute -n 198.51.100.10Prva komanda dokazuje da tunel nosi saobraćaj do samog servera, a druga pokazuje dokle paket stigne prema vani. Trag koji završava na tunelskoj adresi upućuje na prosljeđivanje ili prevođenje na serveru, dok trag koji staje jedan hop kasnije upućuje na provajdera ili povratni put uzvodnog rutera.
Na serveru posmatrajte vanjski interfejs dok klijent učitava stranicu. Saobraćaj koji izlazi s privatnom izvornom adresom znači da prevođenje nedostaje, a potpuno odsustvo odgovora znači da ga putanja prosljeđivanja ili uzvodna povratna ruta ispušta.
Ako udaljeni klijenti moraju dosezati i hostove na LAN-u servera, zapamtite da LAN treba povratnu rutu do podmreže tunela. To je rutiranje, a ne prevođenje, i to je korak koji se najčešće zaboravi nakon što internet put konačno proradi.