Тры ўмовы вырашаюць, ці дапамагае вартавы ці шкодзіць: што можа адрозніць проба, колькі паслядоўных збояў апраўдваюць дзеянне і ці дзеянне — гэта перападключэнне або пераключэнне. Радок 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-сервера знутры поўнага тунеля. Гэтая праверка залежыць ад таго, што яна тэстуе, і паведамляе пра поспех, пакуль шлях, які яна павінна была пацвердзіць, ужо знік.

Запішыце, якая проба выконвалася, што яна вярнула і якое дзеянне рушыла следам. Гэты запіс ператварае загадкавае перападключэнне ў падзею, якую можна дыягнаставаць.

Падобныя артыкулы