Десктоп графички интерфејс ја држи управувачката врска, па скриптата за надзор што се обидува да отвори своја не чита ништо или, полошо, интерфејсот престанува да одговара на поканите. Вообичаениот заклучок е дека демонот е нестабилен. Во демонот на заедницата ограничувањето е намерно: интерфејсот за контрола служи еден поврзан клиент за управување одеднаш, и тој број нема никаква врска со тоа колку корисници може да носи VPN.

Еден сокет, еден сопственик

Каналот за управување прима еден поврзан клиент. Кога пристигнува втор, додека првиот е активен, тој чека или е одбиен, и нема никаков паралелен режим на претплатник скриен зад опција. Исклучувањето на тековниот сопственик му овозможува на демонот да го прими следниот, што е предавање, а не втор канал.

Тоа ја прави секоја дополнителна алатка конкурент. Ако интерфејсот ја поседува врската, скриптата за анкетирање или не се прикачува, или успева само откако интерфејсот ќе се откаже, и низата се повторува при следното повторно поврзување. Ако скриптата се прикачи прва, интерфејсот ја губи својата контролна патека и неговите покани престануваат да работат. Ниту една од алатките не го пријавува конфликтот, бидејќи секоја ја гледа само сопствената неуспешна команда.

What you needMechanism that fitsWhat it cannot do
Periodic list of connected clientsStatus file written on an intervalDeliver events as they happen
Interactive prompts and session controlThe single management connectionServe two controllers at once
Multiple consumers of eitherOne owner process that fans outExist without you writing it

Одлучете која компонента ја поседува контролата

Изберете еден сопственик за интерактивниот канал и дозволете тој да биде единствениот што се поврзува. Интерфејс што ја управува врската, скрипта што одговара на поканите за автентикација и контролер што завршува сесии, сите се сметаат за сопственици, и само еден може да ја има улогата.

Кога интерфејсот ја поседува врската, користете ја интеграцијата што ја нуди, наместо да се борите со него. Трката со сопственикот за сокетот создава повремени дефекти што на корисниците им изгледаат случајни, а тој што отстранува грешки обично ја гледа само втората половина од трката. Забележете кој процес се поврзува прв по рестартирање, бидејќи тој редослед секој пат одлучува кој победува. Монитор што стартува пред интерфејсот ќе го задржи каналот додека интерфејсот не се откаже.

Користете снимки од состојбата за собирачите

Повеќето потреби за надзор бараат список, не разговор. Периодична датотека за состојбата одговара на тоа без да го допре контролниот канал, и продолжува да работи додека интерфејсот останува поврзан.

status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix

Интервалот е буџетот за свежина, затоа поставете го според она што на панелот навистина му треба, а не според најмалата вредност што изгледа безбедна. Снимка што се запишува на секои неколку секунди е ефтина; скрипта што на секои неколку секунди повторно се поврзува со контролниот сокет не е, зашто секое повторно поврзување се натпреварува со сопственикот.

Снимката не е историја и не е тек на настани. Врските што доаѓаат и заминуваат во рамки на еден интервал никогаш не се појавуваат, па барањето за ревизија не може да се исполни со анкетирање датотека што сама се препишува. Ако треба да знаете дали корисникот воопшто се поврзал, снимката е погрешна алатка.

Разгранувањето е проект, а не режим

Ако на неколку потрошувачи навистина им требаат податоци за управување во реално време, поставете една доверлива компонента пред сокетот и дозволете ѝ да објавува тесно избрани набљудувања до останатите. Таа компонента го поседува повторното поврзување, поканите за автентикација и одлуката што е безбедно да се открие.

Изградете ја намерно: дефинирајте кои барања се дозволени, евидентирајте кој прашал и избегнувајте слојот за разгранување случајно да стане панел за далечинско управување. Демонот нема режим за повеќе клиенти што може да се вклучи, и ниту еден конфигурациски ред не создава таков. Третирајте го сопственикот како дел од безбедносната граница, зашто држи интерфејс што може да исклучува луѓе. Неговото рестартирање треба да биде рутинска операција со документирана патека за обновување.

Третирајте го сокетот како привилегија, не како метрики

Интерфејсот за управување може да исклучува корисници, да менува состојба и да чита настани во кои се именуваат луѓе. Неговата лозинка го автентикува клиентот и не го шифрира транспортот, па мрежен слушач ја изложува разговорот на секој што може да го набљудува.

Претпочитајте локален сокет или строго ограничен слушач и проверете до кој процес вашиот собирач всушност се обраќа, бидејќи серверските производи испорачуваат свои API за управување што се однесуваат поинаку. Собирач насочен кон погрешен демон дава уверени и погрешни заклучоци. Потврдете ја патеката и процесот сопственик пред да отстранувате грешки во барање што не враќа ништо.

Поврзани статии