Drie toestande bepaal of ’n waghond help of skade doen: wat die toets kan onderskei, hoeveel opeenvolgende mislukkings optrede regverdig, en of die optrede ’n herverbinding of ’n oorskakeling is. ’n Cron-reël wat ’n openbare adres ping, antwoord nie een van hulle goed nie. Dit herverbind tonnels wat heeltemal reg is en laat tonnels wat stukkend is, staan, en dit doen albei sonder enige aantekening. Die ontwerp wat die moeite werd is om te hou, maak daardie drie keuses eksplisiet.

Die toets is die deel wat al die res bepaal.

Wat ’n ping na die internet werklik bewys

Om ’n openbare resolver te ping, wys dat die plaaslike internetpad leef. Dit bewys nie dat die tonnel verkeer dra nie, en op ’n voltonnel-profiel reis die ping self deur die tonnel, so ’n gesonde antwoord en ’n gebroke tonnel kan saam bestaan terwyl die kliënt nog steeds pakkette aanstuur. As die profiel naamsopsporings deur die tonnel stuur, lees ’n DNS-fout soos ’n dooie skakel en begin ’n herverbinding wat niks kan regmaak nie.

Nie een van die twee rigtings van die fout verskyn in die uitgangskode nie. ’n Waghond wat op daardie signaal gebou is, is ’n muntgooi met ’n cron-skedule.

Toets iets wat agter die tonnel woon

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

Toets van binne, die goedkoopste kontrole eerste. Of die koppelvlak bestaan, sê vir jou die tonnel is op; ’n roetesoektog na ’n bekende interne adres sê die verkeer sou daarin ingaan; ’n TCP-toets na ’n gasheer aan die oorkant sê iets antwoord werklik. Eggo-versoeke alleen mislei: baie interne gashere antwoord graag op TCP terwyl hulle ICMP laat val, so ’n waghond wat op ping gebou is, herverbind ’n tonnel wat nooit opgehou werk het nie.

Hou die toets in tyd begrens en gee dit ’n aparte uitgangsstatus. ’n Toets wat dertig sekondes hang, verander ’n waghond in ’n storingsopspoorder met ’n ingeboude vertraging.

Kies tussen ’n eenreël en ’n lus

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

’n Cron-inskrywing is ’n enkele reël sonder geheue, wat by ’n skootrekenaar pas waar ’n ekstra herverbinding niks kos nie. ’n Gekontroleerde lus hou ’n teller by en tree eers op nadat verskeie toetse misluk het, wat keer dat ’n wankelrige skakel ’n storm herverbindings veroorsaak. Maak dit in elk geval onder ’n toesighouer loop sodat dit ’n ineenstorting oorleef en na die joernaal skryf. Kies op grond van of ’n onnodige herverbinding saak maak, nie op grond van watter weergawe korter is nie.

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

Daardie lus tel opeenvolgende mislukkings eerder as ’n breuk oor ’n venster. ’n Venster het ’n klok en ’n geheue van monsters nodig, en die meeste foute in selfgeboude waghonde lê in daardie rekenkunde.

Oorskakeling is ’n ander besluit

Om bedieners te ruil verskil van herverbind. Breek eers die ou skakel af, want ’n tweede kliënt wat begin terwyl die eerste nog die adres hou, sal bots. Tel opeenvolgende mislukkings voordat jy ruil, beperk die pogings, en toets weer sodra die nuwe skakel op is eerder as om die verbindingsopdrag se uitgangsstatus te vertrou. ’n Verkeerde opset moet nie in ’n lus deur elke bediener roteer nie.

Moenie die VPN-bediener se eie openbare adres van binne ’n vol tonnel toets nie. Daardie kontrole hang af van die ding wat dit toets, en dit rapporteer sukses terwyl die pad wat dit moes bevestig, weg is.

Teken aan watter toets geloop het, wat dit teruggegee het en watter optrede gevolg het. Daardie rekord maak ’n raaiselagtige herverbinding ’n diagnoseerbare gebeurtenis.

Verwante artikels