Проброс портов: инструкция по настройке WireGuard
Проброс портов
Все конфигурации WireGuard, созданные в генераторе конфигураций, поддерживают проброс портов. Использовать его можно двумя способами:
- Вручную: на странице WireGuard откройте меню ⋮ рядом с конфигурацией и выберите Проброс порта. Мы назначим публичный порт, который будет перенаправлять трафик на выбранный вами порт на устройстве.
- Автоматически (NAT-PMP): такие приложения, как gluetun и qBittorrent, сами запрашивают порт во время подключения. На сайте ничего настраивать не нужно.
Как работает автоматический проброс портов
- Публичный порт (от 30000 до 65000) назначаем мы. Запросить конкретный публичный порт нельзя.
- Каждое сопоставление перенаправляет TCP и UDP на одном и том же публичном порту.
- Приложение периодически продлевает сопоставление. Если продление прекращается (например, вы отключились), проброс автоматически удаляется примерно через час.
- Пока приложение продлевает сопоставление, назначенный порт обычно не меняется, но он может измениться после перезапуска контейнера или переподключения.
- Автоматические пробросы отображаются на странице WireGuard с меткой auto и учитываются в лимите из 10 пробросов портов для вашего аккаунта.
gluetun
- 1. Создайте конфигурацию на странице WireGuard и скачайте файл .conf.
- 2. Узнайте IP-адрес сервера: возьмите имя хоста из строки Endpoint в файле .conf (например, ca1-1.btguard.com) и выполните для него разрешение имени:
nslookup ca1-1.btguard.com
gluetun требует IP-адрес в VPN_ENDPOINT_IP и не принимает имена хостов. - 3. Используйте этот сервис docker-compose, подставив значения из файла .conf:
services:
gluetun:
image: qmcgaw/gluetun:latest
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
environment:
- VPN_SERVICE_PROVIDER=custom
- VPN_TYPE=wireguard
- VPN_PORT_FORWARDING=on
- VPN_PORT_FORWARDING_PROVIDER=protonvpn
# values from your BTGuard .conf file:
- WIREGUARD_PRIVATE_KEY= # PrivateKey under [Interface]
- WIREGUARD_ADDRESSES= # Address under [Interface]
- VPN_DNS_ADDRESS= # DNS under [Interface]
- WIREGUARD_PUBLIC_KEY= # PublicKey under [Peer]
- VPN_ENDPOINT_IP= # IP of the Endpoint host (step 2)
- VPN_ENDPOINT_PORT=444 # number after the : in Endpoint
- 4. Почему «protonvpn»? В gluetun код проброса портов через NAT-PMP назван в честь ProtonVPN; BTGuard использует тот же стандартный протокол, поэтому этот параметр работает без изменений.
- 5. Запустите контейнер. Назначенный порт выводится в журнале gluetun, а также записывается в файл /tmp/gluetun/forwarded_port внутри контейнера. Настройте приложение за gluetun на прослушивание этого порта или используйте описанную ниже связку gluetun + qBittorrent, чтобы передавать порт автоматически.
gluetun + qBittorrent (рекомендуется)
qBittorrent сам не читает файл порта gluetun. Используйте up-команду gluetun (VPN_PORT_FORWARDING_UP_COMMAND), чтобы передавать назначенный порт в qBittorrent каждый раз, когда NAT-PMP создаёт или продлевает сопоставление, в том числе после перезапуска, когда порт может измениться.
- 1. Запустите qBittorrent в сетевом пространстве имён gluetun (
network_mode: service:gluetun). - 2. В qBittorrent в разделе Настройки → Веб-интерфейс включите Пропускать аутентификацию клиентов с localhost, чтобы gluetun мог обращаться к API без учётных данных.
- 3. Добавьте в gluetun приведённые ниже up- и down-команды. Измените
8080, если веб-интерфейс qBittorrent использует другой порт.
services:
gluetun:
image: qmcgaw/gluetun:latest
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
ports:
- 8080:8080/tcp # qBittorrent Web UI (optional, for your browser)
environment:
- VPN_SERVICE_PROVIDER=custom
- VPN_TYPE=wireguard
- VPN_PORT_FORWARDING=on
- VPN_PORT_FORWARDING_PROVIDER=protonvpn
- VPN_PORT_FORWARDING_UP_COMMAND=/bin/sh -c 'wget -O- -nv --retry-connrefused --post-data "json={\"listen_port\":{{PORT}},\"current_network_interface\":\"{{VPN_INTERFACE}}\",\"random_port\":false,\"upnp\":false}" http://127.0.0.1:8080/api/v2/app/setPreferences'
- VPN_PORT_FORWARDING_DOWN_COMMAND=/bin/sh -c 'wget -O- -nv --retry-connrefused --post-data "json={\"listen_port\":0,\"current_network_interface\":\"lo\"}" http://127.0.0.1:8080/api/v2/app/setPreferences'
# values from your BTGuard .conf file:
- WIREGUARD_PRIVATE_KEY=
- WIREGUARD_ADDRESSES=
- VPN_DNS_ADDRESS=
- WIREGUARD_PUBLIC_KEY=
- VPN_ENDPOINT_IP=
- VPN_ENDPOINT_PORT=444
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
network_mode: service:gluetun
depends_on:
- gluetun
environment:
- PUID=1000
- PGID=1000
- WEBUI_PORT=8080
volumes:
- ./qbittorrent/config:/config
- ./downloads:/downloads
- 4. Up-команда выполняется каждый раз, когда gluetun получает проброшенный порт. Она задаёт
{{PORT}}в качестве порта прослушивания qBittorrent, привязывает его к VPN-интерфейсу и отключает случайный порт и UPnP, чтобы qBittorrent не переопределял назначенный порт. - 5. Down-команда сбрасывает порт прослушивания, когда проброс прекращается (это помогает qBittorrent корректно восстановиться после отключения).
- 6. Найдите назначенный порт в журнале gluetun и убедитесь, что qBittorrent показывает тот же порт в разделе Настройки → Соединение. Проброс также отображается на странице WireGuard с меткой auto.
qBittorrent (запущенный непосредственно на устройстве)
Если WireGuard работает на вашем хосте без gluetun, qBittorrent может запросить порт сам:
- 1. Подключитесь с помощью конфигурации BTGuard WireGuard.
- 2. В разделе Настройки → Дополнительно выберите в параметре Сетевой интерфейс ваш интерфейс WireGuard, чтобы весь трафик шёл через VPN.
- 3. В разделе Настройки → Соединение включите Использовать UPnP / NAT-PMP для проброса портов от моего роутера. qBittorrent запросит порт автоматически; назначенный порт отобразится в его журнале и на странице WireGuard.