Kolme ehtoa ratkaisee, auttaako vahti vai vahingoittaako se: mitä anturi pystyy erottamaan, kuinka monta peräkkäistä epäonnistumista oikeuttaa toiminnan ja onko toiminta uudelleenyhdistäminen vai vaihto. Cron-rivi, joka pingaa julkista osoitetta, ei vastaa hyvin yhteenkään niistä. Se yhdistää uudelleen tunneleita, jotka ovat kunnossa, ja jättää rikkoutuneet tunnelit ennalleen, ja tekee molemmat ilman kirjausta. Design, joka kannattaa säilyttää, tekee nämä kolme valintaa selviksi.

Anturi on se osa, joka ratkaisee kaiken muun.

Mitä ping internetiin todella todistaa

Julkisen resolverin pingaaminen osoittaa, että paikallinen internetreitti on elossa. Se ei todista, että tunneli kuljettaa liikennettä, ja täyden tunnelin profiilissa ping itse kulkee tunnelin läpi, joten terve vastaus ja rikkoutunut tunneli voivat olla samaan aikaan olemassa, kun asiakas vielä välittää paketteja. Jos profiili lähettää nimikyselyt tunnelin läpi, DNS-virhe luetaan kuolleeksi yhteydeksi ja käynnistää uudelleenyhdistämisen, joka ei voi korjata mitään.

Kumpikaan virheen suunta ei näy paluukoodissa. Tuolle signaalille rakennettu vahti on kolikonheitto cron-aikataululla.

Tutki jotain, joka elää tunnelin takana

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

Tutki sisältä, halvin tarkistus ensin. Rajapinnan olemassaolo kertoo, että tunneli on ylhäällä; reittihaku tunnettuun sisäiseen osoitteeseen kertoo, että liikenne menisi sinne; TCP-koetus toisella puolella olevaan isäntään kertoo, että jokin todella vastaa. Pelkät echo-pyynnöt johtavat harhaan: monet sisäiset isännät vastaavat mielellään TCP:hen mutta pudottavat ICMP:n, joten pingiin rakennettu vahti yhdistää jatkuvasti uudelleen tunnelia, joka ei koskaan lakannut toimimasta.

Pidä anturi ajallisesti rajattuna ja anna sille oma paluutila. Anturi, joka roikkuu kolmekymmentä sekuntia, muuttaa vahdin katkosilmaisimeksi, johon on rakennettu viive.

Valitse yhden rivin ja silmukan välillä

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

Cron-merkintä on yksi rivi ilman muistia, mikä sopii kannettavaan, jossa ylimääräinen uudelleenyhdistäminen ei maksa mitään. Valvottu silmukka pitää laskuria ja toimii vasta usean epäonnistumisen jälkeen, mikä estää ailahtelevaa yhteyttä aiheuttamasta uudelleenyhdistämisten myrskyä. Joka tapauksessa aja se valvojan alla, jotta se selviää kaatumisesta ja kirjoittaa lokiin. Valitse sen mukaan, onko aiheeton uudelleenyhdistäminen merkityksellistä, ei sen mukaan, kumpi versio on lyhyempi.

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

Silmukka laskee peräkkäisiä epäonnistumisia eikä osuutta ikkunan yli. Ikkuna tarvitsee kellon ja näytteiden muistin, ja useimmat käsin tehtyjen vahtien viat elävät juuri siinä aritmetiikassa.

Palvelimen vaihto on eri päätös

Palvelimien vaihtaminen eroaa uudelleenyhdistämisestä. Repäise ensin vanha yhteys alas, koska toinen asiakas, joka käynnistyy ensimmäisen vielä pitäessä osoitetta, törmää. Laske peräkkäiset epäonnistumiset ennen vaihtoa, rajaa yritykset ja tutki uudelleen, kun uusi yhteys on ylhäällä, sen sijaan että luottaisit connect-komennon paluukoodiin. Väärä kokoonpano ei saisi kiertää jokaisen palvelimen läpi silmukassa.

Älä tutki VPN-palvelimen omaa julkista osoitetta täyden tunnelin sisältä. Se tarkistus riippuu asiasta, jota se testaa, ja raportoi onnistumisen, kun sen piti vahvistaa reitti, joka on jo poissa.

Kirjaa, mikä anturi ajoi, mitä se palautti ja mikä toiminta seurasi. Se kirjaus muuttaa salaperäisen uudelleenyhdistämisen diagnosoitavaksi tapahtumaksi.

Aiheeseen liittyvät artikkelit