目标:将发往您服务器某个端口(例如 10800)的连接,转发到 1.1.1.1:443


第 1 步:允许 UFW 进行流量转发

首先,我们需要修改 UFW 的主策略,允许它转发数据包。

  1. 编辑 UFW 的主配置文件:

    Bash

    sudo nano /etc/default/ufw
    
  2. 找到 DEFAULT_FORWARD_POLICY 这一行,将它的值从 DROP 修改为 ACCEPT

    Ini, TOML

    # 将这里的值从 "DROP" 改为 "ACCEPT"
    DEFAULT_FORWARD_POLICY="ACCEPT"
    
  3. 保存并关闭文件。


第 2 步:添加 NAT 转发规则

接下来,我们将具体的转发规则添加到 UFW 的规则文件中。这个文件会在 UFW 加载用户自定义规则之前被读取。

  1. 编辑 before.rules 文件:

    Bash

    sudo nano /etc/ufw/before.rules
    
  2. 在文件的最顶部,在 *filter 这一行之前,添加以下代码块。这个代码块定义了 NAT (网络地址转换) 规则。

    Ini, TOML

    # ------------------------------------------------------------------
    # NAT 规则 (用于端口转发)
    # 将此代码块放在文件的最顶部
    *nat
    :PREROUTING ACCEPT [0:0]
    :POSTROUTING ACCEPT [0:0]
    
    # 步骤 A: 将访问本机 10800 端口的 TCP 流量,目标地址转向 1.1.1.1:443 (DNAT)
    -A PREROUTING -p tcp --dport 10800 -j DNAT --to-destination 1.1.1.1:443
    
    # 步骤 B: 将来自转发连接的出口流量的源IP伪装成本机IP (MASQUERADE/SNAT)
    # 这样,目标服务器 (1.1.1.1) 才能将响应数据正确地发回给您的服务器
    -A POSTROUTING -d 1.1.1.1 -p tcp --dport 443 -j MASQUERADE
    
    COMMIT
    # NAT 规则结束
    # ------------------------------------------------------------------
    
    
    # 文件的其余部分 (例如 *filter) 保持不变
    *filter
    :ufw-before-input - [0:0]
    ...
    
  3. 保存并关闭文件。


第 3 步:重新加载 UFW 使配置生效

让 UFW 重新加载所有规则,包括我们刚刚修改的部分。

Bash

sudo ufw reload

如果提示需要确认,请输入 y。您也可以使用 sudo ufw disable && sudo ufw enable 来实现同样的效果。

至此,您的端口转发已经配置完毕!

如何验证规则 (iptables 后端)

因为您的后端是 iptables,您可以使用 iptables 命令来直接查看 NAT 规则是否被成功加载。

Bash

sudo iptables -t nat -L -n -v

命令解释:

  • -t nat: 表示查看 nat 表。

  • -L: 列出所有规则。

  • -n: 以数字形式显示 IP 地址和端口,不做反向解析,速度更快。

  • -v: 显示详细信息,包括数据包和字节计数器。

在命令的输出中,您应该能在 PREROUTING 链中看到您的 DNAT 规则,在 POSTROUTING 链中看到 MASQUERADE 规则。当有流量通过这条转发规则时,pkts (数据包) 和 bytes (字节) 计数器会增加,这是判断规则是否在工作的最佳方式。

总结:完全不需要更换或禁用 UFW。只需按照上述步骤,通过修改 UFW 的配置文件,就能安全、稳定地实现您想要的端口转发功能,并且完全兼容您现有的 iptables 后端。