OpenVPN TAP в macOS: проверьте клиент, прежде чем отлаживать
TAP передаёт кадры Ethernet, а TUN — пакеты IP, и большинство современных клиентов macOS отказались от первого. Подтвердите режим, затем переходите вместе с владельцем сервера.
Старый профиль попадает на современный Mac, клиент импортирует его без возражений, а соединение обрывается или трафик вообще не проходит. Прежде чем потратить полдня на сертификаты, прочитайте строку устройства в профиле. Если там указано dev tap, вы просите у клиента интерфейс в стиле Ethernet, и в macOS большинство таких сеансов заканчивается именно на этом запросе.
Шаг 1: убедитесь, что профиль действительно требует TAP
Профили переименовывают, упаковывают и повторно экспортируют, поэтому проверяйте именно тот файл, который вы импортировали. Ищите директиву устройства и любой include, который может её переопределить. Две строки вывода в большинстве случаев решают вопрос. Когда встречаются и dev, и dev-type, побеждает более поздняя директива, и именно такую деталь скрывает скопированный профиль.
grep -nE "^[[:space:]]*(dev|dev-type)[[:space:]]" client.ovpn
ls -l ~/Library/Application\ Support/ 2>/dev/null
Если файл содержит dev tap или dev tap0, клиент должен реализовать интерфейс TAP. Если он содержит dev tun, остальная часть статьи не применяется, а неисправность находится в другом месте.
Запишите имя и версию клиента, версию macOS и происхождение профиля. Эти три факта определяют, какой из двух путей ниже вообще возможен.
Шаг 2: узнайте, что на самом деле меняет режим устройства
Интерфейс TUN передаёт IP-пакеты. Клиент читает и записывает пакеты, адресованные IP-партнёру, а операционная система маршрутизирует их как любой другой интерфейс.
Интерфейс TAP передаёт кадры Ethernet, включая широковещательные и ARP. Именно это позволяет серверу с мостом раздавать адреса через DHCP, а клиенту — находить устройства криком, и поэтому некоторые старые схемы на это опираются.
Цена в том, что TAP требует драйвера, который представляет системе интерфейс Ethernet. Apple отказалась от модели расширения ядра, на которую опирались старые драйверы TAP для Mac, а его замена API не появляется волшебным образом в клиентах, которые никогда не обновлялись для её использования. Возможность платформы и выпущенный продукт — разные вещи.
Шаг 3: выберите между совместимым клиентом и миграцией
Есть два честных пути. Первый — клиент, издатель которого для вашей версии macOS и вашего оборудования заявляет, что поддерживает нужную вам схему TAP. Не сообщение на форуме четырёхлетней давности и не архивный установщик: актуальное заявление плюс тестовое подключение.
Второй — перевести службу на TUN, что является изменением сервера не меньше, чем изменением клиента. Нужны маршрутизируемая топология, пул адресов, передаваемые маршруты для удалённых сетей и обратный путь от этих сетей к пулу.
Что не работает — это заменить tap на tun в локальной копии и надеяться. Сервер всё ещё строит мост, клиент теперь говорит по IP, и ничего не согласуется.
Шаг 4: соберите факты, прежде чем менять работающую службу
Оставьте исходный профиль нетронутым и сделайте копию для экспериментов. Файл, который можно восстановить за минуту, ценнее аккуратной папки. Когда замена заработает, удалите копию намеренно, вместо того чтобы оставлять два профиля, выглядящих в списке одинаково. Эта одна привычка предотвращает большую часть путаницы после неудачной миграции. Запишите текущее поведение, чтобы доказать, что изменилось: поднимается ли туннель, получает ли адрес, доходите ли вы до одного известного хоста и работает ли разрешение имён.
Задайте владельцу шлюза три вопроса. Сервер работает в мостовой или маршрутизируемой топологии? Какие удалённые префиксы должны быть доступны? И есть ли окно обслуживания для изменения конфигурации, или ожидается, что всё заработает без вмешательства в сервер?
Ответы на это определяют, решаете ли вы проблему клиента сегодня днём или планируете изменение сети на следующей неделе.
Шаг 5: проверьте миграцию с обеих сторон
Когда у сервера есть маршрутизируемая конфигурация, а у вас — подходящий профиль, проверяйте в таком порядке: туннель устанавливается, клиент получает адрес из нового пула, хост на удалённой стороне отвечает, и имя разрешается через переданную настройку DNS.
Затем проверьте то, что раньше зависело от поведения Ethernet. Если приложение находило устройства широковещательно, через маршрутизируемый туннель оно их не найдёт, и никакая настройка клиента это не вернёт. Такому приложению нужен известный адрес, локальный вспомогательный хост или другой способ обнаружения.
Завершите одним переподключением и одной перезагрузкой, потому что профиль, работающий только с первой попытки, обычно означает, что передаваемые маршруты или настройка DNS не применяются при переподключении.
Если всё равно не получается, прочитайте первую ошибку
Клиент, который не может создать интерфейс, говорит об этом в журнале, обычно в первых строках. Клиент, который создаёт его, а затем не проходит аутентификацию, давно миновал вопрос устройства, и дальнейшая погоня за TAP тратит сеанс впустую.
Храните исходный профиль и рабочую конфигурацию, пока замена не доказана. Откатить изменение клиента быстро; пересобрать мостовую сеть, которую кто-то разобрал по догадке, — нет.