Kterou adresu přidělí fond při příštím připojení?
Adresy fondu sledují pořadí, které není náhodné: nejprve zapamatovaná adresa, potom volná nejdéle nevyužitá. Přečti si ho, než připneš pravidlo.
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.
| Situation | Address chosen | Practical effect |
|---|---|---|
| Reconnect, old address still free | The remembered address | Rules appear stable for days |
| Old address taken by another client | Least recently used free address | A working rule silently stops matching |
| Concurrent sessions, same name | First free address, per session | One 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ý.