Wireguard over Shadowsocks

Привет.
У меня есть VPS. На нем Wireguard. Поскольку WG начинают блокировать в России, я хочу обернуть его в shadowsocks.

На VPS WG работает на порту 7788. Я настроил на локали и на VPS shadowsocks. На vps открыл порты для ss. C помощью ss пробросил порт wireguard-а на локаль. Пытаюсь подключиться к wireguard серверу по адресу localhost:7788, но нет соединения.

Я попробовал так пробросить 22й порт - работает. Я попробовал на VPS и локали поднять udp клиент и сервер (просто sample python udp server) - работает. А WG не работает. Клиент отправляет handshake и все:

(base) root@Laptop ~ % ss-tunnel -c ./wg-tun3.json -v
**2023-08-26 21:46:40 INFO:** initializing ciphers... chacha20-ietf-poly1305
**2023-08-26 21:46:40 INFO:** listening at 127.0.0.1:7788
**2023-08-26 21:46:40 INFO:** UDP relay enabled
**2023-08-26 21:46:40 ERROR:** setting ipv6 dscp failed: 22
**2023-08-26 21:46:45 INFO:** [udp] server receive a packet
**2023-08-26 21:46:45 INFO:** [7788] [udp] cache miss: 127.0.0.1:7788 <-> 127.0.0.1:58290
**2023-08-26 21:46:45 ERROR:** setting ipv6 dscp failed: 22
**2023-08-26 21:46:50 INFO:** [udp] server receive a packet
**2023-08-26 21:46:50 INFO:** [7788] [udp] cache hit: xxx.xxx.org:7788 <-> 127.0.0.1:58290
**2023-08-26 21:46:55 INFO:** [udp] server receive a packet
**2023-08-26 21:46:55 INFO:** [7788] [udp] cache hit: xxx.xxx.org:7788 <-> 127.0.0.1:58290

SS клиент

{
  "server": "209.x.x.x",
  "server_port": 14000,
  "local_address": "127.0.0.1",
  "local_port": 7788, 
  "password": "xxx",
  "timeout": 300,
  "method": "chacha20-ietf-poly1305",
  "mode": "tcp_and_udp",
  "tunnel_address": "127.0.0.1:7788" 
}

SS сервер

{
    "server": ["::0", "0.0.0.0"],
    "server_port": 14000,
    "password": "xxx",
    "timeout": 300,
    "method": "chacha20-ietf-poly1305",
    "mode": "tcp_and_udp",
    "nameserver":"1.1.1.1"
}

Что может быть не так? Как это отлаживать?

Посмотреть в tcpdump, что на localhost у VPS происходит

Спасибо
В процессе отладки изменил локальный порт SS с 7788 на 15000. Таким образом, у меня на VPS SS слушает порт 14000, а на локальном компе SS все транслирует на порт 15000.

Попытался подключиться к локальному порту SS через telnet. Вижу следы в tcpdump на тачке и в vps.
Так же с помощью SS попытался прокинуть 22й порт vps-a в локальный порт 15000 и поюключиться к vps через ssh. Успешно. Вижу следы через tcpdump на VPS

12:11:29.600217 IP broadband-5-xxx-xxx-xxx.ip.moscow.rt.ru.57909 > vpsname.14000: Flags [.], ack 611, win 2042, options [nop,nop,TS val 2236076564 ecr 1400678557], length 0

А так же на локальном компе

15:11:29.573642 IP 127.0.0.1.15000 > 127.0.0.1.57908: Flags [P.], seq 1061:1309, ack 540, win 6304, options [nop,nop,TS val 1348944637 ecr 1579208498], length 248

Но не вижу сообщений в логе ss-tunel

Однако когда прошу WG клиент на компе подключиться к локальному порту 15000, вижу сообщение в tcpdump на локали:

14:37:44.364939 IP localhost.64183 > localhost.hydap: UDP, length 148

Вижу сообщение в ss-tunel клиенте на локали

 2023-08-27 14:37:44 INFO: [15000] [udp] cache hit: 127.0.0.1:7788 <-> 127.0.0.1:64183

Но не вижу ничего в tcpdump на VPS

На 14000 UDP порту внешнего интерфейса VPS есть входящий трафик?

Спойлер

tcpdump -i iface -n udp and port 14000

Запустил tcpdump -i eth0 -n udp and port 14000
Когда я включаю локальный клиент WG, который смотрит на сервер localhost:15000 - на сервере трафика нет.
Когда я просто тестирую возможность отправлять сообщения через udp через python, на сервере и клиенте я вижу сообщения:

Сервер:

root@vps:~ tcpdump -i eth0 -n udp and port 14000
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
15:46:30.441273 IP client_ip.57786 > 209.x.x.x.14000: UDP, length 71

Клиент:

(base) root@laptop ~ % ss-tunnel -c ./wg-tun_7788.json -v
 2023-08-27 18:46:25 INFO: initializing ciphers... chacha20-ietf-poly1305
 2023-08-27 18:46:25 INFO: listening at 127.0.0.1:15000
 2023-08-27 18:46:25 INFO: UDP relay enabled
 2023-08-27 18:46:25 ERROR: setting ipv6 dscp failed: 22
 2023-08-27 18:46:30 INFO: [udp] server receive a packet
 2023-08-27 18:46:30 INFO: [17788] [udp] cache miss: server_ip:7788 <-> 127.0.0.1:53167

Более того, я попробовал на raspberry поднять клиент SS и WG с теми же конфигами. То же самое.
Без SS wg работает и на ноуте и на rp.

Если я выключаю SS и в WG указываю нормальный адрес - тогда на порту WG на сервере трафик есть и WG работает.

Возможно, я идентифицировал проблему.
Если я в конфиге WG на клиенте ограничиваю адреса, к которым можно подключаться через WG (например AllowedIPs = 8.8.8.8/32), все начинает работать.

Таким образом, я подозреваю, что трафик SS тоже начинает идти через WG.

update:
Ну да. С помощью какого-то сайта сделал себе allowed ip такой, который исключает только адрес моего vps - и все заработало.

Буду рад идеям, как это разрулить. Делать через allowed ip - это дикий костыль.
Через postup в конфиге wireguard, наверное?

Детали

Можно вручную

Да, добавив статический маршрут.

Спасибо. Это решение.

В исключении через AllowedIPs нет ничего костыльного.