Пінг-вартавы не адрознівае зламаны тунель ад спраўнага
Пінг у інтэрнэт даказвае менш, чым здаецца. Правярайце тунель знутры, лічыце збоі перад дзеяннем і лічыце пераключэнне асобным рашэннем.
Тры ўмовы вырашаюць, ці дапамагае вартавы ці шкодзіць: што можа адрозніць проба, колькі паслядоўных збояў апраўдваюць дзеянне і ці дзеянне — гэта перападключэнне або пераключэнне. Радок cron, які пінгуе публічны адрас, ні на адно з гэтага добра не адказвае. Ён перападключае тунелі, якія цалкам спраўныя, і пакідае тунелі, якія зламаныя, і робіць абодва без запісу. Дызайн, які варта захаваць, робіць гэтыя тры выбары відавочнымі.
Проба — гэта частка, якая вызначае ўсё астатняе.
Што насамрэч даказвае пінг у інтэрнэт
Пінг да публічнага рэзалвера паказвае, што лакальны інтэрнэт-шлях жывы. Ён не даказвае, што тунель перадае трафік, а ў профілі поўнага тунеля сам пінг ідзе праз тунель, таму спраўны адказ і зламаны тунель могуць існаваць адначасова, пакуль кліент яшчэ перасылае пакеты. Калі профіль адпраўляе пошук імёнаў праз тунель, збой DNS чытаецца як мёртвая сувязь і запускае перападключэнне, якое не можа нічога выправіць.
Ні адзін з двух кірункаў памылкі не паяўляецца ў кодзе выхаду. Вартавы, пабудаваны на гэтым сігнале, — гэта кідок манеты з раскладам cron.
Правярайце тое, што жыве за тунелем
ip -brief addr show tun0 ip route get 10.100.20.10 nc -z -w3 10.100.20.10 443
Правярайце знутры, самая танна праверка першая. Існаванне інтэрфейса кажа, што тунель узняты; пошук маршруту да вядомага ўнутранага адраса кажа, што трафік пойдзе ў яго; TCP-проба да хоста на іншым баку кажа, што нешта сапраўды адказвае. Адны запыты рэха ўводзяць у зман: шмат унутраных хостаў ахвотна адказваюць на TCP, але скідаюць ICMP, таму вартавы на пінгу пастаянна перападключае тунель, які ніколі не спыняў працы.
Трымайце пробу абмежаванай у часе і дайце ёй асобны статус выхаду. Проба, якая завісае на трыццаць секунд, ператварае вартавога ў дэтэктар адключэнняў з убудаванай затрымкай.
Выберыце паміж адным радком і цыклам
* * * * * 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-сервера знутры поўнага тунеля. Гэтая праверка залежыць ад таго, што яна тэстуе, і паведамляе пра поспех, пакуль шлях, які яна павінна была пацвердзіць, ужо знік.
Запішыце, якая проба выконвалася, што яна вярнула і якое дзеянне рушыла следам. Гэты запіс ператварае загадкавае перападключэнне ў падзею, якую можна дыягнаставаць.