Vienas įrenginys per maršrutizatoriaus VPN reikalauja trijų taisyklių, o ne jungiklio
Vienas įrenginys per maršrutizatoriaus VPN yra politikos maršrutizavimas, o ne varnelė: pažymėta lentelė, apribota NAT taisyklė ir DNS, IPv6 bei LAN keliai, kuriuos vadovai praleidžia.
Maršrutizatoriaus VPN nėra kiekvieno įrenginio jungiklio; jungiklis, kurio ieškote, yra spartusis kelias, už jus rašantis politikos maršrutizavimo taisykles. Kai tik vienas nešiojamasis kompiuteris, vienas prievadų diapazonas, vienas adresų sąrašas ar vienas LAN segmentas turi naudoti tunelį, o visa kita lieka WAN tinkle, jūs kuriate politikos maršrutą, o ne įjungiate funkciją. Darbas turi tris judančias dalis, ir kiekviena nepavyksta skirtingai: pažymėta lentelė be maršruto atrodo kaip tyla, netinkamoje grandinėje uždėtas žymėjimas atrodo taip, lyg nieko neįvyko, o trūkstama NAT taisyklė atrodo kaip tunelis, kuris prisijungia ir nieko neveža. Dar dvi dalys pasimeta, nes niekada nepasirodo mangle taisyklėje, ir tai yra DNS bei IPv6.
Mitas: tunelis yra kliento nustatymas
Maršrutizatoriaus pusėje esantis VPN klientas vieną grubų dalyką daro gerai: įdeda 0.0.0.0/0 į pagrindinę maršrutų lentelę ir nukreipia jį į tunelį. WireGuard tai išveda iš AllowedIPs, OpenVPN o iš serverio stumiamo redirect-gateway, ir abu keičia kelią kiekvienam už maršrutizatoriaus esančiam kompiuteriui. AllowedIPs susiaurinimas arba route-nopull pridėjimas keičia tai, ką klientas įdiegia. Tai nekeičia, kam ta instaliacija taikoma, nes klientas niekada nemato įrenginių. Jis mato tik paketus.
Pasirinkimas pagal šaltinį ar paskirties vietą yra maršrutizavimo sprendimas, todėl priklauso maršrutizatoriaus politikos sluoksniui: mangle taisyklė ir antra lentelė RouterOS, MARK ir ip rule OpenWrt arba DD-WRT, arba ugniasienės taisyklė, kurios šliuzas yra tunelis, pfSense. Netgate WireGuard kliento receptas yra tas, kurį reikia perskaityti prieš spėliojant, nes toje platformoje taisyklės šliuzas, sąsajos priskyrimas ir išeinančio NAT įrašas turi sutarti, kol vienas klientas nenaudoja tunelio.
Antroji mito pusė yra antrasis maršrutizatorius. Kitos dėžutės pirkimas arba įrenginio perkėlimas į svečių SSID dažnai veikia, ir priežastis ne aparatinė įranga: tai padeda įrenginį į jo paties potinklį, kuris duoda šaltinio selektorių, jau suprantamą programinės įrangos. Jei tą segmentą galite apibrėžti savo maršrutizatoriuje, papildoma dėžutė sprendžia problemą, kurios neturėjote.
Pirma dalis: tunelis, kuris nėra numatytasis maršrutas
RouterOS pridėkite klientą be numatytojo maršruto ir duokite tuneliui savo lentelę. Pirmasis maršrutas yra pažymėtasis numatytasis; antrasis yra gedimo pusė.
/ip route add dst-address=0.0.0.0/0 gateway=VPN_GATEWAY_IP routing-mark=vpn distance=1
/ip route add dst-address=0.0.0.0/0 type=unreachable routing-mark=vpn distance=2
Nepasiekiamas maršrutas yra priežastis, kodėl pažymėta lentelė nugali išimčių sąrašą pagrindinėje lentelėje. Kai tunelis nukrenta, pažymėti paketai iš karto gauna nepasiekiamumą, o ne tyliai grįžta į WAN, todėl gedimas pasirodo programos klaidos pranešime, o ne geolokacijos puslapyje, kurį tikrinate po valandos.
RouterOS 7 atskiria tai, ką 6.x laikė kartu: lentelę deklaruojate su /routing table add name=vpn fib, tada į ją nurodote vardu maršrute ir mangle taisyklėje. 6.x ištrauka, kuri rašo routing-mark neapibrėžusi lentelės, įkeliama švariai ir nieko neatitinka. Kitas klasikinis atvejis – dvi 0.0.0.0/1 pusės arba du numatytieji vienodu atstumu vienoje lentelėje: branduolys pasirenka vieną, o elgsena gali pasikeisti po perkrovimo.
Antra dalis: pažymėkite prieš maršruto paiešką
Selektorius nusprendžia, kurie paketai pateks į tą lentelę. RouterOS paprastai pradeda nuo adresų sąrašo paskirties politikai arba šaltinio adreso įrenginio politikai:
/ip firewall mangle add chain=prerouting src-address=192.168.88.50 action=mark-routing new-routing-mark=vpn
/ip firewall mangle add chain=prerouting dst-address-list=via-vpn action=mark-routing new-routing-mark=vpn
/ip firewall address-list add list=via-vpn address=203.0.113.10
Linux programinė įranga daro tą patį su netfilter žyme ir taisykle, kuri pažymėtus paketus nukreipia į jūsų užpildytą lentelę:
iptables -t mangle -A PREROUTING -p tcp --dport 27000:27050 -j MARK --set-mark 0x200
ip route add default dev tun0 table 100
ip rule add fwmark 0x200 table 100
Grandinė nėra stiliaus pasirinkimas. Kai paketas pasiekia FORWARD, maršruto paieška jau įvyko, todėl MARK arba DROP ten gali tik perrašyti arba išmesti. Žymė turi atsidurti PREROUTING perduodamam srautui ir OUTPUT srautui, kurį kuria pats maršrutizatorius, o ten gyvena maršrutizatoriaus DNS, NTP ir atnaujinimų patikros. Tas išvesties kelias yra įprasta priežastis, kodėl visiškai tuneliuota sąranka nuotėkio teste vis tiek atsako iš ISP resolverio.
Įrenginio politikai reikia atitikmens, kuris nenuslysta. Rezervuokite adresą DHCP arba priskirkite sąsają skirtam segmentui; adresas, kuris vėliau persikelia į kitą įrenginį, tyliai pritaiko tunelį netinkamam klientui. Tiltas kiekvienam SSID su savo potinkliu yra patvaresnė tos pačios idėjos versija, ir ji duoda vietą IPv6 taisyklėms.
Trečia dalis: NAT, DNS ir LAN išimtis
Srautas, išeinantis per tunelį, turi turėti šaltinio adresą, į kurį atsakys kita pusė. Apribokite vertimą tunelio sąsaja: out-interface=VPN_NAME RouterOS, -o tun0 Linux, atitinkamas išeinančio NAT įrašas pfSense. Masquerade taisyklė be to apribojimo perrašo srautą, kurį norėjote palikti, o simptomas yra tai, kad netuneliuotas įrenginys praranda viešąjį adresą.
LAN išimtis sukelia daugiau palaikymo temų nei pats tunelis. Jei pažymėtoje lentelėje yra tik numatytasis maršrutas, spausdintuvo ar NAS paskirties vieta iš pasirinkto įrenginio atitinka tą numatytąjį ir dingsta tunelyje. Pridėkite LAN maršrutą į tą pačią lentelę arba išskirkite vietinį potinklį selektoriuje; abu veikia, o išskyrimą lengviau išlaikyti teisingą vėliau pridedant VLAN.
DNS eina atskiru keliu. Užklausos, kurias maršrutizatorius persiunčia, yra kilusios iš maršrutizatoriaus ir seka OUTPUT, o ne persiųstą žymę, todėl visiškai tuneliuotas nešiojamasis kompiuteris vis tiek gali išspręsti vardus per ISP. Nukreipkite klientus į resolverį, pasiekiamą per tunelį, arba pažymėkite paties maršrutizatoriaus port-53 srautą, tada patikrinkite išspręstą adresą, o ne manykite, kad atsakymas keliavo kartu su žiniatinklio užklausa.
Kai taisyklė atitinka, bet programa vis tiek naudoja WAN
Paskirties sąrašai greitai sensta. Vardas išsprendžiamas į adresą, kurio sąraše nėra, todėl užklausa eina per WAN, nors kiekvienas testas sąraše esančiu adresu veikė. Atnaujinkite sąrašą iš to paties resolverio, kurį naudoja klientas, ir rinkitės šaltiniu pagrįstą selektorių, kai tikrai norite viso srauto iš vieno įrenginio.
IPv6 yra tyli apėjimo galimybė. Įrenginys turi antrą adresų šeimą su savo numatytuoju maršrutu ir savo taisyklių rinkiniu, o atitikimas tik IPv4 adresui yra pusė politikos. Taikykite tą patį selektorių ip6tables arba nftables atitikmeniui, arba sąmoningai išjunkite IPv6 tame segmente, o ne atsitiktinai.
Užmegzti ryšiai taip pat svarbūs. Conntrack įrašas, sukurtas prieš pakeitimą, toliau seka senu keliu, kol nepasibaigia, todėl naršyklė, kuri liko atidaryta redagavimo metu, atrodo lygiai kaip taisyklė, kuri niekada nebuvo pritaikyta. Atidarykite naują ryšį arba išvalykite būseną, prieš vertindami politiką.
Patikrinkite su dviem įrenginiais ir perkrovimu
Išbandykite įrenginį, kuris turėtų būti tunelyje, ir įrenginį, kuris neturėtų, ir palyginkite antrą šuolį, o ne greičio skaičių. Traceroute iš kiekvieno rodo tunelio šliuzą arba ISP šliuzą antrame šuolyje; jei abu atrodo vienodai, žymė ar lentelė nedaro to, ką sako taisyklė. Testui naudokite naujus ryšius.
Tada perkraukite. Paleidimo tvarka yra vieta, kur veikianti politika tampa sugedusi, nes klientas turi būti įjungtas prieš įdiegiant nepasiekiamą maršrutą, o išsaugota kopija, atkurianti seną taisyklių rinkinį, perrašys jūsų lentelę. Patikrinkite, ar kiekviena taisyklė yra išsaugotoje konfigūracijoje ir ar pažymėtasis numatytasis egzistuoja po įkrovimo, o ne tik po to, kai jį įvedėte.
Jei kažkas nepavyksta, pirmiausia nuimkite žymę ir pažiūrėkite, ar grįžta įprastas srautas, tada nuimkite lentelę. Tokia tvarka pasako, ar vejatės maršrutizavimo problemą, ar ugniasienės, ir palieka namams veikiantį spausdintuvą, kol baigiate darbą.