Так как есть риск блокировки 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)


  1. MountainGoat
    16.08.2023 08:46
    +1

    Придумал бы кто-нибудь способ наоборот. То есть: имею сервер Wireguard, но подключаться хочется через прокси, чтобы не весь трафик туда отправлять, а до определённых доменов. Ничего разумнее локального контейнера докер с Privoxy и клиентом Wireguard пока не придумал.


    1. entze
      16.08.2023 08:46
      +1

      https://github.com/pufferffish/wireproxy
      не совсем то (в плане разруливания по доменам), но позволяет поднять WG как прокси-клиент. Потом уже хочешь браузер, хочешь Curl.
      Можно сослаться в конфиге на conf от WG.


    1. DennoN Автор
      16.08.2023 08:46

      у меня разделение на то куда направлять трафик сделано через маршруты на самом роутере. bird ими управляет. скачивает по bgp список, и направляет в wg. + можно накастомить и указать свои ip адреса. ну а все клиенты роутера уже через роутер и идут либо в тунель, либо в провайдера


      1. Kononvaler
        16.08.2023 08:46

        Список для правки измененных адресов для домена? Гребаный Plex например систематически меняет адреса, задрался править.


        1. DennoN Автор
          16.08.2023 08:46

          ага. если что смотреть сюда https://github.com/DennoN-RUS/Bird4Static/wiki

          там раз в час по умолчанию идет резлов доменов, которые в ручную в файл внесены. Но для cdn такое не подходит, сразу говорю.

          ну или просто тот же iprange прикрутить на добавление маршрутов


    1. vasek00
      16.08.2023 08:46
      +1

      Речь ниже о роутере 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


    1. Sensuyaki
      16.08.2023 08:46
      +2

      https://github.com/qzeleza/kvas


  1. mercurykd
    16.08.2023 08:46

    а без роутера если? как выглядеть будет?

    выглядит так будто бы достаточно ендпоинт поменять на локальный сервер СС, а в СС добавить туннель для вг-порта, правильно?


    1. DennoN Автор
      16.08.2023 08:46
      +1

      да, верно. просто поднимаем ss-tunnel на клиенте, на сервере ss-server. и вг направляем на порт ss-tunnel, который уже сам переадресует на вг


  1. XOR2048
    16.08.2023 08:46

    Shadowsocks не выход, если делать какие-то предположения на будущее, так как его умеют вычислять и блокировать (если мы говорим про РФ, то уже были успешные не массовые тесты), но как выход в текущей ситуации, достаточно неплохо.


    1. DennoN Автор
      16.08.2023 08:46

      да, если его начнут блочить, то в какую сторону смотреть? кроме смены места жительства)


      1. XOR2048
        16.08.2023 08:46
        +2

        Если говорить про маскировку VPN трафика в целом, то можно смотреть в сторону Cloak, VLESS и прочего (на Habr есть отличная серия статей на этот счет - 1, 2, 3, 4).

        Если важно маскировать именно WireGuard трафик, то очень неплох wstunnel.


        1. DennoN Автор
          16.08.2023 08:46
          +1

          спасибо! про wg и wstunnel интересно. ппробую на досуге)


      1. dtkbrbq
        16.08.2023 08:46
        +1

        Роскомпозор сейчас душит VPN через мобильных операторов, xray(vless) прекрасно при этом работает.