Vienas Pi, du OpenVPN egzemplioriai: ką skaito kiekvienas unit failas
Du OpenVPN demonai viename Pi skaito skirtingus konfigūracijos failus ir išeina per skirtingus hook'us. Susiekite kiekvieną egzempliorių, tada atskirai išbandykite duomenų kelią.
Suskaičiuokite OpenVPN procesus prieš liesdami profilį. Pi, kuris priima klaidžiojančius naudotojus ir kartu skambina į priešingos krypties paslaugą, paleidžia du demonus, ir kiekvienas jų skaito konfigūracijos failą, kurį parenka įvestas egzemplioriaus pavadinimas. Paketo šablonai tada kiekvienam demonui skiria savo darbinį katalogą, savo vykdymo būsenos failą ir savo tunelio įrenginį. Jei šį atskyrimą padarysite neteisingai, praleisite vakarą keisdami teisingą nuostatą faile, kurio veikiantis procesas niekada neatidaro.
Kiekvienas egzemplioriaus pavadinimas pasirenka savo failą
Su OpenVPN 2.6 pateikiamuose unit failuose paleidimo argumentuose yra egzemplioriaus vietažymis, užpildomas tekstu po @ ženklo. Serverio šablonas veikia iš serverio konfigūracijos katalogo ir savo argumentą sprendžia pagal ten esantį %i.conf, o kliento šablonas tą patį daro iš kliento katalogo. Taigi [email protected] skaito admits.conf serverio kataloge, o [email protected] skaito uplink.conf kliento kataloge, ir nė vienas iš šių pavadinimų neturi jokios reikšmės kitame kataloge.
Patikrinkite atitikimą pačioje mašinoje, o ne manykite, kad paketas išlaikė pradines reikšmes. Distribucijos drop-in gali visiškai pakeisti darbinį katalogą arba konfigūracijos argumentą.
systemctl cat [email protected]
systemctl cat [email protected]Skaitykite WorkingDirectory eilutę ir konfigūracijos argumentą toje išvestyje, nes tik įjungtas unit failas nusprendžia, kuris failas įkeliamas. Drop-in, kuris prie ExecStart prideda --config, laimi prieš šabloną net tada, kai šablono kelias atrodo teisingai. Klauskite fragmentų ir drop-in kelių, kai norite sužinoti, ar veikia vietinis perrašymas. Jei abu vaidmenys išsprendžiami į vieną failą, turite vieną procesą, kuris bando būti ir serveriu, ir klientu, o vėlesnė parinktis tame faile tyliai laimi.
Vietinis perdavimas ir persiunčiama apkrova patenka į skirtingus hook'us
Serverio užšifruotas ryšys su kiekvienu klaidžiojančiu naudotoju sukuriamas pačiame Pi, todėl jo išoriniai atsakymai išeina per vietinį išvesties hook'ą. Kliento ryšys su priešingu partneriu taip pat yra vietoje sukurtas išėjimas, nors pasiekia nuotolinį tinklą. Persiunčiama naudingoji apkrova yra trečia kategorija, ir branduolys ją sutapatina tik po to, kai jau pasirinko paketui išeinantį įrenginį.
| Flow | Hook that sees it | What to inspect |
|---|---|---|
| Roaming user handshakes to the server | Local input and local output | Listener socket, bind address, rule admitting the UDP port |
| User payload leaving through the upstream tunnel | Forward | IPv4 forwarding switch, selected route, permission rule, any translation |
| Pi's own connection to the upstream peer | Local output | Underlay route to the provider endpoint, not the tunnel route |
Taisyklė, kuri forward grandinėje atitinka išeinančią sąsają, gali leisti arba atmesti paketą, kurį maršrutizavimas jau priskyrė tai sąsajai, bet ji niekada neparenka sąsajos. Kai vienas mazgas užbaigia vieną tunelį ir pradeda kitą, politika, siunčianti naudotojų apkrovą į priešingos krypties tunelį, ir politika, sauganti Pi savus užšifruotus atsakymus, yra du atskiri sprendimai. Jie atsitiktinai patenka į tą pačią fizinę NIC, todėl painiojami.
Šis skirtumas paaiškina dažną pusinę nesėkmę. Naudotojai prisijungia, rankos paspaudimas baigiasi, o jų srautas vis tiek išeina neteisingu keliu, nes rankos paspaudimas buvo vietinis, o apkrova buvo forward ir buvo išbandytas tik vienas iš dviejų.
Importuotas maršrutas gali praryti atsakymus jūsų naudotojams
Kliento profilio saugumo nuostata nusprendžia, ką priešingos krypties pusė gali įstumti į Pi maršrutų lentelę, o platus nukreipimas yra parinktis, kuri veikiantį dvejopų vaidmenų mazgą paverčia sugedusiu. Jei įstumtas maršrutas apima klaidžiojančių naudotojų viešuosius adresus, serverio generuojami atsakymai jiems gali sekti nauju maršrutu į priešingos krypties tunelį, o ne išeiti per pagrindą. Žmonės dažnai patvirtina, kad tunelis į tiekėją dar veikia, ir tuo sustoja, nes tas srautas yra paties tunelio transportas ir teka toliau, kol visa kita elgiasi neteisingai.
Politika pagal šaltinį arba mark yra būdas išlaikyti du srautus atskirai. OpenVPN Linux mark parinktis pažymi paties demono užšifruotus paketus ugniasienės mark, o maršrutizavimo taisyklė gali juos nusiųsti į atskirą lentelę. Šaltinio adresai veikia taip pat gerai, kai serverio išoriniai atsakymai visada išeina iš vieno pagrindo adreso. Bet kuriam metodui reikia galiojančių maršrutų pasirinktoje lentelėje ir išimties tiekėjo endpoint, kitaip pats tunelis nebepakyla.
Prieš rašydami bet kokią taisyklę, paklauskite branduolio, kokiu keliu atsakymas iš tiesų eitų. Žemiau pateikti adresai yra Pi pagrindo adreso ir vieno klaidžiojančio naudotojo viešojo adreso vietos žymės.
ip rule show
ip route get 198.51.100.7 from 192.0.2.10Patikrinkite atskyrimą, tada sustabdykite po vieną vaidmenį
Trys srautai turi būti testuojami atskirai, nes veikiantis rankos paspaudimas nieko neįrodo apie kitus du. Priimkite naują įeinantį ryšį, siųskite vieną leistiną programą per priešingos krypties išėjimą ir patvirtinkite, kad abu procesai vis dar pasiekia savo partnerius.
Tada sustabdykite kliento vaidmenį ir stebėkite, ką išlaiko serverio vaidmuo. Tai pigiausias būdas rasti maršruto arba mark taisyklę, kuri buvo skirta vienam egzemplioriui, o pritaikyta abiem.
systemctl stop [email protected]
systemctl status [email protected] --no-pager
ss -lunp | grep openvpn
journalctl -u [email protected] -n 20 --no-pagerNorite pamatyti, kad kliento vaidmeniui esant sustabdytam klausytojas vis dar susietas, tunelio įrenginys vis dar yra, o žurnale nėra naujų klaidų. Jei sustabdžius klientą nutrūksta ir serverio atsakymai esamiems naudotojams, abu vaidmenys dalijasi kažkuo, kas turėjo būti apribota vienam iš jų. Užsirašykite, kurį egzempliorių, kurį konfigūracijos failą ir kurį srauto savininką palietė kiekvienas pakeitimas, nes kitaip kitas žmogus, derindamas šį mazgą, tą patį atradimą pradės nuo nulio.