vibe coding 了下我的 NAT 网络地址转换工具,新增了管理页面和端口段 Redirect 支持 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
arloor
V2EX    程序员

vibe coding 了下我的 NAT 网络地址转换工具,新增了管理页面和端口段 Redirect 支持

  •  
  •   arloor 13 小时 54 分钟前 328 次点击

    NFTables NAT Rust

    基于 nftables 的高性能 NAT 端口转发管理工具,使用 Rust 语言开发。

    核心特性

    • 动态 NAT 转发:自动监测配置文件和目标域名 IP 变化,实时更新转发规则
    • IPv4/IPv6 双栈支持:完整支持 IPv4 和 IPv6 NAT 转发
    • 灵活配置:支持传统配置文件和 TOML 格式,满足不同使用场景
    • 精准控制:支持单端口、端口段、TCP/UDP 协议选择
    • 本地重定向:支持端口重定向到本机其他端口
    • Docker 兼容:与 Docker 网络完美兼容
    • 高性能轻量:基于 Rust 编写,仅依赖标准库和少量核心库
    • 开机自启:支持 systemd 服务管理,开机自动启动
    • 域名解析:支持域名和 IP 地址,自动 DNS 解析和缓存
    • Web 管理界面:提供可视化的 WebUI 管理配置和查看规则

    alt text alt text

    系统要求

    适用于以下 Linux 发行版:

    • CentOS 8+ / RHEL 8+ / Fedora
    • Debian 10+ / Ubuntu 18.04+
    • 其他支持 nftables 的现代 Linux 发行版

    系统准备

    CentOS / RHEL / Fedora

    # 关闭 firewalld systemctl disable --now firewalld # 关闭 SELinux setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 安装 nftables yum install -y nftables 

    Debian / Ubuntu

    # 安装 nftables apt update && apt install -y nftables # 禁用 iptables (可选) systemctl disable --now iptables 

    快速安装

    升级也使用相同的安装命令

    方法一:TOML 配置文件版本(推荐)

    bash <(curl -sSLf https://us.arloor.dev/https://github.com/arloor/nftables-nat-rust/releases/download/v2.0.0/setup.sh) toml 

    方法二:传统配置文件版本

    bash <(curl -sSLf https://us.arloor.dev/https://github.com/arloor/nftables-nat-rust/releases/download/v2.0.0/setup.sh) legacy 

    WebUI 管理界面

    本项目现已支持 Web 管理界面,可以通过浏览器方便地管理 NAT 配置。

    • 基于 JWT 的安全认证
    • 支持 HTTPS/TLS 加密传输
    • 可视化编辑配置文件(支持传统格式和 TOML 格式)
    • 实时查看 nftables 规则
    • 现代化的用户界面

    安装管理界面 WebUI

    bash <(curl -sSLf https://us.arloor.dev/https://github.com/arloor/nftables-nat-rust/releases/download/v2.0.0/setup-console.sh) # -p 5533 -k /root/.acme.sh/arloor.dev/arloor.dev.key -c /root/.acme.sh/arloor.dev/fullchain.cer 
    1. 安装过程会交互式提示输入用户名和密码。密码会保存在 systemd 文件中,注意安全。
    2. 通过 -p 参数可以指定 WebUI 监听端口,默认端口为 5533 。
    3. 通过 -c-k 参数可以指定自定义 TLS 证书和私钥文件路径,如果未提供,将自动生成自签名证书。
    4. 安装脚本会自动检测现有 NAT 服务的配置格式,并根据配置格式生成相应的 systemd service 文件。

    安装完成后,访问 https://your-server-ip:5533 即可使用管理界面。详细文档请查看 nat-console/README.md

    升级 WebUI

    bash <(curl -sSLf https://us.arloor.dev/https://github.com/arloor/nftables-nat-rust/releases/download/v2.0.0/setup-console-assets.sh) systemctl restart nat-console 

    配置说明

    TOML 配置文件(推荐)

    配置文件位置:/etc/nat.toml

    优势

    • 支持配置验证,保证格式正确
    • 支持注释,便于维护
    • WebUI 可视化编辑和验证
    • 结构化配置,可读性更好
    # ============ 基础转发示例 ============ # 1. 单端口转发 - HTTPS 流量转发 [[rules]] type = "single" sport = 10443 # 本机监听端口 dport = 443 # 目标服务端口 domain = "example.com" # 目标域名或 IP 地址 protocol = "all" # 协议: all, tcp 或 udp ip_version = "ipv4" # IP 版本: ipv4, ipv6 或 all comment = "转发 HTTPS 到 example.com" # 2. 端口段转发 - 批量游戏端口 [[rules]] type = "range" port_start = 20000 # 起始端口 port_end = 20100 # 结束端口(含) domain = "game.example.com" protocol = "tcp" # 仅 TCP 协议 ip_version = "all" # 同时支持 IPv4 和 IPv6 comment = "游戏服务器端口段" # 3. UDP 专用转发 - DNS 服务 [[rules]] type = "single" sport = 5353 # 本机 DNS 端口 dport = 53 # 目标 DNS 端口 domain = "8.8.8.8" # 也可以直接使用 IP 地址 protocol = "udp" # 仅 UDP 协议 ip_version = "ipv4" comment = "DNS 查询转发" # ============ 本地重定向示例 ============ # 4. 单端口重定向到本机服务 [[rules]] type = "redirect" sport = 8080 # 外部访问端口 dport = 3128 # 本机实际服务端口 protocol = "all" ip_version = "ipv4" comment = "代理服务端口重定向" # 5. 端口段重定向到本机 [[rules]] type = "redirect" sport = 30001 # 起始端口 sport_end = 30100 # 结束端口 dport = 45678 # 本机目标端口 protocol = "tcp" ip_version = "all" comment = "批量端口重定向到本机" # ============ 高级场景示例 ============ # 6. 强制 IPv6 转发 [[rules]] type = "single" sport = 9001 dport = 9090 domain = "ipv6.example.com" protocol = "all" ip_version = "ipv6" # 仅使用 IPv6 进行转发 comment = "IPv6 专用服务" # 7. 双栈支持示例 - 自动选择 IPv4/IPv6 [[rules]] type = "single" sport = 10080 dport = 80 domain = "dual-stack.example.com" # 域名同时有 A 和 AAAA 记录 protocol = "tcp" ip_version = "all" # 根据客户端 IP 版本自动选择 comment = "双栈 Web 服务" 

    传统配置文件

    配置文件位置:/etc/nat.conf

    基础格式

    • SINGLE,本机端口,目标端口,目标地址[,协议][,IP 版本] - 单端口转发
    • RANGE,起始端口,结束端口,目标地址[,协议][,IP 版本] - 端口段转发
    • REDIRECT,源端口,目标端口[,协议][,IP 版本] - 重定向到本机端口
    • REDIRECT,起始端口-结束端口,目标端口[,协议][,IP 版本] - 端口段重定向

    参数说明

    • 协议可选值:tcpudpall(默认为 all
    • IP 版本可选值:ipv4ipv6all(默认为 all
    • # 开头的行为注释

    配置示例

    # ============ 基础转发 ============ # 单端口转发 - HTTPS 流量 SINGLE,10443,443,example.com # 端口段转发 - 游戏服务器端口( 20000-20100 ) RANGE,20000,20100,game.example.com # ============ 协议指定 ============ # 仅转发 TCP 流量 - Web 服务 SINGLE,10080,80,web.example.com,tcp # 仅转发 UDP 流量 - DNS 查询 SINGLE,5353,53,8.8.8.8,udp # ============ 本地重定向 ============ # 单端口重定向到本机服务 REDIRECT,8080,3128 # 端口段重定向到本机( 30001-30100 → 45678 ) REDIRECT,30001-30100,45678 # TCP 专用重定向 REDIRECT,7000-7100,8080,tcp # ============ IPv6 支持 ============ # 强制使用 IPv6 转发 SINGLE,9001,9090,ipv6.example.com,all,ipv6 # 双栈支持(根据客户端自动选择) SINGLE,10080,80,dual-stack.example.com,tcp,all # 禁用的规则(以 # 开头) # SINGLE,3000,3000,disabled.example.com 

    使用方法

    启动/停止服务

    # 启动服务 systemctl start nat # 停止服务 systemctl stop nat # 重启服务 systemctl restart nat # 查看服务状态 systemctl status nat # 开机自启 systemctl enable nat # 取消开机自启 systemctl disable nat 

    修改配置

    修改配置文件后,程序会在 60 秒内自动应用新配置,无需手动重启服务。

    # TOML 版本 vim /etc/nat.toml # 传统版本 vim /etc/nat.conf 

    查看日志

    # 实时查看日志 journalctl -fu nat # 查看详细日志 journalctl -exfu nat # 查看最近 100 行日志 journalctl -u nat -n 100 

    查看 nftables 规则

    # 查看所有规则 nft list ruleset # 仅查看 NAT 表 nft list table ip self-nat nft list table ip6 self-nat6 

    高级配置

    自定义源 IP (多网卡场景)

    默认使用 masquerade 自动处理 SNAT 。如需指定源 IP:

    # 设置自定义源 IP echo "nat_local_ip=10.10.10.10" > /opt/nat/env # 重启服务 systemctl restart nat 

    Docker 兼容性

    本工具已与 Docker 完全兼容。程序会自动调整 nftables 规则以适配 Docker 网络。

    说明:Docker v28 将 filter 表 forward 链默认策略改为 DROP ,本工具会自动将重置为 ACCEPT 以确保 NAT 规则正常工作。

    注意事项

    REDIRECT 类型限制

    REDIRECT 类型工作在 PREROUTING 链,仅对外部流量有效:

    • 有效:外部机器访问重定向端口 → 成功重定向
    • 无效:本机进程访问重定向端口 → 不会重定向

    原因:本机流量直接进入 OUTPUT 链,不经过 PREROUTING 链。

    示例

    # 配置:REDIRECT,8000,3128 curl http://remote-server:8000 # 成功重定向到 3128 curl http://localhost:8000 # 不会重定向,直接访问 8000 

    TLS/Trojan 转发

    转发 TLS/Trojan 等加密协议时,常见问题是证书配置错误。

    解决方案

    1. 简单:客户端禁用证书验证
    2. 推荐:正确配置证书和域名,确保证书域名与中转机匹配

    许可证

    本项目采用 MIT License 开源协议。

    相关链接


    注意:与旧版 iptablesUtils 不兼容,切换时请先卸载旧版或重装系统。

    1 条回复
    bigmomo
        1
    bigmomo  
       12 小时 23 分钟前
    加个星星,就需要这种玩意
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2600 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 02:41 PVG 10:41 LAX 18:41 JFK 21:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86