跳转到内容

katana 配置参考

katana 配置文件的所有表都汇总在这一页。同样的表格也出现在 katana 指南的各个页面上,那里会解释键之间如何配合;每个标题下都有对应页面的链接。

config.toml · 详见 配置文件

键类型必填默认值说明
logtable否{}日志设置,写作 [log],只有 level 一个键。与 etemenanki-app 不同,katana 在热重载时会应用改动后的 level。
dnstable否{}整个出站池共用的域名解析,写作 [dns]。不写时使用系统解析器,前面始终有一层缓存。访问面板的 HTTP 请求不经过它。
nodearray of tables是—要服务的面板节点,每个 [[node]] 块一个,下面有 [node.api]、[node.controller]、[node.controller.cert]、[node.hysteria]、[node.route] 和 [[node.route.rule]] 几个子表。键名是单数:[[nodes]] 会被当作未知字段,只写一个 [node] 表会报 invalid type: map, expected a sequence。一个都不写时文件能解析,但 --test 和正常启动都会报 config defines no [[node]] entries。
outboundarray of tables否[]具名的上游代理,每个 [[outbound]] 块一个,所有节点共用。键名是单数。direct、freedom、block、blackhole 这几个 tag 始终存在,不能重新定义;使用保留的或重复的 tag 会报 duplicate/reserved outbound tag <tag>。

[log] · 详见 配置文件

键类型必填默认值说明
levelstring否"info"一条 tracing 的 EnvFilter 指令,语法与 RUST_LOG 相同:一个级别(off、error、warn、info、debug、trace,或 0 到 5 的数字,不区分大小写),后面可以跟按 target 覆盖的级别,例如 "info,katana=debug"。启动时,环境变量 RUST_LOG 只要是合法的过滤器就优先生效。--test 不校验这个值:启动时无法解析的指令会被跳过,并在 stderr 打印一行 ignoring ...;不是级别的词(例如 "warning")会被当成 target 名,结果是所有日志(包括错误)都不再输出。热重载时如果这个值变了,katana 会应用新值,并取代 RUST_LOG 设置的过滤器;新值无法解析时记录 invalid log level,保留当前的过滤器。

[dns] · 详见 配置文件

键类型必填默认值说明
backendstring (enum)否"system"解析结果的来源:"system"(系统解析器,遵循 /etc/hosts 和 nsswitch.conf)、"udp"(普通 DNS)、"tls"(DNS over TLS,RFC 7858)或 "https"(DNS over HTTPS,RFC 8484)。与 katana 大多数枚举值不同,这里区分大小写:"UDP" 会报 dns: unknown backend "UDP" (expected "system", "udp", "tls" or "https")。
serverstring视情况—解析服务器地址,写成带端口的 IP 字面量,例如 "192.0.2.53:53" 或 "[2001:db8::53]:853"。udp、tls、https 必填;缺少时构建失败,报 dns: the <backend> backend needs a server address。写成主机名或漏掉端口会报 dns: invalid server address: invalid socket address syntax。对 https 来说,katana 连接的就是这个地址,不会去解析 url 里的主机名。system 忽略这个键。
server_namestring视情况—校验解析服务器证书时使用的名称。tls 必填;缺少时构建失败,报 dns: the tls backend needs a server name to verify against。其他后端忽略这个键。
urlstring视情况—DNS over HTTPS 的地址,例如 "https://dns.example.com/dns-query"。https 必填;缺少时构建失败,报 dns: the https backend needs the resolver's url。必须以 https:// 开头,否则报 dns: "<url>" is not an https:// url。其中的主机名用来校验证书,也作为 Host 头发送;URL 里的端口会被忽略,没有路径时使用 /dns-query。带用户信息的 URL 会报 has no usable host。其他后端忽略这个键。
ca_filepath否—一个 PEM 证书包,里面是校验 tls 或 https 解析服务器时额外信任的 CA 证书。katana 把它们加到系统根证书之上,不会取代系统根证书。只要设置了这个键,katana 就会读取文件,即使后端是用不到它的 system 或 udp。相对路径以工作目录为基准。文件不存在时只报 No such file or directory (os error 2),不带路径。后端是 tls 或 https 时,文件里没有证书会报 no certificate in CA PEM bundle。

[[node]] · 详见 节点

键类型必填默认值说明
panel_typestring (enum)是—本节点使用的面板 API:NewV2board(UniProxy,用于 Xboard 和 V2board)、它的别名 V2board,或 SSpanel(mod_mu)。不区分大小写。不写时 --test 失败,报 unknown panel_type "";其他值也一样失败,报错里的值会转成小写。正常启动时,这样的节点会记日志并被跳过,只有一个节点都建不起来时 katana 才退出。热重载时遇到未知的值,katana 会拒绝整次重载,继续使用当前配置。属于节点身份的一部分。
apitable是—怎样连接面板、向面板要什么,写作 [node.api]:面板地址、节点 ID、密钥和节点类型,以及几项本地覆盖设置。
controllertable否{}节点在本机这一侧的设置,写作 [node.controller]:监听地址、轮询间隔、嗅探/规则/上报几个开关,以及证书子表 [node.controller.cert]。每个键都有默认值。
routetable否{}本节点的路由表,写作 [node.route],规则写在 [[node.route.rule]] 块里。不写时所有流都走 direct 出站。
hysteriatable否{}面板不提供的 Hysteria 2 节点设置,写作 [node.hysteria]:凭据格式、UDP 中继、伪装页面,以及可选的本地端口和混淆。只有 node_type 是 Hysteria 2 的取值时才会用到,否则忽略。

[node.api] · 详见 节点

键类型必填默认值说明
hoststring是—面板的基础 URL,要带协议头,例如 https://panel.example.com。面板部署在子路径下时,把路径也写上。katana 拼接 API 路径前会去掉末尾的斜杠。--test 不检查这个值:缺少 https:// 或 http:// 的地址能通过检查,但之后每次访问面板都会失败。属于节点身份的一部分,按原样比较。
node_idu32是—节点在面板里的 ID。写负数会解析失败,报 invalid value 错误,结尾是 expected u32。属于节点身份的一部分。
keystring是—面板的节点通信密钥:Xboard 和 V2board 里的 server token,SSPanel 里的 muKey。每次请求都带上它:UniProxy 面板放在查询参数 token 里,SSPanel 同时放在 key 和 muKey 里。属于节点身份的一部分。
node_typestring (enum)是—面板描述的节点类型,不区分大小写:V2ray、vmess 或 vless(三者都表示 V2ray 节点,除非打开 enable_vless,否则提供 VMess)、Trojan、Shadowsocks,或 Hysteria2、hysteria、hy2。UniProxy 面板会以小写形式在查询参数 node_type 里收到它(打开了 enable_vless 的 V2ray 节点则收到 vless),所以要按面板的写法填写。不写时报 unknown node_type ""。在 NewV2board 和 V2board 下,katana 请求的节点类型属于节点身份,所以热重载改变了请求的类型(不只是大小写)时会替换节点。其他改动,以及 SSPanel 下的任何改动,都会在热重载时新建面板客户端并立即生效。
enable_vlessbool否false让 V2ray 节点提供 VLESS 而不是 VMess。此时向 UniProxy 面板请求时使用 node_type=vless,并从面板的 network_settings 对象(而不是 networkSettings)读取传输层设置。SSPanel 也可以通过 custom_config 打开 VLESS,两处任意一处打开即可。在 NewV2board 和 V2board 下,对 node_type 为 V2ray 或 vmess 的节点打开或关闭它会改变 katana 请求的节点类型,而这属于节点身份,所以热重载时会替换节点。node_type = "vless" 时,无论开关与否,请求的类型都是 vless。其他情况下(包括 SSPanel),热重载改动它时会新建面板客户端并立即重建监听器。
vless_flowstring否""只用于 SSPanel 旧式 server 字符串:V2ray 节点的 VLESS 流控(flow)。任何非空值都会让这类节点失败,报 node requests kernel-unsupported feature: VLESS XTLS flow,所以请留空。UniProxy 面板和 SSPanel 的 custom_config 会自己给出 flow。热重载改动它时,katana 会新建面板客户端,改动立即生效。
timeoutu64否0每次面板 HTTP 请求的时限,单位为秒,从建立连接开始算到读完整个响应为止。0 表示 5 秒。热重载改动它时,katana 会就地新建面板客户端,不会替换节点。
speed_limitfloat否0限速覆盖值,单位 Mbps(1 Mbps 等于每秒 125 000 字节;小数和整数都可以)。大于 0 时,它取代面板为本节点下发的所有限速,包括节点级和每用户的限速,每个用户的速率都正好是这个值。0 或负数表示使用面板的限速。热重载改动它时,katana 会新建面板客户端,所有连接都保留;新速率作用于重载之后打开的每个流。
device_limitinteger否0可以写,但不起作用。katana 不限制每个用户的设备数。
rule_list_pathpath否""本地审计规则文件,每行一条正则表达式;空行和以 # 开头的行会被跳过。每条规则匹配目标域名或 IP(不含端口),匹配上的流会被拒绝。它和面板规则一起读取,所以 disable_get_rule = true 也会让这个文件失效。每次刷新规则时都会重新读取,所以修改文件内容会在下一个周期生效(SSPanel 下只有面板自己的规则请求成功并返回完整结果时才会重新读取)。文件读不了或某行正则无效时,katana 记日志并跳过。命中这些规则的流会被拒绝,但不会上报给面板。热重载改动路径时,katana 会新建面板客户端并立即读取新文件,连接不受影响。
disable_custom_configbool否false只用于 SSPanel。即使面板版本不低于 2021.11 并提供 custom_config,也从旧式 server 字符串读取节点设置。面板报告的版本低于 2021.11 或没有报告版本时,总是按 server 字符串解析。热重载改动它时,katana 会新建面板客户端,改动立即生效。

[node.controller] · 详见 节点

键类型必填默认值说明
listen_ipstring否"0.0.0.0"监听器绑定的地址:VMess、VLESS、Trojan 和 Shadowsocks 节点绑定 TCP,Hysteria 2 绑定 UDP。端口始终来自面板(或 [node.hysteria].port)。写不带方括号的 IPv4 或 IPv6 地址,例如 "0.0.0.0"、"::" 或 "203.0.113.10"。--test 不检查它;地址不对时,节点启动时绑定失败。它也是节点标签的一部分,例如 V2ray_0.0.0.0_443。热重载改动它时会重建监听器。
send_ipstring否"0.0.0.0"可以写,但不起作用。katana 不把出站连接绑定到指定源地址,源地址由操作系统选择。
update_periodicu64否60两次轮询之间的秒数。所有周期性工作都由这一个定时器驱动:拉取节点设置和用户、刷新审计规则、上报流量和审计命中。0 按 1 处理。面板自己的推送和拉取间隔不会被读取。节点启动成功后过一个完整周期才进行第一次轮询。节点首次启动失败并重试时,两次尝试之间的等待时间也不会超过它,否则最长为 60 秒。热重载改动它时会重新开始计时。
disable_upload_trafficbool否false不再向面板上报用户流量。限速和审计规则照常生效。每个周期都会读取,所以热重载后从下一个周期开始生效。
disable_get_rulebool否false不再获取审计规则,面板规则和 rule_list_path 都不读。启动时就打开的话,节点没有任何审计规则。通过热重载打开时,只是停止刷新,已经加载的规则会一直生效到 katana 重启。已经记录的审计命中照常上报。
disable_sniffingbool否false不再从每个 TCP 流开头的数据里读取 TLS SNI 或 HTTP Host。嗅探结果只用于路由规则,让以 IP 为目标的流也能匹配域名规则;katana 实际连接的目标不会被改变。热重载改动它时会立即重建监听器,节点上的连接会断开。
certtable视情况{}监听器使用的证书,写作 [node.controller.cert]。Trojan 和 Hysteria 2 节点,以及面板标记为 TLS 的 V2ray 节点,都必须写上并设置 mode = "file"。热重载改动其中任何一个键时会重建监听器。

[node.controller.cert] · 详见 节点

键类型必填默认值说明
modestring (enum)视情况"none""none"(不用证书)或 "file"(读取 cert_file 和 key_file),区分大小写。所有使用 TLS 的节点都必须用 "file";否则流式节点报 TLS node requires cert.mode = "file",Hysteria 2 节点报 hysteria2 node requires cert.mode = "file"。ACME 模式 "dns"、"http"、"tls" 在任何流式节点上都会被拒绝,不论它是否用 TLS:node requests kernel-unsupported feature: ACME cert mode "dns";在 Hysteria 2 节点上,它们和其他不是 "file" 的值一样报错。在流式节点上,其他值的效果与 "none" 相同。
cert_filepath视情况""PEM 格式的证书链:服务器证书在前,中间证书在后(即 fullchain.pem)。mode = "file" 时必填;它或 key_file 为空时,使用 TLS 的节点或 Hysteria 2 节点报 TLS node requires cert.cert_file and cert.key_file。每次构建监听器时读取,文件变化本身不会触发读取。文件不存在时只报操作系统的错误,例如 No such file or directory (os error 2),错误里不含路径。
key_filepath视情况""与 cert_file 配对的 PEM 私钥。mode = "file" 时必填。读取时机与 cert_file 相同;私钥与证书不匹配时,监听器构建失败。
reject_unknown_snibool否false没有实现,所以写 true 会被拒绝,而不是悄悄忽略:节点报 node requests kernel-unsupported feature: cert.reject_unknown_sni。请保持 false。

[node.hysteria] · 详见 Hysteria 2 节点

键类型必填默认值说明
portu16否0监听的 UDP 端口。非零值表示这是一个本地描述的节点:katana 用本表构造节点,从不调用面板的节点配置接口。0 表示像其他节点类型一样,向面板获取端口和混淆设置。
credentialstring (enum)否""客户端的认证字符串如何标识用户。"" 或 uuid:整个字符串就是用户的 UUID。user_pass:字符串为 label:uuid,按第一个冒号拆分;在 Xboard/V2board 上 label 是 <uuid>@v2board.user,在 SSPanel 上是数字用户 ID;label 比较时不区分大小写。本键的值区分大小写,其他取值会报 unknown hysteria credential kind。
udpbool否false除 TCP 外也中继 UDP。默认关闭,这一点与上游服务端不同:此时监听器会告诉客户端 UDP 已禁用,只中继 TCP。
udp_idle_timeoutu64否60UDP 会话在没有任何数据报的情况下最多保持多少秒,超时后 katana 将其关闭。取值范围 2 到 600。默认值 60 只在 udp = true 时生效:本键只能在开启 UDP 时设置,udp 关闭时设置会报 udp_idle_timeout is set but udp is not enabled。
obfsstring (enum)否—本地描述节点的数据包混淆。唯一接受的值是小写的 salamander。port = 0 时使用面板的混淆设置,运行时忽略本键,但 --test 仍会检查它。
obfs_passwordstring视情况—所有客户端共用的 Salamander 密钥,至少 4 字节。设置了 obfs 时必填。只设它而不设 obfs 会被拒绝,这样拼写错误就不会悄悄关闭混淆。与 obfs 一样只对本地描述的节点生效。
masqueradetable否{}对所有未携带有效凭据的请求返回的 HTTP/3 响应,写作 [node.hysteria.masquerade]。本地描述和面板描述的节点都适用。

[node.hysteria.masquerade] · 详见 Hysteria 2 节点

键类型必填默认值说明
statusu16否404HTTP 状态码。可以是 100 到 999 之间除 233 以外的任何值:233 是 Hysteria 2 认证成功的状态码,用它会告诉探测者认证已通过。超出范围的值会报 is not an HTTP status code。
bodystring否"404 page not found\n"响应正文,原样发送,并带有相应的 Content-Length。
content_typestring否"text/plain; charset=utf-8"Content-Type 头的值。katana 不检查它。如果它不是合法的 HTTP 头部值(例如含有换行符),伪装响应会变成不带任何头部的 200 响应,因此请只使用可打印字符。

[node.route] · 详见 路由

键类型必填默认值说明
defaultstring否"direct"没有任何规则匹配时流使用的出站 tag。出站池里的任意 tag 都可以:内置的 direct、block、freedom、blackhole,或者顶层某个 [[outbound]] 的 tag。tag 区分大小写。未知的 tag 报错 route references unknown outbound tag: <tag>。
geoippath视情况—v2ray 格式 geoip.dat 的路径。只要本节点有规则用到 geoip 就必须填写,否则构建失败,报 a geoip matcher is used but no geoip file is configured。katana 只在有规则引用时才读取该文件,没被用到的路径不会被打开。内存里只保留被引用的代码。
geositepath视情况—v2ray 格式 geosite.dat 的路径(v2fly 的 dlc.dat 也可以)。只要本节点有规则用到 geosite 就必须填写,否则构建失败,报 a geosite matcher is used but no geosite file is configured。和 geoip 一样,只在被引用时读取。
rulearray of tables否[]路由规则,每个 [[node.route.rule]] 块一条,从上到下依次检查,第一条匹配的规则决定出站。键名是单数:rules 会被当作未知字段。

[[node.route.rule]] · 详见 路由

键类型必填默认值说明
outboundstring是—匹配的流使用的出站 tag。它必须在出站池里(direct、block、freedom、blackhole,或者顶层某个 [[outbound]] 的 tag),否则构建失败,报 route references unknown outbound tag: <tag>。不写时解析失败,报 missing field 错误。
domain_suffixarray of strings否[]匹配该域名本身及其所有子域名:example.com 匹配 example.com 和 www.example.com,不匹配 notexample.com。katana 会把每一项转为小写。匹配对象是客户端请求的域名,以及嗅探到的 TLS SNI 或 HTTP Host。不要写开头的点:.example.com 什么都匹配不到。
cidrarray of strings否[]目标 IP 段,IPv4 或 IPv6 均可,例如 192.0.2.0/24 或 2001:db8::/32。只写地址表示单个主机。解析是严格的:主机位不为零(192.0.2.1/24)或前缀长度超出范围都会报错 invalid cidr "<value>": <reason>。只匹配客户端直接用 IP 指定的目标;katana 在路由之前不解析域名。
portarray of strings否[]目标端口,写成字符串:单个端口 "443",或闭区间 "6881-6889"。数字两边的空格会被忽略。写成 TOML 整数(例如 80)会解析失败,报 invalid type: integer,后面跟着 expected a string。不是合法端口的值报 invalid port spec: "<value>";下界大于上界的区间报 invalid port spec: "<value>" has a lower bound above its upper bound。
geositearray of strings否[][node.route].geosite 文件中的条目:写 code,或写 code@attr 只保留带该属性的域名,例如 category-ads-all、google@ads。代码和属性都不区分大小写。和 domain_suffix 一样,匹配请求的域名和嗅探到的域名。文件中没有的代码报错 geosite code not found: <code>;没有任何域名带有的属性不会报错,但什么都匹配不到。
geoiparray of strings否[][node.route].geoip 文件中的条目:写 code,例如 private、cn;或者写 !code,匹配该列表之外的所有 IP。代码不区分大小写。和 cidr 一样,只匹配用 IP 指定的目标,!code 也不会匹配域名目标。文件中没有的代码报错 geoip code not found: <code>。

[[outbound]] · 详见 出站

键类型必填默认值说明
tagstring是—供 [node.route].default 和 [[node.route.rule]].outbound 引用的名字。在所有 [[outbound]] 之间必须唯一,且不能是内置 tag direct、freedom、block、blackhole 之一;两种错误都会报 duplicate/reserved outbound tag <tag>。在所有引用处都区分大小写。
protocolstring (enum)是—要构建的客户端,不区分大小写:socks(别名 socks5)、http、vmess、vless、shadowsocks(别名 ss)、wireguard(别名 wg),或 direct(别名 freedom)。其他值报 unknown outbound protocol "<name>"(名字以小写显示)。这里没有 trojan、hysteria2 或 blackhole 协议;要丢弃流量,请使用内置的 block tag。
serverstring视情况—上游主机:IP 地址或域名。对 wireguard 来说是对端 UDP endpoint 的主机。除 direct(忽略此项)外,所有协议都必须填写。IPv6 地址不要加方括号。域名在建立连接时用 [dns] 解析器解析;wireguard 例外,它的 endpoint 域名在隧道启动时用系统解析器解析。为空时报 outbound needs a non-empty server and non-zero port。
portu16视情况—上游端口;对 wireguard 来说是对端的 UDP 端口。除 direct 外,所有协议都必须填写且不能为 0。为 0 或不写时报 outbound needs a non-empty server and non-zero port (got "<server>":0)。该检查在读取 protocol 之前进行,所以没有 server 或 port 且协议名拼错时也会报这个错误。
usernamestring否—仅用于 socks 和 http。SOCKS5 用户名/密码认证,或 HTTP Basic Proxy-Authorization。只有同时设置了 password 才生效;两者缺一时,客户端完全不做认证。
passwordstring视情况—对 socks 和 http,是与 username 配套的密码。对 shadowsocks 为必填,存放密钥:经典加密方式下是密码,2022- 加密方式下是 base64 编码的 PSK,也可以写成 iPSK:uPSK 链。shadowsocks 缺少此项时报 shadowsocks outbound <tag> needs a password。2022 密钥短于该加密方式的密钥长度时报 shadowsocks-2022: PSK too short (…),base64 无效时报 decode PSK: …。
uuidstring视情况—vmess 和 vless 必填:上游服务器上的账户 UUID。缺少时报 outbound <tag> needs a uuid;格式错误时报 outbound <tag>: uuid is not a valid UUID,错误信息不会回显该值,因为它是凭据。
securitystring (enum)否"auto"仅用于 vmess。正文加密方式,不区分大小写:auto、aes-128-gcm 或 aes128gcm 表示 AES-128-GCM;chacha20-poly1305 或 chacha20poly1305 表示 ChaCha20-Poly1305。auto 始终等于 AES-128-GCM。none、zero 及其他值报 unsupported vmess security "<name>"。
methodstring (enum)视情况—shadowsocks 必填;名字决定使用哪一代协议。SIP022:2022-blake3-aes-128-gcm、2022-blake3-aes-256-gcm、2022-blake3-chacha20-poly1305,必须全部小写、一字不差。经典 AEAD,不区分大小写:aes-128-gcm、aes-256-gcm、chacha20-poly1305(或 chacha20-ietf-poly1305)、xchacha20-poly1305(或 xchacha20-ietf-poly1305),以及别名 aead_aes_128_gcm、aead_aes_256_gcm、aead_chacha20_poly1305。其他值(包括空值或不写)报 unsupported shadowsocks cipher "<name>"。
global_paddingbool否false仅用于 vmess。开启 VMess 的 global padding 选项:每个数据块附带 0 到 63 字节的填充,以少量带宽为代价隐藏准确的载荷长度。
address_familystring (enum)否"auto"出站可以使用哪些解析得到的地址,适用于所有协议:auto(保持解析器给出的顺序)、ipv4_only、ipv6_only、prefer_ipv4、prefer_ipv6。不区分大小写,忽略首尾空格,- 视为 _,空字符串等于 auto,并接受以下别名:ipv4、v4、4、ipv4only;ipv6、v6、6、ipv6only;prefer_v4、ipv4_prefer、v4_prefer;prefer_v6、ipv6_prefer、v6_prefer。对 direct 和 wireguard 作用于目标地址,对其他协议作用于 server 解析出的地址。其他值报 outbound <tag> invalid address_family "<value>"。
private_keystring视情况—wireguard 必填:本端的 Curve25519 私钥,即 wg-quick 文件中的 PrivateKey。32 字节,写成带填充的标准 base64(wg genkey 的输出)或 64 位十六进制。缺少时报 wireguard outbound <tag> needs a private_key;编码错误时报 wireguard outbound <tag> private_key: invalid WireGuard key: expected base64 or hex encoding of 32 bytes。
public_keystring视情况—wireguard 必填:对端的公钥,即 [Peer] 段的 PublicKey。编码方式和错误形式与 private_key 相同。etemenanki-app 中这个键叫 peer_public_key。
pre_shared_keystring否—仅用于 wireguard。可选的预共享密钥,即 PresharedKey。编码方式与 private_key 相同;编码错误时报 wireguard outbound <tag> pre_shared_key: …。只有对端为你配置了预共享密钥时才填写。etemenanki-app 中写作 preshared_key。
local_addressarray of strings视情况—wireguard 必填,至少一项:Address 行中的隧道内地址,例如 ["10.8.0.2/32", "2001:db8:a::2/128"]。从 / 开始的部分会被丢弃,所以前缀长度可写可不写。没有 IPv6 地址时隧道无法访问 IPv6 目标,反之亦然。错误信息:wireguard outbound <tag> needs at least one local_address、wireguard outbound <tag> invalid local_address "<value>": …。
mtuinteger否1420仅用于 wireguard。隧道内 IP 包的最大字节数;用户态 TCP 协议栈据此确定分段大小。不做范围检查。如果小请求正常、大流量传输卡住,就把它调低(例如 1280)。
keepaliveu16否—仅用于 wireguard。持续保活(persistent keepalive)的间隔秒数,即 PersistentKeepalive。不写或写 0 表示关闭。本机位于 NAT 或有状态防火墙之后时应当设置(常用 25)。
reservedarray of integers否—仅用于 wireguard。恰好三个字节,每个取值 0 到 255,写入每个发出的 WireGuard 包头的第 1 到 3 字节,与 Xray 的 reserved 相同。只有服务方要求时才设置。长度不是 3 时报 wireguard outbound <tag> reserved must be exactly 3 bytes;大于 255 的值会导致解析失败。