OpenVPN s punim tunelom: dodajte internetski izlaz na strani poslužitelja
Guranje zadane rute samo je pola usluge punog tunela. Poslužitelj također treba prosljeđivanje, ograničeno pravilo prosljeđivanja i povratni put za skup.
Klijent se autentificira, dobiva adresu iz skupa i doseže usluge na VPN hostu, no svako javno odredište završava istekom vremena. Tako izgleda tunel bez izlaza i tako ostaje dok se ne ispune četiri odvojene stvari. Klijent mora prihvatiti zadanu rutu, poslužitelj mora prosljeđivati, vatrozid mora dopustiti tranzit, a odgovori trebaju put natrag u skup. Sva četiri kvara dijele jedan simptom, zato mijenjajte jednu stavku po pokušaju i bilježite rezultat.
Pošaljite zadanu rutu i provjerite što je klijent instalirao
Redak na strani poslužitelja je kratak i utječe samo na klijente koji prihvaćaju gurnute opcije. Oblik def1 instalira dvije polu-zadane rute umjesto brisanja postojeće zadane, što održava trenutnu vezu živom i pritom hvata svako odredište.
push "redirect-gateway def1"
Nakon ponovnog spajanja pročitajte klijentovu tablicu usmjeravanja umjesto da vjerujete profilu. Na Linuxu se dva unosa /1 pojavljuju uz izvornu zadanu rutu, a Windows prikazuje isti par kao 0.0.0.0/1 i 128.0.0.0/1. Klijent koji ignorira gurnute opcije ili je konfiguriran da ih odbije zadržava staru zadanu rutu i nikada ne šalje internetski promet u tunel. Riješite to pitanje prije nego što bilo što promijenite na poslužitelju, jer nijedno pravilo na strani poslužitelja to ne može nadoknaditi.
Prosljeđivanje je postavka poslužitelja, ne postavka VPN-a
Pročitajte zastavicu prosljeđivanja prije nego što dirnete usmjeravanje. Nula tamo znači da jezgra primi klijentov paket i odbije ga proslijediti, što izgleda točno kao blokada vatrozida s udaljene strane. Postavite vrijednost kroz konfiguracijski direktorij sustava kako bi preživjela ponovno pokretanje.
sysctl net.ipv4.ip_forward
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-vpn-forward.conf
sudo sysctl --system
Zatim provjerite da sam host ima radnu rutu do internetskog izlaza. Zahtjev iz poslužiteljeve ljuske dokazuje da je uzvodni put ispravan i ne govori ništa o prosljeđivanju klijentova paketa, zato to tretirajte kao dva odvojena testa. Ako poslužitelj ne može dosegnuti odredište, nikakva količina konfiguracije prosljeđivanja neće pomoći.
Dopustite točno onaj tranzit koji želite i ništa drugo
Proslijeđeni paketi prelaze put forward; promet upućen samom VPN hostu prelazi put input. To su različite odluke i otvaranje puta input ne dopušta tranzit kroz stroj. Njihovo miješanje najčešći je razlog zašto se čini da vatrozid dopušta sve, a klijenti ipak dobivaju istek vremena.
Minimalna politika prihvaća nove veze iz skupa prema izlaznom sučelju i prihvaća odgovore koji pripadaju uspostavljenim tokovima. Stavite je u onaj vlasnik skupa pravila koji vaša distribucija koristi, umjesto da dodajete duplikat pravila pri svakom podizanju; duplikati se nakupljaju i brojači prestaju nešto značiti.
sudo iptables -A FORWARD -i tun0 -o eth0 -s 10.90.0.0/24 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Prebacivanje svakog lanca na prihvaćanje čini da test prođe i uklanja razlog postojanja vatrozida. Držite opseg na skupu i izlaznom sučelju, a nepovezano prosljeđivanje ostavite na miru.
Dajte odgovorima kamo otići
Adrese skupa su privatne, pa javni poslužitelj ne može dostaviti odgovor izravno na njih. Ili VPN host prevodi izvornu adresu na izlazu, ili uređaj uzvodno drži rutu natrag u skup.
sudo iptables -t nat -A POSTROUTING -s 10.90.0.0/24 -o eth0 -j MASQUERADE
Dodajte točno jedan sloj prijevoda. Drugi NAT dalje uzvodno skriva prvi i čini oba zapisa gotovo beskorisnima kad se nešto kasnije pokvari. Ako usmjerivač uzvodno već usmjerava skup natrag, dodavanje prijevoda na hostu je suvišno i put povratka tada ovisi o konfiguraciji tog usmjerivača, a ne o vašoj.
Cloud instance dodaju još jedna vrata, jer neke platforme odbacuju pakete čija izvorna adresa nije instancina, osim ako se ta provjera ne ublaži. Ta postavka stoji izvan gosta i lako se zaboravi kad lokalni testni stroj radi.
Dokažite to s klijenta, a ne iz poslužiteljeve ljuske
Počnite s numeričkim IPv4 zahtjevom, zatim pretragom imena, zatim aplikacijom. ping dokazuje prosljeđivanje i prijevod;ne dokazuje ništa o razrješavanju imena, jer DNS opcije djeluju tek kad ih klijentska integracija instalira.
curl -4 -m 5 http://198.51.100.10/
dig +short example.com
Bilježite promjene i korak poništavanja usput, kako bi se izlazna politika mogla vratiti jednom radnjom kad test ne uspije. Ovaj recept pokriva samo IPv4; zasebno popišite IPv6 prije nego što tvrdite da implementacija nosi sav promet.