Pingai į serverio tunelio adresą pavyksta, paties kliento maršrutų lentelė atrodo teisinga, o LAN už to kliento vis tiek nepasiekiamas. Kliento maršrutų lentelė atrodo teisinga, serveryje yra į tunelį nukreiptas maršrutas, o paketai vis tiek dingsta. Tai klasikinis layer-3 tunelio simptomas, kuris nežino, kad vienas iš jo klientų yra ir tinklų sietuvas.

tun sąsaja neturi kito šuolio kiekvienam klientui. Branduolys mato vieną sąsają su daug partnerių, todėl sprendimas, kuris klientas turi gauti paketą nuotoliniam LAN, turi būti priimtas OpenVPN proceso viduje. Šis sprendimas konfigūruojamas iroute, o be jo paketas neturi kur eiti.

Serveris maršrutizuoja pagal klientą, o ne pagal sąsają

Kai serveriui reikia siųsti paketą į kliento tunelio adresą, atsakymas vienareikšmis: adresas priklauso to kliento sesijai. Kai paskirties vieta yra visas potinklis už to kliento, adresas nepriklauso niekam, ką serveris pažįsta, o branduolio maršrutas į tunelį tik sako "per šią sąsają", nenurodydamas kurio partnerio.

OpenVPN tai sprendžia vidine maršrutų lentele, kuri paskirties prefiksą susieja su konkrečiu klientu. Ši lentelė sudaroma iš iroute įrašų, todėl paprasto maršruto serverio mazge nepakanka. Branduolio maršrutas atneša paketą į tunelio sąsają; vidinis susiejimas nusprendžia, kuri sesija jį gaus. Todėl taisymas niekada neatsiranda branduolio maršrutų išvestyje.

Jei susiejimo nėra, paketas pasiekia serverį, atitinka tunelio maršrutą ir išmetamas, nes joks klientas nereikalauja paskirties vietos. Niekas neužregistruoja švarios klaidos, todėl gedimas atrodo kaip tyli juodoji skylė, o ne maršrutizavimo kilpa.

Rašyti iroute įrašą, kuris įvardija klientą

iroute gyvena klientui būdingame konfigūracijos faile, o ne pagrindinėje serverio konfigūracijoje. Nukreipkite serverį į katalogą su parinktimi client-config-dir, tada sukurkite failą, kurio pavadinimas yra bendrasis kliento sertifikato vardas, ir įdėkite prefiksą į jį.

Filialui, kurio LAN yra 10.20.0.0/24, o sertifikato bendrasis vardas yra branch-router, to kelio failą sudaro eilutė, pavyzdžiui, iroute 10.20.0.0 255.255.255.0. Pagrindinei konfigūracijai reikia tik katalogo parinkties; prefiksas gyvena pas klientą.

Bendrasis vardas yra trapi dalis. Sertifikatas, išduotas su kitu subject, arba diegimas, kuris autentifikuoja naudotojus pagal naudotojo vardą, kai failas pavadintas pagal sertifikatą, sukuria failą, kuris niekada nėra skaitomas. Patikrinkite vardą, kurį serveris tikrai praneša sesijai, ir apsvarstykite parinktį, dėl kurios nesutampantis klientas nepavyksta, o ne tyliai prisijungia be savo maršrutų. Failo pervadinimas, kad atitiktų sertifikatą, yra penkių minučių pataisa, kuri apsaugo nuo labai ilgo vakaro.

Vienas klientas gali turėti kelis prefiksus. Pridėkite po vieną iroute eilutę kiekvienam tinklui ir laikykite sąrašą prie kitų to kliento nustatymų, kad susiejimas išliktų patikrinamas.

Grąžinimo kelio kūrimas abiem kryptimis

Paketų pristatymas į nuotolinį LAN yra pusė darbo. Klientas taip pat turi siųsti to LAN srautą į tunelį, o tai paprastai daroma stumiant maršrutą klientui: eilutė, pavyzdžiui, push "route 10.8.0.0 255.255.255.0", pasako kiekvienam klientui, kaip pasiekti serverio pusės tinklą. Filialui atitinkamas maršrutas nukreipia į tunelį viskam, ką jis turi pasiekti serverio pusėje.

Grąžinimo krypčiai reikia savininko tolimoje pusėje. Toje pusėje kažkas turi žinoti kelią atgal: statinis maršrutas LAN maršrutizatoriuje, nukreipiantis VPN telkinį į serverį, arba adresų vertimas serveryje prieš srautui patenkant į LAN. Statinis maršrutas išlaiko originalius adresus matomus žurnaluose ir prieigos taisyklėse, bet reikalauja LAN savininko bendradarbiavimo; vertimas yra savarankiškas, bet slepia, kas iš tikrųjų prisijungė.

Persiuntimas turi būti įjungtas serverio mazge. Be jo branduolys priima paketą iš tunelio ir atsisako perduoti jį į LAN sąsają, o tai kliento požiūriu atrodo lygiai taip pat, kaip trūkstamas iroute.

Pasiekiamumo tikrinimas tinkamais zondais

Testuokite sluoksniais, o ne pinginkite tolimą galą ir spėliokite. Iš serverio patikrinkite, ar prefikso vidinis susiejimas egzistuoja ir ar branduolio maršrutas nukreiptas į tunelį. Iš kliento patvirtinkite, kad stumtas maršrutas įdiegtas ir kad jo numatytasis kelias į LAN adresą yra tunelis.

Tada stebėkite paketus. Fiksavimas tunelio sąsajoje parodo, ar serveris siunčia kliento link, o fiksavimas LAN sąsajoje parodo, ar jis persiunčia. Jei pirmasis rodo paketus, o antrasis nieko, problema yra persiuntime arba filtre; jei nė vienas nieko nerodo, paieška nepavyko anksčiau.

Du serveriai, sujungti tuneliu, kartoja tą pačią taisyklę abiejose pusėse: kiekvienam reikia iroute kito telkiniui, ir kiekvienam reikia maršruto bei persiuntimo, kurie daro kelią simetrišką. Maršrutizavimas ir politika čia yra atskiri dalykai. Maršrutizavimas nusprendžia, kur paketas gali eiti, o FORWARD taisyklė nusprendžia, ar leidžiama, todėl klientas su dviem iroute eilutėmis pasiekia abu prefiksus, nebent filtras sako kitaip.

Susiję straipsniai