Trīs nosacījumi nosaka, vai sargs palīdz vai kaitē: ko pārbaude spēj atšķirt, cik secīgu neveiksmju attaisno rīcību un vai rīcība ir atkārtota savienošana vai maiņa. Cron rinda, kas pingē publisku adresi, ne uz vienu no tiem labi neatbild. Tā atkārtoti savieno tuneļus, kas ir kārtībā, un atstāj salauztos, un dara abus bez jebkāda ieraksta. Dizains, ko ir vērts saglabāt, šīs trīs izvēles padara skaidras.

Pārbaude ir daļa, kas nosaka visu pārējo.

Ko ping uz internetu patiešām pierāda

Pings uz publisku resolveri parāda, ka vietējais interneta ceļš ir dzīvs. Tas nepierāda, ka tunelis pārvadā trafiku, un pilna tuneļa profilā pats pings ceļo pa tuneli, tāpēc vesela atbilde un salauzts tunelis var pastāvēt vienlaikus, kamēr klients vēl pārsūta paketes. Ja profils sūta nosaukumu meklēšanu pa tuneli, DNS kļūda tiek lasīta kā mirusi saite un sāk atkārtotu savienošanu, kas neko nevar salabot.

Neviens no abiem kļūdas virzieniem neparādās izejas kodā. Uz šī signāla būvēts sargs ir monētas mešana ar cron grafiku.

Pārbaudiet kaut ko, kas dzīvo aiz tuneļa

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

Pārbaudiet no iekšpuses, lētākā pārbaude vispirms. Vai saskarne eksistē, saka, ka tunelis ir augšā; maršruta meklēšana uz zināmu iekšējo adresi saka, ka trafiks tajā ieietu; TCP pārbaude uz resursdatoru otrā pusē saka, ka kaut kas tiešām atbild. Vienīgi echo pieprasījumi maldina: daudzi iekšējie resursdatori labprāt atbild uz TCP, bet izmet ICMP, tāpēc uz ping balstīts sargs pastāvīgi atkārtoti savieno tuneli, kas nekad nav pārstājis darboties.

Turiet pārbaudi laikā ierobežotu un dodiet tai atsevišķu izejas statusu. Pārbaude, kas karājas trīsdesmit sekundes, pārvērš sargu par pārtraukumu detektoru ar iebūvētu aizturi.

Izvēlieties starp vienu rindu un cilpu

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

Cron ieraksts ir viena rinda bez atmiņas, kas der klēpjdatoram, kur papildu savienošana neko nemaksā. Uzraudzīta cilpa tur skaitītāju un rīkojas tikai pēc vairākiem garām palaistiem gadījumiem, kas neļauj nestabilai saitei izraisīt savienošanas vētru. Jebkurā gadījumā palaidiet to uzrauga vadībā, lai tā pārdzīvotu avāriju un rakstītu žurnālā. Izvēlieties pēc tā, vai lieka savienošana ir svarīga, nevis pēc tā, kura versija ir īsāka.

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

Šī cilpa skaita secīgas neveiksmes, nevis daļu logā. Logam vajag pulksteni un paraugu atmiņu, un lielākā daļa ar roku rakstītu sargu kļūdu dzīvo tieši šajā aritmētikā.

Maiņa ir cits lēmums

Serveru maiņa atšķiras no atkārtotas savienošanas. Vispirms pārtrauciet veco saiti, jo otrs klients, kas sāk darbu, kamēr pirmais vēl tur adresi, sadursies. Skaitiet secīgas neveiksmes pirms maiņas, ierobežojiet mēģinājumus un pārbaudiet vēlreiz, kad jaunā saite ir augšā, nevis paļaujieties uz komandas connect izejas statusu. Nepareiza konfigurācija nedrīkstētu griezties cauri katram serverim cilpā.

Nepārbaudiet paša VPN servera publisko adresi no pilna tuneļa iekšpuses. Šī pārbaude ir atkarīga no lietas, ko tā testē, un ziņo par panākumiem, kamēr ceļš, kas tai bija jāapstiprina, jau ir pazudis.

Pierakstiet, kura pārbaude darbojās, ko tā atdeva un kāda darbība sekoja. Šis ieraksts pārvērš noslēpumainu savienošanu diagnosticējamā notikumā.

Saistītie raksti