Туннелирование wireguard в чем-то еще

Здравствуйте.
После недавней блокировки mullvad vpn задался вопросом восстановления доступа к нему путем поднятия легковесного туннеля до ближайшей страны и работы как прежде через этот туннель, т.к. много всего уже настроено.
Глубоко тему не копал, но с наскока сделать не получилось. SSH, OpenVPN, IKEv2 - ничего не позволяет запустить wireguard туннель внутри другого туннеля (работаю в macos).
Понимаю что вопрос можно решить поднятием впн на роутере, но так сильно заморачиваться не хочется, нужно с одного компьютера все сделать.
Наверняка кто-то уже занимался подобным, подскажите куда копать.

А зачем вам mullvad vpn если вы собираетесь поднять туннель до другой страны? У вас и без mullvad все будет работать

Нужны адреса mullvad. Там ~400 серверов за 5$/мес, у меня софт настроен их гонять в хвост и в гриву.

Nginx умеет форвардить UDP. Попробуйте добавить в nginx.conf что-то вроде этого:

stream {
        server {
                listen 5151 udp;
                proxy_pass site.com:5151;
        }
}

Как вариант — установить OpenWrt (или любой другой дистрибутив) в виртуальную машину на компьютере, и маршрутизировать трафик через неё (прописать её IP-адрес шлюзом на компьютере, а саму ВМ добавить в физическую сеть мостом).

Думал уже в сторону udptunnel, он делает почти то же самое, но придется править все 400 vpn конфигов, чтобы они ломились на новый сервер, и соответствующую правкам конфигурацию сервера выкатывать.
Хотя это и оптимальный вариант по быстродействию, я надеялся решить все “на коленке”.

Благодарю, вот это уже вариант для таких лентяев как я :melting_face:

UPD:
Как и посоветовали поднял OpenWrt в VirtualBox, спасибо @ValdikSS. Пустил туннель на Нидерланды (хостинг vdsina 200р/мес). Заворачиваю wireguard от mullvad в wireguard же от себя. Получил где-то +25мс но в итоге все остальное работает как и было настроено до этого.

Wireguard на vds поднимается одной строчкой
wget https://git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh

Настроить подключение к wireguard в OpenWrt чуть сложнее, делал по этому гайду
Вдруг кому пригодится.

Знаю, вам врядли это поможет (может, кому другому тогда), потому что вы наверняка используете Windows и Wireguard, но если бы использовали Linux и OpenVPN, можно было было настроить OpenVPN как прокси (для целей VPN через VPN).
https://ntc.party/t/convert-tun-tap-to-socks5-http-proxy-openvpn-as-proxy/106 Convert TUN/TAP to Socks5/HTTP proxy (OpenVPN as proxy)
https://rutracker.org/forum/viewtopic.php?t=6292222 OpenVPN как прокси

Там в темах упоминаются несколько проектов Wireguard как прокси, но у меня ни один не получилось настроить (пробовал аж 4). Кажется, там на серверной стороне еще надо какие-то изменения вносить, что в большинстве случаев невозможно, понятное дело.
А OpenVPN как прокси проверенное решение (хотя, тоже не обошлось без подводных камней). Придется компилировать и из командной строки конфиги подключать.

Т.е. в системе поднимается любой обычный VPN, который еще не заблокирован в России. Он предоставит глобально зарубежный IP, чтобы обойти влияние РКН. А потом поднимается openvpn-proxy к серверам Mullvad. И в браузерах уже прописывается локальный прокси. Или можно openvpn-proxy натравить на вышестоящий shadowsocks (чтобы обойти блокировку РКН). Но тут уже надо править ovpn конфиги (прописывать вышестоящий прокси туда). Это сделать в общем не трудно.

wghttp вроде работает, но почему-то не со всеми серверами. С Proton VPN не получилось подружить и в клиенте пришлось отключить распознавание DNS через SOCKS прокси.
Конфиги пришлось переводить в командную строку.

Запуск:
wghttp --listen=127.0.0.1:1080 --client-ip=192.168.6.140 --dns=1.1.1.1 --private-key=KEY --peer-key=KEY --peer-endpoint=server.com:1024 --exit-mode=remote --resolve-dns=1.1.1.1

Address --client-ip
DNS --dns
PrivateKey --private-key
PublicKey --peer-key
Endpoint --peer-endpoint
PresharedKey --preshared-key
Local HTTP/SOCKS --listen

Готовые сборки есть здесь:
https://github.com/artenax/wghttp
https://github.com/moremorefun/wghttp

Но если вам от Mullvad VPN нужен UDP (например, для торрентов), то прокси, конечно, не подойдет.

xray тоже может proxy → wg, настройки сервера не нужно. Почему прокси не подойдёт для udp? socks5 поддерживает udp

Легко сказать может, но без реальных примеров командной строки в этом мало смысла.

Ну, вот примерно я представляю как настроить. Бинарники тут.
Запуск:
xray -c /etc/xray/config.json
Wireguard конфиг надо преобразовать в json
https://github.com/XTLS/Xray-core/issues/1981
https://github.com/XTLS/Xray-core/issues/1896
Не работает, конечно, нифига.
Зато аниме, иероглифы и лапша из json’овских скобок вам обеспечены в процессе экспериментов.

у меня работает
wgcf.json (1 КБ)
внутри пример конфига cf warp, нужно заменить на свой. Если заменяете на свой cf warp, то имейте ввиду что в россии и на популярных хостингах работать не будет

У меня не работает с варпом (ключи мои):

denis@systemp:~$ xray -c /etc/xray/config.json
Xray 1.7.5 (Xray, Penetrates Everything.) Custom (go1.20 linux/386)
A unified platform for anti-censorship.
2023/04/28 23:34:05 [Info] infra/conf/serial: Reading config: /etc/xray/config.json
2023/04/28 23:34:05 [Warning] core: Xray 1.7.5 started
2023/04/28 23:34:08 tcp:127.0.0.1:58646 accepted tcp:195.201.201.32:443 [wireguard]
panic: unaligned 64-bit atomic operation

goroutine 36 [running]:
runtime/internal/atomic.panicUnaligned()
	runtime/internal/atomic/unaligned.go:8 +0x2d
runtime/internal/atomic.Load64(0xa21cc14)
	runtime/internal/atomic/atomic_386.s:225 +0x10
go.uber.org/atomic.(*Int64).Load(...)
	go.uber.org/atomic@v1.10.0/int64.go:45
github.com/sagernet/wireguard-go/device.(*Device).IsUnderLoad(0xa21cb40)
	github.com/sagernet/wireguard-go@v0.0.0-20221116151939-c99467f53f2c/device/device.go:224 +0x134
github.com/sagernet/wireguard-go/device.(*Device).RoutineHandshake(0xa21cb40, 0x1)
	github.com/sagernet/wireguard-go@v0.0.0-20221116151939-c99467f53f2c/device/receive.go:290 +0x4be
created by github.com/sagernet/wireguard-go/device.NewDevice
	github.com/sagernet/wireguard-go@v0.0.0-20221116151939-c99467f53f2c/device/device.go:316 +0x2f4
denis@systemp:~$

С другим поставщиком таких ошибок нет, но нет коннекта (висяк).
Но и wghttp не со всеми VPN работает. С Proton, например, не работает. И дело не в РКН.
Все-таки глючная вещь этот wireguard go, что лежит в основе.
openvpn гораздо лучше себя ведет.

Просто, я еще сам выхожу в интернет через wireguard. Это получается wireguard через wireguard.