端口转发思路

前面我们设置的小鸡网段是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' 命令来检查规则是否已被删除。"

 

THE END