越来越多的人选择自行运行 VPN 服务,而不是依赖付费的现成服务:这样更便宜、更能保护隐私,而且还能完全控制服务器。对于网络封锁严格的地区来说,AmneziaWG 是最有效的选择之一。AmneziaWG 是由 Amnezia 项目基于 WireGuard 开发的协议。
传统的 WireGuard 协议速度快、可靠性高,但其数据包结构固定,握手过程可预测,因此深度包检测 (DPI) 系统可以可靠地识别并拦截这些数据包。AmneziaWG 解决了这个问题:它在普通的 WireGuard 连接中添加垃圾数据包,随机化数据包头部,并改变握手字段的大小——这样一来,WireGuard 的特征签名就消失了,流量不再与普通的 UDP 流量区分开来。
已经在运行经典隧道,想知道是否值得切换?不妨将其与Linux 上的 VPN 服务器设置中的纯 OpenVPN/PPTP 设置进行比较:PPTP 还是 OpenVPN?,或者与如何在服务器上设置 WireGuard VPN 的原始 WireGuard(无混淆)进行比较:如何设置 WireGuard VPN。
本指南将手动搭建一个 AmneziaWG 服务器,无需 Docker 或 Web 控制面板——尽可能减少 VPS 本身的资源占用,所有配置均通过命令行完成。它是最轻量级的方案,非常适合预算有限的 VPS,因为它不需要图形用户界面、数据库和反向代理。下面的示例服务器使用占位符 IP 地址——请将其替换为您自己的 VPS 地址。
你需要准备:一台运行 Ubuntu 22.04/24.04 或 Debian 11/12 的 VPS、root 权限以及 VPS 的 IP 地址。不需要域名——AmneziaWG 不使用证书,因此无需续订证书,DPI 也不会将其标记为 TLS 握手。
还没有服务器?请参阅“如何订购服务器”。
正在连接服务器
Windows(PuTTY)
打开 PuTTY,在主机名字段中输入您的 VPS IP 地址,将端口设置为 22,然后使用您的 VPS 提供商通过电子邮件发送给您的密码以 root 用户身份登录。
服务器 IP 地址:您的 IP 地址
以 root 用户身份登录
密码:您的密码
1. 打开 PuTTY,在主机名字段中输入您的 VPS IP 地址。
2. 将端口设置为 22。
3. 输入以 root 用户身份登录。
4. 使用您的 VPS 提供商通过电子邮件发送给您的密码。
结果应该如下:
有关通过 PuTTY/SSH 连接的详细步骤,请参阅“如何通过 SSH 连接到 Linux 服务器”。
Linux / macOS(终端)
ssh root@YOUR_SERVER_IP
以下所有命令均在服务器上的同一 SSH 会话中运行——这涵盖了第 2 至 5 节,以及第 9 节中的服务器端检查。第 6 至 8 节(安装和配置 VPN 客户端)则在您自己的 Windows/macOS/Linux 设备上执行,因为 VPN 需要在该设备上运行;这些章节中明确说明了哪些行(如果有)仍然需要与服务器交互。
准备服务器
更新系统
安装任何软件之前,请刷新软件包列表并升级已安装的软件包:
apt update -y && apt upgrade -y
如果此操作升级了内核,请在构建第 3 节中的 AmneziaWG 内核模块之前重启系统,否则 DKMS 可能会使用错误的内核头文件进行构建,导致模块加载失败。(有关 apt 和 Linux 软件包管理器的工作原理,请参阅Linux 软件包管理器。)检查:
cat /var/run/reboot-required
启用IP转发
此设置允许服务器将客户端的数据包转发到互联网——如果没有此设置,隧道将建立,但不会有任何流量通过它。
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/00-amnezia.conf
sysctl --system
第一条命令创建一个专用配置文件;第二条命令应用该文件,而无需重启服务器。
配置防火墙(UFW)
有关 UFW 规则的更多信息,请参阅“在 Linux 上配置防火墙”。
打开您需要的两个端口:22/tcp 用于 SSH(跳过此规则可能会导致您失去对服务器的访问权限)和 42666/udp,AmneziaWG 将监听该端口。
apt install ufw -y
ufw allow 22/tcp
ufw allow 42666/udp
ufw --force enable
ufw status
ufw 状态输出中这两条规则都应该显示为 ALLOW。
安装 AmneziaWG
Debian 不直接支持 Ubuntu 风格的 PPA,因此必须手动添加软件源,而不是使用 add-apt-repository 命令。这在 Ubuntu 上也是同样的操作。
手动添加存储库
echo "deb [arch=amd64] https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu jammy main" > /etc/apt/sources.list.d/amnezia.list
添加 GPG 签名密钥
使用已弃用的密钥环文件,而不是已弃用的 apt-key 命令,并获取 PPA 的真实签名密钥(指纹 75C9DD72C799870E310542E24166F2C257290828):
apt install -y gnupg2
gpg --keyserver keyserver.ubuntu.com --recv-keys 57290828
gpg --export 57290828 | tee /usr/share/keyrings/amnezia.gpg > /dev/null
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/amnezia.gpg] https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu jammy main" > /etc/apt/sources.list.d/amnezia.list
更新和安装
apt update
apt install -y amneziawg
验证模块是否已加载
modprobe amneziawg
lsmod | grep amnezia
生成服务器和客户端配置
安装辅助工具
安装二维码依赖项,然后创建一个专用工作目录,并将社区配置生成器脚本下载到该目录中:
apt install -y python3-qrcode
mkdir -p ~/awg && cd ~/awg
wget -O awgcfg.py \
https://gist.githubusercontent.com/remittor/8c3d9ff293b2ba4b13c367cc1a69f9eb/raw/awgcfg.py
如果你的发行版软件仓库中没有 python3-qrcode,请回退到使用 `pip3 install qrcode --break-system-packages` 命令(Debian 12+/Ubuntu 24.04 默认会阻止非托管的 pip 安装,因此需要此标志)。不要同时运行两个安装命令,选择其中一个即可。
生成服务器配置
创建 /etc/amnezia/amneziawg/awg0.conf 文件。您可以将隧道内部子网和 UDP 端口保留为默认值,也可以设置您自己的值:
python3 awgcfg.py --make /etc/amnezia/amneziawg/awg0.conf \
-i 10.10.8.1/24 -p 42666
-i 标志设置隧道的内部网络地址和掩码;-p 设置服务器的 UDP 端口(与步骤 2.3 中打开的端口相同)。
创建客户端配置模板
python3 awgcfg.py --create
这样就把模板保存在了构建各个客户端配置的同一文件夹中——它已经包含了服务器的公钥、其 IP 地址以及将 AmneziaWG 与普通 WireGuard 区分开来的混淆参数(Jc、Jmin、Jmax、S1、S2、H1-H4)。
添加客户
每个设备创建一个条目——名称可以是任何内容,例如设备名称:
python3 awgcfg.py -a "laptop"
python3 awgcfg.py -a "phone"
生成客户文件和二维码
python3 awgcfg.py -c -q
~/awg 文件夹现在将包含 laptop.conf 和 phone.conf 等文件,以及匹配的 PNG 二维码,您可以直接将其扫描到移动应用程序中。
~/awg 文件夹现在将包含 laptop.conf 和 phone.conf 等文件,以及匹配的 PNG 二维码,您可以直接将其扫描到移动应用程序中。
启动服务并启用自动启动
启动 awg0 接口并启用开机自动启动功能:
systemctl enable --now awg-quick@awg0
systemctl restart [email protected]
systemctl status [email protected]
设备启动时应显示“已启用(已退出)”。如果控制台显示日志而“卡住”,请按 Q 键退出。
使用以下命令查看活跃节点列表和每个节点的流量:
awg show
从 Windows 连接
本节中的所有操作都在您的 Windows 电脑上完成,而非通过 SSH 连接——VPN 客户端必须安装在实际使用 VPN 隧道的设备上。唯一需要操作服务器的步骤是 6.2 节中的 scp 下载,而且即使是这个命令也是在您的电脑上输入的,它会下载服务器在第 4 节中已经生成的文件。
安装客户端
AmneziaWG 有一个专用的 Windows 应用程序——它的界面与标准的 WireGuard 客户端类似,但它能够识别混淆参数。请从项目的官方仓库下载安装程序:
https://github.com/amnezia-vpn/amneziawg-windows-client/releases
上面的链接是维护良好的 Windows 客户端的发布页面——请从那里下载最新的 .msi/.exe 文件。请在浏览器中打开此页面,而不是粘贴到终端中的命令。
运行安装程序并按照设置向导的步骤操作;默认设置无需更改。
导入配置
将客户端配置文件从服务器复制到您的计算机——最简单的方法是使用 scp 命令,在您的计算机上用 PowerShell 运行,而不是在服务器上运行:
scp root@YOUR_SERVER_IP:~/awg/laptop.conf .
在 AmneziaWG 应用程序中,点击“从文件导入隧道”,选择 laptop.conf,然后打开新隧道旁边的开关。
从 macOS 连接
有两种支持的选项:
- AmneziaWG(Mac App Store):一款轻量级客户端,适用于 macOS 12 及更高版本。在 App Store 中搜索“AmneziaWG”并安装,然后使用“从文件导入隧道”并选择您的 .conf 文件——工作流程与 Windows 客户端相同。
- AmneziaVPN(完整应用程序,macOS 14+):如果您更喜欢使用功能齐全的 Amnezia 应用程序而不是轻量级的 AmneziaWG 客户端,请从 github.com/amnezia-vpn/amnezia-client/releases/latest 下载 .pkg。
如果需要,请先复制客户端配置,与步骤 6.2 相同:
scp root@YOUR_SERVER_IP:~/awg/laptop.conf .
从 Linux 连接
在Linux台式机或笔记本电脑上,您有两种选择:
- GUI:从 github.com/amnezia-vpn/amnezia-client/releases 安装完整的 AmneziaVPN 桌面客户端,然后以与在 Windows/macOS 上相同的方式导入 .conf 文件。
- CLI,使用与服务器上相同的 amneziawg-tools(awg / awg-quick):
apt install -y amneziawg
cp laptop.conf /etc/amnezia/amneziawg/awg0.conf
awg-quick up awg0
运行此代码断开连接。
awg-quick down awg0
要在登录时自动启动隧道,请将其启用为一项服务:
systemctl enable --now awg-quick@awg0
验证连接
在第 6、7 或 8 节中激活隧道后,返回到您自己的设备(而非 SSH 会话),并在浏览器中打开任意“我的 IP 地址查询”工具——显示的地址应与您的 VPS 的 IP 地址匹配。或者,您也可以在 SSH 会话内部进行验证,在服务器上运行 `awg show` 命令,并确认客户端对等方显示最近一次握手和非零流量。
文献参考:
|
领域 |
价值 |
|
地址 |
YOUR_TUNNEL_IP(客户端在隧道内的地址,例如 10.10.8.2/32 — 在步骤 4.4 添加客户端时自动分配) |
|
端点 |
YOUR_SERVER_IP:42666(服务器的外部 IP 地址以及客户端连接的 UDP 端口。) |
|
DNS |
8.8.8.8 |
|
Jc / Jmin / Jmax |
握手之前发送的“垃圾”数据包的数量和大小——服务器和客户端可能不同,但不会中断连接。 |
|
S1 / S2 |
握手填充字段的大小——服务器和每个客户端之间必须逐字节匹配 |
|
H1-H4 |
用于将协议伪装成普通流量的数据包类型头部也必须完全匹配,并且彼此之间必须唯一。 |
隧道两端只需要 S1/S2 和 H1-H4 相同;Jc、Jmin 和 Jmax 纯粹是关于每一方如何填充自己的传出垃圾流量,因此客户端和服务器的值可以合法地不同,就像上面的示例一样。
结语
按照本指南操作,您的 VPS 将运行自己的 AmneziaWG 服务器:AmneziaWG 是一种与 WireGuard 兼容的协议,它对流量进行混淆,使得深度包检测 (DPI) 系统更难将其与普通的 UDP 流量区分开来,而普通的 WireGuard 流量则难以区分。该服务以 systemd 单元 awg-quick@awg0 的形式运行,即使服务器重启,无需您进行任何操作,服务依然存在。
生成的 .conf 文件和 ~/awg 中的二维码不仅适用于 Windows 客户端,还可以导入到适用于 Android、iOS、macOS 和 Linux 的 AmneziaWG 或 Amnezia 应用程序,以及 Keenetic 和 OpenWrt 路由器。
随时可以通过重复步骤 4.4–4.5(python3 awgcfg.py -a "name", 然后 awgcfg.py -c -q)并使用 systemctl restart [email protected]重启接口来添加新客户端。
服务器运行后,以下几个习惯值得保持:
- 保持系统补丁更新。定期重新运行 apt update -y && apt upgrade -y,并在内核升级后重启,以便 DKMS 针对新内核重新构建 amneziawg 模块。
- 请备份 ~/awg 目录。该目录的 awg0.conf 文件中保存着每个客户端的私钥和服务器自身的密钥对;丢失该目录意味着需要为每个设备重新生成配置。
- 立即撤销丢失的设备。从 /etc/amnezia/amneziawg/awg0.conf 中移除相应的 [Peer] 块,然后运行 systemctl restart [email protected].
如果连接始终无法建立,请按以下顺序检查:
- 服务状态(systemctl status) [email protected])
- 防火墙规则(ufw 状态 — 端口 42666/udp 必须打开)
- 如果接口甚至无法启动,则检查 DKMS/模块状态(dkms status,lsmod | grep amnezia)
- 服务器上活跃对等节点的列表(awg show)
- 客户端配置指向正确的外部服务器 IP 地址
在决定使用 AmneziaWG 之前,想将其与其他方案进行比较?请参阅“ Linux 上的 VPN 服务器设置:PPTP 还是 OpenVPN?”以及“如何在服务器上设置 WireGuard VPN”。如果您只需要一个简单的代理,而不是完整的 VPN 隧道,那么在 CentOS/ArchLinux 上配置 3proxy是一个更轻量级的选择。VPN 上线后,如需加强服务器安全,请参阅“ Linux 用户:管理和权限”。