Tuneli i plotë i OpenVPN ndërpret sesionin tuaj SSH: rregullo rrugën e kthimit
Rruga e paracaktuar i dërgon përgjigjet SSH në tunel. Fikso peer-in, filtro redirect-gateway ose ruto sipas burimit para se të humbasësh makinën.
Aktivizimi i një klienti OpenVPN me tunel të plotë në një makinë që e arrin përmes SSH mund ta ndërpresë sesionin brenda një sekonde, dhe makina nuk po bën asgjë të gabuar. Tuneli nuk ndryshon si paketat arrijnë në server; ndryshon si dalin përgjigjet. Sapo rruga e paracaktuar tregon drejt tun0, një përgjigje për klientin tënd SSH hyn në rrjetin e ofruesit, i cili nuk ka rrugë kthimi drejt adresës tënde. Lidhja ngec, përpjekja tjetër skadon, dhe daemoni vazhdon të dëgjojë në portën 22 gjatë gjithë kohës.
Lexo tabelën e rutimit para se të lexosh logun e VPN. Logu do të thotë që tuneli u ngrit, dhe ka të drejtë. Pyetja është se cilës ndërfaqe i dorëzohet çdo përgjigje, dhe kjo është një kërkim për çdo paketë në një tabelë që tuneli sapo rishkruajti.
Pse përgjigja del nga dera e gabuar
Paketat hyrëse ende mbërrijnë në ndërfaqen fizike, sepse një klient VPN nuk mund të ndryshojë si interneti arrin adresën publike të serverit tënd. Përgjigjet janë një vendim i veçantë: për çdo paketë bërthama kërkon destinacionin, dhe pas --redirect-gateway hyrja e paracaktuar thotë tunel. Dalja e ofruesit sheh një destinacion që nuk e shërben dhe e hedh paketën.
Mbrojtja e vetë OpenVPN mbulon saktësisht një destinacion. Manuali i 2.6 e përshkruan --redirect-gateway si një sekuencë: shton një rrugë hosti për peer-in VPN përmes portës që përdorej para tunelit, që trafiku i kriptuar të mos mund të kthehet brenda vetes, dhe pastaj zëvendëson rrugën e paracaktuar. Ajo rrugë hosti është vetëm për peer-in. Klienti yt SSH është thjesht një adresë tjetër interneti dhe nuk merr asnjë përjashtim.
Një gabim prefiksi ia vlen të përjashtohet herët. ip route add -net 0.0.0.0 gw 10.8.0.1 dev tun0 pa gjatësi përputhet me adresën e vetme 0.0.0.0, jo me internetin; duhet të jetë 0.0.0.0/0. Dhe nëse marrja e rrugës së paracaktuar prish transportin e vetë tunelit, shto pikën fundore si rrugë hosti përmes ndërfaqes fizike, duke përdorur adresën e vërtetë të ofruesit.
Fikso adresën e klientit tënd SSH për një rregullim të menjëhershëm
Rregullimi më i shpejtë është një rrugë hosti për adresën e klientit tënd përmes portës që serveri përdorte përpara se të ekzistonte tuneli. Nga ana jote, gjej adresën që serveri do të shohë, pastaj lexo tabelën e serverit që të njohësh portën e vjetër:
curl -s https://ifconfig.co
ip route
Në server, shto përjashtimin përpara se klienti të nisë. Adresat këtu janë vendmbajtëse; forma është ajo që ka rëndësi:
sudo ip route add 80.128.240.55 via 192.168.178.1
Ky është rregullimi i përdorur në rastin e raportuar, dhe funksionon menjëherë. Është gjithashtu i brishtë në dy mënyra të parashikueshme: rruga zhduket në rinisje, dhe bëhet e gabuar në momentin që ISP-ja të jep një adresë tjetër. Trajtoje si masë urgjente dhe bëje të qëndrueshme me qëllim, përmes një njësie rrjeti ose një grep-i të dispeçerit, ose prano që është e përkohshme dhe shkruaj rrugën e rikuperimit.
Mos lejo klientin të marrë rrugën e paracaktuar
Opsioni më i pastër është të mos lejosh tunelin të zëvendësojë fare rrugën e paracaktuar. route-nopull, i përdorur me --client ose --pull, pranon opsionet e shtyra përveç rrugëve, block-outside-dns dhe opsioneve të stilit DHCP si serverat DNS, kështu që shton vetëm prefikset që të duhen. Një mjet më i ngushtë është një filtër tërheqjeje, që hedh një direktivë problematike dhe mban pjesën tjetër:
route-nopull
pull-filter ignore "redirect-gateway"
Përdor njërën ose tjetrën, jo të dyja, dhe ji i qartë se çfarë ndryshon. Pa rrugë të paracaktuar përmes tunelit, serveri nuk shfleton më internetin përmes ofruesit; arrin vetëm atë që ke rrutuar në mënyrë eksplicite. Nëse tuneli i plotë ishte i gjithë qëllimi i konfigurimit, ky është levë e gabuar dhe rruga e hostit më sipër është e duhura.
Ndaj rrugën e kthimit sipas burimit ose sipas lidhjes
Kur adresa hyrëse është e qëndrueshme, një rregull burimi i mban përgjigjet lokale pa prekur rrugët e vetë tunelit. Jepi adresës së ndërfaqes fizike tabelën e saj me prefiksin LAN dhe parazgjedhjen fizike, pastaj zgjidh atë tabelë për trafikun që vjen prej saj:
ip rule add from 192.168.1.11 table 128
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1
Kjo funksionon sepse përgjigjet për një lidhje SSH hyrëse dalin nga adresa me të cilën u lidh klienti. Rasti i raportuar ku çdo shërbim hyrës duhej të vazhdonte të punonte përdori saktësisht këtë formë. Kur adresa hyrëse lëkundet ose rruga është dinamike, shëno lidhjen: vendos një shenjë conntrack në paketën e parë që vjen nga ndërfaqja fizike, kopjoje në paketat e përgjigjes në OUTPUT, dhe ruto paketat e shënuara përmes një tabele që tregon drejt portës fizike.
iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
ip route add default via 192.168.1.1 dev eth0 table 3412
ip rule add fwmark 4321 table 3412
Mbaj të ndara shenjën e lidhjes, shenjën e murit të zjarrit dhe numrin e tabelës gjatë testimit. Ripërdorimi i një numri për dy role prodhon një rregull që duket i saktë dhe godet paketat e gabuara. Hyrja e paracaktuar e tabelës kërkon gjithashtu via me portën LAN në një lidhje Ethernet të zakonshme; dev eth0 i zhveshur funksionon vetëm kur ndërfaqja është pikë-për-pikë ose kërcimi tjetër zgjidhet në një mënyrë tjetër. Host-i Jessie i raportuar ndodhej në një lidhje ku forma e zhveshur funksiononte, dhe ky nuk është rregull shpërndarjeje për ta kopjuar.
Verifiko pa u mbyllur jashtë
Mos testo duke u shkëputur. Mbaj sesionin e parë hapur, ngri tunelin dhe pyet bërthamën se cilën rrugë do të merrte adresa jote:
ip route get 80.128.240.55
Përgjigja duhet të përmendë ndërfaqen fizike dhe portën e vjetër, jo tunelin. Pastaj hap një lidhje të dytë SSH; ky është testi i vërtetë, sepse sesioni i vjetër mund të mbijetojë në një gjendje që një lidhje e re nuk mund ta riprodhojë. Nëse e dyta ngec ndërsa e para ende përgjigjet, rregulli nuk u përputh kurrë me trafikun që ka rëndësi, dhe shenjat ose adresa e burimit janë vendi ku duhet të shikosh.
Mbaj një konsolë jashtë brezit në dispozicion gjatë gjithë ushtrimit. Një server që rruga e vetme e hyrjes është tuneli që sapo theve nuk mund të rregullohet përmes atij tuneli, dhe kthimi pas është më i lehtë kur ke shënuar numrat e tabelave dhe prefikset që shtove.