Правіла, якое адпавядала ўчора, перастае адпавядаць сёння, бо кліент вярнуўся з іншым адрасам тунэля. Размеркавальнік аднак не выпадковы, і веданне яго парадку ператварае гэтую нечаканасць у прадказальную падзею. Ён аддае перавагу адрасу, які той самы кліент займаў раней, адкочваецца да вольнага адрасу, які найдоўж прастойваў, і забывае ўсё, калі не даць яму месца для запамінання. Правілы, якія разлічваюць на арэнду, працягваюць адпавядаць да дня, калі ціха перастаюць.

Парадак, якога трымаецца размеркавальнік

Пры адной сесіі на 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 у кліента павінен быць дасягальным да таго, як з’явіцца любы тунэль. Калі ўпісаць туды адрас пула, напрыклад уласную канцавую кропку тунэля сервера, кліент паспрабуе дабрацца да гэтай кропкі праз тунэль, які яшчэ не пабудаваў, і вынікам будзе пятля або ціхі тайм-аўт замест кароткага шляху.

Выкарыстоўвайце публічную канцавую кропку, якую даў аператар, і пакіньце пул для таго, для чаго ён прызначаны: адрасоў унутры тунэля. Запіс дыяпазону пула, фіксаваных прызначэнняў і шляху файла пастаянства ў адным месцы пазбавіць наступнага чалавека стаўлення да кожнай арэнды як да адвольнай.

Падобныя артыкулы