Įdėjote route-nopull į kliento profilį, kad tunelis neprarytų jūsų numatytojo maršruto, ir dabar biuro potinklis nepasiekiamas, nors klientas vis dar sako esąs prisijungęs. Abu pastebėjimai teisingi, ir niekas nesugedo. Ši vėliavėlė liepia klientui praleisti serverio stumiamus maršrutus ir DHCP įrašus, o tai siauresnė instrukcija, nei dauguma tikisi ją pridėdami. Lieka veikiantis tunelis, neturintis nuomonės, kurios paskirties vietos turėtų jį naudoti.

Šis trūkumas ir yra visas sprendimas, apie kurį šis straipsnis. Arba serveris aprašo tinklą, arba klientas, o vėliavėlė perduoda šį darbą klientui nieko už jus nepadarydama.

Ką vėliavėlė išjungia jungiantis

Traukiantis OpenVPN klientas paprastai po autentifikavimo gauna iš serverio paketą: maršrutus, numatytojo šliuzo peradresavimą, DNS serverius ir keletą derinimo direktyvų. Kai route-nopull galioja, klientas vis dar priima sesiją, vis dar tikrina sertifikatus, vis dar derasi dėl šifrų ir keepalive ir vis dar pakelia sąsają. Ką jis numeta, tai stumiamų route eilučių ir stumiamų dhcp-option eilučių taikymas, įskaitant DNS.

Sumaištis kyla iš žalios indikatoriaus lemputės prie negyvos programos. Tunelis egzistuoja; paskirties vietų susiejimas su tuo tuneliu ne. Niekas kliento būsenos skydelyje neskiria „prisijungta ir maršrutizuojama“ nuo „prisijungta ir neveikia“, nes tunelio požiūriu abi yra ta pati būsena.

Kodėl gyvas tunelis vis tiek gali nieko nemaršrutizuoti

Sąsaja atsiranda su savo adresu, o taškas-taškas ryšyje dažnai nėra nieko konkretesnio už maršrutą į mazgą iki partnerio. Privatus potinklis tampa pasiekiamas tik kai koks nors maršrutas su teisingu priešdėliu rodo į šią sąsają, o išjungus stūmimą tas maršrutas niekada neatvyksta. Atsisiųstas profilis paprastai taip pat negali padėti, nes buvo parašytas darant prielaidą, kad serveris pateiks būtent šią informaciją. Todėl sąsaja gali atrodyti sveika, kol potinklis lieka tamsus.

Todėl profilio skaitymas įrodo labai mažai. Skaitykite veikiančią būseną prisijungtoje mašinoje:

ip addr show tun0
ip route show dev tun0
ip route get 10.20.5.10

Adresas be potinklio maršruto antroje komandoje yra šios problemos parašas. Trečioji komanda atsako į klausimą, kuris iš tikrųjų rūpi vartotojams, nes ji nurodo sąsają, kurią branduolys pasirinktų konkrečiai paskirčiai, o ne sąrašą, kurį tikėjotės naudosiant. Jei ji atsako per jūsų fizinę jungtį, tunelio kelyje visai nėra.

Vardų sprendimas nepavyksta dėl susijusios priežasties, o ne atskiros. Stumiami dhcp-option DNS įrašai praleidžiami ta pačia vėliavėle, todėl užklausos apie vidinius mazgus eina į tą sprendėją, kurį suteikė vietinis tinklas. Tas sprendėjas neturi biurui skirtos zonos, todėl užklausa nepavyksta arba grąžina viešą atsakymą, ir gedimas atrodo kaip serverio problema, nors tai kliento konfigūracijos problema. Adreso patikrinimas prieš vardą ir yra tai, kas atskiria abu.

Pasirinkimas tarp vėliavėlės ir priešdėlio filtro

Abu variantai sprendžia skirtingas tos pačios skundo formas, o blogas pasirinkimas sukuria „prisijungta, bet be naudos“ būseną. Vienas visiškai pakeičia stumiamą politiką, kitas ją redaguoja pagal priešdėlį. Lentelė pateikia trumpą versiją, o pastraipa po jos apima dalį, kuri nustebina žmones.

SettingWhat the client keepsReasonable when
no optionevery pushed route and DHCP entrythe server's view of the network is correct
route-nopullthe session, none of the pushed routing or DNSyou will write the full local policy yourself
pull-filtereverything except lines matching your prefixesthe push is nearly right and one or two lines are wrong

pull-filter yra trijų veiksmažodžių priešdėlių derinimo įrankis, todėl jis gali priimti eilučių šeimą, jas tyliai ignoruoti arba visiškai atmesti ryšį, kai pasirodo priešdėlis. Būtent pastaroji elgsena verta dėmesio: atmetimo taisyklė politinį nesutarimą paverčia nepavykusiu rankos paspaudimu, o ne tyliu praleidimu. OpenVPN 2.6 vadove išvardyti priimami priešdėliai ir tiksli kiekvieno veiksmažodžio reikšmė.

Dažnas vidurinis kelias yra atmesti tik redirect-gateway ir leisti biuro maršrutams bei DNS atvykti kaip numatyta. Tai palaiko stūmimą veikiantį toms dalims, kurias serveris supranta geriau nei jūs, ir kartu užkerta kelią tai vienai eilutei, kuri perimtų jūsų numatytąjį maršrutą.

Maršrutų ir sprendėjo pridėjimas rankiniu būdu

Jei paliekate vėliavėlę, profilis turi pasakyti tai, ką būtų pasakęs serveris. Kliento pusės route direktyvos taikomos po to, kai ryšys užmegztas, todėl jos veikia šalia vėliavėlės, o ne jos blokuojamos. Dėkite jas į profilį, o ne į interaktyvią komandinę eilutę, kitaip kitas prisijungimas neatkurs veikiančios būsenos.

route-nopull
route 10.20.0.0 255.255.0.0
dhcp-option DNS 10.20.0.53

DNS eilutė yra nepatogioje padėtyje: tai kliento pusės direktyva, tačiau kai kurie klientai ją taiko tik per platformos DNS integraciją, kuri gali ją perrašyti, kai pasikeičia ryšys. systemd pagrindinėje mašinoje sprendėją nustatyti tiesiogiai tunelio sąsajoje yra labiau nuspėjama nei tikėtis, kad klientas laimės prioritetų varžybas:

resolvectl dns tun0 10.20.0.53
resolvectl domain tun0 ~corp.example.com

Maršrutizavimo domenas svarbus tiek pat, kiek adresas. Be jo užklausos apie viešus vardus taip pat gali būti siunčiamos vidiniam sprendėjui, ir bet kuris vidinis sprendėjas, atsisakantis rekursijos, sulaužys naršymą, palikdamas privatų rajoną veikiantį. Su juo tik vardai po tuo galūne nukreipiami tunelio sprendėjui, o visa kita eina fizine jungtimi.

Rezultato patikrinimas: adresas, vardas ir išorinis kelias

Trys testai atskiria galimus gedimus. Gaukite privatų adresą pagal IP, tada tą patį mazgą pagal vardą, tada įprastą viešą svetainę. Veikiantis IP su nepavykstančiu vardu nurodo sprendėją; nepavykstantis IP su veikiančiu vardu nurodo maršrutizavimą; jei nepavyksta abu, paprastai tunelio kelyje nėra.

Tada žiūrėkite į išorę, o ne į vidų. Tunelio galinio taško maršrutas turi išgyventi pokytį, o bet koks blokuojantis gedimas turi būti apribotas tuneliu, neužgriebiant galinio taško. Klientas, kuris ir toliau naršo tuneliui nukritus, yra politikos, o ne maršrutizavimo problema, ir ji nepasireikš nė viename iš trijų aukščiau pateiktų testų.

Įrašykite galutinį sąrašą į profilio dokumentaciją: maršrutus, sprendėją, domenus ir priežastį, kodėl kiekvienas egzistuoja. Prisijungimas, kuris atkuria tą pačią lentelę, yra vienintelis įrodymas, kad vietinė politika išsami. Jei programos vis dar nepavyksta, kai tunelis pakeltas ir visi trys testai praeiti, kita vieta, kur žiūrėti, yra prisijungta-bet-neprisijungusi problemų klasė, o ne jau patikrinti sertifikatai.

Susiję straipsniai