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

Зошто неуспешен предуслов е погрешна форма

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

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

Прво напишете го договорот за излезните кодови

Напишете го договорот пред скриптата. Излезот со нула значи продолжување, излезот со еден значи прескокнување на останатите команди за стартување, а излезот со 255 значи дека самиот услов не можел да работи. Кодовите меѓу два и 254 обично значат прескокнување, што лесно се заборава кога помошникот враќа случаен код за грешка. Drop-in-от подолу го поврзува помошникот со вистинското име на единицата.

[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpn

Проверете ја ефективната единица за наследени SuccessExitStatus или stop-post поставки пред да ја претпоставите стандардната семантика. Потоа намерно тестирајте го секој од трите исходи.

Мрежниот навестувач не е доказ за локација

Достапна адреса на рутер или познат MAC можат да укажат на вистинската мрежа, и ниту едно од двете не го докажува тоа. Друга мрежа може повторно да ја користи истата адреса, ARP податоците може да се застарени, а идентификаторите можат да се имитираат. Третирајте ја проверката како оптимизација усогласена со политиката, а не како резултат од автентикација.

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

Запишете ги тие претпоставки до датотеката на единицата за следната личност да знае во што верува помошникот. Коментар на почетокот на скриптата е најевтиното место да ги чувате.

Управувајте со преминот меѓу мрежите

Условот се извршува кога сервисот стартува и не се преоценува подоцна. Прескокната единица останува прескокната откако лаптопот ќе се премести во кафуле, а активниот тунел останува кренат откако лаптопот ќе се врати дома. Поврзете го животниот циклус на промената на мрежата со одлуката за стартување и запирање преку посебен механизам.

systemctl cat home-vpn.service

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

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