Как проверить стабильность VPN, не записывая свою историю просмотров
Докажите стабильность туннеля фиксированным зондом, четырьмя выборочными фактами и журналом событий с отметками времени вместо того, чтобы пропускать повседневный просмотр через тест.
Вы хотите узнать, переживёт ли туннель сон ноутбука, переход между точками доступа, или час звонков, и при этом не хотите отдавать кому-либо журнал всего, что читаете, пока это выясняете. Три вещи отвечают на это: фиксированный зонд, те же четыре факта, снимаемые по расписанию, и событие, которое их изменило, записанное. Десять минут этого лучше, чем целый день наблюдения за страницей, которая не загружается. Журнал, который в итоге останется, ещё и достаточно короток, чтобы приложить его к тикету, не вымарывая половину.
Решите, что должно означать «стабильно»
«VPN упал» — это четыре разные неисправности под одним словом. Пир может потерять рукопожатие, маршрут может откатиться на локальный шлюз, разрешение имён может уйти на сервер, который никогда не отвечает через туннель, или всё это может быть здоровым, пока одно приложение всё равно отказывает. Решите, какая из них соответствует вашему симптому, прежде чем что-либо собирать, потому что каждой нужен свой зонд. Затем выберите интервал, который вы выдержите: одна выборка каждые тридцать секунд в течение десяти минут поймает роуминг, не превращая тест в рабочую нагрузку.
Если жалоба — это зависающий звонок, когда вы идёте на кухню, нужное свойство состоит в том, завершается ли свежий запрос после роуминга. Это проверяется одной строкой и вообще не записывает никакого просмотра.
Зафиксируйте один безобидный зонд
Выберите место назначения, которое вам разрешено опрашивать и которое не связано с вашими учётными записями: хост документации, внутреннюю конечную точку состояния или сам шлюз туннеля. Сделайте операцию воспроизводимой, например curl -s -o /dev/null -w "%{http_code} %{time_total}\n" https://example.com/, который печатает одну строку на попытку. Держите этот формат вывода неизменным на протяжении всего прогона. Код состояния и длительность, собранные одинаково дважды, — это то, что делает два прогона сравнимыми.
Сопротивляйтесь сайту, на который вы действительно полагаетесь. Страница банка или веб-почты втягивает в измерение трекеры, перенаправления и личное содержимое и печатает идентификаторы сеанса во всё, что вы позже вставите в тикет. Используйте одно и то же место назначения на всём протяжении исследования и запишите его рядом с интервалом.
Снимайте четыре факта
Состояние пира, маршрут, распознаватель и один свежий запрос — это четыре наблюдения, и у каждого есть дешёвый источник. В WireGuard wg show wg0 latest-handshakes даёт отметку времени пира, а ip route get 1.1.1.1 показывает, какой интерфейс использовало бы ядро. В OpenVPN то же состояние лежит в файле состояния, который пишет --status /run/openvpn/status 10, или за state на интерфейсе управления. Клиент Windows остаётся в PowerShell с Get-NetAdapter и Resolve-DnsName.
Закольцуйте их в одном терминале, чтобы каждая строка несла отметку времени: for i in $(seq 1 20); do date -Is; wg show wg0 latest-handshakes; ip route get 1.1.1.1; sleep 30; done. Этот цикл покрывает три из шести полей журнала; версия клиента вносится один раз сверху, а отметка времени события добавляется, когда событие происходит.
Распознаватель — это факт, который люди пропускают, и dig +short его скрывает, потому что эта форма печатает только ответ. Спросите сервер явно с помощью dig example.com | grep SERVER: или используйте nslookup example.com там, где dig не установлен, — она печатает адрес сервера, к которому ушёл запрос. Старое рукопожатие на простаивающем туннеле тоже не является автоматически неисправностью, поскольку WireGuard меняет ключи только тогда, когда есть трафик, который нужно защищать.
Вызовите событие, а не утечку
Возьмите пять тихих минут как базовую линию перед событием, которое вам важно, будь то закрытие крышки, переход к другой точке доступа или переключение на точку доступа телефона. Запишите время, когда вы его вызвали, чтобы выборки с обеих сторон можно было выровнять.
Без этой отметки времени журнал показывает разрыв, и никто не может сказать, закрыл ли его клиент или сеть. Два прогона с событием в разных местах ценнее десяти без него. Пользуйтесь собственными средствами клиента для отключения и повторного подключения. Не отключайте kill switch и не выталкивайте трафик за пределы туннеля, чтобы увидеть, что произойдёт, потому что на управляемом ноутбуке это нарушение политики, а на вашей собственной машине создаёт именно ту уязвимость, которую вы тестировали.
Держите журнал достаточно малым, чтобы его закончить
Шесть полей на выборку: время, версия клиента, конечная точка, сеть доступа, событие, результат. Оставьте за бортом веб-адреса, полезные нагрузки, токены и всё, что несёт идентификатор сеанса, потому что журнал — это доказательство о туннеле и ничего больше. Держите его рядом с циклом, чтобы следующий человек мог запустить его снова, не спрашивая, что означают столбцы.
После изменения повторите тест с тем же зондом и тем же интервалом; если поменять место назначения и версию клиента вместе, результат не принадлежит ни одному из них. Чистый десятиминутный прогон — это доказательство для тех условий и того места назначения, а не обещание насчёт гостиничной сети в следующем месяце. Держите скрипт и шаблон журнала там, где вы их найдёте. документированные ограничения WireGuard стоит прочитать, прежде чем приписывать обрыв протоколу.