Make shadow traffic inspection the default
Build and Deploy Gateway / build-and-push (push) Successful in 30s
Build and Deploy Gateway / deploy (push) Successful in 14s

This commit is contained in:
2026-08-31 05:43:51 +03:00
parent 79e00a2390
commit 797c73d35c
6 changed files with 10 additions and 7 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ INSTALL_SINGBOX=true
PROXY_PORT=8080
PROXY_BIND_IP=0.0.0.0
SING_BOX_API_PORT=19090
SING_BOX_TRAFFIC_SOURCE=snapshot
SING_BOX_TRAFFIC_SOURCE=shadow
TPROXY_PORT=7895
TPROXY_MARK=1
TPROXY_TABLE=100
+2 -2
View File
@@ -271,14 +271,14 @@ curl -fsSL https://git.dokops.ru/dokril/vpn-proxy/raw/branch/master/install.sh |
| `PROXY_ALLOWED_CIDRS` | приватные IPv4-сети | Сети, которым разрешён доступ к Gateway Proxy |
| `GATEWAY_CLIENT_CIDRS` | приватные IPv4-сети | Сети, трафик которых Gateway может маршрутизировать |
| `DIRECT_TRAFFIC_MARK` | `0x40000000` | Зарезервированный одиночный connmark-бит учёта Direct; измените при конфликте с host QoS/firewall, не пересекаясь с `TPROXY_MARK` |
| `SING_BOX_TRAFFIC_SOURCE` | `snapshot` | Источник Gateway traffic counters: `snapshot`, `shadow` или `native` |
| `SING_BOX_TRAFFIC_SOURCE` | `shadow` | Источник Gateway traffic counters: `snapshot`, `shadow` или `native` |
| `LOG_LEVEL` | `info` | Уровень подробности журнала |
Остальные значения в `.env.example` относятся к сборке контейнера и внутренней маршрутизации. Меняйте их только при нестандартном развёртывании.
После изменения `.env` пересоздайте контейнер командой `up -d` — обычного `restart` недостаточно.
`snapshot` сохраняет прежний опрос Clash API раз в 2 секунды. `shadow` дополнительно читает native lifecycle, но оставляет snapshot единственным источником публичных totals. `native` делает lifecycle единственным writer и не опрашивает `/connections`; Clash API остаётся только для selector/failover. Режим меняется только при пересоздании обоих Gateway-контейнеров и не переключается автоматически при ошибке.
Production Gateway по умолчанию использует `shadow`: инспектор показывает native lifecycle, но snapshot остаётся единственным источником публичных totals. `snapshot` полностью выключает инспектор и сохраняет прежний опрос Clash API раз в 2 секунды. `native` делает lifecycle единственным writer и не опрашивает `/connections`; Clash API остаётся только для selector/failover. Режим меняется только при пересоздании обоих Gateway-контейнеров и не переключается автоматически при ошибке.
Rollback сохраняет volumes и возвращает прежний writer:
+2 -2
View File
@@ -25,7 +25,7 @@ services:
DATA_DIR: /var/lib/vpn-proxy
SING_BOX_CONFIG: /var/lib/vpn-proxy/sing-box-config.json
SING_BOX_CACHE: /var/lib/sing-box/cache.db
SING_BOX_TRAFFIC_SOURCE: ${SING_BOX_TRAFFIC_SOURCE:-snapshot}
SING_BOX_TRAFFIC_SOURCE: ${SING_BOX_TRAFFIC_SOURCE:-shadow}
SING_BOX_API_SECRET: /var/lib/sing-box/api.secret
SING_BOX_RUNTIME_CONFIG: /var/lib/sing-box/runtime-config.json
DATAPLANE_SOCKET: /run/vpn-proxy/dataplane.sock
@@ -52,7 +52,7 @@ services:
DATA_DIR: /var/lib/vpn-proxy
SING_BOX_CONFIG: /var/lib/vpn-proxy/sing-box-config.json
SING_BOX_CACHE: /var/lib/sing-box/cache.db
SING_BOX_TRAFFIC_SOURCE: ${SING_BOX_TRAFFIC_SOURCE:-snapshot}
SING_BOX_TRAFFIC_SOURCE: ${SING_BOX_TRAFFIC_SOURCE:-shadow}
DATAPLANE_SOCKET: /run/vpn-proxy/dataplane.sock
ports:
- "${PORT:-3456}:${PORT:-3456}"
+2
View File
@@ -36,6 +36,7 @@ services:
DATA_DIR: /var/lib/vpn-proxy
SING_BOX_CONFIG: /var/lib/vpn-proxy/sing-box-config.json
SING_BOX_CACHE: /var/lib/sing-box/cache.db
SING_BOX_TRAFFIC_SOURCE: \${SING_BOX_TRAFFIC_SOURCE:-shadow}
DATAPLANE_SOCKET: /run/vpn-proxy/dataplane.sock
volumes:
- vpn-proxy-data:/var/lib/vpn-proxy
@@ -59,6 +60,7 @@ services:
DATA_DIR: /var/lib/vpn-proxy
SING_BOX_CONFIG: /var/lib/vpn-proxy/sing-box-config.json
SING_BOX_CACHE: /var/lib/sing-box/cache.db
SING_BOX_TRAFFIC_SOURCE: \${SING_BOX_TRAFFIC_SOURCE:-shadow}
DATAPLANE_SOCKET: /run/vpn-proxy/dataplane.sock
ports:
- "\${PORT:-3456}:\${PORT:-3456}"
+1 -1
View File
@@ -1,7 +1,7 @@
export const HARBOR_VERSIONS = Object.freeze({
macClient: '0.34.1',
gatewayClient: '0.36.1',
gatewayBackend: '0.36.1',
gatewayBackend: '0.36.2',
});
export interface ParsedVersion {
+2 -1
View File
@@ -34,7 +34,8 @@ test('gateway deploy updates control without recreating dataplane', () => {
});
test('Gateway native API credentials remain private to the dataplane volume', () => {
assert.match(compose, /SING_BOX_TRAFFIC_SOURCE: \$\{SING_BOX_TRAFFIC_SOURCE:-snapshot\}/);
assert.equal(compose.split('SING_BOX_TRAFFIC_SOURCE: ${SING_BOX_TRAFFIC_SOURCE:-shadow}').length - 1, 2);
assert.equal(deploy.split('SING_BOX_TRAFFIC_SOURCE: \\${SING_BOX_TRAFFIC_SOURCE:-shadow}').length - 1, 2);
assert.match(compose, /vpn-proxy-dataplane:[\s\S]*SING_BOX_API_SECRET: \/var\/lib\/sing-box\/api\.secret[\s\S]*sing-box-cache:\/var\/lib\/sing-box/);
assert.doesNotMatch(
compose.match(/vpn-proxy-control:[\s\S]*?(?=\nvolumes:)/)?.[0] || '',