知识库 使用 Profitserver 服务的简单说明
主要 知识库 AmneziaWG 服务器部署指南

AmneziaWG 服务器部署指南


越来越多的人选择自行运行 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 地址。  

默认的 PuTTY 配置窗口,在输入任何连接详细信息之前。

2. 将端口设置为 22。 

会话已填充 VPS IP 地址和端口 22,已保存的会话“我的 VPS”已选中,可以单击“打开”。

3. 输入以 root 用户身份登录。 

打开一个新的 PuTTY 终端窗口,建立 SSH 会话并提示输入登录用户名。

4. 使用您的 VPS 提供商通过电子邮件发送给您的密码。

输入 root 后,PuTTY 会提示输入帐户密码。

结果应该如下:

登录成功:Debian 每日消息横幅,然后是 root shell 提示符 (root@copywr:~#)。

有关通过 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
apt upgrade 在系统更新期间下载新的内核软件包 (linux-image-6.1.0-52-amd64)。 apt 升级完成:initramfs 已重新生成,受影响的服务已重新启动。

启用IP转发

此设置允许服务器将客户端的数据包转发到互联网——如果没有此设置,隧道将建立,但不会有任何流量通过它。

echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/00-amnezia.conf
sysctl --system

第一条命令创建一个专用配置文件;第二条命令应用该文件,而无需重启服务器。

sysctl --system 应用每个 sysctl.d 配置文件,确认 net.ipv4.ip_forward = 1 现在已激活。

配置防火墙(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。

Ufw 状态确认 IPv4 和 IPv6 均允许 22/tcp 和 42666/udp 流量,防火墙处于活动状态。

安装 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
apt install -y amneziawg 输出:DKMS 正在针对运行中的内核构建 amneziawg 内核模块并完成安装。

验证模块是否已加载

modprobe amneziawg
lsmod | grep amnezia
使用 modprobe amneziawg 和 lsmod 命令确认 amneziawg 模块及其依赖项(curve25519、chacha20poly1305 等)已加载。

生成服务器和客户端配置

安装辅助工具

安装二维码依赖项,然后创建一个专用工作目录,并将社区配置生成器脚本下载到该目录中:

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 安装,因此需要此标志)。不要同时运行两个安装命令,选择其中一个即可。

Awgcfg.py 是一个非官方的第三方社区脚本(由 GitHub 用户“remittor”编写),并非 Amnezia 项目的官方工具。上面的 URL 指向 gist 的原始内容,没有版本哈希值,因此它始终拉取作者上次推送的内容——静默更新(或 gist 被删除)可能会在没有任何警告的情况下破坏您的配置。尽可能将其锁定到特定版本:打开 gist 的版本历史记录,复制您测试过的版本的提交哈希值,然后使用…… 网址 本指南的形式。 

生成服务器配置

创建 /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 中打开的端口相同)。

Awgcfg.py --make 创建 /etc/amnezia/amneziawg/awg0.conf 并检测服务器的主网络接口 (ens3)。

创建客户端配置模板

python3 awgcfg.py --create

这样就把模板保存在了构建各个客户端配置的同一文件夹中——它已经包含了服务器的公钥、其 IP 地址以及将 AmneziaWG 与普通 WireGuard 区分开来的混淆参数(Jc、Jmin、Jmax、S1、S2、H1-H4)。

Awgcfg.py --create 写入 _defclient.config,新的客户端配置将根据该模板生成。

添加客户

每个设备创建一个条目——名称可以是任何内容,例如设备名称:

python3 awgcfg.py -a "laptop"
python3 awgcfg.py -a "phone"
Awgcfg.py -a 注册“laptop”和“phone”客户端,每个客户端都分配了自己的隧道 IP(10.10.8.2/32 和 10.10.8.3/32)。

生成客户文件和二维码

python3 awgcfg.py -c -q

~/awg 文件夹现在将包含 laptop.conf 和 phone.conf 等文件,以及匹配的 PNG 二维码,您可以直接将其扫描到移动应用程序中。

这个社区脚本有一个已知的缺陷:运行它可能会删除您放置在同一文件夹中的其他 .init/state 文件。请确保 ~/awg 目录仅用于存放 AmneziaWG 文件,并在重新生成配置之前将服务器密钥(awg0.conf 中的 [Interface] PrivateKey)备份到其他位置。
生成的 laptop.conf 文件内容:客户端地址、DNS、混淆参数以及指向服务器的 [Peer] 部分。

~/awg 文件夹现在将包含 laptop.conf 和 phone.conf 等文件,以及匹配的 PNG 二维码,您可以直接将其扫描到移动应用程序中。

这个社区脚本有一个已知的缺陷:运行它可能会删除您放置在同一文件夹中的其他 .init/state 文件。请确保 ~/awg 目录仅用于存放 AmneziaWG 文件,并在重新生成配置之前将服务器密钥(awg0.conf 中的 [Interface] PrivateKey)备份到其他位置。

启动服务并启用自动启动

启动 awg0 接口并启用开机自动启动功能:

systemctl enable --now awg-quick@awg0
systemctl restart [email protected]
systemctl status [email protected]

设备启动时应显示“已启用(已退出)”。如果控制台显示日志而“卡住”,请按 Q 键退出。

Systemctl status 确认 awg-quick@awg0.service 已激活(已退出)并已启用,日志中记录了接口的 ip/iptables 设置命令。

使用以下命令查看活跃节点列表和每个节点的流量:

awg show
显示 awg0 接口的混淆参数及其两个已配置的对等体(笔记本电脑和手机),以及每个对等体允许的 IP 地址。

从 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 运行,而不是在服务器上运行:

客户端电脑上有一个空白的 Windows PowerShell 提示符,准备运行下面的 scp 命令。
scp root@YOUR_SERVER_IP:~/awg/laptop.conf .

在 AmneziaWG 应用程序中,点击“从文件导入隧道”,选择 laptop.conf,然后打开新隧道旁边的开关。

从 macOS 连接

所有操作都在您的 Mac 上进行,而不是通过 SSH。下面的 scp 命令是在 Mac 的终端中输入的,用于获取服务器在第 4 部分中生成的配置——它不会在您 VPS 上的 root SSH 会话中运行。

有两种支持的选项:

  • 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 桌面/笔记本电脑上运行,即在该机器上建立单独的 SSH 会话(或本地 shell),而不是第 1 节中 VPS 上的 root SSH 会话。这些命令看起来与服务器端的命令完全相同,因为两端都使用了相同的 amneziawg-tools 软件包,但在此处运行它们会在您自己的机器上安装并启动客户端隧道,而不是在服务器上。

在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 用户:管理和权限”

❮ 上一篇文章 Hysteria2 和 TUIC 设置
下一篇文章❯ Xray VLESS Reality Guide:VPS、Windows、Mac、Android、iPhone

向我们咨询有关 VPS 的问题

无论白天还是黑夜,我们随时准备解答您的问题。