OpenVPN pull-filter atitinka daugiau nei numatytą maršrutą
pull-filter lygina jūsų tekstą kaip priešdėlį su stumiamomis parinktimis, todėl route pagauna ir route-gateway, ir route-ipv6. Pirmiausia patikrinkite veiksmažodžius, tada maršrutus.
Pridedate vieną eilutę, kad išsaugotumėte vietinį numatytąjį maršrutą, ir po to tunelis nebepasiekia vidinio DNS serverio. Ta eilutė buvo pull-filter ignore "route", o tai nereiškia "ignoruok šį maršrutą". Tai reiškia "išmesk kiekvieną stumiamą parinktį, kurios tekstas prasideda tais penkiais raides", o įprastame serveryje tai apima route-gateway, route-metric ir route-ipv6 kartu su pačiais maršrutais. Žemiau pateiktas kontrolinis sąrašas yra tai, ką pereinu prieš liesdamas profilį, kurį turi naudoti kažkas kitas.
Filtras veikia tik stumiamas parinktis
pull-filter veikia tik tas parinkčių eilutes, kurias serveris siunčia po tunelio nustatymo, ir nieko kito. Jūsų vietiniame faile įrašytos parinktys nėra jo veikiamos, kaip ir programų srautas. Jei tikėjotės sutrukdyti procesui naudotis tuneliu, tai visiškai netinkamas įrankis ir jokia filtrų kombinacija to nepadarys.
Ši apimtis naudinga, nes reiškia, kad galite palikti serverio konfigūraciją ramybėje ir vis tiek vietoje atsisakyti jos dalies. Tai ir apribojimas, kurį verta įrašyti į bilietą: filtras keičia, ką priima šis klientas, o ne ką siūlo serveris. Jis neturi jokios įtakos kitiems to paties profilio naudotojams. Jis taip pat neišlieka pereinant prie kito kliento, kuris šios parinkties neįgyvendina, o tai verta žinoti prieš statant ant jos darbo eigą.
Prieš rašydami šabloną patvirtinkite, ką serveris iš tikrųjų siunčia. Esant dideliam detalumui klientas išspausdina gautą stumiamų parinkčių eilutę, ir tai yra vienintelis sąžiningas šaltinis tikslaus teksto, su kuriuo lyginate:
sudo openvpn --config /etc/openvpn/corp.ovpn --verb 4
sudo grep -n 'pull-filter' /etc/openvpn/corp.ovpn
Skaitykite stumiamą eilutę kaip kableliais atskirtų parinkčių sąrašą ir atkreipkite dėmesį, kad parinkčių pavadinimai ir jų argumentai atskiriami tarpais. Jūsų filtro tekstas lyginamas su tuo srautu, todėl kitame žingsnyje tarpai tokie svarbūs.
Palyginimas yra priešdėlis, todėl tarpai sprendžia viską
Palyginimas yra eilutės priešdėlis, o ne išanalizuotas parinkties pavadinimas. Todėl "route" atitinka route-gateway 10.8.0.1, route-ipv6 2001:db8::/32 ir route-metric 100. Vienas tarpas pabaigoje susiaurina jį iki šeimos, kurią tikriausiai turėjote omenyje, o visas priešdėlis dar labiau susiaurina iki konkrečios paskirties.
| Filter text | What it actually matches | Typical outcome |
|---|---|---|
"route" | Every option beginning with those letters | Routes, gateway, metric and IPv6 routes all dropped |
"route " | Route entries only, not the hyphenated siblings | The routes go, the rest survives |
"route 10.60." | A single destination range | The narrowest rule, and the easiest to audit |
"dhcp-option DNS" | Pushed DNS settings | Resolver stays local, internal names stop resolving |
Paskutinė eilutė yra ta, kuri pagauna žmones dirbant su padalintu tuneliu. Turėti savo resolverį yra teisėtas pasirinkimas, ir tai reiškia, kad kiekvienas vidinis vardas dabar priklauso nuo resolverio, kuris nemato privačios zonos. Tai pasekmė, kurią reikia priimti sąmoningai, o ne šalutinis poveikis, kurį reikia atrasti gamyboje.
Priešdėlio atitikimas taip pat reiškia, kad taisyklė vėliau gali tyliai išsiplėsti. Kai serveris prideda naują parinktį, prasidedančią jūsų tekstu, jūsų filtras pradeda jai taikyti niekam neredaguojant jūsų profilio. Tai gedimo režimas, prieš kurį reikia projektuoti, o sušvelninimas yra suderinti kuo didesnę parinkties dalį, o ne kuo mažesnę.
Trys veiksmažodžiai, trys skirtingi rezultatai
accept, ignore ir reject nėra trys tos pačios idėjos rašybos. Jie skiriasi tuo, ką klientas daro su atitikimu, ir tuo, ar kas nors apie tai sužino.
ignore tyliai numeta atitinkančią parinktį, ko norite sąrankai, kurią sąmoningai pakeitėte. reject ją numeta ir priverčia klientą skųstis, ko norite, kai jos nebuvimas turi būti matomas žurnale, o ne atrastas vėliau. accept yra teigiama forma, naudojama kuriant leistinų sąrašą, o ne šalinant atskiras parinktis.
Kad ir kokį veiksmažodį naudotumėte, filtrai taikomi ta tvarka, kuria jie pasirodo, todėl dvi persidengiančios taisyklės duoda nuo tvarkos priklausantį rezultatą, kurį labai sunku peržiūrėti. Laikykite vieną taisyklę vienam tikslui ir kiekvienoje įrašykite konkretiausią tekstą. Jei reikia leistinų sąrašo, verčiau rinkitės kelias accept taisykles nei krūvą ignore taisyklių, kurios susideda į tą patį. Tada peržiūrėtojai gali skaityti failą iš viršaus į apačią ir numatyti rezultatą, ir tai vienintelis bandymas, kuris masteliuojasi.
Patikrinkite pritaikytą maršrutą ir resolverį, o ne profilį
Filtras, kuris faile atrodo teisingai, vis tiek gali palikti jus su tuneliu, kuris nieko naudingo nemaršrutizuoja. Patikrinkite poveikį veikiančioje sistemoje, kur stumiamos parinktys jau pritaikytos arba atmestos:
ip route show default
ip route show | grep -c 'proto static'
resolvectl status | grep -A4 'Link.*tun0'
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://intranet.example.internal/
Pirmosios dvi eilutės pasako ar atėjo stumiamas numatytasis maršrutas ir kiek statinių įrašų išliko. Užklausa resolveriui parodo, kurį serverį iš tikrųjų naudoja tunelio sąsaja, ir paprastai ten pasirodo DNS netikėtumas. Paskutinė eilutė atsako į vienintelį klausimą, kuris svarbus naudotojui.
Kol esate ten, išbandykite abi kryptis. Taisyklė, kuri palaiko jūsų vietinį internetą, bet tyliai sugriauna vidinį vardų sprendimą, praeina paviršutinišką patikrinimą ir nepavyksta per pirmą tikrą užduotį, todėl į tą patį bandymą įtraukite vieną vidinį išteklių ir vieną viešą svetainę.
Užrašykite išimtį ir jos savininką
Filtras yra operatoriaus dizaino išimtis, todėl užrašykite jį su priežastimi ir peržiūros tašku. "Nepaiso stumiamų maršrutų, kad išlaikytų vietinį numatytąjį" yra peržiūrima; plika eilutė profilyje ne, ir kitas žmogus ją ištrins arba išplės spėliodamas.
Versija čia taip pat svarbi. Atitikimo elgsena ir tiksli priimtina sintaksė buvo tobulinamos per OpenVPN 2.4, 2.5 ir 2.6, todėl patvirtinkite šabloną pagal diegiamos versijos vadovą, o ne pagal forumo įrašą apie senesnę versiją. OpenVPN 2.6 vadovas dokumentuoja šią parinktį ir jos atitikimo taisyklę.
Galiausiai, suderinkite išimtį su tuo, kas valdo serverį. Kliento pusės filtras, prieštaraujantis sąmoningai serverio politikai, yra palaikymo incidentas, laukiantis kito audito, ir jį sutvarkyti prieš išsiunčiant profilį yra daug pigiau nei po to, kai kas nors pastebi, kad maršrutų trūksta.