Pingový strážca nerozlíši pokazený tunel od zdravého
Ping na internet dokazuje menej, než sa zdá. Snímajte tunel zvnútra, počítajte zlyhania pred zásahom a prechod na iný server berte ako samostatné rozhodnutie.
Tri podmienky rozhodujú, či strážca pomáha, alebo škodí: čo dokáže sonda rozlíšiť, koľko po sebe idúcich zlyhaní ospravedlní zásah a či je zásahom opätovné pripojenie alebo prepnutie. Riadok cronu, ktorý pinguje verejnú adresu, na žiadnu z nich dobre neodpovedá. Znovu pripája tunely, ktoré sú v poriadku, a necháva pokazené tunely tak, a oboje robí bez záznamu. Dizajn, ktorý stojí za to zachovať, robí tieto tri voľby výslovnými.
Sonda je časť, ktorá určuje všetko ostatné.
Čo ping na internet skutočne dokazuje
Ping na verejný resolver ukazuje, že miestna internetová cesta je živá. Nedokazuje, že tunel prenáša prevádzku, a pri profile plného tunela putuje samotný ping tunelom, takže zdravá odpoveď a pokazený tunel môžu existovať súčasne, kým klient ešte preposiela pakety. Ak profil posiela hľadanie mien tunelom, zlyhanie DNS sa číta ako mŕtve spojenie a spustí opätovné pripojenie, ktoré nič neopraví.
Ani jeden z dvoch smerov chyby sa v návratovom kóde neobjaví. Strážca postavený na tomto signáli je hod mincou s plánom cronu.
Snímajte niečo, čo žije za tunelom
ip -brief addr show tun0 ip route get 10.100.20.10 nc -z -w3 10.100.20.10 443
Snímajte zvnútra, najlacnejšia kontrola najprv. Existencia rozhrania hovorí, že tunel je hore; hľadanie trasy k známej vnútornej adrese hovorí, že by do nej prevádzka vošla; TCP sonda na hosťa na druhej strane hovorí, že niečo skutočne odpovedá. Samotné požiadavky echo klamú: mnohí vnútorní hostitelia ochotne odpovedajú na TCP, ale zahadzujú ICMP, takže strážca postavený na pingu stále znovu pripája tunel, ktorý nikdy neprestal fungovať.
Držte sondu časovo ohraničenú a dajte jej vlastný návratový stav. Sonda, ktorá visí tridsať sekúnd, mení strážcu na detektor výpadkov so vstavaným oneskorením.
Vyberte medzi jedným riadkom a slučkou
* * * * * nc -z -w5 10.100.20.10 443 || myvpn reconnect
Záznam v cronu je jediný riadok bez pamäte, čo sa hodí k notebooku, kde ďalšie pripojenie nič nestojí. Sledovaná slučka drží počítadlo a koná až po niekoľkých netrafeniach, čo bráni nestabilnému spojeniu vyvolať búrku opätovných pripojení. V každom prípade ju spúšťajte pod správcom, aby prežila pád a písala do žurnálu. Vyberajte podľa toho, či záleží na falošnom pripojení, nie podľa toho, ktorá verzia je kratšia.
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
Tá slučka počíta po sebe idúce zlyhania, nie podiel za okno. Okno potrebuje hodiny a pamäť vzoriek, a väčšina chýb v ručne písaných strážcoch žije práve v tejto aritmetike.
Prepnutie je iné rozhodnutie
Prechod na iný server sa líši od opätovného pripojenia. Najprv roztrhnite staré spojenie, pretože druhý klient, ktorý začne, kým prvý ešte drží adresu, sa zrazí. Počítajte po sebe idúce zlyhania pred prepnutím, obmedzte pokusy a po zdvihnutí nového spojenia sondu zopakujte, namiesto toho, aby ste verili návratovému kódu príkazu connect. Nesprávna konfigurácia by nemala rotovať cez každý server v slučke.
Nesnímajte vlastnú verejnú adresu VPN servera zvnútra plného tunela. Tá kontrola závisí od veci, ktorú testuje, a hlási úspech, keď cesta, ktorú mala overiť, už nie je.
Zaznamenajte, ktorá sonda bežala, čo vrátila a aká akcia nasledovala. Ten záznam mení záhadné pripojenie na udalosť, ktorú možno diagnostikovať.