feat: добавлена поддержка кэша прямого обхода с использованием ipset
All checks were successful
Build and Deploy Gateway / build-and-deploy (push) Successful in 19s
All checks were successful
Build and Deploy Gateway / build-and-deploy (push) Successful in 19s
Refs: None
This commit is contained in:
@@ -6,6 +6,10 @@ TPROXY_MARK="${TPROXY_MARK:-1}"
|
||||
TPROXY_TABLE="${TPROXY_TABLE:-100}"
|
||||
TPROXY_CHAIN="${TPROXY_CHAIN:-VPN_PROXY_TPROXY}"
|
||||
BYPASS_CIDRS="${BYPASS_CIDRS:-0.0.0.0/8 10.0.0.0/8 100.64.0.0/10 127.0.0.0/8 169.254.0.0/16 172.16.0.0/12 192.168.0.0/16 224.0.0.0/4 240.0.0.0/4}"
|
||||
# Имя ipset для IP-адресов, которые sing-box отправил напрямую (direct bypass cache)
|
||||
DIRECT_BYPASS_SET="${DIRECT_BYPASS_SET:-vpn_direct_bypass}"
|
||||
# TTL записи в ipset (секунды). По умолчанию 1 час.
|
||||
DIRECT_BYPASS_TTL="${DIRECT_BYPASS_TTL:-3600}"
|
||||
|
||||
log() {
|
||||
printf '[gateway-entrypoint] %s\n' "$*"
|
||||
@@ -22,6 +26,15 @@ cleanup_tproxy() {
|
||||
ipt -t mangle -X "$TPROXY_CHAIN" 2>/dev/null || true
|
||||
ip rule del fwmark "$TPROXY_MARK" table "$TPROXY_TABLE" 2>/dev/null || true
|
||||
ip route flush table "$TPROXY_TABLE" 2>/dev/null || true
|
||||
# ipset не чистим при завершении — TTL сам истечёт
|
||||
}
|
||||
|
||||
setup_direct_bypass_set() {
|
||||
log "setup ipset ${DIRECT_BYPASS_SET} (timeout=${DIRECT_BYPASS_TTL}s)"
|
||||
# Создаём с timeout; если уже существует — не трогаем (сохраняем накопленные записи)
|
||||
ipset create "$DIRECT_BYPASS_SET" hash:ip timeout "$DIRECT_BYPASS_TTL" 2>/dev/null || true
|
||||
# Экспортируем имя для использования в Node.js через env
|
||||
export DIRECT_BYPASS_SET DIRECT_BYPASS_TTL
|
||||
}
|
||||
|
||||
setup_tproxy() {
|
||||
@@ -36,6 +49,9 @@ setup_tproxy() {
|
||||
ipt -t mangle -A "$TPROXY_CHAIN" -m addrtype --dst-type LOCAL -j RETURN
|
||||
ipt -t mangle -A "$TPROXY_CHAIN" -m mark --mark "$TPROXY_MARK" -j RETURN
|
||||
|
||||
# Direct bypass cache: IP-адреса из ipset идут напрямую, минуя sing-box
|
||||
ipt -t mangle -A "$TPROXY_CHAIN" -m set --match-set "$DIRECT_BYPASS_SET" dst -j RETURN
|
||||
|
||||
for cidr in $BYPASS_CIDRS; do
|
||||
ipt -t mangle -A "$TPROXY_CHAIN" -d "$cidr" -j RETURN
|
||||
done
|
||||
@@ -45,6 +61,7 @@ setup_tproxy() {
|
||||
ipt -t mangle -A PREROUTING -j "$TPROXY_CHAIN"
|
||||
}
|
||||
|
||||
setup_direct_bypass_set
|
||||
setup_tproxy
|
||||
|
||||
node /app/src/server/index.js &
|
||||
|
||||
Reference in New Issue
Block a user