Только включение или только исключение в раздельном туннеле: что выбрать по умолчанию?
Выберите значение по умолчанию до того, как строить список: пускать в туннель только названное или пускать всё и вырезать исключения. Затем проверьте приложение, которого в списке ни у кого нет.
Откройте раздел маршрутизации в клиенте VPN, и вы увидите два по-разному устроенных элемента управления, которые часто носят одну и ту же надпись. Один просит перечислить адресаты, которые должны попасть в туннель, а всё остальное продолжает идти через локальную сеть. Другой исходит из того, что в туннель идёт всё, и спрашивает, что нужно вырезать обратно. Оба на первой проверке дают работающий туннель, и оба поддерживаются добавлением строк в список, поэтому разница остаётся незаметной, пока кто-нибудь не установит что-то новое.
Это выбор значения по умолчанию, а не функция. Решите его, пока в списке нет двадцати записей.
Читайте значение по умолчанию в клиенте, а не в брошюре
В WireGuard это решение необычно наглядно, потому что AllowedIPs — это список включения и ничего больше. Пир с 0.0.0.0/0, ::/0 туннелирует всё, а пир с 10.20.0.0/16 — только эту сеть. Синтаксиса исключений нет, поэтому если нужно оставить одну подсеть снаружи, придётся либо перечислить все остальные префиксы, либо добавить политическую маршрутизацию вне интерфейса.
OpenVPN приходит к тому же с другой стороны: redirect-gateway def1 ставит полный туннель, а отдельные директивы route добавляют или переопределяют конкретные префиксы. Коммерческие клиенты обычно прячут и то и другое за флажком и таблицей адресатов, поэтому прежде чем доверять надписи, прочитайте, что именно правит таблица.
Спрашивать нужно не о том, как называется флажок. Спрашивать нужно о том, что происходит с пакетом, адресата которого нет ни в одном списке. Ответьте на это письменно, и остальная конфигурация выйдет из ответа сама. Пропустите вопрос, и первый необъяснимый сбой будет решать тот, кто в тот день ближе всех к клиенту.
Проследите за приложением, которого ни у кого нет в списке
В схеме только с включением это приложение выходит напрямую, через локальную сеть и локальный DNS. В схеме только с исключением оно идёт через туннель, насколько позволяет сервер, и именно здесь часто лежит разница между тем, заработает ли новый SaaS-инструмент в первый же день, и заявкой о том, что VPN его сломал.
Ни одно из значений по умолчанию само по себе не безопаснее. Только включение сужает то, что несёт туннель, и делает локальную сеть путём наименьшего сопротивления, а только исключение считает туннель обычным путём и относится к исключениям как к исключениям, что ближе к тому, что большинство корпоративных политик на самом деле имеет в виду.
| Question | Include-only | Exclude-only |
|---|---|---|
| Unlisted new app | goes direct | goes through the tunnel |
| A site that breaks over the VPN | add it to the list | carve it out |
| Internal names still resolve | only if routed and served | usually, until split DNS says otherwise |
| Upkeep | one entry per internal service | one entry per misbehaving public service |
Обратите внимание, объекты какого рода перечисляет платформа
VpnService.Builder в Android показывает список разрешённых приложений и список запрещённых приложений как две отдельные модели, а правила по приложению выбирают по пакету, а не по адресату. Браузер, помещённый в такой список, тащит за собой каждый адресат, который открывает, и это другая гранулярность, чем таблица маршрутов, и он не может починить один сломанный сайт внутри работающего приложения.
Настольные клиенты обычно смешивают оба вида в одном интерфейсе, поэтому проверьте, является ли добавляемая строка пакетом, именем хоста или префиксом. Они отказывают по-разному и решаются в разных местах. Строка с именем хоста обычно становится маршрутом плюс именем, а строка с пакетом — решением политики внутри клиента. Запишите, что именно вы добавили, потому что тот, кто будет это отлаживать, предположит другое.
Проверяйте состояние отказа, а не только удачный путь
Приложение, исключённое из туннеля, не получает автоматически чистый прямой доступ. Если клиент ещё и применяет правило блокировки без VPN, исключённый трафик может быть отброшен целиком, и это выглядит как сломанное приложение, а не как решение маршрутизации. Проверьте этот случай намеренно, а не узнавайте о нём из обращения пользователя.
Затем проверьте DNS и IPv6 как отдельные пункты. Туннель, который несёт только IPv4, оставляет приложению с поддержкой v6 обходной путь, а split DNS решает, разрешаются ли внутренние имена для трафика, который вообще не идёт через туннель. Запустите приложение из списка, приложение не из списка, поиск имени и одно переподключение, и храните результаты вместе с конфигурацией.
Запишите значение по умолчанию там, где его найдёт следующий
Запишите выбранное значение по умолчанию, исключения и их владельца там же, где лежит профиль клиента, потому что следующий администратор добавит запись, не читая этих рассуждений. Отмечайте дату и причину каждого исключения, чтобы устаревшее исключение для сайта, который с тех пор починили, можно было снять уверенно. Список без причин растёт бесконечно.
Когда кто-то сообщает об одном сломанном адресате, меняйте исключение, а не основу. Переворот значения по умолчанию ради одного сайта молча переносит все приложения не из списка на другую сторону туннеля.