From e0d715a5936e3c098262afae5af9eb6dc025e4ad Mon Sep 17 00:00:00 2001 From: chick Date: Tue, 2 Jun 2026 23:10:58 +0800 Subject: [PATCH] feat: add virtual subnet forwarding rules --- README.md | 21 ++++++++++++++++++++- install.sh | 20 +++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a21118e..3886b35 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,9 @@ - 开启 IPv4 转发:`/proc/sys/net/ipv4/ip_forward = 1` - 允许 `192.168.2.0/24` 与 `192.168.3.0/24` 双向转发 +- 允许 `192.168.2.0/24`、`192.168.3.0/24` 主动访问虚拟组网 `192.168.4.0/24` +- 允许 `192.168.4.0/24` 到 `192.168.2.0/24`、`192.168.3.0/24` 的 RELATED/ESTABLISHED 回包 +- 禁止 `192.168.4.0/24` 主动访问 `192.168.2.0/24`、`192.168.3.0/24`,实现安全隔离 - 允许 `tun0` 入站/出站 FORWARD - 开机延迟 `20s` 执行 @@ -25,7 +28,7 @@ curl -fsSL https://gitea.chickliu.fun/Hermes/fnos-iptables-forward/raw/branch/ma ## 自定义网段 / 网卡 / 延迟 ```bash -sudo LAN_A=192.168.2.0/24 LAN_B=192.168.3.0/24 TUN_IF=tun0 DELAY=20s bash install.sh install +sudo LAN_A=192.168.2.0/24 LAN_B=192.168.3.0/24 VIRTUAL_LAN=192.168.4.0/24 TUN_IF=tun0 DELAY=20s bash install.sh install ``` ## 查看状态 @@ -66,8 +69,24 @@ set -Eeuo pipefail echo 1 > /proc/sys/net/ipv4/ip_forward iptables -F FORWARD iptables -P FORWARD ACCEPT + +# 放行 192.168.3.0/24 <-> 192.168.2.0/24 iptables -A FORWARD -s 192.168.2.0/24 -d 192.168.3.0/24 -j ACCEPT iptables -A FORWARD -s 192.168.3.0/24 -d 192.168.2.0/24 -j ACCEPT + +# 放行 192.168.3.0/24、192.168.2.0/24 -> 192.168.4.0/24(虚拟组网) +iptables -A FORWARD -s 192.168.3.0/24 -d 192.168.4.0/24 -j ACCEPT +iptables -A FORWARD -s 192.168.2.0/24 -d 192.168.4.0/24 -j ACCEPT + +# 放行 192.168.4.0/24 -> 192.168.3.0/24、192.168.2.0/24 的回包(必须) +iptables -A FORWARD -s 192.168.4.0/24 -d 192.168.3.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT +iptables -A FORWARD -s 192.168.4.0/24 -d 192.168.2.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT + +# 禁止 192.168.4.0/24 主动访问 192.168.3.0/24、192.168.2.0/24(安全隔离) +iptables -A FORWARD -s 192.168.4.0/24 -d 192.168.3.0/24 -j DROP +iptables -A FORWARD -s 192.168.4.0/24 -d 192.168.2.0/24 -j DROP + +# 放行 EasyTier 虚拟网卡 tun0 iptables -A FORWARD -i tun0 -j ACCEPT iptables -A FORWARD -o tun0 -j ACCEPT ``` diff --git a/install.sh b/install.sh index 0338de8..d1e424a 100755 --- a/install.sh +++ b/install.sh @@ -9,6 +9,7 @@ TIMER_FILE="${TIMER_FILE:-/etc/systemd/system/${SERVICE_NAME}.timer}" DELAY="${DELAY:-20s}" LAN_A="${LAN_A:-192.168.2.0/24}" LAN_B="${LAN_B:-192.168.3.0/24}" +VIRTUAL_LAN="${VIRTUAL_LAN:-192.168.4.0/24}" TUN_IF="${TUN_IF:-tun0}" MODE="${1:-install}" @@ -28,8 +29,24 @@ echo 1 > /proc/sys/net/ipv4/ip_forward iptables -F FORWARD iptables -P FORWARD ACCEPT + +# 放行 ${LAN_B} <-> ${LAN_A} iptables -A FORWARD -s ${LAN_A} -d ${LAN_B} -j ACCEPT iptables -A FORWARD -s ${LAN_B} -d ${LAN_A} -j ACCEPT + +# 放行 ${LAN_B}/${LAN_A} -> ${VIRTUAL_LAN}(虚拟组网) +iptables -A FORWARD -s ${LAN_B} -d ${VIRTUAL_LAN} -j ACCEPT +iptables -A FORWARD -s ${LAN_A} -d ${VIRTUAL_LAN} -j ACCEPT + +# 放行 ${VIRTUAL_LAN} -> ${LAN_B}/${LAN_A} 的回包(必须) +iptables -A FORWARD -s ${VIRTUAL_LAN} -d ${LAN_B} -m state --state RELATED,ESTABLISHED -j ACCEPT +iptables -A FORWARD -s ${VIRTUAL_LAN} -d ${LAN_A} -m state --state RELATED,ESTABLISHED -j ACCEPT + +# 禁止 ${VIRTUAL_LAN} 主动访问 ${LAN_B}/${LAN_A}(安全隔离) +iptables -A FORWARD -s ${VIRTUAL_LAN} -d ${LAN_B} -j DROP +iptables -A FORWARD -s ${VIRTUAL_LAN} -d ${LAN_A} -j DROP + +# 放行 EasyTier 虚拟网卡 ${TUN_IF} iptables -A FORWARD -i ${TUN_IF} -j ACCEPT iptables -A FORWARD -o ${TUN_IF} -j ACCEPT EOF @@ -113,6 +130,7 @@ Usage: sudo bash install.sh [install|status|uninstall] Environment overrides: LAN_A=$LAN_A LAN_B=$LAN_B + VIRTUAL_LAN=$VIRTUAL_LAN TUN_IF=$TUN_IF DELAY=$DELAY SERVICE_NAME=$SERVICE_NAME @@ -120,7 +138,7 @@ Environment overrides: Examples: sudo bash install.sh install - sudo LAN_A=192.168.2.0/24 LAN_B=192.168.3.0/24 TUN_IF=tun0 bash install.sh install + sudo LAN_A=192.168.2.0/24 LAN_B=192.168.3.0/24 VIRTUAL_LAN=192.168.4.0/24 TUN_IF=tun0 bash install.sh install sudo DELAY=30s bash install.sh install sudo bash install.sh status sudo bash install.sh uninstall