En regel, der passede i går, passer ikke i dag, fordi klienten kom tilbage på en anden tunneladresse. Tildeleren er dog ikke tilfældig, og hvis man kender dens rækkefølge, bliver den overraskelse en forudsigelig begivenhed. Den foretrækker den adresse, som samme klient havde før, falder tilbage på den længst ubrugte ledige og glemmer alt, medmindre man giver den et sted at huske. Regler, der forudsætter en lease, passer fortsat indtil den dag, hvor de stille og roligt ikke gør det længere.

Den rækkefølge, tildeleren følger

Med én session per common name leder tildeleren først efter en adresse, som samme klient brugte tidligere, og som er ledig nu. Er den adresse væk, tager den den ledige adresse, der har været ubrugt længst. Med samtidige sessioner for samme navn gælder fortrinnet for den tidligere adresse ikke, og i stedet bruges den første ledige adresse, fordi sessionerne behandles som separate peers.

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

To konsekvenser følger med det samme. En klient, der genopkobler hurtigt, beholder normalt sin adresse, og derfor bemærker ingen mekanismen, før den ændrer sig. Og en anden enhed, der kobler til i det lille vindue, kan tage adressen, mens den kortvarigt er ledig, hvorefter den første klient får noget andet, og enhver regel, der peger på det gamle nummer, er forkert. Ingen af de to hændelser giver en loglinje, der ser ud som en fejl.

Hvorfor en lease ser stabil ud og derefter flytter sig

Stabilitet er her en fremvoksende egenskab ved genopkoblinger, der ankommer, før nogen andre gør krav på adressen. Det er ikke et løfte, og det håndhæves ikke, mens klienten er afbrudt. Planlæg efter, at adressen ændrer sig, i stedet for at blive overrasket over det. En pulje, der næsten ikke er større end antallet af enheder, gør sammenstød til hverdag, fordi tilbagefaldet til den længst ubrugte adresse næsten ikke har noget at vælge imellem.

Spidsbelastningssamtidighed er det tal, man dimensionerer efter, ikke antallet af brugere. Nogen, der tester fra to enheder på én gang, eller en klient, der genopkobler, før den gamle session udløber, optager to leases et stykke tid. En pulje, der kun er dimensioneret efter hovedtallet, giver præcis den udskiftning, som folk giver serveren skylden for.

Persistensfilen husker, den reserverer ikke

En adresse, der overlever en tjenestegenstart, kræver en persistensfil. Den gemmer klientnavn og adresse ved nedlukning og læser dem igen ved tjenestens start, og derfor blander en planlagt genstart ikke længere alle de regler, du skrev.

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

Det, den ikke gør, er at holde på adressen, mens klienten er væk. I det hul må tildeleren give nummeret til en anden, og filen registrerer så en forældet præference, som den næste forbindelse ikke kan opfylde. Behandl den som et hint, der forbedrer genstartsadfærden, ikke som statisk adressering.

Kontrollér puljen mod hvert routet subnet, mens du er i filen. Et overlappende område uddeler adresser, som serveren ikke kan route til, og symptomet er en klient, der kobler til, får en adresse og intet når.

At fastlåse en adresse ordentligt

Når en firewallregel eller en DNS-post virkelig har brug for en fast adresse, så tildel den i stedet for at håbe på den. En konfigurationspost per klient kan pushe en adresse og maske direkte, og den post er nøglet til det effektive klientnavn.

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

Hold faste adresser uden for den dynamiske pulje, så tildeleren aldrig giver samme nummer til en anden session. Kontrollér derefter tunneltopologien, fordi den ændrer, hvor mange puljeadresser hver klient bruger: den ældre punkt-til-punkt-layout bruger en lille blok per klient, mens et subnet-layout bruger én adresse hver. En pulje, der ser rigelig ud under den ene topologi, kan være udtømmende under den anden.

Bekræft resultatet på klienten i stedet for at stole på serverens bogholderi. Når sessionen er tilbage, se på grænsefladens adresse og den pushede rute, fordi en log på serveren kan rapportere den adresse, der blev anmodet om, mens grænsefladen selv har en anden.

Remote-adressen er et separat spørgsmål

Adressen i klientens remote-linje skal kunne nås, før der findes nogen tunnel. Sætter man en puljeadresse der, for eksempel serverens eget tunnelendepunkt, forsøger klienten at nå endepunktet gennem en tunnel, den ikke har bygget endnu, og resultatet er en løkke eller en stille timeout i stedet for en genvej.

Brug det offentlige endepunkt, som operatøren har stillet til rådighed, og hold puljen til det, den er beregnet til: adresser inde i tunnelen. At notere puljeområdet, de faste tildelinger og persistensstien ét sted sparer den næste person for at behandle enhver lease som vilkårlig.

Relaterede artikler