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

Дзве назіранні, два асобныя вердыкты

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

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

Пабудуйце зонд, які можна замерыць

Выкарыстоўвайце запыт, які ёсць бяскрыўдны, танны і незалежны ад уласнага канала кіравання тунеля. Цыкл ніжэй друкуе адзнаку часу, статус 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'

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

Запішыце вынік у форме, якая перажыве абнаўленне

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

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

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