Бір секундта аяқталатын қайта қосылу клиенттің жылдам екенін айтады. Ол туннель өшіп тұрғанда бірдеңе сыртқа шықты ма, жоқ па — айтпайды. Бір минутқа созылатын қайта қосылу клиенттің баяу екенін айтады, және үзіліс кезінде тікелей трафикке рұқсат берілді ме — оны да айтпайды. Бұл екі өлшем, ал тек біріншісін хабарлайтын kill switch сынағы ажыратқышты сынаған жоқ.

Екі бақылау, екі бөлек үкім

Қолжетімділік сұрағы қарапайым: туннель қашан қайтадан жарамды болды, және қорғалған қосымшаға сол жерге жету үшін жаңа байланыс керек пе. Орындау сұрағы басқа: қорғаныс құлаған сәттен оның қайтқан сәтіне дейін машинадан қандай пакеттер шықты.

Оларға бөлек жазбалармен жауап беріңіз. Бір жол үзілістің белгілі бір секунд санына созылғанын айтады. Басқа жол сол үзіліс кезінде қорғалмаған сұраныстың сәтті болғанын айтады. Оларды бір өтті немесе құлады нәтижесіне біріктіру ең маңызды жағдайды жасырады: ағып кетумен бірге жылдам қайта қосылу.

Уақытын өлшеуге болатын зонд құрыңыз

Мындай сұранысты пайдаланыңыз: зиянсыз, арзан және туннельдің өз басқару арнасынан тәуелсіз. Төмендегі цикл секундына бір рет уақыт белгісін, HTTP күйін және өткен уақытты басып шығарады, және ілініп қалудың орнына қатты дыбыспен сәтсіздікке ұшырайды:

while true; do
  printf '%s ' "$(date +%H:%M:%S)"
  curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' --max-time 2 https://example.com || echo "curl-exit-$?"
  sleep 1
done

Тек күй емес, curl шығу кодтарын оқыңыз. 28 сұраныстың уақыты біткенін білдіреді — бұғатталған жол осылай көрінеді. 6 атауларды шешу сәтсіз болғанын білдіреді, бұл басқа табылым және көбіне қызықтырақ. Үзіліс кезінде өткен уақыты аз 200 трафикке сыртқа шығуға рұқсат берілгенін білдіреді.

Шығысты файлға жазып, оны сақтаңыз. Терминал тарихы дәлел емес, ал қызықты бөлігі әдетте ортадағы үш жол.

Нағыз істен шығуды тудырыңыз, реттелгенді емес

Клиенттің өз мәзірінен ажырату кооперативтік жолды тексереді, онда клиенттің бұғаттау ережелерін орнатуға уақыты бар. Оның орнына процесті өлтіріңіз немесе төменгі байланысты үзіңіз, сонда нағыз істен шығу жүретін жолды тексересіз.

Әр триггер басқа код жолын жаттықтырады. Сервер жағындағы іркіліс, жергілікті байланыстың жоғалуы және клиенттің құлауы әрқайсысы басқа күй қалдыруы мүмкін, және солардың біреуі сайып келгенде кездесетін жағдай болуы ықтимал. Зондты кемінде екі триггерде іске қосыңыз және нәтижелерді триггер бойынша белгілеңіз.

Рұқсат етілген трафиктің қандай болатынын журналдан оқыңыз

Үзіліс кезіндегі 200 немесе жылдам байланыс сәтсіздігі — қай бағытқа қараса да ағып кету. Бүкіл үзіліс бойы уақыттың бітуі бұғаттау саясатының күтілетін пішіні. Байланыстар сәтсіз болғанда атауларды шешудің сәтті болуы шешушінің әлі қолжетімді екенін көрсетеді, бұл басқа түрдегі ағып кету.

Бар сокеттер абайлауды қажет етеді. Бағдарлама ажыратуға дейін ашқан байланысты пайдалануды жалғастыра алады, сондықтан тірі көрінетін трафик жаңа жолға рұқсат берілгенін дәлелдей алмауы мүмкін. Сокеттер тізімі байланыстың оқиғадан бұрын болғанын көрсетеді:

ss -tunp | grep -E 'ESTAB|SYN-SENT'
ip route get 198.51.100.7
resolvectl status | sed -n '1,20p'

Сокеттің басталу уақытын ажырату уақыт белгісімен салыстырыңыз. Іркілістен ескі байланыс — бұл ағып кетудің емес, сокетті қайта пайдаланудың дәлелі, және оны сәтсіздік деп хабарлау келесі адамды жоқ қатені іздеуге жібереді.

Нәтижені жаңартудан аман қалатын пішінде жазыңыз

Триггерді, үзілісті секундпен, кез келген бұғатталмаған сұраныстың сәтті болғанын, атауларды шешудің сәтті болғанын, сондай-ақ клиент пен операциялық жүйенің нұсқаларын жазыңыз. Бес фактіден тұратын бұл жиынтықты шығарылымдар арасында салыстыруға болады, ал проза абзацы мұны істей алмайды.

Клиент жаңартылғаннан немесе профиль өзгергеннен кейін сол сынақты қайта іске қосыңыз, өйткені бұғаттау мінез-құлқы іске асыру бөлшегі және ол орын ауыстырады. Жазбаның мақсаты — орын ауыстыруды оқиғаға айналмай тұрып байқау, клиентті бір рет сертификаттау емес.

Қатысты мақалалар