Само еден клиент за управување: зошто вашиот монитор го исфрла графичкиот интерфејс
Управувачкиот сокет прима една врска одеднаш. Втор претплатник или не може да се прикачи, или ја презема контролата од компонентата што ги поседува поканите.
Десктоп графички интерфејс ја држи управувачката врска, па скриптата за надзор што се обидува да отвори своја не чита ништо или, полошо, интерфејсот престанува да одговара на поканите. Вообичаениот заклучок е дека демонот е нестабилен. Во демонот на заедницата ограничувањето е намерно: интерфејсот за контрола служи еден поврзан клиент за управување одеднаш, и тој број нема никаква врска со тоа колку корисници може да носи VPN.
Еден сокет, еден сопственик
Каналот за управување прима еден поврзан клиент. Кога пристигнува втор, додека првиот е активен, тој чека или е одбиен, и нема никаков паралелен режим на претплатник скриен зад опција. Исклучувањето на тековниот сопственик му овозможува на демонот да го прими следниот, што е предавање, а не втор канал.
Тоа ја прави секоја дополнителна алатка конкурент. Ако интерфејсот ја поседува врската, скриптата за анкетирање или не се прикачува, или успева само откако интерфејсот ќе се откаже, и низата се повторува при следното повторно поврзување. Ако скриптата се прикачи прва, интерфејсот ја губи својата контролна патека и неговите покани престануваат да работат. Ниту една од алатките не го пријавува конфликтот, бидејќи секоја ја гледа само сопствената неуспешна команда.
| What you need | Mechanism that fits | What it cannot do |
|---|---|---|
| Periodic list of connected clients | Status file written on an interval | Deliver events as they happen |
| Interactive prompts and session control | The single management connection | Serve two controllers at once |
| Multiple consumers of either | One owner process that fans out | Exist without you writing it |
Одлучете која компонента ја поседува контролата
Изберете еден сопственик за интерактивниот канал и дозволете тој да биде единствениот што се поврзува. Интерфејс што ја управува врската, скрипта што одговара на поканите за автентикација и контролер што завршува сесии, сите се сметаат за сопственици, и само еден може да ја има улогата.
Кога интерфејсот ја поседува врската, користете ја интеграцијата што ја нуди, наместо да се борите со него. Трката со сопственикот за сокетот создава повремени дефекти што на корисниците им изгледаат случајни, а тој што отстранува грешки обично ја гледа само втората половина од трката. Забележете кој процес се поврзува прв по рестартирање, бидејќи тој редослед секој пат одлучува кој победува. Монитор што стартува пред интерфејсот ќе го задржи каналот додека интерфејсот не се откаже.
Користете снимки од состојбата за собирачите
Повеќето потреби за надзор бараат список, не разговор. Периодична датотека за состојбата одговара на тоа без да го допре контролниот канал, и продолжува да работи додека интерфејсот останува поврзан.
status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix
Интервалот е буџетот за свежина, затоа поставете го според она што на панелот навистина му треба, а не според најмалата вредност што изгледа безбедна. Снимка што се запишува на секои неколку секунди е ефтина; скрипта што на секои неколку секунди повторно се поврзува со контролниот сокет не е, зашто секое повторно поврзување се натпреварува со сопственикот.
Снимката не е историја и не е тек на настани. Врските што доаѓаат и заминуваат во рамки на еден интервал никогаш не се појавуваат, па барањето за ревизија не може да се исполни со анкетирање датотека што сама се препишува. Ако треба да знаете дали корисникот воопшто се поврзал, снимката е погрешна алатка.
Разгранувањето е проект, а не режим
Ако на неколку потрошувачи навистина им требаат податоци за управување во реално време, поставете една доверлива компонента пред сокетот и дозволете ѝ да објавува тесно избрани набљудувања до останатите. Таа компонента го поседува повторното поврзување, поканите за автентикација и одлуката што е безбедно да се открие.
Изградете ја намерно: дефинирајте кои барања се дозволени, евидентирајте кој прашал и избегнувајте слојот за разгранување случајно да стане панел за далечинско управување. Демонот нема режим за повеќе клиенти што може да се вклучи, и ниту еден конфигурациски ред не создава таков. Третирајте го сопственикот како дел од безбедносната граница, зашто држи интерфејс што може да исклучува луѓе. Неговото рестартирање треба да биде рутинска операција со документирана патека за обновување.
Третирајте го сокетот како привилегија, не како метрики
Интерфејсот за управување може да исклучува корисници, да менува состојба и да чита настани во кои се именуваат луѓе. Неговата лозинка го автентикува клиентот и не го шифрира транспортот, па мрежен слушач ја изложува разговорот на секој што може да го набљудува.
Претпочитајте локален сокет или строго ограничен слушач и проверете до кој процес вашиот собирач всушност се обраќа, бидејќи серверските производи испорачуваат свои API за управување што се однесуваат поинаку. Собирач насочен кон погрешен демон дава уверени и погрешни заклучоци. Потврдете ја патеката и процесот сопственик пред да отстранувате грешки во барање што не враќа ништо.