Правило, което е съвпадало вчера, спира да съвпада днес, защото клиентът се върна с друг адрес на тунела. Разпределителят обаче не е случаен, и знанието на реда му превръща тази изненада в предвидимо събитие. Той предпочита адреса, който същият клиент е заемал преди, отстъпва към свободния адрес, най-дълго стоял без употреба, и забравя всичко, ако не му дадете място за запомняне. Правилата, които разчитат на наем, продължават да съвпадат до деня, в който тихо спрат.

Редът, който следва разпределителят

При една сесия на common name разпределителят първо търси адрес, който същият клиент е използвал преди и който сега е свободен. Ако този адрес е зает, той взема свободния адрес, който е стоял най-дълго бездействащ. Когато за същото име са включени едновременни сесии, предпочитанието към предишния адрес не важи и вместо него се използва първият свободен адрес, защото сесиите се третират като отделни равностойни възли.

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

От това веднага следват две последици. Клиент, който се свързва отново бързо, обикновено запазва адреса си, затова никой не забелязва механизма, докато той не се промени. А друго устройство, което се свърже в този малък прозорец, може да заеме адреса, докато той е кратко свободен, след което първият клиент получава нещо друго и всяко правило, вързано към стария номер, е грешно. Нито едно от двете събития не създава ред в журнала, който да изглежда като повреда.

Защо наемът изглежда стабилен, а после се измества

Стабилността тук е емерджентно свойство на повторните свързвания, които идват преди някой друг да заеме адреса. Това не е обещание и не се налага, докато клиентът е изключен. Планирайте промяната на адреса, вместо да бъдете изненадани от нея. Пул, който едва надвишава броя на устройствата, прави сблъсъците обичайни, защото отстъплението към най-стария свободен адрес почти няма от какво да избира.

Пиковата едновременност е числото, по което се оразмерява, а не броят на потребителите. Някой, който тества от две устройства наведнъж, или клиент, който се свързва отново преди изтичането на старата сесия, заема за известно време два наема. Пул, оразмерен само по броя на хората, ще произведе точно онази смяна, за която хората обвиняват сървъра.

Файлът за постоянство помни, не резервира

Адрес, който преживява рестартиране на услугата, се нуждае от файл за постоянство. Той запазва името на клиента и адреса при изключване и ги прочита отново при стартиране на услугата, затова планираното рестартиране вече не разбърква всички правила, които сте написали.

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

Това, което не прави, е да задържа адреса, докато клиентът отсъства. В тази пауза разпределителят е свободен да даде номера на някой друг, и файлът тогава записва остаряло предпочитание, което следващото свързване не може да изпълни. Отнасяйте се към него като към подсказка, която подобрява поведението при рестартиране, а не като статично адресиране.

Проверете пула срещу всяка маршрутизирана подмрежа, докато сте във файла. Припокриващ се диапазон раздава адреси, до които сървърът не може да маршрутизира, а симптомът е клиент, който се свързва, получава адрес и не достига нищо.

Правилно закрепване на адрес

Когато правило на защитната стена или DNS запис наистина се нуждае от фиксиран адрес, назначете го, вместо да се надявате. Запис в конфигурацията за отделен клиент може да изпрати директно адрес и маска, и този запис е обвързан с действителното име на клиента.

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

Дръжте фиксираните адреси извън динамичния пул, за да не даде разпределителят никога същия номер на друга сесия. След това проверете топологията на тунела, защото тя променя колко пулови адреса изразходва всеки клиент: по-старата схема точка-точка изразходва малък блок на клиент, докато подсетовата схема използва по един адрес. Пул, който изглежда щедър при една топология, може да е изчерпващ при другата.

Потвърдете резултата на клиента, вместо да се доверявате на счетоводството на сървъра. Когато сесията се върне, погледнете адреса на интерфейса и изпратения маршрут, защото журнал на сървъра може да съобщава поискания адрес, докато интерфейсът сам държи друг.

Отдалеченият адрес е отделен въпрос

Адресът в реда remote на клиента трябва да е достижим, преди да съществува какъвто и да е тунел. Ако там се постави пулов адрес, например собствената крайна точка на тунела на сървъра, клиентът се опитва да достигне крайната точка през тунел, който още не е изградил, и резултатът е цикъл или тихо изтичане вместо пряк път.

Използвайте публичната крайна точка, която е предоставил операторът, и запазете пула за това, за което е предназначен: адреси вътре в тунела. Записването на диапазона на пула, фиксираните назначения и пътя на файла за постоянство на едно място спестява на следващия човек третирането на всеки наем като произволен.

Подобни статии