Ник Пост Дата
NimuraF(Balbes)

Столкнулся с проблемой при настройке связки WG + Cloak и подключению к ней клиентов с windows. На удалённом VPS в нидерландах поднял чистый WG через образ linuxserver/wireguard (пока, кстати, работает уже пару часов без перебоев и в таком виде), теперь хочу упаковать WG в Cloak, но совсем не понял, как провернуть эту связку на винде + хотелось бы закинуть и сам Cloak в докер-контейнер (это вообще имеет смысл, кстати?). Я в принципе не понял, как запустить клиент Cloak на винде, оф. дока вообще не имеет инфы на этот счёт, экзешники, что лежат на гитхабе вроде как просто плагины под SS-клиенты (хотя я попробовал их запустить и так они просто инстантно закрываются). Возник соответствующий вопрос, такую связку вообще реально реализовать или стоит смотреть в сторону других обфускаторов? Я видел удобные приложухи которые сразу развёртывают OpenVPN+Cloak, но я бы хотел ручками проделать эту задачу и набить руку, ну и речь идёт именно про WG.

2023-09-21T22:58:05.760Z
Xunlei

Смысла не имеет.

Вам же ссылки дали на документацию и пример конфигов в соседней ветке. Скачиваете go1.21.1.windows-amd64.msi, и собираете командами:

@go.exe build "-ldflags=-s -w" -trimpath -o ck-client.exe github.com/cbeuw/Cloak/cmd/ck-client
@go.exe build "-ldflags=-s -w" -trimpath -o ck-server.exe github.com/cbeuw/Cloak/cmd/ck-server

Запускаете по шаблону из README. Если что-то не работает, можете отладить в GoLand. Компиляция и запуск удалённого отладчика delve на Linux:

/usr/local/go/bin/go build -buildvcs=false -gcflags "all=-N -l" -o ck-server github.com/cbeuw/Cloak/cmd/ck-server
sudo dlv --listen=:<порт отладки> --headless=true --api-version=2 --accept-multiclient exec ./ck-server
2023-09-22T05:03:07.557Z
NimuraF(Balbes)

Благодарю за ответ, но я не видел в доке вообще ничего касательно сборки под винду, я в принципе не думал, что экзешник надо дополнительно собирать через go. Понятия не имею почему, но эта мысль мне даже в голову не пришла.

2023-09-22T12:28:47.106Z
Xunlei

Да, автор ридми предполагает, что для читателя это само собой разумеющееся.
Сейчас глянул релиз — там экзешник клиента есть. Попробуйте его запустить с настроенным конфигом под ваш сервер на линукс. Просто выполняйте шаги инструкции, и если шаг вызывает ошибку или затруднения, то уже тогда имеет смысл задавать вопрос с приложенным описанием проделанных действий.

2023-09-22T14:03:01.984Z
NimuraF(Balbes)

Опять же, вот этот шаг я и не понял, есть этот экзешник на релизе, да, я его и загружал, а с ним-то что билдить? Это же по сути уже готовый файл, разве нет? При попытке его запуска просто клиент запускается и сразу же закрывается, конфиг лежит рядом с ним, при запуске через консоль указываю всё по доке - путь к конфигу, ip-адрес удалённого хоста.

Я в принципе не мастер винды и мне трудно сообразить, чего на ней нужно сделать, на линуксе как раз всё очевидно, скачал бинарник/собрал сам из исходников → запустил буквально одной командой. По моей логике на винде всё должно быть ещё проще, но теперь, получается, я скачал этот экзешник, а с ним ничего даже сделать не могу :confused: Нет никакого GUI, лога ошибок и т.д.

2023-09-22T16:05:51.182Z
NimuraF(Balbes)

В общем сдался и забил, решил попробовать связку SS + Cloak и опять же поймал ошибку: “Failed to prepare connection to remote: short buffer”, куда дальше копать - вообще хз.

2023-09-23T01:19:37.214Z
0ka(0ka)

зачем cloak если есть ss? вообще непонятно что значит ss + cloak. что не так с пробросом порта wireguard через чистый ss?

2023-09-23T01:28:45.830Z
NimuraF(Balbes)

Сори, я просто немного неясно выразился, я решил в принципе отказаться от WG + Cloak из-за какого-то лютого бреда с их настройкой под винду (особенно Cloak), он просто не хотел запускаться сам по себе, а не в качестве плагина для SS-клиента (я попробовал 3 разных сборки Винды с разницей в ± 3 месяца обновлений и везде одно и то же). Товарищ сверху меня надоумил на то, что файлы клока нужно собирать, а я уже настолько устал с этой связкой возиться, что реально попытался собрать готовый экзешник, а не вменяемо объяснить, что я взял уже готовый exe-клиент под винду)

В итоге решил просто поставить себе на сервер SS + Cloak через этот скрипт GitHub - HirbodBehnam/Shadowsocks-Cloak-Installer: A one-key script to setup Cloak plugin with Shadowsocks on your server и его доку, но на клиенте ShadowSocks под виндой опять получаю полную ересь в виде “Failed to prepare connection to remote: short buffer” в журнале плагина (то бишь Cloak). И опять хз в какую сторону копать.

P.S. На сервере всё гуд, установленный ck-server слушает 443 порт.

P.P.S. А есть какая-то инфа по текущему статусу Outline? А то мб просто его поставить и забить, а то подустал уже возиться…

2023-09-23T01:40:17.517Z
0ka(0ka)

чем не устраивает чистый ss?

2023-09-23T01:55:10.972Z
NimuraF(Balbes)

Так а Outline это считай не тот же чистый SS?

Update: попробовал Outline на timeweb’овских серваках в Нидерландах / Польше - вообще не фурычат.

2023-09-23T01:56:30.090Z
Xunlei

Нет. Да. Если приложение крашится без ошибок, то добро пожаловать в мир самостоятельной отладки и патчинга. Обычно разрабочик забывает обработать какой-нибудь error.

2023-09-23T03:50:34.564Z
Xunlei

Так вы сами изначально ошибочную информацию на вход подали, что там нет экзешника клиента, я её не проверяя написал команды сборки.

2023-09-23T03:53:10.200Z
Xunlei

На timeweb пока идёт крупная DDoS-атака во всех локациях, возможно, не работало поэтому.

2023-09-23T03:58:09.227Z
0ka(0ka)

discord? telegram?

2023-09-23T03:59:23.658Z
NimuraF(Balbes)

Безусловно, мой косяк, я же не спорю :slight_smile: В любом случае спасибо вам за ответ.

Кстати, раз уж речь об этом зашла, вы, случаем, не знаете, где можно достать хороший гайд по установке SS2022 на сервер?

2023-09-23T04:01:15.794Z
NimuraF(Balbes)

По ssh всё отлично, да и ради интереса быстро закинул пэт-проект на NGINX+PHP и всё окей. Так что сомневаюсь, что в ддосе дело, outline вообще запускаться не хочет. Timeweb, кстати, вроде как даже хотел выпустить образы SS + WG готовые, но у них уже сервера 2-ю неделю отваливаются каждый час, с таким успехом проще у себя в подъезде сервер поставить.

2023-09-23T04:02:30.929Z
Xunlei

Гайд? Мне хватило инструкции из ридми. Просто начните делать, и когда уже совсем отчаялись спрашивайте других.

2023-09-23T04:03:50.803Z
NimuraF(Balbes)

Вы, случаем, не про вот эту? GitHub - shadowsocks/shadowsocks-rust: A Rust port of shadowsocks

2023-09-23T04:07:46.165Z
Xunlei

Да. Собираю в CLion в один клик.

2023-09-23T04:09:01.095Z
NimuraF(Balbes)

Понял, спасиб за ответ. Какое-то безумное количество различных репозиториев с чуть ли не идентичным названием сбивало с толку, а я, скорее, ньюфаг, а не лентяй, порой намного проще спросить, чтобы ткнули носом где я не прав и что делаю не так…

2023-09-23T04:21:09.424Z
anon94384997

Если не хочется собирать самому, я как-то делал сборку с 2022 и aes (для xp) шифрами Release v1.15.3 · artenax/shadowsocks-rust · GitHub

2023-09-23T14:31:58.062Z
anon94384997

Есть реализации на разных языках программирования.

2023-09-23T14:33:27.590Z
4fx

Не знаю актуально ли, но вот про cloak клиент на винде. В докер cloak не засовывал, подсказать не смогу. По ощущениям когда wg в докере впн работает медленнее. На винде клиент .exe с офф гитхаба запускаю с параметрами ck-client.exe -s <IP> -p <PORT> -u -l 51820 -c ckclient.json
ckclient.json взял из примеров так же с гитхаба - https://github.com/cbeuw/Cloak/blob/master/example_config/ckclient.json. Меняю в клиенте wg адрес на 127.0.0.1:51820 и один раз быстро подключаюсь и отключаюсь, жду пока в консоли cloak появится сообщение Session 3292283057 established, затем подключаюсь как обычно. Всё.

upd: забыл, в wg 127.0.0.1 должен быть исключён. Можно так AllowedIPs = 0.0.0.0/1, 128.0.0.0/1 или воспользоваться скриптом Reddit - Dive into anything

2023-09-25T17:57:38.689Z
Xunlei

Это для чего передёргивать? Чтобы зафиксировать маршрут на сервер через интерфейс сетевой карты? Эту задачу можно решить статическим маршрутом, метриками маршрутов или биндингом исходящего соединения клиента на адрес сетевого интерфейса (если не работает BindAddr, то можно пропатчить, разработчики почему-то редко дают возможность указывать outbound интерфейс; не знаю, не пользовался пока cloak).

2023-09-25T23:06:09.511Z
4fx

При запуске cloak без передергивания не создаётся сессия. Наверное это из-за ключа -u (udp), без него работает по tcp такого нет и передёргивать не нужно.

2023-09-25T23:15:47.795Z
Xunlei

Хм, я подумал это из-за рекурсивного туннеля (клоак подключается через виртуальный интерфейс через клоак через виртуальный интерфейс и т.д.).

2023-09-25T23:19:02.311Z
NimuraF(Balbes)

Благодарю за ответ, очень даже актуально.

На сервере установил WG контейнер отсюда: GitHub - linuxserver/docker-wireguard , указал следующий docker-compose:

version: "3"
services:
  wireguard:
    image: lscr.io/linuxserver/wireguard:latest
    container_name: wireguard
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - SERVERURL=127.0.0.1 #optional
      - SERVERPORT=51820 #optional
      - PEERS=1 #optional
      - PEERDNS=auto #optional
      - INTERNAL_SUBNET=10.13.13.0 #optional
      - ALLOWEDIPS=0.0.0.0/0 #optional
      - PERSISTENTKEEPALIVE_PEERS= #optional
      - LOG_CONFS=true #optional
    volumes:
      - ./config:/config
      - /lib/modules:/lib/modules
    ports:
      - 51820:51820/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

Дальше настроил ckserver следующим образом:

{
  "ProxyBook": {
    "wireguard": [
      "udp",
      "127.0.0.1:51820"
    ],
    "openvpn": [
      "udp",
      "127.0.0.1:8389"
    ],
    "tor": [
      "tcp",
      "127.0.0.1:9001"
    ]
  },
  "BindAddr": [
    ":443",
    ":80"
  ],
  "BypassUID": [
    "ключ клиента"
  ],
  "RedirAddr": "cloudflare.com",
  "PrivateKey": "приватный ключ сервера",
  "DatabasePath": "userinfo.db"
}

Сервер стартую и всё, собственно говоря, гуд.

Дальше на клиенте WG ставлю следующий конфиг.

[Interface]
PrivateKey = приватный ключик
ListenPort = 51820
Address = 10.13.13.2/32
DNS = 10.13.13.1

[Peer]
PublicKey = публичный ключик
PresharedKey = preshared ключик
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
Endpoint = 127.0.0.1:51820

Потом настраиваю ck-client следующим образом (кстати, насчёт шифрования не понял, ставил и plain и aes-gcm):

{
    "Transport": "direct",
    "ProxyMethod": "wireguard",
    "EncryptionMethod": "aes-gcm",
    "UID": "ключ юзера",
    "PublicKey": "публичный ключ сервера",
    "ServerName": "www.bing.com",
    "NumConn": 4,
    "BrowserSig": "chrome",
    "StreamTimeout": 300
  }

Далее стартую загруженный с оф. гитхаба экзешник со след. параметрами:

.\ck-client.exe -s айпи-сервера -p 443 -u -l 51820 -c .\ckclient.json

Сам сервер стартует нормально:

time="2023-09-26T14:09:10+03:00" level=info msg="Starting standalone mode"
time="2023-09-26T14:09:10+03:00" level=info msg="Listening on UDP 127.0.0.1:51820 for wireguard client"

Но вот как только пробую в клиенте выполнить подключение, то получаю следующее:

time="2023-09-26T14:09:14+03:00" level=info msg="Attempting to start a new session"
time="2023-09-26T14:09:35+03:00" level=error msg="Failed to establish new connections to remote: dial tcp айпи-сервера:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond."

Причём на сервере в консоли cloak-сервера ничего нет, как только отключаюсь в wg-клиенте, то начинаю видеть в консоли сервера следующее:

WARN[2023-09-26T14:18:45+03:00] decryption/authentication faliure: timestamp is outside of the accepting window: received timestamp 1695727379  UID="ключ клиента" encryptionMethod=1 proxyMethod=wireguard remoteAddr="айпи-клиента:52234" sessionId=0

В чём может быть причина? В принципе не могу понять значения этой ошибки: " timestamp is outside of the accepting window"

2023-09-26T11:28:41.137Z
4fx

RedirAddr на сервере cloak должен соответствовать ServerName на клиенте, возможно не получается из-за этого. На счёт ошибки timestamp is outside of the accepting window может не соотвествует время на клиенте и севрере, хотя у меня тоже и подключается. На счёт шифрования можно и plain так как wg шифрует трафик сам. А так по конфигам всё нормально.

upd: ещё ListenPort у wg клиента на какой нибудь другой перекиньте, 51821 например

2023-09-26T12:03:15.173Z
NimuraF(Balbes)

Отписываюсь по результату, 2 недели был в отъезде, так что протестить не мог. В общем попробовал донастроить конфиг по вашему совету, установил такой же ServerName на клиенте, как и RedirAddr на клиенте, в винде поставил автоматическую синхронизацию даты и времени (до этого она была в ручном режиме), по дефолту было глухо.

После переноса на 51825 всё стало окей, вообще не могу сообразить, как мне не хватило мозгов глянуть, что порт по умолчанию из докер-образа для WG в качестве слушающего и эндпоинта ставился один и тот же

P.S. Премного благодарен за вашу помощь!

2023-10-10T02:55:08.563Z
4fx

Рад что у вас всё работает :slight_smile:
P.S А я тут додумался как сделать без передёргивания wg. Нужно поменять AllowedIPs клиента, добавить только ip сервера в исключения. Можно сгенерировать с помощью сайта WireGuard AllowedIPs Calculator | Pro Custodibus или скрипт питона из поста выше
В вг клиента вроде нужно убрать галку Block untunneled traffic (kill-switch)

2023-10-10T10:35:01.804Z