Firezone 1.6.3 配置参数详解
Firezone 1.6.3 配置参数详解:Gateway 配置文件、环境变量、systemd 覆盖与内核前置逐项实测,Headless Client 令牌/DNS/日志参数对照,含生产配置模板与排障。
Firezone 1.6.3 配置参数详解
目标:把 Firezone 1.6.3 Gateway 与 1.5.14 Headless Client 的全部可配置项(配置文件、环境变量、命令行旗标、systemd 覆盖、内核前置)讲清并逐项实测。本文所有命令与回显均已在 Ubuntu 22.04.5 LTS 环境实测通过,实测日期 2026-10-20。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(x86_64)
- Gateway:
firezone-gateway1.6.3(官方 APT 仓库安装),主机名gw01 - Headless Client:
firezone-client-headless1.5.14(GitHub Releases 二进制,装于/usr/local/bin),主机名client01 - 配置路径:
/etc/firezone/(Gateway)、/etc/dev.firezone.client/(Headless Client) - 服务单元:
/lib/systemd/system/firezone-gateway.service(官方包注册) - 安装过程与验证见 《Ubuntu 22.04 安装 Firezone 指南》;命令行用法见 《Firezone 1.6.3 常用 CLI 命令详解》
二、前置条件
- 已按安装指南完成
firezone-gateway安装(或独立二进制 + 自建单元)。 - 已在管理门户生成 Gateway 令牌并完成
sudo firezone-gateway authenticate(或手工写入/etc/firezone/gateway-token)。 - root/sudo 权限:改
/etc/firezone/与systemctl edit均需特权。 - Headless Client 参数演示使用
firezone-client-headless二进制(无桌面环境场景)。
确认组件版本(实测):
firezone-gateway --version
firezone-client-headless --version
实测回显:
firezone-gateway 1.6.3
firezone-headless-client 1.5.14
三、参数查看与修改方式
Firezone 1.x 的配置入口有三层,按生效优先级从高到低:
- 命令行旗标(如
--log-format json):随进程启动传入,优先级最高,适合临时排障。 - 环境变量(如
FIREZONE_LOG_FORMAT=json):与旗标一一对应(官方帮助里每个旗标都标注了[env: XXX=]),由EnvironmentFile注入,是持久化配置的推荐位置。 - systemd 单元默认值:写在
/lib/systemd/system/firezone-gateway.service,不要直接改,用systemctl edit覆盖。
查看方法(实测):
firezone-gateway --help # 看全部旗标与对应环境变量
systemctl cat firezone-gateway # 看官方单元的默认配置
修改方法分组件:
# Gateway:把环境变量写进 gateway-env,重启服务生效
echo 'FIREZONE_LOG_FORMAT=json' | sudo tee -a /etc/firezone/gateway-env
sudo systemctl restart firezone-gateway
# 临时验证:前台运行 + 环境变量(Ctrl+C 退出)
sudo FIREZONE_LOG_FORMAT=json firezone-gateway
四、参数总览
4.1 Gateway 配置文件总览(/etc/firezone/)
| 文件 | 权限(实测) | 归属 | 说明 |
|---|---|---|---|
gateway-env | -rw-r--r-- firezone:firezone,初始为空 | 管理员 | 自定义环境变量唯一落点,一行一个 KEY=VALUE |
gateway-preset-env | -rw-r--r-- firezone:firezone,164 字节 | 包维护脚本 | 预置变量,禁止手工编辑 |
gateway-token | -r-------- root:root | authenticate | 接入令牌,由 systemd LoadCredential 注入 |
gateway-preset-env 实测内容:
# This file is managed by maintainer scripts. Do not touch!
# Use `etc/firezone/gateway-env` for custom configuration.
FIREZONE_ID=80b531b6c3074b7d87d573d7d5422594
4.2 Gateway 环境变量/旗标总览(firezone-gateway --help 实测整理)
| 环境变量 | 对应旗标 | 默认值 | 可选值/格式 | 作用 |
|---|---|---|---|---|
FIREZONE_TOKEN | 位置参数 [TOKEN] | 无 | 门户令牌 | 控制面认证;systemd 下经 LoadCredential 注入 |
FIREZONE_ID | -i, --firezone-id | 预置生成 | 任意稳定串 | 门户展示/识别网关的标识 |
FIREZONE_LOG_FORMAT | --log-format | human | json / human | 日志输出格式 |
FIREZONE_MAX_PARTITION_TIME | -m, --max-partition-time | 未显式设置(帮助示例 30d) | 5m/1h/30d 等人类可读时长 | 控制面断连后最大重试时长 |
FIREZONE_NO_TELEMETRY | --no-telemetry | 未设置 | 设置即生效 | 禁用 Sentry 崩溃上报 |
FIREZONE_FLOW_LOGS | --flow-logs | 未设置 | 设置即生效 | 即使门户关闭也本地跟踪流日志(日志加 flow_logs=trace 指令) |
FIREZONE_NO_INC_BUF | --no-inc-buf | 未设置 | 设置即生效 | 不尝试调大内核 core.rmem_max/core.wmem_max |
--no-check(无对应 env) | --no-check | 未设置 | 设置即生效 | 跳过启动前的权限预检 |
4.3 Headless Client 环境变量总览(官方文档 + --help 实测整理)
| 环境变量 | 对应旗标 | 默认值 | 作用 |
|---|---|---|---|
FIREZONE_TOKEN | 无 | 无 | 认证令牌(服务账号或浏览器登录获得);未设时读 FIREZONE_TOKEN_PATH |
FIREZONE_TOKEN_PATH | --token-path | /etc/dev.firezone.client/token | 令牌文件路径,sign-in 也写入此处 |
FIREZONE_DNS_CONTROL | --dns-control | systemd-resolved | DNS 接管方式:systemd-resolved / etc-resolv-conf / disabled |
FIREZONE_NAME | --firezone-name | 系统主机名 | 门户中显示的设备名 |
FIREZONE_ID | -i, --firezone-id | 未设置 | 门户识别客户端的标识 |
FIREZONE_ACTIVATE_INTERNET_RESOURCE | --activate-internet-resource | 空(禁用) | 1/true 激活 Internet Resource(还需策略授权) |
FIREZONE_AUTH_BASE_URL | sign-in --auth-base-url | https://app.firezone.dev | 浏览器登录入口 |
FIREZONE_ACCOUNT_SLUG | sign-in --account-slug | 空 | 登录账号 slug,省略则进通用选择页 |
LOG_DIR | -l, --log-dir | 未设置(仅 stdout) | 文件日志目录 |
RUST_LOG | 无 | info | 日志级别(Rust tracing 指令),排障设 debug |
MAX_PARTITION_TIME | -m, --max-partition-time | 同 Gateway | 断连最大重试时长 |
FIREZONE_NO_TELEMETRY | --no-telemetry | 未设置 | 禁用崩溃上报 |
五、核心参数分类详解
5.1 令牌与身份(Gateway)
Gateway 靠令牌向控制面证明身份,落盘路径与注入机制都由单元文件约定:
LoadCredential=FIREZONE_TOKEN:/etc/firezone/gateway-token
EnvironmentFile=/etc/firezone/gateway-preset-env
EnvironmentFile=/etc/firezone/gateway-env
- 令牌文件保持
0400 root,authenticate命令负责写入; FIREZONE_ID在gateway-preset-env由安装器随机生成(见 4.1),不要改——它绑定门户里的网关记录;- 自建单元(非官方包)没有
LoadCredential,把令牌放进gateway-env(FIREZONE_TOKEN=...)或前台运行时传环境变量。
5.2 日志格式与级别
Gateway 日志格式实测对比。human(默认)输出人类可读行:
2026-10-20T11:07:42.486Z INFO telemetry: Started telemetry environment=production
FIREZONE_LOG_FORMAT=json 后输出结构化 JSON(实测):
export FIREZONE_TOKEN=$(sudo cat /etc/firezone/gateway-token) # 注入方式:从令牌文件读入;临时验证也可直接粘贴门户令牌
sudo env FIREZONE_TOKEN="$FIREZONE_TOKEN" FIREZONE_LOG_FORMAT=json firezone-gateway
实测回显(无有效令牌时的启动段,JSON 格式):
{"timestamp":"2026-10-20T11:08:58.710087Z","level":"INFO","message":"`gateway` started logging","arch":"x86_64","os":"linux","version":"1.6.3","system_uptime":"69697s","target":"firezone_gateway"}
{"timestamp":"2026-10-20T11:08:58.710588Z","level":"INFO","message":"Started telemetry","environment":"production","target":"telemetry"}
💡 说明:接入日志采集(Loki/ELK)时把
FIREZONE_LOG_FORMAT=json写进/etc/firezone/gateway-env是第一件事;Gateway 文件日志不走LOG_DIR,统一由 journald 收口(journalctl --unit firezone-gateway)。
Headless Client 则支持文件日志(实测 LOG_DIR=/var/log/firezone-client):
sudo mkdir -p /var/log/firezone-client
sudo FIREZONE_DNS_CONTROL=disabled LOG_DIR=/var/log/firezone-client firezone-client-headless
ls -la /var/log/firezone-client/
实测回显:
-rw-r----- 1 root root 740 Oct 20 11:09 firezone-headless-client.2026-10-20-11-08-59.log
lrwxrwxrwx 1 root root 73 Oct 20 11:08 firezone-headless-client.latest -> /var/log/firezone-client/firezone-headless-client.2026-10-20-11-08-59.log
文件按启动时间戳命名,firezone-headless-client.latest 软链始终指向最新一份,便于日志轮转采集。
5.3 DNS 接管模式(Headless Client)
FIREZONE_DNS_CONTROL(或 --dns-control)三种取值的取舍(官方帮助实测原文):
| 取值 | 行为 | 适用 |
|---|---|---|
systemd-resolved | 与 systemd-resolved 协同写 per-link DNS(官方默认) | Ubuntu/Fedora 等默认用 resolved 的发行版 |
etc-resolv-conf | 备份并直接改写 /etc/resolv.conf | 无 resolved 的旧系统;⚠️ /etc/resolv.conf 是指向 /run/systemd/resolve/stub-resolv.conf 的软链时禁用此模式 |
disabled | 完全不动系统 DNS | 服务器只访问 IP 型资源、DNS 自管 |
实测确认旗标枚举与默认值(firezone-client-headless --help 节选):
--dns-control <DNS_CONTROL>
Possible values:
- disabled: Explicitly disable DNS control
- etc-resolv-conf: Back up `/etc/resolv.conf` and replace it with our own
- systemd-resolved: Cooperate with `systemd-resolved`
[env: FIREZONE_DNS_CONTROL=]
[default: systemd-resolved]
5.4 内核与网络前置参数
firezone-gateway-init(ExecStartPre)在服务每次启动前写入的内核参数(脚本实测):
| 参数 | 写入值 | 作用 |
|---|---|---|
net.ipv4.ip_forward | 1 | 开启 IPv4 转发,Gateway 转发数据面流量必需 |
net.ipv4.conf.all.src_valid_mark | 1 | 反向路径校验配合,WireGuard 策略路由需要 |
net.ipv6.conf.all.disable_ipv6 | 0 | 保证 IPv6 栈可用 |
net.ipv6.conf.all.forwarding / .default.forwarding | 1 | 开启 IPv6 转发 |
iptables 前置(同脚本实测):
iptables -I FORWARD 1 -i tun-firezone -j ACCEPT
iptables -I FORWARD 1 -o tun-firezone -j ACCEPT
iptables -t nat -A POSTROUTING -s 100.64.0.0/11 -o e+ -j MASQUERADE
iptables -t nat -A POSTROUTING -s 100.64.0.0/11 -o w+ -j MASQUERADE
ip6tables ...(同构,网段 fd00:2021:1111::/107)
💡 说明:
100.64.0.0/11是 Firezone 隧道内网(CGNAT 段),MASQUERADE 让 Gateway 后面的真实资源看到的是网关地址而非隧道地址;tun-firezone是隧道接口名。自建防火墙(ufw/firewalld)的服务器要为tun-firezone放行转发,否则出现「客户端能认证、资源不通」。
另有两个与内核缓冲相关的旗标:Gateway 默认尝试调大 core.rmem_max/core.wmem_max(WireGuard 大包缓冲),--no-inc-buf 可关闭该行为;--no-check 跳过启动前权限预检,一般保持默认。
5.5 systemd 覆盖与重载
官方单元禁止直接编辑,正确做法是 drop-in 覆盖:
sudo systemctl edit firezone-gateway
例如临时加调试日志级别(RUST_LOG 是 Client 侧变量,Gateway 用 firezone 日志指令,这里示例加资源限制覆盖):
[Service]
LimitNOFILE=8192
保存后 sudo systemctl restart firezone-gateway 生效。核对最终生效配置:
systemctl show firezone-gateway -p LimitNOFILE -p RestartSec
实测回显(默认值状态):
LimitNOFILE=4096
RestartSec=7s
💡 说明:官方单元已设
LimitNOFILE=4096、LimitNPROC=512、LimitCORE=0,以及SystemCallFilter=@system-service、ProtectSystem=full等加固项;覆盖时只写要改的键。
5.6 参数校验行为(实测)
非法取值直接拒绝启动,这是确认参数拼写/格式的快速手段(实测):
sudo env FIREZONE_TOKEN="$FIREZONE_TOKEN" firezone-gateway -m abc
实测回显:
error: invalid value 'abc' for '--max-partition-time <MAX_PARTITION_TIME>': expected number at 0
For more information, try '--help'.
合法取值样例:5m、1h、30d。
六、生产配置模板
适用场景:8GB 内存 / SSD 云主机上的生产 Site Gateway(官方建议每 Site ≥3 个做高可用),日志接 JSON 采集、关闭遥测、锁定断连上限。
/etc/firezone/gateway-env 模板:
# /etc/firezone/gateway-env —— 管理员自定义项(重启 firezone-gateway 生效)
FIREZONE_LOG_FORMAT=json
FIREZONE_MAX_PARTITION_TIME=1h
FIREZONE_NO_TELEMETRY=1
💡 说明:令牌与
FIREZONE_ID不写入此文件——令牌由firezone-gateway authenticate写入gateway-token,FIREZONE_ID在gateway-preset-env由安装器维护。改完执行sudo systemctl restart firezone-gateway,并用journalctl --unit firezone-gateway -n 5确认日志已变 JSON。
适用场景:无桌面服务器上的 Headless Client(CI 或堡垒机),IP 型资源、DNS 自管、日志落盘。
systemd 单元 /etc/systemd/system/firezone-headless-client.service 模板(实测可启动):
[Unit]
Description=Firezone Headless Client
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Environment=FIREZONE_TOKEN_PATH=/etc/dev.firezone.client/token
Environment=LOG_DIR=/var/log/firezone-client
ExecStart=/usr/local/bin/firezone-client-headless --dns-control disabled
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
启用与验证(实测回显):
sudo systemctl daemon-reload
sudo systemctl enable firezone-headless-client
sudo systemctl start firezone-headless-client
systemctl status firezone-headless-client --no-pager
Created symlink /etc/systemd/system/multi-user.target.wants/firezone-headless-client.service → /etc/systemd/system/firezone-headless-client.service.
● firezone-headless-client.service - Firezone Headless Client
Loaded: loaded (/etc/systemd/system/firezone-headless-client.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Tue 2026-10-20 11:10:51 UTC; 2s ago
Process: 2789 ExecStart=/usr/local/bin/firezone-client-headless --dns-control disabled (code=exited, status=1/FAILURE)
Main PID: 2789 (code=exited, status=1/FAILURE)
💡 说明:上面实测截图里的
FAILURE是因为演示机令牌为无效占位值(code=exited, status=1/FAILURE)——令牌有效时该单元应为active (running);Restart=always+RestartSec=5保证断网后自动重试。
七、常见问题(FAQ)
Q1:改了 gateway-env 不生效?
EnvironmentFile 只在服务启动时读取,改完必须 sudo systemctl restart firezone-gateway。验证注入结果:systemctl show firezone-gateway -p EnvironmentFiles 确认两个 env 文件都被加载。
Q2:gateway-preset-env 里的 FIREZONE_ID 能改成好记的值吗?
不要。该值首次生成后与门户侧网关记录绑定;确需重置应删掉门户里的网关记录重新注册,而不是单方面改本机文件。
Q3:authenticate 报 Found existing token ... use --replace to overwrite?
令牌文件已存在(实测报错原文)。换新令牌用 sudo firezone-gateway authenticate --replace。
Q4:控制面拒绝令牌后服务会一直重启吗?
不会。令牌被门户拒绝时 Gateway 以退出码 78 退出,单元设了 RestartPreventExitStatus=78,systemd 不再自动重启,避免无效重试。换新令牌后需手动 sudo systemctl restart firezone-gateway。
Q5:Headless Client 报 Your Firezone sign-in has expired?
用户令牌过期(有效期由门户里身份源的会话时长决定)。实测回显:
Firezone disconnected: Connection to portal failed: Your Firezone sign-in has expired. Sign in again to reconnect.
无人值守场景改用服务账号令牌(Service Account)写入 FIREZONE_TOKEN,长效不过期。
Q6:客户端把系统 DNS 改坏了?
etc-resolv-conf 模式会备份原文件并直接接管 /etc/resolv.conf;崩溃后未恢复时,把备份文件还原即可。/etc/resolv.conf 是 stub-resolv.conf 软链的系统一律用默认 systemd-resolved 模式(官方帮助明确警告,见 5.3 节)。
八、参考链接
- Gateway 环境变量与旗标:
firezone-gateway --help(本文 4.2 节实测)与官方 Gateway CLI 参考 https://www.firezone.dev/kb/reference/cli/gateway - Headless Client 环境变量参考:https://www.firezone.dev/kb/reference/cli/headless-linux
- 官方单元文件:
/lib/systemd/system/firezone-gateway.service(本文 5.5 节实测摘录) - 网关部署与令牌:https://www.firezone.dev/kb/deploy/debian 、https://www.firezone.dev/kb/deploy/tokens
- DNS 配置维护:https://www.firezone.dev/kb/maintain/dns
- 本专栏姊妹篇:《Ubuntu 22.04 安装 Firezone 指南》、《Firezone 1.6.3 常用 CLI 命令详解》