From 6777422a277c69f9e0cf6df8e644f0a020248dbd Mon Sep 17 00:00:00 2001 From: Dmitriy Petrov Date: Mon, 31 Aug 2026 06:03:02 +0300 Subject: [PATCH] Use native traffic counters by default --- .env.example | 2 +- README.md | 4 ++-- docker-compose.gateway.yml | 4 ++-- scripts/deploy-gateway.sh | 4 ++-- src/shared/versions.ts | 2 +- test/server/deploy-split.test.js | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.env.example b/.env.example index 6d5bc7c..033fae6 100644 --- a/.env.example +++ b/.env.example @@ -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=shadow +SING_BOX_TRAFFIC_SOURCE=native TPROXY_PORT=7895 TPROXY_MARK=1 TPROXY_TABLE=100 diff --git a/README.md b/README.md index 048c418..f9767df 100644 --- a/README.md +++ b/README.md @@ -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` | `shadow` | Источник Gateway traffic counters: `snapshot`, `shadow` или `native` | +| `SING_BOX_TRAFFIC_SOURCE` | `native` | Источник Gateway traffic counters: `snapshot`, `shadow` или `native` | | `LOG_LEVEL` | `info` | Уровень подробности журнала | Остальные значения в `.env.example` относятся к сборке контейнера и внутренней маршрутизации. Меняйте их только при нестандартном развёртывании. После изменения `.env` пересоздайте контейнер командой `up -d` — обычного `restart` недостаточно. -Production Gateway по умолчанию использует `shadow`: инспектор показывает native lifecycle, но snapshot остаётся единственным источником публичных totals. `snapshot` полностью выключает инспектор и сохраняет прежний опрос Clash API раз в 2 секунды. `native` делает lifecycle единственным writer и не опрашивает `/connections`; Clash API остаётся только для selector/failover. Режим меняется только при пересоздании обоих Gateway-контейнеров и не переключается автоматически при ошибке. +Production Gateway по умолчанию использует `native`: новый счётчик видит полный жизненный цикл соединений, включая короткие соединения и последние байты перед закрытием. `shadow` оставляет основным старый счётчик и запускает новый только для сравнения. `snapshot` полностью выключает инспектор и опрашивает активные соединения раз в 2 секунды. Режим меняется только при пересоздании обоих Gateway-контейнеров и не переключается автоматически при ошибке, чтобы одни байты не были посчитаны дважды. Rollback сохраняет volumes и возвращает прежний writer: diff --git a/docker-compose.gateway.yml b/docker-compose.gateway.yml index 4d00c01..e02ed5f 100644 --- a/docker-compose.gateway.yml +++ b/docker-compose.gateway.yml @@ -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:-shadow} + SING_BOX_TRAFFIC_SOURCE: ${SING_BOX_TRAFFIC_SOURCE:-native} 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:-shadow} + SING_BOX_TRAFFIC_SOURCE: ${SING_BOX_TRAFFIC_SOURCE:-native} DATAPLANE_SOCKET: /run/vpn-proxy/dataplane.sock ports: - "${PORT:-3456}:${PORT:-3456}" diff --git a/scripts/deploy-gateway.sh b/scripts/deploy-gateway.sh index b35eb8d..eaa663c 100644 --- a/scripts/deploy-gateway.sh +++ b/scripts/deploy-gateway.sh @@ -36,7 +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} + SING_BOX_TRAFFIC_SOURCE: \${SING_BOX_TRAFFIC_SOURCE:-native} DATAPLANE_SOCKET: /run/vpn-proxy/dataplane.sock volumes: - vpn-proxy-data:/var/lib/vpn-proxy @@ -60,7 +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} + SING_BOX_TRAFFIC_SOURCE: \${SING_BOX_TRAFFIC_SOURCE:-native} DATAPLANE_SOCKET: /run/vpn-proxy/dataplane.sock ports: - "\${PORT:-3456}:\${PORT:-3456}" diff --git a/src/shared/versions.ts b/src/shared/versions.ts index ce156fb..dc8a83d 100644 --- a/src/shared/versions.ts +++ b/src/shared/versions.ts @@ -1,7 +1,7 @@ export const HARBOR_VERSIONS = Object.freeze({ macClient: '0.34.2', gatewayClient: '0.36.2', - gatewayBackend: '0.36.2', + gatewayBackend: '0.36.3', }); export interface ParsedVersion { diff --git a/test/server/deploy-split.test.js b/test/server/deploy-split.test.js index 3675c11..4d3ab6a 100644 --- a/test/server/deploy-split.test.js +++ b/test/server/deploy-split.test.js @@ -34,8 +34,8 @@ test('gateway deploy updates control without recreating dataplane', () => { }); test('Gateway native API credentials remain private to the dataplane volume', () => { - 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.equal(compose.split('SING_BOX_TRAFFIC_SOURCE: ${SING_BOX_TRAFFIC_SOURCE:-native}').length - 1, 2); + assert.equal(deploy.split('SING_BOX_TRAFFIC_SOURCE: \\${SING_BOX_TRAFFIC_SOURCE:-native}').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] || '',