Поврзувањето на зависна услуга со tun0.device изгледа како претплата на тунелот, но не е. Единицата на уредот одразува дека интерфејсот постои, што може да остане точно низ неуспешна врска и повторното поврзување што следи. Тогаш услугата дејствува во погрешен момент, или никогаш, зависно од тоа дали интерфејсот исчезнал помеѓу. Куката што го опишува настанот што навистина ве интересира е онаа што ја повикува OpenVPN, а не онаа што ја изведува systemd.

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

Што всушност следи единицата на уредот

systemd создава единица на уред од погледот на јадрото врз мрежниот интерфејс, па tun0.device станува активна кога интерфејсот ќе се појави и неактивна кога ќе се отстрани. Со persist-tun, мекиот рестарт го задржува интерфејсот на место, па единицата никогаш не флапа и ништо врзано за неа не се активира. Дури и без постојаност, единицата не кажува ништо за рути, DNS или дали одговара далечниот крај.

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

up, route-up и up-restart значат различни работи

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

Со persist-tun, рестартите повторно го користат уредот, па up не се извршува повторно освен ако up-restart не е поставено. Таа опција го овозможува up скриптот за документираниот животен циклус на рестарт, а неговата околина е намалена во споредба со првото стартување. Скрипта што претпоставува целосна околина работи на првата врска и не успева на следната.

Испратете ја акцијата без да чекате на неа

Кука што го повикува systemctl restart синхроно може да дојде во ќор-сокак со единица чиј редослед го чека тунелот. systemctl --no-block try-restart vpn-dependent.service ја става работата во ред и се враќа, што го спречува куката да ја блокира врската на која реагираше. try-restart дејствува само на единица што работи, додека restart стартува и неактивна; изберете намерно, а не по навика.

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

Политиката за рестарт живее во единицата, не во куката

oneshot единица со RemainAfterExit=yes останува активна откако ќе излезе од нејзината наредба, а второто барање за стартување не прави ништо бидејќи systemd ја смета за веќе стартувана. Тоа е својство околу кое се проектира, а не дефект што се избегнува со повторени повици за стартување. Ако акцијата мора да се извршува по врска, единицата има потреба од форма што го дозволува тоа.

After= ги подредува единиците, а BindsTo= ги врзува животните векови, но ниту едно не значи 'рестартирај го ова секогаш кога VPN повторно ќе се поврзе'. Единица врзана за тунелот запира кога тунелот запира; таа не се рестартира сама кога тунелот ќе се врати, освен ако нешто не ја стартува повторно.

Тестирајте три повторни поврзувања, не едно

Студеното стартување, целосниот рестарт на клиентот и мекото повторно поврзување секое вежба различен пат. Мекото повторно поврзување е тоа што открива отсутно up-restart, намалена околина или единица на уред што никогаш не станала неактивна. Извршете ги сите три и потврдете ги двете насоки: услугата дејствува кога тунелот ќе се крене, и не се рестартира при неврзани промени на врската како Wi-Fi роаминг.

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

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