mistgate 文档
中文

在管理后台:协议配置

AmneziaWG

了解 AmneziaWG 3.1 和 2.0 协议配置、参数和伪装样式、节点的用户态与内核后端,以及用户导入 AmneziaVPN 的设备密钥。

本页内容

AmneziaWG 是经过混淆的 WireGuard:隧道速度相同,但网络传输中的数据包看起来不像 WireGuard。与 Hysteria2 不同,每台设备都有自己的密钥:每位用户的手机或电脑各使用一个密钥,并将配置导入 AmneziaVPN(或其他 AmneziaWG 应用)。本页介绍 AmneziaWG 协议配置、节点后端和设备;如何创建协议配置并部署到节点,请参阅协议配置。

一个协议配置,一个版本,一个端口#

  • 一个协议配置对应一个 AmneziaWG 接口,使用一个 UDP 端口和一个协议版本。
  • 一台设备(一个密钥)属于一个协议配置,可在运行该配置的每个节点上使用。设备配置在这些节点之间只有地址和节点公钥不同。
  • 每个节点在此协议配置中都有自己的服务器密钥:一个节点遭到入侵,不会暴露其他节点的密钥。
  • 用户需要同时使用两个版本,或需要同时使用经 WARP 和直连的协议配置时,每个协议配置都要有一台单独设备。

协议版本#

版本 适用客户端 功能
AmneziaWG 3.1 当前客户端(默认值) 头部保护、随机尾部、可调计时器,以及 2.0 的所有功能。
AmneziaWG 2.0 仅适用于旧版客户端 垃圾包、填充、头部范围和特征包。3.1 的保护功能关闭。

不提供旧版协议(1.5、1.0)。切换版本时,系统会为该版本构建新的混淆参数块(2.0 不接受 3.1 字段),因此这是关键更改。

编辑器会显示所选版本的最低兼容客户端。旧版客户端不会拒绝配置,而是丢弃不认识的密钥;随后握手会失败,但不会给出提示。

版本 最低兼容客户端
3.1 AmneziaVPN 5.0.1.5、AmneziaWG Android v3.1.20260814、AmneziaWG Windows 3.1.0、AmneziaWG Apple v3.1.3、Mihomo v1.19.30
2.0 AmneziaVPN 4.8.12.9、AmneziaWG 2.0.0、Mihomo v1.19.14

用户获得的每份配置旁边都会显示相同列表。

协议配置编辑器#

除了常规表单外,AmneziaWG 协议配置还有两个专属卡片。

协议版本卡片用于选择版本,显示最低兼容客户端,并提供粘贴 .conf:粘贴来自 AmneziaVPN 或其他 AmneziaWG 客户端的配置后,表单会读取其版本、MTU 和混淆值。此操作在浏览器中执行;粘贴配置中的密钥不会被使用或保存。粘贴 1.5 或 1.0 配置时,表单会切换到 2.0;普通 WireGuard 配置没有可读取的内容。

首包伪装样式决定观察者看到的握手内容:

样式 看起来像 常用端口
QUIC QUIC Initial。首包较大,约 2.4 KB 的配置内容,无法放入二维码。 443
QUIC(curl) curl 版本的 QUIC,大小相同。 443
DNS(默认值) DNS 查询。 53
STUN 类似通话请求中的绑定请求。 任意
WebRTC 带 ICE 属性的 STUN。 任意
SIP SIP 消息。 5060
NTP 48 字节的时间请求。 123
RTP 语音流数据包。 任意
SSDP 设备发现搜索。 1900
DTLS DTLS 问候消息。 任意
自定义 你在 I1–I5 中填写的数据包。 任意

端口上通常不会出现所选流量特征时,这种样式会显得突兀,编辑器会提示。选择样式只会更改特征包 I1–I5;客户端在握手前发送这些包,节点会忽略它们,因此不会导致已签发的配置失效。

  • 数据包中的域名:QUIC、DNS 和 SIP 数据包中携带的主机名。留空时,每台设备会从内置列表中选择名称(随机、列表)。
  • 每台设备使用独立特征:每台设备都使用不同的所选样式特征包;每次显示该设备配置时都会保持一致。关闭时,所有设备共用一组特征包。STUN、WebRTC 和 DTLS 对所有设备使用相同字节,因此此开关对它们没有影响。
  • 重新生成整组参数会使用新的随机值替换垃圾包、S、H、计时器和头部保护密钥。之后客户端需要新参数;保存时会重新签发设备配置。
  • 伪装度 N/100评估的是设置,而不是审查者:分数越高,表示设置中没有已知特征。点击后会显示该版本的起始分数,以及每项增减分原因。

设置#

节点和每个客户端都必须使用相同的关键设置;更改后,此协议配置的所有设备都会标记为过时(请参阅协议配置)。

基础

设置 范围和默认值 是否关键 作用
UDP 端口 1–65535;新建协议配置会在 10000–60000 之间随机选择(不会选 51820、51821 或 55424) 是 节点在此端口监听。随机端口会重新选择端口。
MTU 1200–1420,默认 1280 否 节点和 .conf 中的隧道 MTU。MTU + S4 + 80 必须不超过 1500。
出口 直连或WARP 否 请参阅 WARP。
客户端网段(IPv4) 私有 /16–/24 网段 是 节点使用 .1,每台设备分配一个地址。协议配置部署到节点或添加设备后,不能更改。
客户端网段(IPv6) 来自 fc00::/7 的 /64 网段,或留空 是 留空表示隧道内不使用 IPv6。与 IPv4 网段一样,之后不能更改。

混淆

设置 范围 是否关键 作用
垃圾包(Jc) 0–128 否 每次握手前由客户端发送;通常为 4–12。
垃圾包大小,最小值(Jmin) / 最大值(Jmax) 0–1280 字节 否 Jmax 必须低于 MTU。
初始化包填充(S1)、响应包填充(S2) 0–150 字节 是 添加到握手消息中的字节数。
Cookie 包填充(S3)、数据包填充(S4) 0–64 字节 是 S4 会添加到每个数据包中,应保持较小。
初始化包头部(H1)至数据包头部(H4) 一个数值或 lo-hi 范围 是 消息类型值。1、2、3、4 是普通 WireGuard 的值。四个范围不能重叠。
特征包 1(I1)至(I5) 每个最多 3500 个字符 否 标签 b、r、rc、rd、t。由所选样式填入;在此处输入内容会将样式改为自定义。I1 在此处;I2–I5 位于高级部分。

高级(2.0 会忽略 3.1 字段)

设置 是否关键 作用
特征种子 否 不是敏感信息。它与设备 ID 一起生成可重复的设备专属数据包;新种子会在下次显示配置时更改这些数据包。
头部保护密钥 是 仅适用于 3.1。节点和每个客户端使用相同的 32 字节密钥。加密保存。
随机尾部 是 仅适用于 3.1。两端必须保持一致。
关闭 Cookie 应答 否 仅适用于 3.1,由节点端控制。开启后会移除对握手洪泛的保护。
额外填充 否 仅适用于 3.1。添加到数据包中的随机字节范围。
密钥轮换间隔、密钥轮换超时、拒绝时限、保活超时、握手尝试次数 否 仅适用于 3.1。计时器,值为单个数值或范围。
持续保活 否 写入客户端配置;应低于 30 秒(许多 NAT 的 UDP 超时时间)。2.0 使用单个数值;Mihomo 使用第一个值。

编辑时,编辑器会针对合法但风险较高的值发出警告:垃圾包过多、Jmax 不低于 MTU、当前 MTU 下 S4 无法满足 1500 的限制(并提示可适用的 MTU)、使用普通 WireGuard 的 H 值、H 范围过窄、关闭 Cookie 应答、保活时间超过 NAT 超时,或在不常用的端口上使用某种样式。

客户端网段和地址#

每个 AmneziaWG 协议配置都有自己的客户端网段,两个 AmneziaWG 协议配置的网段不能重叠。面板按顺序分配网段:先是 10.66.4.0/22 和 fd66:66:0:1::/64,然后是 10.66.8.0/22 和 fd66:66:0:2::/64,依此类推;10.66.0.0/16 可容纳其中 63 个。创建协议配置时未指定网段(在编辑器、API 或创建副本时)的,会使用第一个空闲网段。新协议配置在编辑器中的网段字段默认留空(「留空则自动分配一个空闲的客户端网段。」);留空后,新协议配置会获得第一个空闲网段,并在其页面中显示。手动输入的网段会保留;如果其他协议配置已使用该网段,字段会显示「与协议配置……的网段重叠」。

节点使用 .1;每台设备会获得此协议配置中的下一个空闲地址。网段已满时,系统会拒绝添加新设备(「协议配置的客户端网段已满」);请移除未使用的设备或使用其他协议配置。协议配置部署到节点或添加设备后,网段会固定不变:每份已签发配置都会使用其中的地址。

节点后端:用户态或内核模块#

节点会以两种方式之一运行 AmneziaWG;该设置适用于节点上的所有 AmneziaWG 协议配置。此设置位于节点的设置中的AmneziaWG 后端卡片;首次将 AmneziaWG 协议配置部署到节点时,也会询问相同问题。

后端 说明
自动 内核模块已加载时使用内核模块,否则使用用户态。节点不会安装任何内容。
内核模块 速度更快。主机必须安装 amneziawg 模块;否则节点上的 AmneziaWG 协议配置不会启动。
用户态 Agent 内运行 amneziawg-go。只要有 /dev/net/tun 就可以使用,速度稍慢。

更改会立即生效;已连接的设备会重新连接。当前运行方式显示节点报告的后端,例如「用户态 · amneziawg-go v3.1…」。

准备内核模块#

节点会从源代码构建模块,并以 root 身份安装软件包。可以采用两种方式。

通过面板(支持此功能的 Agent)。选择内核模块并点击保存。面板会先询问节点:

  • 模块已加载:只需切换设置;
  • 可以构建:窗口要在……上构建内核模块吗?会说明后续操作。节点会安装构建所需内容(Ubuntu 上的 dkms、make、gcc 和当前运行内核的头文件:数百 MB),然后构建并加载模块。构建通常需要 1–5 分钟。如果系统软件包更新已在运行,Mistgate 最多等待 30 分钟,直到 apt 释放锁。整个任务的上限为 45 分钟。此期间 AmneziaWG 会继续照常运行。模块就绪后,节点会切换到新模块,已连接设备只会重新连接一次;
  • 无法在此处构建:卡片会说明原因并显示手动命令。

卡片会显示构建进度:「正在准备模块…(已运行 N 分钟)」,然后显示模块已就绪,或显示失败、原因和重试。构建失败不会更改设置:节点会保留原来的后端。构建日志位于节点上:

Shell
journalctl -u mistgate-awg-prepare

手动操作:以 root 身份在节点上运行命令。卡片会显示带有 --yes 的命令:对于无法自行构建模块的旧版 Agent,会直接显示;其他 Agent 则会在手动执行下显示。不带 --yes 时,该命令只会输出计划:

Shell
mistgate-node awg prepare-kernel          # 仅显示计划,不执行
mistgate-node awg prepare-kernel --yes    # 执行操作(等待 apt 最多 30 分钟;硬性上限为 45 分钟)
mistgate-node awg prepare-kernel --verify-only   # 检查已存在的模块

构建需要 Ubuntu 或 Debian、节点能够识别的内核版本、systemd,以及关闭 Secure Boot(内核会拒绝未签名的模块)。容器环境(OpenVZ、LXC、Docker 等)中无法使用:请改用用户态。添加协议配置的对话框会根据诊断的内核头文件检查结果,说明节点是否已准备好安装模块。

只有所有者可以启动模块构建。

节点上协议配置的状态行#

节点的协议配置标签页中,每个 AmneziaWG 协议配置都会显示节点上次报告的信息:后端、设备数量、在线设备数量(最近 190 秒内完成握手)、从未连接的设备数量,以及最近一次握手时间。没有用户能够连接时,会显示两种原因提示:

  • 「没有数据包抵达端口」:服务商或防火墙封锁了此 UDP 端口。请尝试其他端口。
  • 「数据包已抵达,但握手未完成」:节点上的混淆参数与配置不一致,通常是使用了过时的配置。

诊断中的AmneziaWG 后端检查会说明其他问题:没有可用后端、旧服务单元隐藏了 /dev/net/tun、缺少内核模块,或主机防火墙(通常是 Docker 的 FORWARD 策略)丢弃了客户端发往互联网的数据。报告 unit_outdated 时,请在运行状况 → 诊断中应用刷新服务单元;Agent 版本过旧而无法提供此修复时,请使用当前二进制运行一次 mistgate-node install。请参阅运行状况。

设备和密钥#

管理员可在用户卡片中创建设备;启用自助功能时,用户也可在自己的页面上创建设备(请参阅用户页面)。

在用户卡片的设备 → AmneziaVPN 密钥下,点击添加设备会打开添加设备……:

  • 如果用户所属分组中有多个部署在节点上的 AmneziaWG 协议配置,则显示协议配置;
  • 平台:iPhone / iPad、Android、Windows、Mac、Linux 或其他;
  • 名称:最多 40 个字符;留空时使用平台名称。

点击创建会生成密钥对和隧道地址,并立即打开配置窗口。设备会计入用户的设备上限。达到上限、用户已停用、用户已关闭 AmneziaVPN、协议配置不属于用户的分组或未部署到其可使用的任何节点、客户端网段已满时,系统会拒绝添加设备。如果所有可用节点之前都已连接,但没有一个报告支持 AmneziaWG,也会拒绝添加;请先更新其中一个节点上的 Agent。

已有设备点击显示密钥会打开同一窗口:

  • 显示 .conf 的二维码(在 AmneziaWG 或 AmneziaVPN 中点击「+」→「扫描二维码」);配置太长而无法生成二维码时,会显示说明;
  • 协议配置部署到多个节点时,显示节点,并为每个节点提供一份配置;
  • 下载 .conf、复制 vpn:// 密钥、复制 .conf 文本;
  • 最低兼容客户端和此配置的任何备注;
  • 更换密钥:为同一设备和地址生成新的密钥对。旧密钥会立即失效,用户需要将新密钥重新添加到应用;
  • 删除:移除设备;其密钥会在所有节点上失效。

打开配置后,系统会将该设备标记为已有当前配置:更改协议配置的关键设置,或更改节点的端口或地址后,设备会显示已过时标记;用户导入新配置后,该标记会消失。

警告

配置包含设备的私钥。只能发送给设备所有者,切勿粘贴到共享聊天中。

vpn:// 密钥和 .conf 文件#

.conf 文件 vpn:// 密钥
可导入到 AmneziaVPN 和 AmneziaWG 应用(也可扫描二维码) AmneziaVPN
MTU 保留 桌面版 AmneziaVPN 会自行设置
大小 大多数样式可放入二维码;QUIC 样式太大 一行文本

在电脑上应导入文件,而不是密钥:使用密钥时,MTU 可能不正确,连接也可能无法使用。

配置包含 AllowedIPs = 0.0.0.0/0, ::/0(通过隧道传输所有流量)和两个 DNS 服务器。服务器取自此节点上适用于用户的 DNS 中最前面的两个普通 IPv4 服务器(所有者允许时为用户针对每个服务器的选择,否则为 DNS 预设);没有此类服务器时,会写入内置的 1.1.1.1 和 8.8.8.8,并在窗口中说明。AmneziaWG 不支持 DNS 分流:所有域名查询都会使用主 DNS 服务器。DNS 会写入密钥:用户在服务器页面上选择其他 DNS 后,密钥本身不会更改,但必须点击获取新密钥才能使用新的 DNS(在此之前设备会提示「需要新密钥」)。请参阅 DNS。

AmneziaVPN 应用#

在手机上:打开 AmneziaVPN,点击「+」,粘贴密钥(或扫描二维码),然后点击「继续」。在电脑上:选择 AmneziaVPN →「+」→「连接设置文件」→ 选择已下载的 .conf。用户页面会根据用户的语言和平台显示这些步骤。

通过订阅使用 AmneziaWG#

基于 mihomo 内核的应用也可以使用 AmneziaWG。用户启用了 AmneziaVPN,且其应用获取 Mihomo 格式时,订阅中会包含其 AmneziaWG 服务器。Mihomo 应用没有设备身份,因此同一用户的所有 Mihomo 应用会共用每个协议配置的一个密钥;密钥会在首次获取时生成,并在设备上限中计为一个订阅设备。请参阅订阅。

在 GitHub 上编辑此页