Перейти к содержанию

Эпик: VPN и транспортный туннель

Цель

Обеспечить клиентский VPN-доступ через VPS-RU с автоматическим выбором транспорта (WireGuard / VLESS / SSH) и leastPing-балансировкой.

Границы

  • VPS-RU: 3x-ui/XRay инбаунд VLESS WS (:10000), три outbound, observatory+leastPing
  • VPS-RU: XRay-native WireGuard outbound (без Docker WG-клиента, kernelTun=false)
  • VPS-RU: autossh SOCKS5-туннель → VPS-US (fallback, порты 22/22222)
  • VPS-US: WireGuard-сервер (on-demand, restart: "no")
  • VPS-US: tunnel user, IP forwarding, microsocks-ssh/wg в Docker

Модули

Модуль Узел Назначение
01_3xui.sh RU + US 3x-ui/XRay панель, VLESS инбаунды, маршрутизация, stats
04_ssh_tunnel_client.sh RU autossh SOCKS5 → VPS-US (порты 22/22222)
05_us_exit_node.sh US tunnel user, IP forwarding, microsocks-ssh, microsocks-wg
07_wireguard_server.sh US WG-сервер wg0 в Docker (on-demand, стартует и останавливается)
08_wireguard_client.sh RU WG-ключи для XRay native outbound в x-ui DB

Зависимости

  • Требует: base
  • 08_wireguard_client.sh требует 01_3xui.sh (x-ui DB уже должна существовать)
  • 04_ssh_tunnel_client.sh требует 05_us_exit_node.sh на VPS-US (tunnel user)

Ключевые параметры

Параметр Источник Значение
VLESS WS path config.json → vless.ws_path /vless-ws/
VLESS inbound port (RU) config.json → vless.inbound_port 10000
VLESS inbound port (US) config.json → vless_us.port 8443
XUI port config.json → xui.port 2053
WG server port (US) WG_PORT 51820
SSH SOCKS port (RU) TUNNEL_SOCKS_PORT 10808
Observatory probe URL hardcoded https://1.1.1.1/cdn-cgi/trace
Observatory interval hardcoded 3 s

XRay stats: 5 обязательных секций

Все пять должны присутствовать в xrayTemplateConfig, иначе счётчики онлайн/трафика в панели 3x-ui не работают (проверяется в 99_test.sh):

  1. stats: {}
  2. api с тегом "api" + HandlerService, StatsService, LoggerService
  3. dokodemo-door inbound tagged "api" на 127.0.0.1:62789
  4. routing rule: inboundTag: ["api"] → outboundTag: "api"
  5. policy.levels."0" statsUser + policy.system stats flags = true

Статус: stable