OpenVPN, OpenConnect и Tailscale

Импорт и настройка профилей OpenVPN, OpenConnect и Tailscale, вход с одноразовыми кодами и корпоративный VPN параллельно с прокси.

Throne умеет подключаться к серверам OpenVPN, к Cisco AnyConnect и совместимым VPN (OpenConnect), а также входить в сеть Tailscale. VPN-клиенты встроены в ядро, поэтому устанавливать OpenVPN или OpenConnect не нужно. На этой странице описаны импорт, основные параметры, вход с одноразовыми кодами и запуск корпоративного VPN параллельно с прокси.

OpenVPN

Импортируйте файл .ovpn одним из способов:

  • Программа (Program) → Добавить профиль из файла (Add profile from File(s)) или Ctrl+O.
  • Перетащите файл в главное окно.
  • Скопируйте текст файла и нажмите Ctrl+V в главном окне.

Чтобы создать профиль вручную, выберите Программа → Новый профиль (New profile) и установите Тип (Type) в значение OpenVPN.

Что нужно знать об импорте:

  • Работают только клиентские профили для dev tun. Профили TAP (dev tap) и серверные конфигурации отклоняются.
  • Контейнеры PKCS#12 (pkcs12) не поддерживаются. Экспортируйте CA, сертификат и ключ в формате PEM, затем вставьте их в CA Certificate, Сертификат клиента (Client Certificate) и Ключ клиента (Client Key).
  • Если данные для входа хранятся в отдельном файле (auth-user-pass <file>), укажите Имя пользователя (Username) и Пароль (Password) в профиле.
  • Неизвестные или неподдерживаемые параметры перечисляются в логе, в строках, которые начинаются с OpenVPN:. Параметры, неприменимые к Throne, например скрипты up и down или persist-tun, пропускаются без сообщений.
  • Если файл направляет весь трафик через VPN (redirect-gateway), Throne отключает для профиля Only route advertised network.

В редакторе также есть Сеть (Network; пустое значение означает udp), Static Challenge, MTU, OTP, Tunnel DNS, файлы TLS и Control Channel Wrap для ключей tls-auth и tls-crypt. Кнопка Дополнительно (Advanced) открывает другие параметры.

OpenConnect

Параметр Flavor в профиле выбирает тип сервера:

Flavor Тип сервера
пусто или anyconnect Cisco AnyConnect и совместимые серверы
gp Palo Alto GlobalProtect
fortinet Fortinet
f5 F5 BIG-IP
pulse Pulse Connect Secure
nc Juniper Network Connect

Throne импортирует эти форматы из файла, буфера обмена или подписки:

  • XML-профиль AnyConnect. Каждый сервер из его <ServerList> становится профилем. Серверы с IPsec (IKEv2) и записи без адреса пропускаются с примечанием.
  • Командная строка openconnect, например openconnect --protocol=gp --user=alice vpn.example.com.
  • Конфигурационный файл с одним параметром на строку, в котором есть строка protocol=, например protocol=fortinet.

Другие основные поля: Имя пользователя, Пароль, Auth Group (заранее выбирает группу, область (realm) или шлюз), Server Path (путь в URL сервера; нужен некоторым порталам GlobalProtect, F5 и Fortinet), MTU, OTP и параметры TLS. В Дополнительно есть и другие, например сессионный Cookie и Software Token.

Параметры для обоих типов VPN

Параметр По умолчанию Назначение
Only route advertised network Вкл. Когда вы запускаете этот профиль, в туннель попадает только трафик к сетям, которые объявляет VPN-сервер. Остальной трафик, дошедший до профиля, блокируется. На правила маршрутизации, в которых указан этот профиль, это не влияет. Выключите параметр для VPN, через который должен идти весь трафик.
Tunnel DNS Prefer Как Throne использует DNS-серверы, которые передаёт VPN-сервер. Нет (None): игнорировать их. Prefer: разрешать через них только имена, которые сервер заявляет своими (его домены split-DNS). Strict: также отправлять им все удалённые DNS-запросы, а для имён, на которые они не могут ответить, возвращать ошибку.
Имя пользователя, Пароль пусто Данные для входа. {otp} в этих полях заменяется одноразовым кодом, см. Использование кода в VPN-профиле.

Для конечной точки профиля маршрутизации и Prefer, и Strict разрешают только имена, которые сервер заявляет своими.

Вход

Throne входит, используя сохранённые Имя пользователя и Пароль. Когда сервер запрашивает что-то ещё, открывается окно VPN Authentication:

  • Вопрос или форма, например второй пароль: заполните и нажмите Submit. У некоторых запросов показывается ограничение по времени («Expires in …» — истекает через …).
  • Страница входа: окно показывает адрес и кнопку Open in Browser. Войдите в браузере, затем закройте окно. Подключение продолжится, как только сервер примет вход.
  • Единый вход (SSO), который работает только внутри браузера, пока не поддерживается. Используйте вход по имени пользователя и паролю или, для OpenConnect, укажите сессионный Cookie в дополнительных настройках профиля (Дополнительно).

Если сервер отклоняет сохранённые данные для входа, Throne запрашивает имя пользователя и пароль для этого сеанса и предлагает Reconnect. Они не сохраняются в профиле, и Throne забывает их, когда вы сами останавливаете профиль. Throne спрашивает до трёх раз.

На вкладке Статистика выполнения (Runtime Stats) внизу главного окна перечислены все VPN-подключения с их состоянием и кнопкой Подробности (Details).

Менеджер OTP

Многие корпоративные VPN запрашивают одноразовый код из приложения-аутентификатора. Начиная с версии 1.3.0, в Throne есть собственный аутентификатор: Утилиты (Tools) → Менеджер OTP (OTP Manager).

Добавление записей:

  • Импорт (Import) → Добавить вручную... (Add manually...): введите Название (Name) и Секрет (Secret; в Base32). Параметры Тип (Type; TOTP (на основе времени) или HOTP (на основе счетчика)), Алгоритм (Algorithm), Цифры (Digits; от 4 до 10, по умолчанию 6) и Период (секунды) (Period (seconds); по умолчанию 30) меняйте, только если так требует ваш провайдер. Окно показывает текущий код, чтобы вы могли сравнить его с кодом в другом аутентификаторе.
  • Импорт → Из ссылки или из текста... (From link or text...): вставьте ссылки otpauth://, ссылку otpauth-migration:// (формат экспорта Google Authenticator), экспорт в JSON или просто секрет в Base32.
  • Импорт → Из буфера обмена (From clipboard) или Ctrl+V в окне, а также Импорт → Из файла с изображением QR-кода... (From QR image file...).
  • Сканировать QR-код (Scan QR Code) находит QR-код на экране.

Работа с записями:

  • Щёлкните запись, чтобы скопировать её текущий код.
  • Перетаскивайте записи, чтобы изменить их порядок.
  • Экспорт (Export) у записи предлагает This one as otpauth:// link and QR, All as otpauth-migration:// link and QR и All as JSON file....
  • Удалить (Delete) удаляет запись. Её секрет восстановить нельзя.
  • В меню трея есть Коды OTP (OTP Codes) — список всех кодов с поиском. Щёлкните код, чтобы скопировать его.

Записи OTP входят в резервные копии: пункт OTP профили (OTP profiles) в Настройки (Settings) → Основные настройки (Basic Settings) → Резервное копирование и восстановление (Backup and Restore). Не передавайте файлы резервных копий посторонним.

Использование кода в VPN-профиле

  1. Откройте профиль OpenVPN или OpenConnect.
  2. В поле OTP выберите запись.
  3. Если сервер ожидает код как часть пароля, поставьте {otp} туда, где должен быть код, например MyPassword{otp}. Для OpenConnect {otp} работает также в поле программного токена (software token) и в полях форм.
  4. Нажмите OK.

Теперь Throne подставляет свежий код при каждом подключении. Он также сам отвечает на запросы кода от сервера: на запрос OpenVPN (если сервер использует статический запрос, введите его текст в Static Challenge) и на формы входа OpenConnect. Если сервер отклоняет код, Throne пробует новый, до трёх раз. Если сервер отклоняет весь вход, Throne не спрашивает вас, а перезапускает профиль с новым кодом, тоже до трёх раз.

Раздельное туннелирование: корпоративный VPN рядом с прокси

Начиная с версии 1.3.0, профиль маршрутизации может запускать профили OpenVPN или OpenConnect параллельно с запущенным вами профилем. Трафик к сетям, которые объявляет VPN-сервер, идёт через VPN. Всё остальное следует профилю маршрутизации, например идёт через ваш прокси.

  1. Импортируйте или создайте VPN-профиль.
  2. Откройте Маршруты (Routing) → Настройки маршрутизации (Routing Settings) → вкладку Маршрут (Route).
  3. Выберите используемый профиль маршрутизации и нажмите Редактировать (Edit).
  4. Откройте вкладку Конечные точки (Endpoints). Она появляется, только если у вас есть профиль OpenVPN или OpenConnect либо цепочка, которая заканчивается таким профилем.
  5. Выберите VPN-профиль в списке и нажмите Добавить (Add).
  6. Нажмите OK и убедитесь, что этот профиль маршрутизации активен (он отмечен галочкой внизу меню Маршруты).
  7. Запустите свой обычный профиль. VPN запустится вместе с ним.

Каждая конечная точка добавляет на вкладку Дополнительно (Advanced) правило с именем <name> route prefer, где <name> — название VPN-профиля. Изменить это правило нельзя, но его можно перемещать среди своих правил: правила выше него проверяются первыми. При удалении правила Throne спросит, удалить ли и конечную точку.

Ограничения:

  • Профиль, используемый как конечная точка, не может одновременно быть запускаемым профилем или его звеном.
  • Конечной точкой может быть цепочка, выход которой (нижняя строка цепочки) — профиль OpenVPN или OpenConnect. Отметьте Allow routing to inner hops, чтобы правило создавалось и для каждого звена OpenVPN или OpenConnect внутри цепочки.
  • Звенья конечной точки не могут работать на Xray и не могут быть профилями дополнительного ядра (Extra Core) или профилями с полной конфигурацией.

Полный пример см. на странице Рецепты.

Tailscale

Профиль Tailscale подключается к вашей сети tailnet, так что вы можете обращаться к своим устройствам Tailscale или использовать одно из них как выходной узел. Профили Tailscale доступны только в версии для компьютера.

  1. Откройте Программа → Новый профиль.
  2. Установите Тип в значение Tailscale.
  3. Заполните поля, описанные ниже. Ключ авторизации (Auth key) создаётся в консоли администратора Tailscale.
  4. Нажмите OK и запустите профиль.
Поле По умолчанию Назначение
Директория состояния (State directory) $HOME/.tailscale Где хранится состояние входа.
Ключ авторизации пусто Ключ для входа в вашу сеть tailnet.
Контролирующий URL (Control URL) https://controlplane.tailscale.com Сервер координации. Меняйте его только для собственного управляющего сервера.
Имя хоста (Hostname) пусто Имя этого устройства в tailnet.
Приём маршрутов (Accept routes) выкл. Использовать маршруты подсетей, которые объявляют другие устройства.
Эфемерный узел (Ephemeral) выкл. Зарегистрироваться как эфемерное устройство, которое tailnet удаляет после того, как оно уходит из сети.
Выходной узел (Exit node) пусто Направлять интернет-трафик через это устройство tailnet.
Выходной узел: разрешить доступ к LAN (Exit node allow lan access) выкл. Сохранять доступ к локальной сети при использовании выходного узла.
Объявлять выходной узел (Advertise exit node) выкл. Предлагать этот компьютер в качестве выходного узла.
Объявлять маршруты (Advertise routes) пусто Подсети, которые предлагаются tailnet, через запятую.
Глобальный DNS (Global DNS) выкл. Разрешить DNS Tailscale также использовать глобальные серверы имён tailnet.

Имена устройств вашей сети tailnet (в зоне ts.net) Throne разрешает через DNS Tailscale. Для остальных имён используются ваши обычные настройки DNS. Тесты задержки и автовыбор пропускают профили Tailscale.

Android

  • Профили OpenVPN и OpenConnect работают на Android с теми же форматами импорта. В редакторе меньше параметров: нет привязки OTP, нет Only route advertised network и Tunnel DNS.
  • Нет менеджера OTP и окна VPN Authentication. Профиль должен входить с сохранёнными именем пользователя и паролем. Записи OTP из резервной копии с компьютера не восстанавливаются.
  • Конечные точки профилей маршрутизации (раздельное туннелирование) на Android не работают. Профиль маршрутизации из резервной копии с компьютера сохраняет свои конечные точки, но Android их не запускает.
  • Профили Tailscale не поддерживаются.
  • На обеих платформах автовыбор пропускает профили OpenVPN, OpenConnect и Tailscale.