Taisyklė, kuri atitiko vakar, šiandien nebeatitinka, nes klientas grįžo su kitu tunelio adresu. Paskirstytuvas vis dėlto nėra atsitiktinis, o žinant jo tvarką tas netikėtumas virsta nuspėjamu įvykiu. Jis pirmenybę teikia adresui, kurį tas pats klientas turėjo anksčiau, atsarginis variantas yra seniausiai nenaudotas laisvas adresas, o viską pamiršta, jei neduosi jam kur įsiminti. Taisyklės, kurios remiasi nuoma, atitinka toliau iki dienos, kai tyliai nustoja tai daryti.

Tvarka, kurios laikosi paskirstytuvas

Kai viena sesija vienam common name, paskirstytuvas pirmiausia ieško adreso, kurį tas pats klientas naudojo anksčiau ir kuris dabar laisvas. Jei to adreso nebėra, jis paima laisvą adresą, kuris ilgiausiai buvo nenaudojamas. Kai tam pačiam pavadinimui įjungtos lygiagrečios sesijos, pirmenybė ankstesniam adresui netaikoma ir vietoj to naudojamas pirmas laisvas adresas, nes sesijos traktuojamos kaip atskiri lygiaverčiai mazgai.

SituationAddress chosenPractical effect
Reconnect, old address still freeThe remembered addressRules appear stable for days
Old address taken by another clientLeast recently used free addressA working rule silently stops matching
Concurrent sessions, same nameFirst free address, per sessionOne identity can hold several leases

Iš to iškart kyla dvi pasekmės. Greitai prisijungęs klientas paprastai išlaiko savo adresą, todėl niekas nepastebi mechanizmo, kol jis nepasikeičia. O kitas įrenginys, prisijungęs per tą mažą langą, gali paimti adresą, kol jis trumpam laisvas, po to pirmasis klientas gauna ką nors kita, ir kiekviena taisyklė, susieta su senu numeriu, yra klaidinga. Nė vienas iš šių įvykių nesukuria žurnalo eilutės, kuri atrodytų kaip gedimas.

Kodėl nuoma atrodo stabili, o paskui pasislenka

Stabilumas čia yra kylanti prisijungimų, kurie ateina anksčiau, nei kas nors kitas pareikalauja adreso, savybė. Tai ne pažadas, ir jis neįgyvendinamas, kol klientas atjungtas. Planuok, kad adresas pasikeis, o ne būk tuo nustebintas. Baseinas, vos didesnis už įrenginių skaičių, daro susidūrimus įprastus, nes atsarginiam seniausiai nenaudotam adresui beveik nelieka iš ko rinktis.

Didžiausias vienalaikiškumas yra skaičius, pagal kurį reikia dydžiuoti, o ne naudotojų skaičius. Kas nors, bandantis iš dviejų įrenginių vienu metu, arba klientas, prisijungęs iš naujo prieš pasibaigiant senai sesijai, kuriam laikui užima dvi nuomas. Baseinas, apskaičiuotas vien pagal žmonių skaičių, sukels būtent tą kaitą, kurią žmonės kaltina serverį.

Išliekamasis failas atsimena, bet nerezervuoja

Adresui, kuris išlieka po paslaugos perkrovimo, reikia išliekamojo failo. Jis išsaugo kliento pavadinimą ir adresą išjungiant ir perskaito juos paleidus paslaugą, todėl suplanuotas perkrovimas nebepermaišo visų tavo parašytų taisyklių.

ifconfig-pool-persist /etc/openvpn/ipp.txt
server 10.8.0.0 255.255.255.0

Ko jis nedaro, tai nelaiko adreso, kol klientas nėra. Tuo tarpu paskirstytuvas gali laisvai atiduoti numerį kam nors kitam, ir failas tada užfiksuoja pasenusią pirmenybę, kurios kitas prisijungimas negali įvykdyti. Laikyk jį užuomina, gerinančia perkrovimo elgseną, o ne statiniu adresavimu.

Tikrink baseiną pagal kiekvieną maršrutizuotą potinklį, kol esi faile. Persidengiantis diapazonas išduoda adresus, į kuriuos serveris negali maršrutizuoti, o simptomas yra klientas, kuris prisijungia, gauna adresą ir nieko nepasiekia.

Tinkamai užfiksuoti adresą

Kai ugniasienės taisyklė ar DNS įrašas tikrai reikia fiksuoto adreso, priskirk jį, o ne tikėkis. Vieno kliento konfigūracijos įrašas gali tiesiogiai stumti adresą ir kaukę, ir tas įrašas susietas su efektyviu kliento pavadinimu.

# client-config-dir entry for "laptop-acme"
ifconfig-push 10.8.0.50 255.255.255.0

Laikyk fiksuotus adresus už dinaminio baseino, kad paskirstytuvas niekada neatiduotų to paties numerio kitai sesijai. Tada patikrink tunelio topologiją, nes ji keičia, kiek baseino adresų sunaudoja kiekvienas klientas: senesnis taškas-taškas išdėstymas sunaudoja nedidelį bloką vienam klientui, o potinklio išdėstymas naudoja po vieną adresą. Baseinas, atrodantis dosnus pagal vieną topologiją, gali būti išsenkantis pagal kitą.

Patvirtink rezultatą kliente, o nepasitikėk serverio apskaita. Kai sesija grįš, pažiūrėk į sąsajos adresą ir nustumtą maršrutą, nes serverio žurnalas gali pranešti prašytą adresą, o sąsaja pati turi kitą.

Nuotolinis adresas yra atskiras klausimas

Adresas kliento nuotolinėje eilutėje turi būti pasiekiamas prieš atsirandant bet kokiam tuneliui. Įrašius ten baseino adresą, pavyzdžiui, paties serverio tunelio galinį tašką, klientas bando pasiekti galinį tašką per tunelį, kurio dar nepastatė, ir rezultatas yra kilpa arba tylus laukimo laikas, o ne trumpiausias kelias.

Naudok viešą galinį tašką, kurį pateikė operatorius, ir laikyk baseiną tam, kam jis skirtas: adresams tunelio viduje. Baseino diapazono, fiksuotų priskyrimų ir išliekamojo kelio užrašymas vienoje vietoje sutaupo kitam žmogui traktuoti kiekvieną nuomą kaip savavališką.

Susiję straipsniai