Shorten tproxy source bypass chain name
This commit is contained in:
@@ -127,10 +127,10 @@ ip route replace local 0.0.0.0/0 dev lo table 100
|
|||||||
|
|
||||||
# Цепочка iptables (порядок правил — критичен)
|
# Цепочка iptables (порядок правил — критичен)
|
||||||
iptables -t mangle -N VPN_PROXY_TPROXY
|
iptables -t mangle -N VPN_PROXY_TPROXY
|
||||||
iptables -t mangle -N VPN_PROXY_TPROXY_SOURCE_BYPASS
|
iptables -t mangle -N VPN_PROXY_SRC_BYPASS
|
||||||
-m addrtype --dst-type LOCAL → RETURN # ответы самого sing-box
|
-m addrtype --dst-type LOCAL → RETURN # ответы самого sing-box
|
||||||
-m mark --mark 1 → RETURN # уже помеченные пакеты
|
-m mark --mark 1 → RETURN # уже помеченные пакеты
|
||||||
-j VPN_PROXY_TPROXY_SOURCE_BYPASS → ACCEPT # source bypass до sing-box
|
-j VPN_PROXY_SRC_BYPASS → ACCEPT # source bypass до sing-box
|
||||||
-m set --match-set vpn_direct_bypass → RETURN # только если DIRECT_BYPASS_CACHE=true
|
-m set --match-set vpn_direct_bypass → RETURN # только если DIRECT_BYPASS_CACHE=true
|
||||||
-d 10.0.0.0/8, 192.168.0.0/16, ... → RETURN # приватные адреса
|
-d 10.0.0.0/8, 192.168.0.0/16, ... → RETURN # приватные адреса
|
||||||
-p tcp → TPROXY :7895 mark 1
|
-p tcp → TPROXY :7895 mark 1
|
||||||
@@ -384,7 +384,7 @@ UI доступен на `http://<gateway-ip>:3456`.
|
|||||||
| `PROXY_PORT` | `8080` | HTTP/SOCKS mixed inbound |
|
| `PROXY_PORT` | `8080` | HTTP/SOCKS mixed inbound |
|
||||||
| `TPROXY_PORT` | `7895` | TProxy inbound sing-box |
|
| `TPROXY_PORT` | `7895` | TProxy inbound sing-box |
|
||||||
| `TPROXY_BYPASS_SOURCE_CIDRS` | unset | Source CIDR устройств, которые должны идти напрямую мимо TProxy/sing-box, например `192.168.50.25/32` |
|
| `TPROXY_BYPASS_SOURCE_CIDRS` | unset | Source CIDR устройств, которые должны идти напрямую мимо TProxy/sing-box, например `192.168.50.25/32` |
|
||||||
| `TPROXY_SOURCE_BYPASS_CHAIN` | `${TPROXY_CHAIN}_SOURCE_BYPASS` | Управляемая iptables-цепочка для UI source-bypass |
|
| `TPROXY_SOURCE_BYPASS_CHAIN` | `VPN_PROXY_SRC_BYPASS` | Управляемая iptables-цепочка для UI source-bypass |
|
||||||
| `DATA_DIR` | `/var/lib/vpn-proxy` | Директория данных (volume) |
|
| `DATA_DIR` | `/var/lib/vpn-proxy` | Директория данных (volume) |
|
||||||
| `ROUTING_RU_DIRECT` | `true` | geoip-ru/geosite-ru → direct |
|
| `ROUTING_RU_DIRECT` | `true` | geoip-ru/geosite-ru → direct |
|
||||||
| `LOG_LEVEL` | `info` | Уровень логов sing-box |
|
| `LOG_LEVEL` | `info` | Уровень логов sing-box |
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ TPROXY_PORT="${TPROXY_PORT:-7895}"
|
|||||||
TPROXY_MARK="${TPROXY_MARK:-1}"
|
TPROXY_MARK="${TPROXY_MARK:-1}"
|
||||||
TPROXY_TABLE="${TPROXY_TABLE:-100}"
|
TPROXY_TABLE="${TPROXY_TABLE:-100}"
|
||||||
TPROXY_CHAIN="${TPROXY_CHAIN:-VPN_PROXY_TPROXY}"
|
TPROXY_CHAIN="${TPROXY_CHAIN:-VPN_PROXY_TPROXY}"
|
||||||
TPROXY_SOURCE_BYPASS_CHAIN="${TPROXY_SOURCE_BYPASS_CHAIN:-${TPROXY_CHAIN}_SOURCE_BYPASS}"
|
TPROXY_SOURCE_BYPASS_CHAIN="${TPROXY_SOURCE_BYPASS_CHAIN:-VPN_PROXY_SRC_BYPASS}"
|
||||||
PROXY_PORT="${PROXY_PORT:-8080}"
|
PROXY_PORT="${PROXY_PORT:-8080}"
|
||||||
PROXY_BIND_IP="${PROXY_BIND_IP:-0.0.0.0}"
|
PROXY_BIND_IP="${PROXY_BIND_IP:-0.0.0.0}"
|
||||||
PROXY_INPUT_CHAIN="${PROXY_INPUT_CHAIN:-VPN_PROXY_INPUT}"
|
PROXY_INPUT_CHAIN="${PROXY_INPUT_CHAIN:-VPN_PROXY_INPUT}"
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ TPROXY_PORT=7895
|
|||||||
TPROXY_MARK=1
|
TPROXY_MARK=1
|
||||||
TPROXY_TABLE=100
|
TPROXY_TABLE=100
|
||||||
TPROXY_CHAIN=VPN_PROXY_TPROXY
|
TPROXY_CHAIN=VPN_PROXY_TPROXY
|
||||||
TPROXY_SOURCE_BYPASS_CHAIN=VPN_PROXY_TPROXY_SOURCE_BYPASS
|
TPROXY_SOURCE_BYPASS_CHAIN=VPN_PROXY_SRC_BYPASS
|
||||||
TPROXY_BYPASS_SOURCE_CIDRS=
|
TPROXY_BYPASS_SOURCE_CIDRS=
|
||||||
ROUTING_RU_DIRECT=true
|
ROUTING_RU_DIRECT=true
|
||||||
LOG_LEVEL=info
|
LOG_LEVEL=info
|
||||||
|
|||||||
@@ -11,8 +11,7 @@ export const settings = {
|
|||||||
tproxyPort: Number(process.env.TPROXY_PORT || 7895),
|
tproxyPort: Number(process.env.TPROXY_PORT || 7895),
|
||||||
tproxyChain: process.env.TPROXY_CHAIN || "VPN_PROXY_TPROXY",
|
tproxyChain: process.env.TPROXY_CHAIN || "VPN_PROXY_TPROXY",
|
||||||
tproxySourceBypassChain:
|
tproxySourceBypassChain:
|
||||||
process.env.TPROXY_SOURCE_BYPASS_CHAIN ||
|
process.env.TPROXY_SOURCE_BYPASS_CHAIN || "VPN_PROXY_SRC_BYPASS",
|
||||||
`${process.env.TPROXY_CHAIN || "VPN_PROXY_TPROXY"}_SOURCE_BYPASS`,
|
|
||||||
bindIp: process.env.PROXY_BIND_IP || "0.0.0.0",
|
bindIp: process.env.PROXY_BIND_IP || "0.0.0.0",
|
||||||
dataDir,
|
dataDir,
|
||||||
distDir: process.env.DIST_DIR || "/app/dist",
|
distDir: process.env.DIST_DIR || "/app/dist",
|
||||||
|
|||||||
@@ -10,6 +10,12 @@ const {
|
|||||||
sourceBypassCidrs,
|
sourceBypassCidrs,
|
||||||
buildSourceBypassIptablesCommands,
|
buildSourceBypassIptablesCommands,
|
||||||
} = await import("../../src/server/tproxySourceBypass.js");
|
} = await import("../../src/server/tproxySourceBypass.js");
|
||||||
|
const { settings } = await import("../../src/server/config.js");
|
||||||
|
|
||||||
|
test("default source bypass chain name fits iptables chain length limit", () => {
|
||||||
|
assert.equal(settings.tproxySourceBypassChain, "VPN_PROXY_SRC_BYPASS");
|
||||||
|
assert.ok(settings.tproxySourceBypassChain.length <= 28);
|
||||||
|
});
|
||||||
|
|
||||||
test("device profiles preserve bypass mode for kernel-level TProxy bypass", () => {
|
test("device profiles preserve bypass mode for kernel-level TProxy bypass", () => {
|
||||||
const profiles = normalizeDeviceProfiles({
|
const profiles = normalizeDeviceProfiles({
|
||||||
|
|||||||
@@ -63,17 +63,17 @@ exit 0
|
|||||||
const commands = fs.readFileSync(commandLog, "utf8").trim().split("\n");
|
const commands = fs.readFileSync(commandLog, "utf8").trim().split("\n");
|
||||||
const sourceBypassIndex = commands.findIndex((line) =>
|
const sourceBypassIndex = commands.findIndex((line) =>
|
||||||
line.includes(
|
line.includes(
|
||||||
"iptables -w -t mangle -A VPN_PROXY_TPROXY_SOURCE_BYPASS -s 192.168.50.25/32 -j ACCEPT",
|
"iptables -w -t mangle -A VPN_PROXY_SRC_BYPASS -s 192.168.50.25/32 -j ACCEPT",
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
const secondSourceBypassIndex = commands.findIndex((line) =>
|
const secondSourceBypassIndex = commands.findIndex((line) =>
|
||||||
line.includes(
|
line.includes(
|
||||||
"iptables -w -t mangle -A VPN_PROXY_TPROXY_SOURCE_BYPASS -s 192.168.50.26/32 -j ACCEPT",
|
"iptables -w -t mangle -A VPN_PROXY_SRC_BYPASS -s 192.168.50.26/32 -j ACCEPT",
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
const sourceBypassJumpIndex = commands.findIndex((line) =>
|
const sourceBypassJumpIndex = commands.findIndex((line) =>
|
||||||
line.includes(
|
line.includes(
|
||||||
"iptables -w -t mangle -A VPN_PROXY_TPROXY -j VPN_PROXY_TPROXY_SOURCE_BYPASS",
|
"iptables -w -t mangle -A VPN_PROXY_TPROXY -j VPN_PROXY_SRC_BYPASS",
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
const directCacheIndex = commands.findIndex((line) =>
|
const directCacheIndex = commands.findIndex((line) =>
|
||||||
|
|||||||
Reference in New Issue
Block a user