Drejto një nënrrjet LAN përmes OpenVPN dhe mbaj rrugën e parazgjedhur
Mbaj rrugën e parazgjedhur të LAN-it ndërsa një nënrrjet kalon nëpër tunel. Krahaso një tabelë politikash me ndryshimet në tabelën kryesore, pastaj zgjidh NAT ose një rrugë në anën e serverit.
Pajisjet që bëjnë rrugëtim për një LAN dhe njëkohësisht thirrin një VPN përfundojnë në të njëjtin debat me veten: tuneli dëshiron të zotërojë rrugën e parazgjedhur, dhe LAN-i ka nevojë ta marrë atë mbrapsht. Kur OpenVPN lidhet, ai mund të instalojë një rrugë të parazgjedhur përmes tunelit ose një palë gjysmë-rruga të parazgjedhura, gjë që është e saktë për një laptop dhe e gabuar për një portë, fqinjët e së cilës presin përgjigje nga adresa e saj LAN. Përgjigjja nuk është të anashkalosh VPN-në. Përgjigjja është t’u japësh dy vendimeve tabela të ndryshme.
Një rrugë e parazgjedhur, dy pronarë
Trafiku i përcjellë dhe trafiku i krijuar lokalisht nuk duhet të ndjekin të njëjtën rrugë. Klientët e LAN-it kanë nevojë për tunelin vetëm për destinacionet që zgjedh ti, ndërsa sesionet e menaxhimit të vetë hostit dhe përgjigjet e tij ndaj atyre klientëve kanë nevojë për rrugën e parazgjedhur të LAN-it. Përzierja e të dyjave në tabelën kryesore imponon një përgjigje të vetme për dy pyetje të ndryshme.
OpenVPN ka një çelës pikërisht për këtë. route-noexec e pengon klientin ta prekë fare tabelën kryesore, dhe vlerat që do të përdorte eksportohen në një skript route-up si route_vpn_gateway, dev dhe adresat e ndërfaqes. Pastaj ti vendos cila tabelë merr cilën rrugë, në kod që mund ta lexosh më vonë.
Tabela e politikave kundrejt rishkrimit të kryesores
| Approach | What it buys | What it costs |
|---|---|---|
| Separate table plus source rule | LAN traffic and host traffic keep independent defaults | Every lookup now depends on rule order |
| Editing the main table only | Fewer moving parts on a single-purpose host | One mistake takes the gateway offline entirely |
| Two half-default routes | Works for a full-tunnel client | Ambiguous on a host that must answer on its LAN address |
Tabela e veçantë është opsioni i vetëm që shkallëzohet përtej një nënrrjeti. Emërtoje një herë, pastaj referoju me emër që askush të mos ketë nevojë të mbajë mend një numër:
echo "10 vpn" >> /etc/iproute2/rt_tables
ip rule add from 192.168.50.0/24 table vpn
ip route add default via 10.8.0.1 dev tun0 table vpnAdresat këtu janë vendmbajtëse. Zëvendëso prefiksin LAN, portën e tunelit dhe emrin e pajisjes nga vendosja jote para se të ekzekutosh çdo gjë.
Rregulli duhet të përputhet edhe me hostin
Një rregull që përputhet vetëm me prefiksin LAN mbulon paketat e përcjella. Nuk mbulon trafikun që portja vetë e krijon, as përgjigjet që i dërgon mbrapsht klientëve të LAN-it, të cilat mbajnë adresën LAN të portës si burim. Ato kërkime bien në main dhe ende mund të dalin përmes tunelit.
Shto një rregull të dytë për adresën LAN të vetë portës, ose zgjero rregullin e parë në një bashkësi që përfshin të dyja. Rendi ka rëndësi: vendos rregullin më specifik i pari dhe verifiko rezultatin me një kërkim që e emërton burimin në mënyrë eksplicite.
ip route get 203.0.113.9 from 192.168.50.1Nëse kjo raporton pajisjen e tunelit për një destinacion që duhet të mbetet lokal, bashkësia e rregullave është e gabuar pavarësisht nga ajo që përmban tabela.
NAT ose një rrugë në anën tjetër
Serveri VPN e njeh nënrrjetin e tunelit dhe asgjë tjetër. Paketat që mbërrijnë me adresë burimi LAN nuk kanë rrugë kthimi nëse dikush nuk e siguron atë, dhe ka saktësisht dy mënyra për ta siguruar. Shtimi i një rrugë për prefiksin LAN në server e mban burimin origjinal të dukshëm nga njëri skaj në tjetrin, gjë që zakonisht e dëshiron një dizajn i audituar. Maskimi në portë e rishkruan burimin në adresën e tunelit dhe nuk kërkon asnjë bashkëpunim nga serveri.
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o tun0 -j MASQUERADEZgjidh NAT kur nuk e kontrollon serverin dhe nuk mund të shtosh rrugë atje. Zgjidh rrugën në anën e serverit kur kanë rëndësi regjistrat, kontrolli i aksesit ose simetria e rrugës së kthimit, sepse maskimi e fshin adresën origjinale nga gjithçka që regjistron ana tjetër.
Në çdo rast, përcjellja duhet të jetë e aktivizuar, dhe filtrimi i rreptë i rrugës së kthimit mund ta hedhë poshtë përgjigjen kur main nuk do ta kishte zgjedhur tunelin për atë burim. Kontrollo vlerën efektive përpara se të fajësosh tunelin.
Bëj që ndarja t’i mbijetojë një rilidhjeje
Rregullat dhe rrugët e shtuara me dorë zhduken kur ndërfaqja rikrijohet, dhe një zë i vjetër në tabelë mund ta mbijetojë sesionin që e arsyetonte. Vendos rregullin e tabelës, rrugën e tunelit dhe zërin e maskimit në skriptin route-up e klientit, dhe zbraz tabelën në krye të skriptit që një portë e vjetër të mos mund të mbijetojë në sesionin e ri.
Verifiko nga të dy skajet: një kërkim në portë me burimin LAN, dhe një kërkesë e vërtetë nga një klient LAN drejt një destinacioni që duhet të kalojë nëpër tunel. Një rrugë që ekziston por nuk zgjidhet kurrë sillet saktësisht si asnjë rrugë, derisa të lexosh numëruesit.