适用于 pfSense 的 ZeroTier 插件

ZeroTier 是一个建立在加密安全全球对等网络之上的分布式网络虚拟化平台。它提供了接近企业级 SDN 交换机的高级网络虚拟化与管理能力,可跨越局域网与广域网,将各种设备与应用安全地连接在一起。

目前,pfSense 官方尚未提供 ZeroTier 插件。借助 ChatGPT 辅助开发,编写了适用于 pfSense 的 ZeroTier Web 管理插件,并在 pfSense Plus 26.03.1 (freeBSD 16)和 pfSesne CE 2.8.1 (freeBSD15)环境中测试通过。

安装插件

下载附件后,将文件解压并上传至防火墙的 /root 目录,运行以下命令进行安装:

pkg add pfSense-pkg-zerotier-1.16.2.pkg

下图为在 pfSense CE 上的安装过程。

启用服务

登录 pfSense Web 管理界面,转到 VPN>ZeroTier VPN,勾选 Enable Zerotier Client(启用 Zerotier 客户端) 选项后保存配置。

加入网络

进入 VPN>ZeroTier VPN,切换到“网络(Networks)”选项卡,点击右侧“加入(Join)”按钮。输入需要加入的 ZeroTier Network ID 后保存即可。

因为还没授权,处于拒绝访问的状态。

添加授权

打开浏览器访问 ZeroTier 控制台,在成员(Members)列表中,会看到一个等待授权的新节点。

点击对应节点左侧的编辑图标:

  • 勾选 Authorized
  • 输入节点名称
  • 指定IP地址
  • 点击Save

保存后,右上角显示已授权。返回 VPN>ZeroTier VPN,网络选项卡,网络状态已显示OK。

管理路由

在 ZeroTier 控制台的“路由管理(Managed Routes)”中,添加指向 pfSense 防火墙局域网的路由:

  • Destination(目标网络):填写 pfSense 的 LAN 网段
  • Via(下一跳):填写 pfSense 分配到的 ZeroTier 节点地址

即可允许远程节点访问 pfSense 后方局域网。

查看节点

进入 VPN>ZeroTier VPN,在端点选项卡中,可以查看当前 ZeroTier 网络中各节点的连接状态与详细信息。

添加规则

为了确保 pfSense 后方客户端能够访问远程 ZeroTier 网络,需要在LAN接口上添加一条 LAN NET to ANY的规则,或者根据实际需求,仅放行到 ZeroTier 网段的访问规则。如下图所示。

高级设置

配置中的 local.conf 选项,可以给 ZeroTier 节点添加本地运行参数,更精准控制节点的运行。如禁止 ZeroTier 使用内网地址进行直连,固定监听端口,禁用 NAT-PMP / UPnP 自动端口映射,禁用备用端口与 TCP 回退中继等。通常用于多 WAN / 防火墙环境,希望强制走公网路径,避免错误的 LAN 直连,严格限制打洞行为等,来提高安全可控性。

具体参数可参考OPNsense上的Zerotier的设置

卸载插件

在shell环境下,运行以下命令卸载:

pkg remove pfSense-pkg-zerotier

测试网络

配置完成后,可通过ping 对端设备、traceroute 检查路由、测试 NAS/SSH/RDP 等服务测试各节点之间的网络连通情况,以确认 ZeroTier 网络是否正常工作。

注意事项

  • 不要在接口>分配菜单尝试分配 ZeroTier 接口,否则可能导致防火墙重启后网络配置被重置
  • 安装包已自带开机自启脚本,不需要再通过 shellcmd 插件添加 ZeroTier 开机启动命令,否则可能导致 pfSense 在启动过程中卡死,无法正常完成引导。

项目地址

pfSense-pkg-zerotier