WireGuard

Добрый день!

Сегодня на мобильном операторе Beeline наблюдается проблемы в работе WireGuard. Такую же проблему выявили пользователи 4PDA.

У меня два договора Билайн:

Первый - на домашний интернет в квартире (московская область), если подключаешься к интернету через него, то WireGuard, поднятый на своем VDS, исправно работает (телефон, планшет, ПК).

Второй договор - мобильный интернет и связь (чисто для телефона), вот по нему уже WireGuard работать не хочет. Если же я подключаюсь по WiFi к домашнему интернету и включаю WireGuard, то все работает исправно.

Сервер один, конфигурационный файл тоже.

Также друг дал конфигурационный файл своего сервера WireGuard, на телефоне он работает исправно, и еще несколько файлов, которые дали на 4PDA.

Как можно определить проблему?

Проблема — мобильный оператор блокирует легко узнаваемый по первым 8 байт хэндшейка протокол Wireguard.

Можно что то “улучшить” в настройках для исправления данной ситуации?

Смотрите в сторону ObfuscateKey или ListenPortTCP + ObfuscateTCP.

11:35 мск, перестал подключаться WG к oracle vps sweden на AS 12389 (сз рт), 48780 (сз билайн?), подключается на AS 45027 (ру хостинг). Трассировка icmp/tcp/udp на порт WG проходит. По wireshark видно что сервер не отвечает, видно только первый пакет от клиента.

Самый простой вариант — отправить любой мусор первым UDP-пакетом, а затем устанавливать соединение.

  1. В конфигурационном файле клиента задать статичный ListenPort, например, ListenPort = 56789
  2. Выполнить sudo nping --udp --count 1 --data-length 16 --source-port 56789 --dest-port DEST_PORT DEST_IP
  3. Подключаться.

рт сз
rt.cap (864 байта)
трафик nping (даже после 2-х минут пингов) перестаёт доходить до сервера после попытки подключения wg

а на билайне сработало

edit: на рт wg смог подключиться после 310 секунд nping. И еще надо добавить keepaliveinterval в peer, чтобы wg не прерывался после простоя

Got tested out on android 10
Termux and nmap
Works well, wg app connected as expects

Протестировано на android 10
Termux и nmap
Работает хорошо, wg app подключается как ожидается

Installed packages


ii termux-am 0.4 all Android Oreo-compatible am command reimplementation
ii termux-am-socket 1.5.0 aarch64 A faster version of am with less features that only works while Termux is running
ii termux-auth 1.4-2 aarch64 Password authentication library and utility for Termux
ii termux-exec 1:1.0 aarch64 An execve() wrapper to make /bin and /usr/bin shebangs work
ii termux-keyring 3.11 all GPG public keys for the official Termux repositories
ii termux-licenses 2.0-3 all Contains LICENSE files for common licenses
ii termux-tools 1.37.0 all Basic system tools for Termux


ii nmap 7.94 aarch64 Utility for network discovery and security auditing
ii nmap-ncat 7.94 aarch64 Feature-packed networking utility which reads and writes data across networks from the command line

Т.е. я в файле .conf, где графа [peer] добавляю строку ListenPort = 56789, далее подключаюсь серверу и прописываю команду из пункта 2, верно?

нет, ListenPort надо в [Interface]. Подключение к серверу через WG это самый последний пункт. Чтобы команда сработала (на винде sudo нужно убрать) нужен установленный nmap и отредактированые DEST_PORT DEST_IP на порт и айпи сервера.

Starting Nping 0.7.80 ( Nping — Network packet generation tool & ping utility ) at 2023-08-01 23:10 MSK
SENT (0.0589s) UDP 172.31.0.121:56789 > 141.94.63.228:56789 ttl=64 id=17869 iplen=44
RCVD (0.1196s) ICMP [141.94.63.228 > 172.31.0.121 Port 56789 unreachable (type=3/code=3) ] IP [ttl=46 id=39407 iplen=72 ]

Max rtt: 60.741ms | Min rtt: 60.741ms | Avg rtt: 60.741ms
Raw packets sent: 1 (44B) | Rcvd: 1 (72B) | Lost: 0 (0.00%)
Nping done: 1 IP address pinged in 1.14 seconds

исправил прошлый пост. подожди 5 минут или измени ListenPort перед новой попыткой.

sudo nping --udp --count 1 --data-length 16 --source-port 51820 --dest-port 51820 141.94.63.228

Starting Nping 0.7.80 ( Nping — Network packet generation tool & ping utility ) at 2023-08-01 23:37 MSK
SENT (0.0469s) UDP 172.31.0.121:51820 > 141.94.63.228:51820 ttl=64 id=20537 iplen=44

Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A
Raw packets sent: 1 (44B) | Rcvd: 0 (0B) | Lost: 1 (100.00%)
Nping done: 1 IP address pinged in 1.12 seconds

Вроде нигде не ошибся.
При попытке подключения WireGuard клиент пишет что соединение удалось, но интернет рубится напрочь.
Значение ListenPort я ведь должен везде установить тот, который указан в приложенной фотографии, верно?
image

Порт wg сервера это одно. ListenPort/SourcePort это другое. Они скорее всего могут быть одинаковыми, но я тестил с разными. Меняй ListenPort/SourcePort и пробуй снова, wg подключай только после nping и сразу же

nping --udp --count 1 --data-length 16 --source-port 56789 --dest-port 1234 141.94.63.228

[Interface]
ListenPort = 56789
[Peer]
Endpoint = 141.94.63.228:1234

не работает? пробуй count 310 и data-length 1400. И кстати wg клиент и nping должны быть на одном устройстве, с разных не выйдет

Могу подтвердить, что наблюдаю блокировку Wireguard до VPS во Франции (OVH) на случайном порту у Ростелекома (12389). udp2raw с MTU 1280 пока что помогают.

Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A
Raw packets sent: 1000 (1.428MB) | Rcvd: 0 (0B) | Lost: 1000 (100.00%)
Nping done: 1 IP address pinged in 1001.26 seconds

Для интереса заказал готовый сервер с WireGuard в КЗ. Все работает. Проверял на сайтах овд инфо, medium.com, twitter для теста. Странно.

udp2raw это надо устанавливать на чистом сервере или как-то оборачивается на WG?

Первая часть поста Очень информативна, к чему это?

Если это про самый первый пост, то просто не мог отследить логику работы. По проводу работало, по мобильной связи нет, хотя сервер один и тот же. Но вчера уже все отвалилось.

Нужно и на сервере, и на клиенте.