
Запускайте приложения через VPN-туннели с временными сетевыми пространствами имён

vopono — это инструмент для запуска приложений через VPN-туннели с помощью временных сетевых пространств имён (network namespaces). Это позволяет запускать лишь несколько приложений через разные VPN одновременно, оставляя основное соединение без изменений.
vopono включает встроенные аварийные выключатели (killswitches) для Wireguard и OpenVPN.
В настоящее время напрямую поддерживаются Mullvad, AzireVPN, MozillaVPN, ProtonVPN, iVPN, NordVPN, AirVPN и PrivateInternetAccess, а также поддерживаются пользовательские конфигурационные файлы с аргументом --custom. Также поддерживается Cloudflare Warp.
Для пользовательских соединений также поддерживаются протоколы OpenConnect и OpenFortiVPN (например, для корпоративных VPN). Подробнее см. в Руководстве пользователя vopono.
Скриншот, показывающий пример с firefox, google-chrome-stable и lynx, работающими через разные VPN-соединения:

| Провайдер | Поддержка OpenVPN | Поддержка Wireguard |
|---|---|---|
| Mullvad | ❌ | ✅ |
| AzireVPN | ❌ | ✅ |
| iVPN | ✅ | ✅ |
| PrivateInternetAccess | ✅ | ✅* |
| ProtonVPN | ✅** | ✅*** |
| MozillaVPN | ❌ | ✅ |
| NordVPN | ✅ | ❌ |
| AirVPN | ✅ | ❌ |
| Cloudflare Warp**** | ❌ | ❌ |
| Свой сервер (--custom) | ✅ | ✅ |
* Переадресация портов поддерживается с опцией --port-forwarding и --port-forwarding-callback для выполнения команды при обновлении порта.
** См. Руководство пользователя для инструкций по аутентификации при генерации конфигурационных файлов OpenVPN через vopono sync. Вам необходимо скопировать заголовок аутентификации вида AUTH-xxx=yyy, где yyy — значение заголовка x-pm-uid в том же запросе при входе в систему в веб-браузере.
*** Для ProtonVPN вы можете сгенерировать и загрузить определённые конфигурационные файлы Wireguard и использовать их как пользовательский конфиг провайдера. Подробности см. в Руководстве пользователя. Переадресация портов поддерживается с аргументом --port-forwarding как для OpenVPN, так и для Wireguard. Обратите внимание: при использовании пользовательского конфига с Wireguard необходимо указать реализацию переадресации портов с помощью --custom-port-forwarding (например, --provider custom --custom xxx.conf --protocol wireguard --custom-port-forwarding protonvpn). Должен быть установлен natpmpc. Для OpenVPN необходимо сгенерировать конфигурационные файлы OpenVPN, добавив +pmp к вашему имени пользователя OpenVPN, и выбрать серверы, поддерживающие эту функцию (например, на момент написания это серверы в Румынии). Назначенный порт выводится в терминал, где был запущен vopono — затем его следует указать в приложениях, которым это требуется. Порт также можно передать пользовательскому скрипту, который будет выполнен внутри сетевого пространства имён, через аргумент --port-forwarding-callback.
**** Cloudflare Warp использует собственный протокол. Установите и провайдера, и протокол как warp. Обратите внимание: сначала необходимо зарегистрироваться с помощью sudo warp-cli registration new, затем запустить один раз sudo warp-svc и sudo warp-cli connect и sudo warp-cli debug connectivity-check disable вне vopono — затем завершите sudo warp-svc без выполнения sudo warp-cli disconnect, чтобы он автоматически подключался при запуске. Пожалуйста, сначала убедитесь, что это работает, прежде чем пробовать с vopono.
Настройка конфигурационных файлов VPN-провайдера:
$ vopono sync
Обратите внимание: при создании и загрузке новых пар ключей Wireguard может быть небольшая задержка до их активации (около 30-60 секунд, например, на Mullvad).
Запуск Firefox через Wireguard-соединение AzireVPN к серверу в Норвегии:
$ vopono exec --provider azirevpn --server norway firefox
Запускайте vopono от имени своего пользователя (не через sudo), так как он сам обработает повышение привилегий при необходимости. Подробнее о запуске в качестве systemd-сервиса и т.д. см. в Руководстве пользователя.
Для более плавной работы запустите привилегированный корневой демон и продолжайте использовать vopono как обычный пользователь. CLI автоматически перенаправляет запросы exec демону, если он запущен.
sudo systemctl enable --now voponosudo vopono daemonvopono exec --provider mullvad --server se firefoxСм. USERGUIDE.md для готового к копированию модуля systemd.
vopono может обрабатывать до 255 отдельных сетевых пространств имён (т.е. разных VPN-соединений с серверами, если ваш провайдер это позволяет). Команды, запущенные с одинаковым префиксом сервера и провайдером VPN, будут использовать одно и то же сетевое пространство имён.
Параметры конфигурации по умолчанию можно сохранить в файле ~/.config/vopono/config.toml, например:
firewall = "NfTables"
provider = "Mullvad"
protocol = "Wireguard"
server = "usa-us22"
Обратите внимание: значения чувствительны к регистру.
Подробные инструкции по использованию (включая работу с демонами и серверами) см. в Руководстве пользователя vopono.
Установите пакет vopono-git с помощью вашего любимого AUR-помощника.
$ paru -S vopono-git
$ vopono sync
В качестве альтернативы используйте пакет vopono-bin, если не хотите компилировать из исходников.
Загрузите и установите пакет vopono_x.y.z_armhf.deb со страницы релизов:
$ sudo dpkg -i vopono_0.2.1_armhf.deb
Вам потребуется установить OpenVPN (доступен в репозиториях Raspbian):
$ sudo apt install openvpn
Затем вы можете использовать vopono, как описано выше (обратите внимание, что бинарник Chromium называется chromium-browser):
$ vopono sync --protocol openvpn protonvpn
$ vopono exec --provider protonvpn --server sweden chromium-browser
Скриншот vopono с OpenVPN на Raspbian:

Обратите внимание: Wireguard отсутствует в репозиториях Raspbian, поэтому его установка нетривиальна. Вы можете следовать этому руководству, но учтите, что необходимо установить не только Wireguard и wireguard-tools для наличия wg, но и linux-headers, чтобы всё работало корректно (т.е. чтобы при попытке установить соединение не возникали ошибки Protocol not supported).
Ознакомьтесь с Руководством пользователя для получения информации о переадресации портов и использовании vopono с демонами и серверами, если вы хотите использовать Raspberry Pi для запуска privoxy или transmission-daemon и т.п.
Установите deb-пакет, предоставленный на странице релизов.
Установите rpm-пакет, предоставленный на странице релизов (выберите правильную версию).
Установите vopono из основного репозитория.
$ emerge -av net-vpn/vopono
Используйте скомпилированные бинарники со страницы релизов или установите из исходников с помощью Cargo, как описано ниже.
Запустите предоставленный скрипт установки: install.sh — он выполнит cargo install репозитория и скопирует конфигурационные файлы в ~/.config/vopono/
Обратите внимание: минимальная поддерживаемая версия Rust — 1.85 (требуется для edition 2024). Вы можете проверить свою версию командой:
$ rustc --version
gnome-terminal не будет работать в сетевом пространстве имён из-за модели клиент-сервер — см. issue #48transmission-daemon) работает некорректно, когда vopono запущен от root — см. issue #84vopono лицензирован под GPL версии 3.0 (или выше), см. файл LICENSE или https://www.gnu.org/licenses/gpl-3.0.en.html
vopono — это произношение букв VPN на эсперанто.
Se vi ankaŭ parolas Esperanton, bonvolu serĉi min en la kanalo de Discord de Rust Programming Language Community.
Если явно не указано иное, любой вклад, намеренно предоставленный для включения в работу вами, будет лицензирован под GPLv3 (или выше) без каких-либо дополнительных условий.
Огромное спасибо NilsIrl за MozWire за исследование API MozillaVPN.