跳转至

配置文件

QRE 使用 INI 风格配置。全局配置只放全局策略,接口 profile 只放一个 [Server][Client] section。

文件与覆盖

用途 默认路径 覆盖方式
全局配置 /etc/qre/qre.conf QRE_GLOBAL_CONFIG,或 qre-tool daemon --global-config <path>
profile 目录 /etc/qre/dev QRE_CONFIG_DIR,或 qre-tool daemon --config-dir <path>
状态目录 /var/lib/qre [Global] StateDirQRE_STATE_DIR,或 qre-tool daemon --state-dir <path>
BPF ELF /usr/lib/qre/libqre_ebpf.so QRE_BPF_ELF,或 qre-tool daemon --bpf-elf <path>
BPF pin 目录 /sys/fs/bpf QRE_BPF_PIN_DIR,或 qre-tool daemon --pin-dir <path>

全局配置文件不存在时,qre-tool 使用内置默认值。接口 profile 不存在会报错。

解析规则

  • 空行会被忽略。
  • #; 后面的内容视为行内注释。
  • section 名区分大小写,支持 [Global][Server][Client][SSLPreRead "name"]
  • 一个接口 profile 必须且只能包含一个 [Server][Client]
  • 全局配置不能混入 [Server][Client] 字段。
  • 字段名区分大小写,未知字段会报错。
  • 重复字段会报错。hooks 字段例外,可以重复出现以执行多条命令。

全局配置

/etc/qre/qre.conf
[Global]
StateDir = /var/lib/qre
DestCacheRefreshSeconds = 300
DestCacheExpirySeconds = 900
DefaultDestTransport = auto
AllowStaleOnStartup = false
FallbackFlowTimeoutMs = 30000
FallbackRateWindowMs = 1000
MaxFallbackFlowsPerWindow = 64
FallbackByteRateLimitBps = 1000000
InvalidProbeRateWindowMs = 1000
MaxInvalidProbesPerWindow = 128
字段 默认值 范围/格式 说明
StateDir /var/lib/qre 绝对路径 保存 profile state、daemon ready file 和 Dest profile cache 等机器生成状态。
DestCacheRefreshSeconds 300 1..86400 Dest profile 刷新间隔。必须小于等于 DestCacheExpirySeconds
DestCacheExpirySeconds 900 1..31536000 Dest profile 过期时间。
DefaultDestTransport auto autotcp-tlstcp_tlsquic 默认 Dest probe 传输。auto 让实现选择合适方式。
AllowStaleOnStartup false true/falseyes/no1/0on/off 启动时是否允许使用过期 Dest cache。
FallbackFlowTimeoutMs 30000 1..3600000 fallback 流超时。
FallbackRateWindowMs 1000 1..3600000 fallback 限速窗口。
MaxFallbackFlowsPerWindow 64 1..1000000 每个窗口允许的 fallback 流数量。
FallbackByteRateLimitBps 1000000 1..100000000000 fallback 字节速率上限。
InvalidProbeRateWindowMs 1000 1..3600000 无效探测限速窗口。
MaxInvalidProbesPerWindow 128 1..1000000 每个窗口允许的无效探测数量。

SSLPreRead

[SSLPreRead "..."] 只允许出现在全局配置中:

[SSLPreRead "web-a"]
Listen = 0.0.0.0:443
SNI = cdn-a.example.com
Upstream = 127.0.0.1:8443

[SSLPreRead "default"]
Listen = 0.0.0.0:443
SNI = default
Upstream = 127.0.0.1:4430
字段 必填 格式 说明
section name [SSLPreRead "name"] name 不能为空,不能包含 "\、NUL 或换行。
Listen 数字 ip:port,端口非 0 与 QRE front 共享的监听地址。
SNI hostname 或 default 匹配 TLS ClientHello SNI。每个 Listen 只能有一个 default
Upstream host:port[ipv6]:port passthrough 上游。

同一个 Listen + SNI 组合不能重复。SSLPreRead 不接受 DeviceAddressDestServerName、REALITY key 等接口字段。

Server profile

/etc/qre/dev/qre0.conf
[Server]
Device = qre0
Address = 10.44.0.1/32
Listen = 0.0.0.0:443
MTU = 1280

Dest = www.example.com:443
ServerName = www.example.com
RealityPrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
RealityShortIds = 0123456789abcdef
RealityMaxTimeDiff = 120
字段 必填 范围/格式 说明
Device 1 到 15 字符;以 ASCII 字母开头;可含字母、数字、_-. QRE netdev 名称。
Address IPv4/IPv6 CIDR 配置到 QRE 设备上的地址。
Listen 数字 ip:port,端口非 0 服务端 REALITY/QUIC 监听地址。
MTU 1280..9000 QRE 设备 MTU。
Dest host:port[ipv6]:port 伪装目标。host 会被规范化为小写。
ServerName hostname 握手使用的 SNI 名称,会被规范化为小写。
RealityPrivateKey base64 或 URL-safe no-pad base64,解码后 32 字节 服务端 X25519 私钥。
RealityShortIds 逗号分隔 hex,每项 2 到 16 个 hex 字符且长度为偶数 服务端接受的 short id 列表。
RealityMaxTimeDiff 1..86400 REALITY 时间偏差容忍窗口。

Client profile

/etc/qre/dev/qre0.conf
[Client]
Device = qre0
Address = 10.44.0.2/32
MTU = 1280

Endpoint = 203.0.113.10:443
ServerName = www.example.com
RealityPublicKey = AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=
RealityShortId = 0123456789abcdef
PersistentKeepalive = 25
字段 必填 范围/格式 说明
Device 同 server QRE netdev 名称。
Address IPv4/IPv6 CIDR 配置到 QRE 设备上的地址。
Endpoint host:port[ipv6]:port 服务端公网地址。
MTU 1280..9000 QRE 设备 MTU。
ServerName hostname REALITY/QUIC 握手使用的 SNI。
RealityPublicKey base64 或 URL-safe no-pad base64,解码后 32 字节 服务端 X25519 公钥。
RealityShortId 2 到 16 个 hex 字符且长度为偶数 客户端使用的 short id。
PersistentKeepalive 0..65535 客户端保持会话活跃的间隔,0 表示关闭主动保活。

Hooks

以下字段可以出现在 [Server][Client] 中:

PreUp = ip rule add from 10.44.0.2 table 100
PostUp = ip route add default dev qre0 table 100
PreDown = ip route del default dev qre0 table 100
PostDown = ip rule del from 10.44.0.2 table 100
Hook 执行时机
PreUp up 同步内核配置前。
PostUp 地址配置成功后、保存 state 前。
PreDown down 删除地址和设备前。
PostDown 删除内核设备后、移除 state 前。

hooks 通过 sh -c 执行,是兼容行为。生产部署更推荐把路由策略写入明确的系统管理配置,减少 profile 对 shell 环境的依赖。

验证配置

qre-tool showconf /etc/qre/qre.conf
qre-tool showconf /etc/qre/dev/qre0.conf
qre-tool strip qre0

showconf 会输出标准化 JSON,并在字段缺失、格式错误、section 混用或重复字段时返回非零退出码。strip 按 profile 名称读取配置目录,适合检查 daemon 实际会读取的文件。