Что на самом деле делает поле Proxy в профиле VPN на Apple
Заполнение поля прокси не превращает VPN в HTTP. Здесь участвуют два соединения, и поле достигает только одного из них.
Заполнение поля Proxy в конфигурации VPN на Apple создаёт ощущение, будто оно должно перенаправить туннель через веб-порт. Это не так. Поле выбирает посредника на уровне приложения для трафика, который совместимое приложение решит отправить туда. А соединение самого VPN-клиента со шлюзом определяется протоколом, слушателем и транспортом, которые вы настроили, и это отдельные решения.
Два соединения, два владельца
Любая такая конфигурация включает соединение от клиента к шлюзу и соединение от приложения к назначению. Раздел Proxy говорит о втором, хотя он находится в том же профиле, что и первое.
| Connection | What decides its behaviour |
|---|---|
| VPN client to VPN gateway | The supported protocol, the listening port, the transport and the network policy in between |
| Application to a selected proxy | The application's own proxy support, the configured proxy policy, and the route to that next hop |
Справочник настроек прокси от Apple перечисляет HTTP, HTTPS, SOCKS и автоматическую конфигурацию прокси, что описывает варианты прокси для приложений. Ни одна из этих записей не говорит, как пакет IPsec или WireGuard достигает шлюза.
Вот быстрая проверка, которая всё решает. Назовите порт и протокол, которые VPN-клиент сообщает в журнале. Если эта строка по-прежнему говорит UDP 500 или UDP 51820, поле прокси ничего в ней не изменило.
Когда поле — правильный инструмент
Есть реальный случай, когда прокси стоит перед туннелем, но это функция клиента, а не поле профиля. Руководство OpenVPN описывает --http-proxy для TCP-соединений, передаваемых через прокси HTTP CONNECT. Для этого нужны соответствующая опция клиента, шлюз, доступный таким способом, и прокси, разрешающий CONNECT на используемый порт.
Если ваш клиент предоставляет эту опцию и сеть разрешает CONNECT на порт, это может работать. Если клиент её не предоставляет, заполнение системного прокси вообще не влияет на туннель.
Когда это ничего не меняет
Профиль IKEv2 или IPsec не становится HTTP-туннелем из-за того, что поле прокси заполнено. WireGuard тоже, ведь в формате его конфигурации нет понятия прокси. Смена порта шлюза также не меняет его протокол. А конечная точка, отвечающая на обычный HTTPS, не становится автоматически слушателем VPN.
Та же ловушка ловит тех, кто копирует профили эпохи PPTP из старых руководств для iPad. Опции всё ещё есть в интерфейсе; служба за ними больше не говорит на этом протоколе.
Решить, какой уровень исправлять
Спросите, какой уровень отказал, прежде чем что-то менять. Если клиент не может установить сеанс, проблема в транспорте, и поле прокси здесь ни при чём. Если туннель поднят, но одно приложение не достигает своего сервера, стоит проверить прокси приложения. Если туннель поднят и все приложения терпят неудачу, подозреваемые — маршрутизация и DNS внутри туннеля.
Для первого случая спросите оператора, какой утверждённый альтернативный транспорт или сеть он поддерживает. OpenVPN через TCP 443 существует потому, что некоторые сети разрешают только его, и он по-прежнему требует, чтобы сервер его слушал.
Не считайте заблокированный порт UDP разрешением на импровизацию. Сохраняйте проверки сертификата или идентичности шлюза нетронутыми, а не отключайте их, чтобы подогнать рукопожатие.
Подтвердите оба уровня по очереди
Сначала подтвердите туннель: проверьте на странице состояния клиента установленный сеанс и ненулевой счётчик байтов. Затем прочитайте настройку прокси напрямую, с scutil --proxy для действующей конфигурации или networksetup -getwebproxy Wi-Fi для сохранённого значения. Потом проверьте одно приложение, которое уважает системный прокси, и одно, которое его игнорирует, потому что многие нативные приложения его игнорируют.
Три результата, три разных исправления.
Если оба уровня сообщают об успехе, а приложение всё равно не работает, посмотрите на раздельное туннелирование, DNS и собственные сетевые настройки приложения. Это третий уровень, и он тоже не поле прокси.