Files
PCA_Phobos/docs/cloud.md

8.8 KiB
Raw Permalink Blame History

Канал «Облако» — VPN через облако своего Keenetic (PCA Phobos 1.4.4)

Схема канала «Облако»

Что это и зачем

Обычно телефон ходит к серверу Phobos напрямую по UDP (или по резервному TCP). Если оператор или сеть режет сам сервер, а сайты Keenetic открываются, можно пойти через свой домашний Keenetic:

  1. телефон открывает защищённый WebSocket wss://phobos.<имя>.<домен>/ — для оператора это обычный HTTPS к облаку Keenetic;
  2. облако KeenDNS (серверы Keenetic в РФ) по имени пересылает соединение в ваш роутер — белый IP роутеру не нужен;
  3. на роутере шлюз wsgw разворачивает WebSocket обратно в UDP и шлёт на обфускатор сервера Phobos;
  4. дальше всё как обычно: WireGuard → интернет с IP сервера.

Это дополнение к UDP/TCP, не замена. Шифрование то же (WireGuard), облако Keenetic видит только зашифрованный поток.

Адрес вида wss://phobos.vasya.keenetic.pro/ = wss:// (WebSocket через HTTPS, порт 443) + phobos (поддомен веб-приложения на роутере) + vasya.keenetic.pro (KeenDNS-имя роутера).

Скорость в нашем тесте (Keenetic → сервер в Польше): ↓11 / ↑15 Мбит/с, задержка ~80 мс, потерь 0 %.


Часть 1. Роутер Keenetic (один раз)

Что нужно: Keenetic с KeenDNS-именем (Интернет → Доменное имя), установленный Entware (OPKG) и SSH. Команды ниже — в SSH роутера (ssh root@192.168.1.1 -p 222 или как у вас настроено).

Шаг 1. Веб-интерфейс на порт 80

Роутер выпускает сертификат Let's Encrypt для поддомена, только если его веб-интерфейс на порту 80.

ndmc -c 'ip http port 80'

Если раньше был другой порт (81, 8080…) — поправьте закладки и скрипты, которые туда ходили. Снаружи порт 80 пробрасывать не нужно.

Шаг 2. Шлюз wsgw

Узнать архитектуру:

uname -m        # aarch64 → wsgw-aarch64;  mips → wsgw-mipsel (или wsgw-mips, если не запустится)

Скачать прямо на роутер (замените aarch64 на свою архитектуру):

curl -fsSL -o /opt/sbin/wsgw https://git.bobyrev.com/PCA/PCA_Phobos/raw/branch/main/wsgw/bin/wsgw-aarch64
curl -fsSL -o /opt/etc/init.d/S80wsgw https://git.bobyrev.com/PCA/PCA_Phobos/raw/branch/main/wsgw/router/S80wsgw
chmod +x /opt/sbin/wsgw /opt/etc/init.d/S80wsgw

Настройка — файл /opt/etc/wsgw.conf:

cat > /opt/etc/wsgw.conf <<'EOF'
WSGW_LISTEN=192.168.1.1:18090
WSGW_TARGET=147.45.126.83:2083
EOF
/opt/etc/init.d/S80wsgw start
  • WSGW_LISTEN — LAN-адрес вашего роутера (Главная → Домашняя сеть) и порт 18090.
  • WSGW_TARGET — адрес обфускатора сервера: строка target = … из ссылки клиента (в панели клиента → 📱 → «показать конфиг»). Для сервера Польша — 147.45.126.83:2083.

Проверка: netstat -ltn | grep 18090 — должна быть строка LISTEN.

Шаг 3. Поддомен и облачный режим KeenDNS

Подставьте своё имя: для vasya.keenetic.pro — <имя> = vasya, <домен> = keenetic.pro.

ndmc -c 'ip http proxy phobos'
ndmc -c 'ip http proxy phobos upstream http 192.168.1.1 18090'
ndmc -c 'ip http proxy phobos domain ndns'
ndmc -c 'ip http proxy phobos security-level public'
ndmc -c 'ndns book-name <имя> <домен> cloud'
ndmc -c 'ip http ssl acme get phobos.<имя>.<домен>'
ndmc -c 'system configuration save'

То же в веб-интерфейсе: Сетевые правила → Переадресация → Веб-приложения (или «Доменное имя → Веб-приложения»): имя phobos, адрес 192.168.1.1, порт 18090, доступ без авторизации; режим доменного имени — через облако.

Сертификат выпускается за 10–60 секунд. Проверить:

ndmc -c 'ip http ssl acme list' | grep domain      # в списке должен быть phobos.<имя>.<домен>

Если его нет, а ndmc -c 'show acme' | grep get-pending показывает yes — перезагрузите роутер и повторите acme get.

Шаг 4. Проверка с любого компьютера

curl -s -o /dev/null -w '%{http_code}\n' https://phobos.<имя>.<домен>/

426 — всё работает (шлюз ответил «нужен WebSocket»). Ошибка TLS (internal error) — см. «Если не работает».


Часть 2. Телефон

Android (PCA Phobos VPN 1.4.4+)

  1. Импортируйте ссылку phobos:// как обычно.
  2. «Канал до сервера» → Облако.
  3. В окне «Адрес роутера (KeenDNS)» введите wss://phobos.<имя>.<домен>/ → Сохранить.
  4. Подключить. Статус: «🟢 VPN включён · Облако».

Главный экран, канал «Облако» Окно адреса роутера

iPhone (PCA Phobos, TestFlight 1.0 (6) и новее)

  1. Импортируйте ссылку phobos://.
  2. «Канал до сервера» → сегмент Облако.
  3. В появившемся поле — wss://phobos.<имя>.<домен>/.
  4. Подключить → «VPN включён · Облако».

Проверка

Откройте speed.cloudflare.com: «Your IP address» должен быть IP сервера Phobos (Польша — 147.45.126.83).

Speedtest через канал «Облако»

Адрес можно не вводить руками: если в ссылке клиента есть строка # pca-ws = wss://…, приложение возьмёт её само (пока строку добавляет только администратор вручную).


Если не работает

Что видно Причина Что делать
acme: «available only when HTTP port is set to 80» веб-интерфейс не на 80 Шаг 1
сертификата нет, get-pending: yes задание ACME зависло перезагрузить роутер, повторить acme get
curl: TLS internal error у роутера нет сертификата или WAN:443 проброшен на другой компьютер (облако шлёт поддомены на WAN:443) проверить acme list; убрать проброс 443 или настроить на том компьютере прокси поддомена на роутер:18090 (например, Caddy: phobos.<имя>.<домен> { reverse_proxy 192.168.1.1:18090 })
curl: 403 поддомен не public / облачный режим выключен security-level public, ndns … cloud
curl: 502 шлюз не запущен /opt/etc/init.d/S80wsgw start, проверить wsgw.conf
VPN «включён · Облако», но сайты не открываются неверный WSGW_TARGET или профиль от другого сервера target в ссылке клиента = WSGW_TARGET

Журнал приложения (Android → «Журнал»): строки ws: connected … / ws up: … / ws down: ….

Как выключить

/opt/etc/init.d/S80wsgw stop
ndmc -c 'no ip http proxy phobos'
ndmc -c 'ndns book-name <имя> <домен> direct'
ndmc -c 'system configuration save'

Для разработчика

Код: wsgw/ (шлюз, Go), android-client/src/com/pca/phobos/vpn/WsRelay.java, ios/Tunnel/WsLink.swift + режим 2 в pcarelay.c. Протокол: одно бинарное WS-сообщение = один обфусцированный UDP-пакет.