端口转发思路
前面我们设置的小鸡网段是172.16.1.1 到 172.16.1.254。
那么基础规则是 172.16.1.D 的内网 IP(此例子 D 最多是 3 位数)
SSH 端口是 61D(D 不足 3 为前面补 0)
可用端口是 1D1 – 1D9(D 不足 3 为前面补 0)
如,我们这次创建的 nat vps 内网 IP: 172.16.1.2,则:
SSH 端口是 61002 可用端口是 10021 – 10029
那么能用的脚本就是:
# 内网 IP 范围,从 172.16.1.2 开始
for D in {2..254}; do
# 计算 SSH 端口(61D),如果 D 不足三位补0
SSH_PORT=$(printf "61%03d" "$D")
# 可用端口范围(1D1 - 1D9),如果 D 不足三位补0
START_PORT=$(printf "1%03d1" "$D")
END_PORT=$(printf "1%03d9" "$D")
# 内网 IP
INTERNAL_IP="172.16.1.$D"
# 设置 DNAT 规则,将外部 SSH 端口转发到对应的内网 IP
iptables -t nat -A PREROUTING -p tcp --dport $SSH_PORT -j DNAT --to-destination $INTERNAL_IP:22
# 设置 DNAT 规则,将外部可用端口范围转发到对应的内网 IP
iptables -t nat -A PREROUTING -p tcp --dport $START_PORT:$END_PORT -j DNAT --to-destination $INTERNAL_IP
# 设置 SNAT 规则,将内网返回的流量伪装为外部接口的 IP
iptables -t nat -A POSTROUTING -s $INTERNAL_IP -j MASQUERADE
done
so,这个脚本的删除命令是:
#!/bin/bash
# 脚本说明:
# 该脚本用于删除之前通过循环创建的 iptables DNAT 和 SNAT 规则。
# 它会遍历与创建时完全相同的 IP 地址和端口范围,
# 并使用 "-D" 参数来删除每一条对应的规则。
echo "开始删除 iptables 端口转发规则..."
# 内网 IP 范围,从 172.16.1.2 到 172.16.1.254
for D in {2..254}; do
# 计算 SSH 端口(61D),如果 D 不足三位则补0
SSH_PORT=$(printf "61%03d" "$D")
# 计算可用端口范围(1D1 - 1D9),如果 D 不足三位则补0
START_PORT=$(printf "1%03d1" "$D")
END_PORT=$(printf "1%03d9" "$D")
# 内网 IP
INTERNAL_IP="172.16.1.$D"
# --- 删除规则 ---
# 1. 删除 SSH 端口的 DNAT 规则
# 将原来的 -A 替换为 -D
iptables -t nat -D PREROUTING -p tcp --dport $SSH_PORT -j DNAT --to-destination $INTERNAL_IP:22
# 2. 删除端口范围的 DNAT 规则
# 将原来的 -A 替换为 -D
iptables -t nat -D PREROUTING -p tcp --dport $START_PORT:$END_PORT -j DNAT --to-destination $INTERNAL_IP
# 3. 删除对应的 SNAT (MASQUERADE) 规则
# 将原来的 -A 替换为 -D
iptables -t nat -D POSTROUTING -s $INTERNAL_IP -j MASQUERADE
done
echo "脚本执行完毕。已尝试删除所有指定的 iptables 规则。"
echo "您可以使用 'iptables -t nat -L -n --line-numbers' 命令来检查规则是否已被删除。"
版权声明:
作者:咸鱼
链接:https://xy.sd/archives/439
文章版权归作者所有,未经允许请勿转载。
THE END