Pravidlo, které včera sedělo, dnes nesedí, protože klient se vrátil s jinou adresou tunelu. Alokátor však není náhodný, a kdo zná jeho pořadí, promění to překvapení v předvídatelnou událost. Preferuje adresu, kterou stejný klient měl dřív, sáhne po volné adrese nejdéle nevyužité a zapomene všechno, pokud mu nedáš místo k zapamatování. Pravidla, která předpokládají lease, sedí dál až do dne, kdy to potichu přestanou dělat.

Pořadí, kterého se alokátor drží

Při jedné relaci na common name hledá alokátor nejprve adresu, kterou stejný klient použil dříve a která je teď volná. Pokud ta adresa zmizela, vezme volnou adresu, která byla nečinná nejdéle. Když jsou pro stejné jméno zapnuté souběžné relace, preference předchozí adresy neplatí a místo ní se použije první volná adresa, protože relace se považují za samostatné peer uzly.

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

Z toho hned plynou dva důsledky. Klient, který se rychle znovu připojí, obvykle svou adresu udrží, a proto si mechanismu nikdo nevšimne, dokud se nezmění. A jiné zařízení, které se připojí v tom malém okně, může adresu vzít, dokud je krátce volná, načež první klient dostane něco jiného a každé pravidlo navázané na staré číslo je špatné. Ani jedna z těch událostí nevytvoří řádek logu, který vypadá jako porucha.

Proč lease vypadá stabilně a pak se posune

Stabilita je zde emergentní vlastnost opakovaných připojení, která přicházejí dřív, než adresu nárokuje někdo jiný. Není to slib a nevynucuje se, dokud je klient odpojený. Počítej s tím, že se adresa změní, místo abys byl překvapen. Fond sotva větší než počet zařízení dělá kolize běžnými, protože záložní varianta s nejdéle nevyužitou adresou nemá téměř z čeho vybírat.

Špičková souběžnost je číslo, na které se dimenzuje, ne počet uživatelů. Někdo, kdo testuje ze dvou zařízení najednou, nebo klient, který se znovu připojí před vypršením staré relace, drží dvě lease určitou dobu. Fond dimenzovaný jen na počet osob vyrobí přesně tu obměnu, kterou lidé svádějí na server.

Soubor trvalosti si pamatuje, nerezervuje

Adresa, která přežije restart služby, potřebuje soubor trvalosti. Ukládá jméno klienta a adresu při vypínání a čte je zpět při startu služby, a proto plánovaný restart už nezamíchá všechna pravidla, která jsi napsal.

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

Co nedělá, je držení adresy, dokud je klient pryč. V té prodlevě může alokátor číslo vydat někomu jinému a soubor pak zaznamená zastaralou preferenci, kterou příští připojení nemůže dodržet. Ber ho jako nápovědu, která zlepšuje chování při restartu, ne jako statické adresování.

Zkontroluj fond proti každé routované podsíti, dokud jsi v souboru. Překrývající se rozsah přiděluje adresy, na které server neumí routovat, a příznakem je klient, který se připojí, dostane adresu a nic nedosáhne.

Správné připnutí adresy

Když pravidlo firewallu nebo záznam DNS opravdu potřebuje pevnou adresu, přiděl ji, místo abys doufal. Záznam konfigurace pro jednotlivého klienta může přímo poslat adresu a masku a ten záznam je klíčován efektivním jménem klienta.

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

Drž pevné adresy mimo dynamický fond, aby alokátor nikdy nevydal stejné číslo jiné relaci. Pak zkontroluj topologii tunelu, protože mění, kolik adres fondu spotřebuje každý klient: starší uspořádání bod-bod spotřebuje malý blok na klienta, zatímco uspořádání podsítě používá po jedné adrese. Fond, který vypadá štědře v jedné topologii, může být vyčerpávající ve druhé.

Potvrď výsledek na klientovi, místo abys věřil účtování serveru. Až se relace vrátí, podívej se na adresu rozhraní a poslanou trasu, protože log na serveru může hlásit požadovanou adresu, zatímco rozhraní samo drží jinou.

Vzdálená adresa je samostatná otázka

Adresa ve vzdáleném řádku klienta musí být dosažitelná dřív, než existuje jakýkoli tunel. Když tam dáš adresu fondu, třeba vlastní koncový bod tunelu serveru, klient se snaží dosáhnout koncového bodu tunelem, který ještě nepostavil, a výsledkem je smyčka nebo tiché vypršení místo zkratky.

Použij veřejný koncový bod, který dodal operátor, a nech fond na to, k čemu byl navržen: adresy uvnitř tunelu. Zapsání rozsahu fondu, pevných přidělení a cesty trvalosti na jedno místo ušetří dalšímu člověku považovat každý lease za svévolný.

Související články