nftables 转发脚本配置

这篇按社区脚本教程整理,适合想用菜单方式管理 Po0 端口转发的用户。它比手写 nftables 更容易维护,后续增删端口也更方便。

链路结构

单层链路:

客户端 → Po0 → 出口机

多层链路:

客户端 → Po0 → RFC 中转机 → 自备落地机

第一次建议先跑通单层链路。

1. 先搭好出口机协议

出口机可以是 RFC 香港、日本,也可以是你自己的落地机。

你需要先完成:

  • 出口机协议搭建;
  • 记录客户端链接;
  • 记录出口机 IP;
  • 记录出口机端口;
  • 本地客户端直连出口机测试可用。

如果出口机协议都连不上,先不要配置 Po0。

2. 在 Po0 上下载脚本

curl -L http://script.gu.ax:2052/nftables.sh -o nft.sh
chmod +x nft.sh
./nft.sh

第一次使用时,先选择脚本里的初始化选项。社区教程里对应的是“选项 1”:安装 nftables,并自动开启 BBR 和 IPv4 端口转发。

nftables 脚本主菜单

如果之前配置过 nftables,也建议先走一次初始化,让脚本备份并接管配置,避免规则混在一起。

3. 添加端口转发

按脚本提示填写:

nftables 添加端口转发

  1. Po0 上监听的端口;
  2. 出口机 IP;
  3. 出口机协议端口。

如果出口机端口和 Po0 监听端口一致,后续更好记;不一致也可以,按实际填写即可。

示例:

Po0 监听端口:30001
出口机 IP:203.0.113.10
出口机端口:30001

4. 修改客户端配置

脚本配置完成后,把客户端配置里的服务器地址从:

出口机IP:出口机端口

改成:

Po0公网IP:Po0监听端口

其他参数保持不变。然后导入客户端测试。

5. 多层转发配置

如果要使用自备落地机作为最终出口,链路变成:

客户端 → Po0 → RFC 中转机 → 落地机

第一步:落地机搭协议

在自备落地机上搭好协议,记录落地机 IP 和端口,并确认直连可用。

第二步:RFC 中转机转发到落地机

在 RFC 中转机上同样运行脚本:

curl -L http://script.gu.ax:2052/nftables.sh -o nft.sh
chmod +x nft.sh
./nft.sh

初始化后添加转发:

RFC监听端口 → 落地机IP:落地机端口

先把客户端地址改成 RFC 中转机 IP 和端口,确认能连。

RFC 中转机转发配置

第三步:Po0 转发到 RFC 中转机

回到 Po0,添加转发:

Po0 转发到 RFC 中转机

Po0监听端口 → RFC中转机IP:RFC监听端口

最后客户端连接 Po0 公网 IP 和 Po0 监听端口。

最终连通测试参考

6. 后续维护

后续增删端口继续运行:

./nft.sh

建议始终用同一个脚本维护规则,不要一半脚本、一半手写。

7. 常见问题

客户端连不上

先检查出口机直连是否可用,再检查 Po0 转发端口是否填对。

端口填对但还是不通

确认是否使用了产品默认封禁端口,例如 804438080844380001080

多层转发变慢

多一层中转就多一段链路。先分别测试每一段,确认是哪一段慢。

规则冲突

如果之前手写过 nftables,再使用脚本接管,务必备份旧规则。避免旧规则还在导致冲突。

来源与感谢

本文根据 NodeSeek 公开教程 【po0一键配置】nftables端口转发管理脚本 整理改写,感谢原作者分享实践经验。