
Запускайте приложения через VPN-туннели с временными сетевыми пространствами имён
 vopono — это инструмент для запуска приложений через VPN-туннели с использованием временных сетевых пространств имён. Это позволяет запускать лишь несколько приложений через разные VPN одновременно, в то время как ваше основное подключение остаётся без изменений. vopono включает встроенные аварийные выключатели (killswitch) как для Wireguard, так и для OpenVPN. В настоящее время напрямую поддерживаются Mullvad, AzireVPN, MozillaVPN, ProtonVPN, iVPN, NordVPN, AirVPN и PrivateInternetAccess; также поддерживаются пользовательские конфигурационные файлы с помощью аргумента `--custom`. Cloudflare Warp также поддерживается. Для пользовательских подключений также поддерживаются протоколы OpenConnect и OpenFortiVPN (например, для корпоративных VPN). Подробнее см. в [Руководстве пользователя vopono](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md). ## Скриншот Скриншот, показывающий пример с firefox, google-chrome-stable и lynx, работающими через разные VPN-подключения:  ## Поддерживаемые провайдеры | Провайдер | Поддержка OpenVPN | Поддержка Wireguard | | ----------------------------- | --------------- | ----------------- | | Mullvad | ❌ | ✅ | | AzireVPN | ❌ | ✅ | | iVPN | ✅ | ✅ | | PrivateInternetAccess | ✅ | ✅\* | | ProtonVPN | ✅\*\* | ✅\*\*\* | | MozillaVPN | ❌ | ✅ | | NordVPN | ✅ | ❌ | | AirVPN | ✅ | ✅ | | Cloudflare Warp\*\*\*\* | ❌ | ❌ | | Свой хостинг (--custom) | ✅ | ✅ | \* Пересылка портов поддерживается с помощью опции `--port-forwarding` и `--port-forwarding-callback` для запуска команды при обновлении порта. \*\* См. [Руководство пользователя](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md) для получения инструкций по аутентификации для генерации файлов конфигурации OpenVPN с помощью `vopono sync`. Необходимо скопировать заголовок аутентификации вида `AUTH-xxx=yyy`, где `yyy` — значение заголовка `x-pm-uid` из того же запроса при входе в систему в вашем веб-браузере. \*\*\* Для ProtonVPN вы можете сгенерировать и загрузить отдельные файлы конфигурации Wireguard и использовать их в качестве пользовательской конфигурации провайдера. Подробности см. в [Руководстве пользователя](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md). [Пересылка портов](https://protonvpn.com/support/port-forwarding-manual-setup/) поддерживается с помощью аргумента `--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. Пересылка портов AirVPN поддерживается как возможность провайдера, но пересылаемые порты в настоящее время должны настраиваться в клиентской зоне AirVPN; vopono не резервирует и не переключает порты учётной записи AirVPN автоматически. ## Использование Настройте файлы конфигурации VPN-провайдера: ```bash $ vopono sync ``` Обратите внимание: при создании и загрузке новых пар ключей Wireguard может быть небольшая задержка до момента, когда они станут доступны для использования (например, около 30-60 секунд на Mullvad). Запустите Firefox через подключение AzireVPN Wireguard к серверу в Норвегии: ```bash $ vopono exec --provider azirevpn --server norway firefox ``` Вам следует запускать vopono от имени вашего пользователя (не используя sudo), поскольку он сам выполнит повышение привилегий, когда это необходимо. Дополнительные сведения о запуске в качестве службы systemd и т.п. см. в [Руководстве пользователя](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md). ### Режим демона Для более удобной работы запустите привилегированный демон от root и продолжайте использовать `vopono` как обычный пользователь. CLI автоматически пересылает запросы `exec` демону, если он запущен. - Запустите один раз при загрузке через systemd: `sudo systemctl enable --now vopono` - Или запустите вручную от root: `sudo vopono daemon` - Явный эквивалент: `sudo vopono daemon start`; просмотреть его состояние можно с помощью `vopono daemon status --json`. - Затем используйте vopono как обычно от вашего пользователя: `vopono exec --provider mullvad --server se firefox` Готовый к копированию юнит systemd см. в [USERGUIDE.md](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md). vopono может обрабатывать до 255 отдельных сетевых пространств имён (т.е. разных подключений к VPN-серверам — если ваш VPN-провайдер это позволяет). Команды, запущенные с одним и тем же префиксом сервера и VPN-провайдером, используют одно и то же сетевое пространство имён. Параметры конфигурации по умолчанию можно сохранить в файле `~/.config/vopono/config.toml`, например: ```toml firewall = "NfTables" provider = "Mullvad" protocol = "Wireguard" server = "usa-us22" ``` Обратите внимание, что значения чувствительны к регистру. Более подробные инструкции по использованию (включая работу с демонами и серверами) см. в [Руководстве пользователя vopono](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md). ## Установка ### AUR (Arch Linux) Установите пакет `vopono-git` с помощью вашего любимого AUR-хелпера. ```bash $ paru -S vopono-git $ vopono sync ``` В качестве альтернативы используйте пакет `vopono-bin`, если не хотите компилировать из исходного кода. ### Raspberry Pi (Raspbian) Загрузите и установите пакет `vopono_x.y.z_armhf.deb` со страницы релизов: ```bash $ sudo dpkg -i vopono_0.2.1_armhf.deb ``` Вам потребуется установить OpenVPN (доступен в репозиториях Raspbian): ```bash $ sudo apt install openvpn ``` После этого вы можете использовать vopono, как описано выше (обратите внимание: бинарный файл Chromium — это `chromium-browser`): ```bash $ vopono sync --protocol openvpn protonvpn $ vopono exec --provider protonvpn --server sweden chromium-browser ``` Скриншот vopono с OpenVPN, работающим на Raspbian:  Обратите внимание: Wireguard отсутствует в репозиториях Raspbian, поэтому его установка нетривиальна. Вы можете попробовать следовать [этому руководству](https://www.sigmdel.ca/michel/ha/wireguard/wireguard_02_en.html), но учтите, что вам нужно установить не только Wireguard и `wireguard-tools`, чтобы был доступен `wg`, но также и `linux-headers`, чтобы всё работало корректно (т.е. чтобы при попытке установить соединение вы не получали просто ошибки `Protocol not supported`). Подробности о пересылке портов и использовании vopono с демонами и серверами см. в [Руководстве пользователя](https://github.com/jamesmcm/vopono/blob/master/USERGUIDE.md), если вы хотите использовать ваш Raspberry Pi для запуска privoxy или transmission-daemon и т.п. ### Debian + Ubuntu Установите deb-пакет, предоставленный на странице релизов. ### Fedora + OpenSUSE Установите rpm-пакет, предоставленный на странице релиза (выберите правильную версию). ### Gentoo Linux Установите `vopono` из основного репозитория. ```bash $ emerge -av net-vpn/vopono ``` ### Другие Linux Либо используйте скомпилированные бинарные файлы на странице релизов, либо установите из исходного кода с помощью Cargo, как описано ниже. ### Из этого репозитория (с помощью Cargo) Запустите предоставленный скрипт установки: `install.sh` — он выполнит `cargo install` для репозитория и скопирует файлы конфигурации в `~/.config/vopono/` Обратите внимание: минимальная поддерживаемая версия Rust — 1.85 (требуется для edition 2024). Проверить свою версию можно с помощью: ```bash $ rustc --version ``` ## Известные проблемы - При запуске нового приложения в существующем пространстве имён vopono любые изменения правил межсетевого экрана (т.е. пересылка и открытие портов) не будут применены (они используются только при создании пространства имён). То же самое касается пересылки портов. - Учётные данные OpenVPN всегда хранятся в конфигурации в открытом виде — возможно, будет добавлена опция, позволяющая не хранить учётные данные, но, похоже, OpenVPN требует их предоставления в открытом виде. - Не существует простого способа удалить устройства MozillaVPN (пары ключей Wireguard) — в отличие от Mullvad, это _нельзя_ сделать на веб-странице. Я рекомендую использовать [MozWire](https://github.com/NilsIrl/MozWire) для управления ими. - `gnome-terminal` не будет работать в сетевом пространстве имён из-за модели «клиент-сервер» — см. вопрос [#48](https://github.com/jamesmcm/vopono/issues/48) - Пересылка портов изнутри сетевого пространства имён на хост (например, для запуска `transmission-daemon`) не работает корректно, когда vopono запускается от root — см. вопрос [#84](https://github.com/jamesmcm/vopono/issues/84) ## Лицензия vopono распространяется под лицензией 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 (или выше) без каких-либо дополнительных условий. Огромное спасибо [MozWire](https://github.com/NilsIrl/MozWire) от NilsIrl за исследование API MozillaVPN.