Klientas autentifikuojasi, gauna adresą iš telkinio ir pasiekia paslaugas VPN hoste, tačiau kiekviena vieša paskirties vieta baigiasi laiko limitu. Taip atrodo tunelis be išėjimo, ir taip lieka, kol neišsipildo keturi atskiri dalykai. Klientas turi priimti numatytąjį maršrutą, serveris turi persiųsti, užkarda turi leisti tranzitą, o atsakymams reikia kelio atgal į telkinį. Visos keturios gedimų rūšys turi vieną simptomą, todėl keiskite po vieną elementą per bandymą ir užsirašykite rezultatą.

Išstumkite numatytąjį maršrutą ir patikrinkite, ką klientas įdiegė

Serverio pusės eilutė trumpa, ir ji paveikia tik klientus, kurie priima išstumtas parinktis. def1 forma įdiegia du pusinius numatytuosius maršrutus, o ne ištrina esamą numatytąjį, todėl dabartinis ryšys išlieka gyvas ir vis tiek užfiksuojama kiekviena paskirties vieta.

push "redirect-gateway def1"

Po pakartotinio prisijungimo skaitykite kliento maršrutizavimo lentelę, o ne pasitikėkite profiliu. Linuxe du /1 įrašai atsiranda šalia pradinio numatytojo, o Windows rodo tą pačią porą kaip 0.0.0.0/1 ir 128.0.0.0/1. Klientas, kuris nepaiso išstumtų parinkčių arba sukonfigūruotas jų atsisakyti, išlaiko savo senąjį numatytąjį ir niekada nesiunčia interneto srauto į tunelį. Išspręskite šį klausimą prieš ką nors keisdami serveryje, nes jokia serverio pusės taisyklė to nekompensuos.

Persiuntimas yra serverio nustatymas, o ne VPN nustatymas

Perskaitykite persiuntimo vėliavėlę prieš liedami maršrutizavimą. Nulis ten reiškia, kad branduolys priima kliento paketą ir atsisako jį perduoti toliau, o tai atrodo lygiai kaip užkardos blokas iš tolimosios pusės. Nustatykite reikšmę per sistemos konfigūracijos katalogą, kad ji išliktų po perkrovimo.

sysctl net.ipv4.ip_forward
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-vpn-forward.conf
sudo sysctl --system

Tada patikrinkite, ar pats hostas turi veikiantį maršrutą iki interneto išėjimo. Užklausa iš serverio apvalkalo įrodo, kad aukštutinis kelias yra tinkamas, ir visiškai nieko nesako apie kliento paketo persiuntimą, todėl traktuokite juos kaip du atskirus bandymus. Jei serveris nepasiekia paskirties vietos, joks persiuntimo konfigūracijos kiekis nepadės.

Leiskite būtent tą tranzitą, kurio norite, ir nieko daugiau

Persiųsti paketai kerta forward kelią; srautas, adresuotas pačiam VPN hostui, kerta input. Tai skirtingi sprendimai, o input kelio atidarymas neleidžia tranzito per mašiną. Jų supainiojimas yra dažniausia priežastis, kodėl užkarda atrodo leidžianti viską, o klientai vis tiek gauna laiko limitą.

Minimali politika priima naujus ryšius iš telkinio link išėjimo sąsajos ir priima atsakymus, priklausančius nusistovėjusiems srautams. Įdėkite ją į tą taisyklių rinkinio savininką, kurį naudoja jūsų distribucija, o ne pridėkite pasikartojančią taisyklę kiekvieno įkrovimo metu; pasikartojančios taisyklės kaupiasi ir skaitikliai nustoja ką nors reikšti.

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

Kiekvienos grandinės perjungimas į priėmimą leidžia testui praeiti ir panaikina užkardos egzistavimo priežastį. Laikykite apimtį ties telkiniu ir išėjimo sąsaja, o nesusijusį persiuntimą palikite ramybėje.

Duokite atsakymams vietą, kur eiti

Telkinio adresai yra privatūs, todėl viešas serveris negali tiesiogiai jiems pristatyti atsakymo. Arba VPN hostas išėjimo kelyje išverčia šaltinio adresą, arba aukštesnis įrenginys turi maršrutą atgal į telkinį.

sudo iptables -t nat -A POSTROUTING -s 10.90.0.0/24 -o eth0 -j MASQUERADE

Pridėkite lygiai vieną vertimo sluoksnį. Antras NAT aukščiau paslepia pirmąjį ir daro abu žurnalus beveik nenaudingus, kai vėliau kas nors sugenda. Jei aukštesnis maršrutizatorius jau nukreipia telkinį atgal, vertimo pridėjimas hoste yra perteklinis, o grįžimo kelias tada priklauso nuo to maršrutizatoriaus konfigūracijos, o ne nuo jūsų.

Debesų egzemplioriai prideda dar vienus vartus, nes kai kurios platformos meta paketus, kurių šaltinio adresas nėra egzemplioriaus, nebent ta patikra būtų sušvelninta. Šis nustatymas yra už svečio ribų ir jį lengva pamiršti, kai vietinė testavimo mašina veikia.

Įrodykite tai iš kliento, o ne iš serverio apvalkalo

Pradėkite nuo skaitmeninės IPv4 užklausos, tada vardo paieškos, tada programos. ping įrodo persiuntimą ir vertimą;jis nieko neįrodo apie vardų sprendimą, nes DNS parinktys įsigalioja tik tada, kai kliento integracija jas įdiegia.

curl -4 -m 5 http://198.51.100.10/
dig +short example.com

Užsirašykite pakeitimus ir atšaukimo veiksmą eigoje, kad išėjimo politika būtų galima grąžinti vienu veiksmu, kai testas nepavyksta. Šis receptas apima tik IPv4; atskirai suinventorizuokite IPv6, prieš teigdami, kad diegimas perduoda visą srautą.

Susiję straipsniai