Диагностика и исправление WireGuard Обновлено 7 all

WireGuard: обход белых списков провайдера — рабочие методы

Провайдер блокирует WireGuard через белый список? Разбираем рабочие методы обхода: смена портов, TCP-обёртки, маскировка под TLS и SSH.

wireguardобход блокировокбелые спискиvpndpiobfuscation
Содержание
КороткоЕсли провайдер использует белый список и блокирует WireGuard, помогут: перенос на разрешённый порт (например, 443), TCP-обёртки (udp2raw), маскировка под TLS (wstunnel) или SSH-туннель. Каждый способ требует проверки в вашей сети.

Как понять, что WireGuard блокирует белый список

Белый список провайдера пропускает только трафик на известные порты и протоколы (обычно 80/443 TCP, иногда 53 UDP). WireGuard по умолчанию использует UDP-порт 51820 — это не входит ни в один белый список. Если после запуска интерфейса WireGuard нет handshake, а обычный доступ к сайтам работает — вероятно, пакеты UDP на нестандартный порт просто отбрасываются.

Порядок диагностики: сначала проверьте доступность порта с другого устройства (например, nc -u -z server_ip 51820). Если порт недоступен, но другие UDP-порты (к примеру, 53) открыты, значит, действует фильтрация. Затем проверьте, не блокирует ли провайдер сам протокол WireGuard по DPI (deep packet inspection). Для этого временно переключите сервер на другой UDP-порт, например 443. Если соединение установилось — дело только в порте. Если нет — требуется маскировка трафика.

Метод 1: перенос WireGuard на разрешённый UDP-порт

Самый простой способ — изменить порт прослушивания на сервере и клиенте. Часто провайдеры пропускают все UDP-пакеты на порт 53 (DNS) или 443 (QUIC). Используйте эти порты. На сервере в /etc/wireguard/wg0.conf укажите:

[Interface]
Address = 10.0.0.1/24
ListenPort = 443
PrivateKey = <server_private>

На клиенте в конфигурации [Peer] поменяйте Endpoint на vpn.example.com:443. После этого перезапустите службу WireGuard. Проверьте подключение. Этот метод работает, если блокировка только по порту, но не по DPI.

Метод 2: TCP-обёртка udp2raw

Если UDP-порт 443 тоже блокируется, но TCP-соединения на 80/443 разрешены, поможет утилита udp2raw. Она превращает UDP-трафик WireGuard в TCP. Установите udp2raw на сервере и на клиенте (скачайте с GitHub, проверьте версию). На сервере запустите:

udp2raw -s -l 0.0.0.0:443 -r 127.0.0.1:51820 -k "пароль" --raw-mode faketcp

Это заставит сервер принимать TCP-пакеты на порт 443 и пересылать их локальному WireGuard (порт 51820). На клиенте укажите вместо стандартного Endpoint TCP-порт:

Endpoint = vpn.example.com:443

И запустите клиентский udp2raw:

udp2raw -c -l 0.0.0.0:3333 -r vpn.example.com:443 -k "пароль" --raw-mode faketcp

Затем настройте клиент WireGuard на Endpoint = 127.0.0.1:3333. Убедитесь, что у вас открыт порт 443 на сервере и нет конфликта с веб-сервером. Проверьте для своей версии udp2raw — синтаксис может отличаться.

Метод 3: маскировка под TLS с wstunnel

wstunnel оборачивает UDP в WebSocket, который затем передаётся по HTTPS (порт 443). Это эффективно против DPI, так как трафик выглядит как обычный запрос к веб-серверу. Скачайте wstunnel на сервер и клиент. На сервере:

wstunnel server --restrict-http 127.0.0.1:51820 wss://0.0.0.0:443

На клиенте:

wstunnel client -L 'udp://127.0.0.1:51820:127.0.0.1:51820' wss://vpn.example.com:443

Теперь клиент WireGuard должен использовать Endpoint = 127.0.0.1:51820. Либо можно настроить wstunnel для проброса конкретного порта. Проверьте, что сервер разрешает входящие HTTPS-соединения. Если у вас уже есть веб-сервер, используйте другой порт (например, 8443) и убедитесь, что он не блокируется.

Метод 4: WireGuard поверх SSH

Если разрешён только SSH (порт 22), можно построить туннель: поднимаете WireGuard между двумя машинами, а затем пробрасываете его через SSH. Но это сложнее — обычно используют обычный SSH-туннель для проброса трафика, а не сам WireGuard. Однако если вы хотите сохранить шифрование WireGuard, можно использовать socat для перенаправления UDP в TCP. Например, на сервере:

socat TCP-LISTEN:433,fork UDP:127.0.0.1:51820

На клиенте — обратное:

socat UDP-LISTEN:51820,fork TCP:server_ip:433

Затем на клиенте WireGuard укажите Endpoint = 127.0.0.1:51820. Этот способ обходит блокировку только если разрешён TCP-порт 433 (или любой другой). SSH-туннель здесь не обязателен, но можно комбинировать.

Как повысить устойчивость обхода

Ни один метод не гарантирует 100% работу, если провайдер применяет DPI. Чтобы повысить устойчивость:

  • Меняйте порты каждые несколько дней.
  • Используйте комбинацию TCP-обёртки и TLS, например wstunnel.
  • Настройте резервные серверы в разных подсетях.
  • Проверяйте актуальность конфигураций для вашей версии WireGuard и обёрток.

Перед настройкой всегда тестируйте маскировку с помощью ping или настройте логи WireGuard для диагностики.

Мини-чеклист

  • Определите, блокирует ли провайдер только UDP-порт 51820 или сам протокол WireGuard (тест с портом 443).
  • Если помогает смена порта — используйте UDP 53 или 443, проверьте, что порт не занят.
  • При DPI используйте udp2raw или wstunnel, тщательно проверьте синтаксис для вашей версии.
  • Настройте клиент WireGuard на локальный порт обёртки (например, 127.0.0.1:51820) и проверьте handshake.

Частые ошибки

  • Не изменять порт на клиенте — если сервер слушает 443, а клиент всё ещё шлёт на 51820, connection не будет.
  • Забыть про firewall — нужно открыть выбранные порты и на сервере, и на клиенте.
  • Использовать устаревшие версии udp2raw/wstunnel, которые несовместимы с текущей ОС.
  • Пытаться обойти белый список без предварительной диагностики, наугад меняя конфиги.

Источники и документация

FAQ

Будет ли работать WireGuard, если просто поменять порт на 443 UDP?

Часто да, если провайдер блокирует только нестандартные UDP-порты. Но если используется DPI, блокировка сохранится, потребуется TCP-обёртка или TLS.

Что такое udp2raw и чем он отличается от обычного TCP-туннеля?

udp2raw преобразует UDP-пакеты в TCP и отправляет их на указанный порт, при этом эмулирует TCP-сессию, что позволяет обойти простые фильтры. Такой трафик выглядит как обычный TCP, но содержит внутри WireGuard.

Можно ли одновременно использовать wstunnel и WireGuard без изменения конфигурации WireGuard?

Да, wstunnel работает как прокси: на клиенте он слушает локальный UDP-порт и пересылает данные на сервер по HTTPS. Вы меняете только Endpoint в конфиге WireGuard на 127.0.0.1:порт, который слушает wstunnel. Сам конфиг WireGuard остаётся почти без изменений.

Нужен быстрый рабочий доступ?

Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.

Получить доступ

Дальше по теме

Связанные статьи