Lisad ühe rea, et hoida oma kohalik vaikimisi marsruut, ja pärast seda ei jõua tunnel enam sisemise DNS-serverini. Rida oli pull-filter ignore "route", mis ei tähenda "eira seda marsruuti". See tähendab "viska kõrvale iga tõugatud valik, mille tekst algab nende viie tähega", ja tavalisel serveril hõlmab see route-gateway, route-metric ja route-ipv6 koos marsruutide endiga. Allpool olev kontrollnimekiri on see, mida ma jooksutan enne profiili puudutamist, mida peab kasutama keegi teine.

Filter mõjutab ainult tõugatud valikuid

pull-filter mõjub ainult neile valikuridadele, mille server pärast tunneli loomist saadab, ja mitte millelegi muule. Sinu kohalikku faili kirjutatud valikud ei ole selle poolt mõjutatud, samuti mitte rakenduste liiklus. Kui lootsid takistada protsessil tunnelit kasutada, on see täiesti vale tööriist ja ükski filtrite kombinatsioon ei tee seda.

See ulatus on kasulik, sest see tähendab, et võid jätta serveri konfiguratsiooni puutumata ja siiski osa sellest kohapeal tagasi lükata. See on ka piirang, mida tasub piletile märkida: filter muudab seda, mida see klient aktsepteerib, mitte seda, mida server pakub. Sellel ei ole mõju sama profiili teistele kasutajatele. See ei jää püsima ka üleminekul teisele kliendile, mis seda valikut ei rakenda, mida tasub teada enne, kui sellele töövoo ehitad.

Enne mustri kirjutamist veendu, mida server tegelikult saadab. Kõrge detailsuse korral prindib klient saadud tõugatud valikute stringi, ja see on ainus aus allikas täpse teksti jaoks, millega võrdled:

sudo openvpn --config /etc/openvpn/corp.ovpn --verb 4
sudo grep -n 'pull-filter' /etc/openvpn/corp.ovpn

Loe tõugatud rida valikute loendina, mis on eraldatud komadega, ja pane tähele, et valikute nimed ja nende argumendid on eraldatud tühikutega. Sinu filtri teksti võrreldakse selle vooga, seepärast on tühikud järgmises sammus nii olulised.

Sobivus on eesliide, seega on tühikud kogu mäng

Võrdlus on stringi eesliide, mitte parsitud valiku nimi. Seetõttu sobib "route" nii route-gateway 10.8.0.1, route-ipv6 2001:db8::/32 kui ka route-metric 100-ga. Üks tühik lõpus kitsendab selle perekonnani, mida tõenäoliselt mõtlesid, ja täielik eesliide kitsendab selle veel konkreetse sihtkohani.

Filter textWhat it actually matchesTypical outcome
"route"Every option beginning with those lettersRoutes, gateway, metric and IPv6 routes all dropped
"route "Route entries only, not the hyphenated siblingsThe routes go, the rest survives
"route 10.60."A single destination rangeThe narrowest rule, and the easiest to audit
"dhcp-option DNS"Pushed DNS settingsResolver stays local, internal names stop resolving

Viimane rida on see, mis inimesi split-tunneli töö käigus tabab. Oma resolveri hoidmine on legitiimne valik ja see tähendab, et iga sisemine nimi sõltub nüüd resolverist, mis ei näe privaatset tsooni. See on tagajärg, mida võetakse teadlikult vastu, mitte kõrvalmõju, mida avastatakse toodangus.

Eesliitega sobivus tähendab ka seda, et reegel võib hiljem vaikselt laieneda. Kui server lisab uue valiku, mis algab sinu tekstiga, hakkab sinu filter sellele rakenduma ilma, et keegi sinu profiili muudaks. See on tõrkerežiim, mille vastu tuleb projekteerida, ja leevendus on sobitada nii palju valikust kui võimalik, mitte nii vähe kui võimalik.

Kolm tegusõna, kolm erinevat tulemust

accept, ignore ja reject ei ole sama idee kolm kirjaviisi. Need erinevad selle poolest, mida klient sobivusega teeb, ja selle poolest, kas keegi sellest teada saab.

ignore viskab sobiva valiku vaikselt kõrvale, mida soovid seade puhul, mille oled teadlikult asendanud. reject viskab selle kõrvale ja paneb kliendi kaeblema, mida soovid siis, kui selle puudumine peaks olema logis nähtav, mitte hiljem avastatav. accept on positiivne vorm, mida kasutatakse lubatud loendi koostamisel, mitte üksikute valikute eemaldamisel.

Ükskõik millist tegusõna kasutad, filtreid rakendatakse nende ilmumise järjekorras, seega kaks kattuvat reeglit annavad järjekorrast sõltuva tulemuse, mida on väga raske üle vaadata. Hoia üks reegel ühe kavatsuse kohta ja pane igasse kõige konkreetsem tekst. Kui vajad lubatud loendit, eelista mõnda accept reeglit hunnikule ignore reeglitele, mis annavad sama tulemuse. Siis saavad ülevaatajad faili ülalt alla lugeda ja tulemust ennustada, ja see on ainus test, mis skaleerub.

Kontrolli rakendatud marsruuti ja resolverit, mitte profiili

Failis õige näiv filter võib sind ikkagi jätta tunneliga, mis ei marsruudi midagi kasulikku. Kontrolli mõju töötavas süsteemis, kus tõugatud valikud on juba rakendatud või kõrvale visatud:

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/

Esimesed kaks rida ütlevad sulle kas tõugatud vaikimisi marsruut saabus ja kui palju staatilisi kirjeid püsis. Resolveri päring näitab, millist serverit tunneli liides tegelikult kasutab, ja tavaliselt just seal ilmneb DNS-i üllatus. Viimane rida vastab ainsale küsimusele, mis kasutaja jaoks loeb.

Testi mõlemat suunda, kui juba kohal oled. Reegel, mis hoiab sinu kohaliku interneti töös, kuid rikub vaikselt sisemise nimelahenduse, läbib pealiskaudse kontrolli ja kukub läbi esimeses tõelises ülesandes, seega lisa samasse testi üks sisemine ressurss ja üks avalik veebisait.

Kirjenda erand ja kes seda omab

Filter on operaatori disaini erand, seega kirjuta see üles põhjuse ja ülevaatamispunktiga. "Eirab tõugatud marsruute, et hoida kohalikku vaikimisi" on ülevaatatav; paljas rida profiilis ei ole, ja järgmine inimene kustutab selle või laiendab seda oletuste põhjal.

Versioon loeb ka siin. Sobivuskäitumist ja täpset aktsepteeritud süntaksit on täiustatud läbi OpenVPN 2.4, 2.5 ja 2.6, seega kinnita muster selle buildi juhendi järgi, mida tarnid, mitte vanema väljaande foorumipostituse järgi. OpenVPN 2.6 juhend dokumenteerib selle valiku ja selle sobivusreegli.

Lõpuks lepi erand kokku sellega, kes serverit haldab. Kliendipoolne filter, mis on vastuolus teadliku serveripoliitikaga, on tugijuhtum, mis ootab järgmist auditit, ja seda on palju odavam lahendada enne profiili tarnimist kui pärast seda, kui keegi märkab, et marsruudid on puudu.

Seotud artiklid