Refactor ensure_ip_rule function to remove duplicate ip rules and enforce route table entry

This commit is contained in:
2025-12-27 15:44:39 +03:00
parent f6524bfbad
commit 16ca0a11b6

View File

@@ -20,13 +20,15 @@ EXCLUDE_IFACES=("tun0" "wg0")
ipt() { iptables "$@"; } ipt() { iptables "$@"; }
ensure_ip_rule() { ensure_ip_rule() {
# Route marked traffic to local via custom table (idempotent-ish) # Remove duplicates if any (doesn't error if absent)
ip rule list | grep -q "fwmark ${FW_MARK} lookup ${ROUTE_TABLE}" || \ while ip rule list | grep -q "fwmark ${FW_MARK} lookup ${ROUTE_TABLE}"; do
ip rule add fwmark ${FW_MARK} lookup ${ROUTE_TABLE} ip rule del fwmark ${FW_MARK} lookup ${ROUTE_TABLE} || true
done
# Route everything in that table to local loopback so TPROXY can catch it ip rule add fwmark ${FW_MARK} lookup ${ROUTE_TABLE}
ip route show table ${ROUTE_TABLE} | grep -q "^local 0.0.0.0/0 dev lo" || \
ip route add local 0.0.0.0/0 dev lo table ${ROUTE_TABLE} # Route table entry, forced
ip route replace local 0.0.0.0/0 dev lo table ${ROUTE_TABLE}
} }
# ---------------------------- # ----------------------------