Turėjau laboratorinį kompiuterį, kuris priimdavo tunelį iš nuotolinės vietos ir kartu skambindavo į tiekėjo tinklą. Išeinantis profilis veikė savaites. Pridėjus įeinantį serverį, išeinantis prisijungė ir po kelių sekundžių nustojo praleisti srautą arba atsisakė paleisti su adreso jau naudojamas klaida. Konfigūracijos failai nebuvo pakeisti; mazgas tiesiog gavo antrą OpenVPN procesą, turintį savo nuomonę apie prievadus ir maršrutus.

Gedimas nėra atsitiktinis ir tai nėra autentifikavimo problema. Du demonai viename kompiuteryje varžosi dėl to paties vietinio lizdo ir tos pačios maršrutų lentelės, ir tas, kuris paleidžiamas arba prisijungia paskutinis, dažniausiai laimi. Žinojimas, kuri iš šių dviejų kolizijų pas jus yra, nulemia, kur žiūrėti pirmiausia.

Skaitykite simptomą atgaline tvarka

Pradėkite nuo to, kada tunelis miršta. Susiejimo klaida paleidžiant nurodo klausymosi pusę: kažkas jau valdo tą prievadą, ir OpenVPN atsisako paleisti, o ne dalytis juo. Tunelis, kuris pakyla ir tada nutyla, nurodo maršrutizavimą, nes kitos kopijos įdiegtas maršrutas gali nutraukti išorinio ryšio paketus nuo jų kelio.

Abu atvejai sukelia tą patį vartotojo skundą, todėl pakartotinių bandymų ciklai ir stebėjimo scenarijai nieko nesutvarko. Jie vėl prijungia klientą prie tos pačios kolizijos. Naudingas pirmasis klausimas yra ar procesas vis dar veikia, kai srautas sustoja.

Vienas lizdas ir vienas įrenginys vienai kopijai

Klausantis serveris susieja savo prievadą; išeinančiam klientui taip pat reikia vietinio prievado jo inkapsuliuotam srautui. Kai abu gyvena tame pačiame mazge, numatytasis kliento elgesys gali susidurti su serverio prievadu. Kliento vietinį prievadą galima užfiksuoti, o susiejimo galima praleisti ten, kur partneriui nereikia fiksuoto šaltinio prievado:

lport 1195
nobind
dev tun1

Tie skaičiai yra pavyzdžiai, o ne reikalavimas. Svarbu tai, kad klientas nustotų varžęsis dėl serverio prievado ir kiekviena kopija gautų atskirą tunelio įrenginį. Du demonai, bendrinantys tun0, perrašo vienas kito įrenginio būseną net kai jų prievadai skiriasi, todėl vienas įrenginys vienam tuneliui nėra pasirenkamas.

nobind priklauso kliento pusei. Serveris vis tiek turi susieti ir klausytis, todėl nekopijuokite eilutės į serverio konfigūraciją ir neišjunkite susiejimo kliente, kurio partneris filtruoja pagal fiksuotą šaltinio prievadą.

Pasirinkite vieną numatytojo maršruto savininką

Tik vienas ryšys gali įdiegti numatytąjį maršrutą. Jei abu profiliai peradresuoja visą srautą, antrasis prisijungimas tyliai pakeičia pirmąjį, ir pirmasis atrodo sugedęs. Arba palikite išeinantį tunelį padalytą ir stumkite tik tiekėjo prefiksus, arba suteikite jam atskirą maršrutų lentelę.

ip rule add from 10.9.0.2 table 120
ip route add default dev tun1 table 120
ip route get 10.9.0.2

Aukščiau nurodyti adresai ir lentelės numeris yra vietos žymekliai. Iškart pridėję taisyklę patvirtinkite, kad paties VPN serverio adresas vis dar sprendžiamas per įprastą lentelę; lentelė, kuri pagauna išorinį transportą, sugadina tunelį, kurį turėjo apsaugoti, o po to einantis prisijungimo ciklas atrodo kaip nepatikimas tiekėjas.

Sąrankai, kuri turi atlaikyti prisijungimus iš naujo ir perkrovimus, tinklo vardų erdvė yra tvirtesnė riba. Antrasis klientas veikia savo vardų erdvėje su savo sąsajomis ir maršrutais, ir atskleidžiamos tik tos paslaugos, kurios turi kirsti ribą. Mazgas išlaiko vieną numatytąjį maršrutą, ir vardų erdvės prisijungimas iš naujo negali jo perrašyti.

Tikrinkite pagal lentelę, o ne pagal būsenos eilutę

Klientas, pranešantis, kad prisijungė, įrodo tik savo valdymo kanalą. Užfiksuokite maršrutizavimo būseną prieš ir po kiekvieno prisijungimo, tada paklauskite branduolio, kurį įrenginį naudotų tikrasis tikslas:

ip route show
ip route get 10.40.0.20
ss -lunp | grep 1194

Jei pasirinktas įrenginys tiekėjo adresui pasikeičia, kai paleidžiamas antrasis tunelis, turite maršrutų koliziją. Jei abu procesai rodomi tame pačiame vietiniame prievade, turite lizdų koliziją. Pirmosios taisymas be antrosios tik perkelia gedimą į kitą prisijungimą.

Užrašykite prievadus, įrenginius, lenteles ir maršruto savininką į mazgo runbook. Priešingu atveju kitas žmogus, pridėsiantis trečią tunelį, vėl atras tą pačią koliziją, ir vienintelis matomas įrodymas bus ryšys, kuris veikia tol, kol kas nors kitas perkrauna savo demoną.

Susiję straipsniai