Üç şərt nəzarətçinin kömək edib-etmədiyini müəyyən edir: yoxlamanın nəyi ayırd edə bildiyi, neçə ardıcıl uğursuzluğun hərəkəti əsaslandırdığı və hərəkətin yenidən qoşulma, yoxsa keçid olduğu. Ünvanı ping edən bir cron sətri bunların heç birinə yaxşı cavab vermir. O, sağlam tunelləri yenidən qoşur və pozulmuş tunelləri elə buraxır, və hər ikisini heç bir qeyd olmadan edir. Saxlamağa dəyər dizayn bu üç seçimi açıq şəkildə ortaya qoyur.

Yoxlama hər şeyi təyin edən hissədir.

İnternetə ping əslində nəyi sübut edir

Ümumi bir ad serverinə ping göndərmək yerli internet yolunun canlı olduğunu göstərir. Bu, tunelin trafik daşıdığını sübut etmir və tam tunel profilində ping özü tuneldən keçir, ona görə də sağlam cavabla pozulmuş tunel, müştəri hələ də paketləri ötürərkən birgə mövcud ola bilər. Profil ad axtarışlarını tuneldən göndərirsə, DNS xətası ölü əlaqə kimi oxunur və heç nəyi düzəldə bilməyən yenidən qoşulma başladır.

Xətanın iki istiqamətindən heç biri çıxış kodunda görünmür. Həmin siqnal üzərində qurulmuş nəzarətçi cron cədvəli ilə sikkə atmaqdır.

Tunelin arxasında yaşayan bir şeyi yoxlayın

ip -brief addr show tun0
ip route get 10.100.20.10
nc -z -w3 10.100.20.10 443

İçəridən yoxlayın, ən ucuz yoxlama əvvəl. İnterfeysin mövcudluğu tunelin qalxdığını bildirir; tanınan daxili ünvana marşrut axtarışı trafikin ora girəcəyini bildirir; qarşı tərəfdəki hosta TCP yoxlaması isə nəyinsə həqiqətən cavab verdiyini bildirir. Yalnız echo sorğuları yanıldır: bir çox daxili host TCP-yə məmnuniyyətlə cavab verir, ICMP-ni isə atır, buna görə ping üzərində qurulmuş nəzarətçi heç vaxt işləməkdən dayanmayan tuneli yenidən qoşur.

Yoxlamanı vaxtla məhdudlaşdırın və ona ayrı çıxış statusu verin. Otuz saniyə asılı qalan yoxlama nəzarətçini daxili gecikməsi olan kəsinti aşkarlayıcısına çevirir.

Bir sətirlə dövrə arasında seçin

* * * * * nc -z -w5 10.100.20.10 443 || myvpn reconnect

Cron qeydi yaddaşsız tək bir sətirdir, bu da əlavə yenidən qoşulmanın heç nəyə başa gəlmədiyi noutbuk üçün uyğundur. Nəzarət altındakı dövrə sayğac saxlayır və yalnız bir neçə buraxılmış yoxlamadan sonra hərəkət edir, bu da qeyri-sabit əlaqənin yenidən qoşulmalar tufanı yaratmasının qarşısını alır. Hər halda onu nəzarətçi altında işlədin ki, qəzadan sağ çıxsın və jurnala yazsın. Seçimi artıq yenidən qoşulmanın vacib olub-olmamasına görə edin, hansı versiyanın qısa olmasına görə yox.

failures=0
while sleep 30; do
  if nc -z -w5 10.100.20.10 443; then failures=0
  else failures=$((failures+1)); fi
  if [ $failures -ge 3 ]; then myvpn reconnect; failures=0; fi
done

Bu dövrə pəncərə üzrə nisbət yerinə ardıcıl uğursuzluqları sayır. Pəncərə saat və nümunə yaddaşı tələb edir, və əl ilə yazılmış nəzarətçilərdəki xətaların çoxu məhz bu hesablamalarda yaşayır.

Keçid fərqli bir qərardır

Serverləri dəyişmək yenidən qoşulmaqdan fərqlənir. Əvvəlcə köhnə əlaqəni qırın, çünki birinci hələ ünvanı saxlayarkən başlayan ikinci müştəri toqquşacaq. Dəyişməzdən əvvəl ardıcıl uğursuzluqları sayın, cəhdləri məhdudlaşdırın və yeni əlaqə qalxdıqdan sonra connect əmrinin çıxış statusuna güvənmək əvəzinə yenidən yoxlayın. Səhv konfiqurasiya bütün serverlər boyunca dövrə ilə fırlanmamalıdır.

VPN serverinin öz ümumi ünvanını tam tunelin içindən yoxlamayın. Bu yoxlama sınaqdan keçirdiyi şeydən asılıdır və yoxlamalı olduğu yol artıq yox ikən uğur bildirir.

Hansı yoxlamanın işlədiyini, nə qaytardığını və hansı hərəkətin gəldiyini qeyd edin. Bu qeyd sirli yenidən qoşulmanı diaqnoz qoyula bilən hadisəyə çevirir.

Əlaqəli məqalələr