Үш шарт күзетшінің көмектесетінін немесе зиян келтіретінін анықтайды: тексеру нені ажырата алады, қанша қатарынан сәтсіздік әрекетті ақтайды және әрекет қайта қосылу ма, әлде ауыстыру ма. Жалпы мекенжайға ping жасайтын cron жолы олардың ешқайсысына жақсы жауап бермейді. Ол сау туннельдерді қайта қосады да, бүлінгендерін сол күйінде қалдырады, және екеуін де ешбір жазбасыз жасайды. Сақтауға тұрарлық дизайн осы үш таңдауды айқын етеді.

Тексеру — қалғанының бәрін анықтайтын бөлік.

Интернетке ping шын мәнінде нені дәлелдейді

Жалпы resolver-ге ping жасау жергілікті интернет жолының тірі екенін көрсетеді. Ол туннельдің трафик тасымалдайтынын дәлелдемейді, ал толық туннель профилінде ping өзі туннель арқылы өтеді, сондықтан сау жауап пен бүлінген туннель бір уақытта болуы мүмкін, клиент әлі де пакеттерді жіберіп жатқанда. Егер профиль атауларды іздеуді туннель арқылы жіберсе, DNS ақауы өлі байланыс ретінде оқылады және ешнәрсені түзете алмайтын қайта қосылуды бастайды.

Қатенің екі бағытының ешқайсысы шығу кодында көрінбейді. Осы сигналға құрылған күзетші cron кестесімен тиын лақтыру ғана.

Туннельдің артында тұратын нәрсені тексеріңіз

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

Ішінен тексеріңіз, ең арзан тексеру бірінші. Интерфейстің болуы туннельдің көтерілгенін айтады; белгілі ішкі мекенжайға маршрут іздеу трафиктің оған кіретінін айтады; арғы жақтағы хостқа TCP тексеруі шын мәнінде бірдеңе жауап беретінін айтады. Тек echo сұраныстары шатастырады: көптеген ішкі хосттар TCP-ге қуана жауап береді, бірақ ICMP-ні тастайды, сондықтан ping-ге құрылған күзетші жұмысын ешқашан тоқтатпаған туннельді үнемі қайта қосады.

Тексеруді уақытпен шектеп ұстаңыз және оған бөлек шығу мәртебесін беріңіз. Отыз секунд ілулі тұрған тексеру күзетшіні кіріктірілген кідірісі бар үзіліс тапқышына айналдырады.

Бір жол мен цикл арасында таңдаңыз

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

cron жазбасы — жады жоқ бір жол, бұл қосымша қайта қосылу ештеңе тұрмайтын ноутбукке жарайды. Қадағаланатын цикл санауыш ұстайды және бірнеше өткізіп алудан кейін ғана әрекет етеді, бұл тұрақсыз байланыстың қайта қосылу дауылын тудыруына жол бермейді. Қалай болғанда да, оны қадағалаушы астында іске қосыңыз, сонда ол құлаудан аман қалады және журналға жазады. Артық қайта қосылу маңызды ма, жоқ па — соған қарап таңдаңыз, қай нұсқа қысқа екеніне қарап емес.

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

Бұл цикл терезедегі үлесті емес, қатарынан сәтсіздіктерді санайды. Терезеге сағат пен үлгілер жады қажет, ал қолмен жасалған күзетшілердің қателерінің көбісі осы арифметикада тұрады.

Серверді ауыстыру — басқа шешім

Серверлерді ауыстыру қайта қосылудан өзгеше. Алдымен ескі байланысты үзіңіз, өйткені біріншісі әлі мекенжайды ұстап тұрғанда басталатын екінші клиент соқтығысады. Ауыстыру алдында қатарынан сәтсіздіктерді санаңыз, әрекеттерді шектеңіз және жаңа байланыс көтерілген соң қайта тексеріңіз, connect командасының шығу мәртебесіне сенудің орнына. Қате конфигурация циклмен барлық серверді айналып өтпеуі керек.

VPN серверінің өз жалпы мекенжайын толық туннельдің ішінен тексермеңіз. Бұл тексеру өзі сынап жатқан нәрсеге тәуелді және растауға тиіс жол жоғалған кезде сәттілік туралы хабарлайды.

Қай тексерудің жүргенін, оның не қайтарғанын және қандай әрекеттің болғанын жазыңыз. Бұл жазба жұмбақ қайта қосылуды диагностикалауға болатын оқиғаға айналдырады.

Қатысты мақалалар