Так как есть риск блокировки Wireguard протокола, то рассказываю, как сделать, что бы трафик туннеля шел через shadowsocks.
Пример будет для сервера на Ubuntu 22.04 и роутера кинетик, с установленным на нем Entware. Предполагается, что WG уже поднят и настроен. А также на роутер установлен Entware.
Итак:
1.1) на сервер, где крутится wg ставим
sudo apt install shadowsocks-libev
1.2) потом редактируем файл
vi /etc/shadowsocks-libev/config.json
{
"server": "0.0.0.0",
"mode":"tcp_and_udp",
"server_port":{server-port},
"password":"{password}",
"timeout":300,
"method":"chacha20-ietf-poly1305"
}
где {server-port}
- это порт который будет слушать сервер ss, например 8421
{password}
- любой пароль, желательно только что сгенерированный
1.3) Потом выполняем
systemctl restart shadowsocks-libev.service
systemctl status shadowsocks-libev.service
проверяем, что сервер завелся
2.1) Теперь переходим к роутеру.
Ставим на него пакеты
opkg install shadowsocks-libev-ss-tunnel shadowsocks-libev-config
2.2) теперь редактируем конфиг
vi /opt/etc/shadowsocks.json
{
"server": "{server-ip}",
"mode":"tcp_and_udp",
"server_port":{server-port},
"local_address": "0.0.0.0",
"local_port":{local-port},
"password":"{password}",
"timeout":300,
"method":"chacha20-ietf-poly1305",
"tunnel_address": "127.0.0.1:{wireguard-port}"
}
где {server-port}
и {password}
это те же самые, которые добавили на сервер в пункте 1.2
{server-ip}
- ip адрес сервера на котором крутится wireguard и ss
{local-port}
- любой свободный порт на роутере, который мы будем указывать в настройках wg соединения, например 51822
{wireguard-port}
- это порт на котором на сервере крутится wg соединение, например 51820
2.3) правим файл
vi /opt/etc/init.d/S22shadowsocks
меняем на строку PROCS=ss-*
на PROCS=ss-tunnel
перезапускаем ss на роутере и проверяем, что работает
/opt/etc/init.d/S22shadowsocks restart
/opt/etc/init.d/S22shadowsocks check
3.1) Идем в веб морду роутера, в настройки нужного wg соединения и в пире вместо {server-ip}
:{wireguard-port}
вставляем 127.0.0.1:{local-port}
Все! соединение должно теперь установиться. В итоге трафик через wg интерфейс будет заворачиваться в ss и идти уже под ним. Так как и ss и wg используют шифрование, то у меня скорость туннеля упала в двое, по сравнению с простым wg без заворачивания в ss. Зато надежно.
П.С.: Схема работы

Комментарии (14)
mercurykd
16.08.2023 08:46а без роутера если? как выглядеть будет?
выглядит так будто бы достаточно ендпоинт поменять на локальный сервер СС, а в СС добавить туннель для вг-порта, правильно?
DennoN Автор
16.08.2023 08:46+1да, верно. просто поднимаем ss-tunnel на клиенте, на сервере ss-server. и вг направляем на порт ss-tunnel, который уже сам переадресует на вг
XOR2048
16.08.2023 08:46Shadowsocks не выход, если делать какие-то предположения на будущее, так как его умеют вычислять и блокировать (если мы говорим про РФ, то уже были успешные не массовые тесты), но как выход в текущей ситуации, достаточно неплохо.
MountainGoat
Придумал бы кто-нибудь способ наоборот. То есть: имею сервер Wireguard, но подключаться хочется через прокси, чтобы не весь трафик туда отправлять, а до определённых доменов. Ничего разумнее локального контейнера докер с Privoxy и клиентом Wireguard пока не придумал.
entze
https://github.com/pufferffish/wireproxy
не совсем то (в плане разруливания по доменам), но позволяет поднять WG как прокси-клиент. Потом уже хочешь браузер, хочешь Curl.
Можно сослаться в конфиге на conf от WG.
DennoN Автор
у меня разделение на то куда направлять трафик сделано через маршруты на самом роутере. bird ими управляет. скачивает по bgp список, и направляет в wg. + можно накастомить и указать свои ip адреса. ну а все клиенты роутера уже через роутер и идут либо в тунель, либо в провайдера
Kononvaler
Список для правки измененных адресов для домена? Гребаный Plex например систематически меняет адреса, задрался править.
DennoN Автор
ага. если что смотреть сюда https://github.com/DennoN-RUS/Bird4Static/wiki
там раз в час по умолчанию идет резлов доменов, которые в ручную в файл внесены. Но для cdn такое не подходит, сразу говорю.
ну или просто тот же iprange прикрутить на добавление маршрутов
vasek00
Речь ниже о роутере Keenetic и много примеров на forum.keenetic.com
Adguardhome + ipset, в файле ipset conf описано domen.com/filter1, domen1.com/
filter2ipset: []
ipset_file: /opt/home/AdGuardHome/ipset.conf
а filter
ipset create filter1 hash:ip hashsize 4096
Далее уже как хотите любым удобным вариантом маркировки или готовый список загоняете IP
iptables -t mangle .... -m set --match-set filter1 dst -j MARK ....
промаркированный в нужную таблицу маршрутизации
ip rule add fwmark .... table ....
В место Adguardhome можно ipset-dns то же самое, но в отличие от Adguardhome нет сервиса блокировки рекламы. Данные сервисы есть в наличие в Entware как для mips так и для arm процессоров.
Так же имеется в строенный прокси сервис из прошивки, можно создать профиль в него клиента и в этом профиле только канал от прокси. Тут есть так же варианты так как для данного сервиса прокси используется tun2 sock -> есть IP на данный сервис, а раз есть IP то могут быть и варианты
...--http-server-addr хх.хх.хх.хх:80 --tundev t2s_px0 --netif-ipaddr 172.20.12.1
Sensuyaki
https://github.com/qzeleza/kvas