Эпик: 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):
stats: {}apiс тегом"api"+HandlerService,StatsService,LoggerServicedokodemo-doorinbound tagged"api"на127.0.0.1:62789- routing rule:
inboundTag: ["api"] → outboundTag: "api" policy.levels."0"statsUser +policy.systemstats flags = true