Аварийный переключатель VPN: какой трафик он блокирует и когда
Переподключение восстанавливает туннель; переключатель решает, что происходит, пока его нет. Проверяйте по отдельности обрыв, ручное отключение, выход из приложения и смену сети.
Две функции описывают одним словом, а они делают разную работу. Автоматическое переподключение пытается вернуть туннель, и это может удаться за секунду, пока запросы в этот промежуток терпят неудачу. Переключатель решает, что будет с трафиком в этот промежуток. Читать клиент так, будто это одна настройка, — значит в итоге доверять значку, а не политике.
Блокировка и переподключение — разные решения
Один клиент блокирует только при неожиданном обрыве, затем переподключается и снимает блокировку. Другой держит блокировку на уровне системы, пока кто-то не изменит настройку вручную, а третий считает намеренное отключение разрешением вернуть обычный доступ. Это три разных поведения, и документация поставщика говорит, какое реализует ваша сборка.
Импорт профиля ничего в этом вопросе не решает. Один и тот же профиль сервера загружается в два клиента с противоположным поведением блокировки, потому что профиль несёт настройки, а не обещание. Поэтому флажок на компьютере и переключатель на телефоне с похожими подписями могут реализовывать разные правила. Прочитайте описание рядом с элементом управления на вашей платформе и затем проверьте, что он делает.
Один и тот же профиль ведёт себя по-разному в двух клиентах
Настройки приложения OpenVPN Connect описывают режим туннеля, который удерживает обычный трафик только пока клиент сообщает о состоянии паузы или переподключения, что уже, чем общее обещание для каждого события на каждой платформе. Читайте перечисленные состояния, а не название продукта. Описание, написанное для одной сборки клиента, не переносится на клиент другого поставщика.
Android показывает одно и то же слово для двух элементов управления, потому что постоянный VPN и блокировка соединений без VPN документируются отдельно. Клиент для компьютера с похожим по названию флажком может реализовывать нечто более узкое или широкое, чем любой из них. Считайте общую подпись в двух меню случайностью, пока не прочитаны оба описания. Управляемые устройства добавляют третий слой, потому что профиль устройства может навязать настройку, которую пользователь не видит и не может отменить.
Похожие настройки платформы не равноценны
Сравните элемент управления, который вы видите, с политикой, которая действует на самом деле. На управляемом устройстве видимый переключатель может быть серым или включённым, тогда как профиль более высокого уровня навязывает обратное. Запрашивайте действующую политику, а не локальную, и получайте ответ письменно.
Запишите, что утверждает каждый слой, прежде чем что-либо проверять, потому что они часто расходятся, и это расхождение легко потерять, как только начнутся проверки. Устройство, которое во время проверки блокирует правильно, может блокировать по причине, которую никто не задокументировал.
Выполняйте одно событие за раз и записывайте код
Проверяйте одно событие за запуск, с безобидным запросом, и делайте каждую попытку новым запросом, а не страницей, которая, возможно, уже в кеше. Команды ниже опускают туннель, запрашивают страницу и показывают, вернулся ли интерфейс.
ip link set tun0 down
curl -s -o /dev/null -w "%{http_code}\n" --max-time 5 https://example.com
ip -brief address show tun0
Таблица связывает каждое действие с наблюдением, которое важно, и с доказательством, которое стоит сохранить. Запрос, который не проходит в пределах тайм-аута, говорит, что блокировка сработала; запрос, который проходит, говорит, что трафик нашёл другой путь, и это может быть исключённый маршрут, а не отключённая блокировка. Повторите весь набор после значительного обновления программного обеспечения или изменения политики маршрутизации, потому что любое из этого может изменить ветку без движения ни одной видимой настройки. В итоге вам нужно предсказуемое поведение при отказе, а не успокаивающий значок.
| What I do | What I watch | Evidence to keep |
|---|---|---|
| Bring the tunnel down by hand | Whether a fresh request fails at once | The HTTP code and the client state at that second |
| Choose Disconnect in the client | Whether ordinary access returns on purpose | The same request succeeding with no tunnel up |
| Quit the app, then reboot | Whether the block outlives the client | A request made from a clean boot |
| Move from Wi-Fi to cellular | Whether DNS and IPv6 follow the policy | The resolver answer, the route table and the code again |
Исключения, гостевые порталы и то, чего блокировка не может
Доступ к локальной сети — обычное исключение, и оно меняет охват обещания. Клиент может добраться до принтера в той же подсети, блокируя всё остальное, что разумно дома и сомнительно в гостевой сети. Решите, нужно ли вам это исключение, прежде чем инцидент обнаружит его за вас.
Строгая блокировка также затрудняет вход на портал гостевой сети, потому что портал — это именно тот прямой трафик, который блокировка призвана останавливать. Изучите поддерживаемый способ авторизации сети, затем осознанно восстановите политику, вместо того чтобы отключать элементы управления, пока не загрузится страница. Держите ответ резолвера и таблицу маршрутов в одной заметке, как ниже. Чего переключатель не может — сделать сервис анонимным, потому что блокировка трафика вне туннеля ничего не говорит о том, что происходит внутри него.
resolvectl query example.com
ss -tunp | grep -v tun0