终端窗口中,免 KYC VPS 上的 WireGuard wg0.conf 配置,包含 interface 与 peer 配置块
自建 VPN 指南

搭建 WireGuard VPS——几分钟拥有你自己的 VPN

WireGuard VPS 是一台由你掌控、运行内核级 WireGuard VPN 的虚拟服务器,它为你提供一个任何商业服务商都无法记录的专属出口 IP。在免 KYC(无需实名认证)的 VPS 上,选用每月 $5 起的 S1 套餐,约 47 秒即可开通;只需安装三个软件包,用 wg genkey 生成密钥,就能让全部流量经由这一台服务器出网。密钥只在你一个人手里。

7 分钟阅读更新于 作者:CryptoVpsHost 团队

商业 VPN 要你相信的,不过是一页营销文案。自建 VPN 则用掌控权取代了这份信任:服务器归你所有,密钥由你生成,日志策略由你来定(也就是不留日志),出口 IP 也只属于你一个人,而不是挤在一个早被各家反欺诈厂商标记过的共享 IP 池里。WireGuard 让这件事变得切实可行——它只有大约 4,000 行代码,自 Linux 5.6 起就内置于内核,一条能用的隧道只需十来行配置。

本指南会在一台免 KYC VPS 上搭出一个完整的 WireGuard 服务器——这台 VPS 用门罗币(Monero,XMR)支付,无需证件,无需手机号,也无需验证邮箱。你会依次完成这些事:开通机器;通过 IP 转发和 nftables NAT 配好网络;手写服务端与客户端配置,把每一行都弄明白;为笔记本和手机各添加一个 peer;最后接上 kill switch(断网保护),确保隧道一旦掉线,也不会有任何流量泄漏出去。

为什么选 WireGuard,又为什么要用自己的服务器

VPN 的选择大致有三种:商业 VPN、在自己的机器上跑 OpenVPN,或者在自己的机器上跑 WireGuard。对大多数有隐私意识的用户来说,第三种胜出。

WireGuard 与 OpenVPN 对比

  • 代码量:WireGuard 约 4,000 行,一个下午就能审计完。OpenVPN 加上它依赖的 OpenSSL,则远超 100,000 行——攻击面要大得多。
  • 加密:WireGuard 只内置一套固定的现代加密套件(Curve25519、ChaCha20-Poly1305、BLAKE2s)。没有加密算法协商,也就不存在可能被配错的弱算法降级。OpenVPN 的灵活性,恰恰也是它容易让人踩坑的地方。
  • 速度:WireGuard 运行在内核中,一次往返即可完成握手。在配置不高的 VPS 上,它就能跑满 1 Gbps;而运行在用户空间的 OpenVPN,在同样的硬件上通常上限低得多。
  • 漫游:WireGuard 是无连接的(UDP)。从 Wi-Fi 切换到 LTE,隧道照常继续——对手机来说再理想不过。

自建 VPN 与商业 VPN

商业 VPN 卖给你的,是共享 IP 池里的一个名额,同一个池子里还有成千上万的其他用户——其中不乏滥用者。这类 IP 池早就被流媒体平台、银行和反欺诈厂商打上了标记,而你要相信的,是一句无从验证的“无日志”承诺。自建的 WireGuard 出口则能给你一个无人碰过的干净专属 IP、一套由你定为“零记录”的日志策略,以及只有你持有的密钥。代价是:这个 IP 显然就是一个固定地址,用作私人出口再好不过,想混进人群里却很糟糕。如果需要“藏身人群”式的匿名,请在上面再叠一层 Tor。想知道哪种任务适合哪种工具,请看自建 VPN 的应用场景。

开通一台免 KYC VPS 作为出口

挑一个离你想对外显示的所在位置最近的地区。CryptoVpsHost 在雷克雅未克(REK)、苏黎世(ZRH)、布加勒斯特(OTP)和巴黎(PAR)都部署了完全相同的 AMD EPYC 硬件。个人 VPN 用 S1 套餐(2 vCPU / 4 GB DDR5 / 80 GB NVMe Gen5,每月 $5 起)绰绰有余——WireGuard 非常轻量,在 1 Gbps 链路被占满之前,CPU 很少会成为瓶颈。

  • 账户:邮箱加密码,仅此而已。无需证件,无需手机号,无需验证邮箱,也没有人机验证。用一次性邮箱就行。
  • 付款:用 Monero(XMR)给余额充值——约 30 秒到账——或者使用支持的 8 种币种中的任意一种。之后每次部署都从余额中扣款。充值 $100 时可获得 +30% 的赠送额度。
  • 系统镜像:选择 Debian 13 或 Ubuntu 24.04。两者的内核都已内置 WireGuard 模块。
  • 部署:构建时间的中位数约为 47 秒。你会拿到 root 权限和一个干净的 IP。

如果你一条命令都不想手敲,可以前往下单页面;下面的全部内容,同样可以直接放进 cloud-init / 首次启动(first-boot)字段。

安装 WireGuard 并启用 IP 转发

以 root 身份通过 SSH 登录,安装所需工具。在 Debian/Ubuntu 上:

apt update && apt install -y wireguard wireguard-tools nftables

# turn the box into a router
cat > /etc/sysctl.d/99-wireguard.conf <<'EOF'
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
EOF
sysctl --system

现在生成服务端密钥对。umask 077 可以保证私钥不会被系统上的其他用户读取:

cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
cat server_private.key   # you'll paste this into wg0.conf
cat server_public.key    # clients need this

查出公网网卡的名称(NAT 规则要用)和你的公网 IP:

ip route get 1.1.1.1 | awk '{print $5; exit}'   # e.g. eth0 or ens3
curl -4 ifconfig.co                              # your public IPv4

私钥只能留在服务器上。免 KYC VPS 的 root 密码是以 AES-256 加密形式静态存储的,但你的 VPN 密钥只属于你自己——切勿把服务端私钥粘贴到客户端里。

编写服务端配置(wg0.conf)

创建 /etc/wireguard/wg0.conf。这里使用 10.8.0.0/24 作为隧道子网,IPv6 使用 fd86:ea04:1115::/64。把 SERVER_PRIVATE_KEY 换成你生成的值,把 eth0 换成上一步查到的真实网卡名。

[Interface]
Address = 10.8.0.1/24, fd86:ea04:1115::1/64
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

# NAT: masquerade tunnel traffic out the public NIC
PostUp   = nft add table inet wg; \
           nft add chain inet wg postrouting '{ type nat hook postrouting priority 100 ; }'; \
           nft add rule inet wg postrouting oifname "eth0" masquerade
PostDown = nft delete table inet wg

# --- peers are appended below, one [Peer] per client ---

PostUp 里的规则就是整个 NAT 层——它改写离开隧道的数据包,让它们看起来像是从 VPS 的公网 IP 发出的;与之配对的 PostDown 则在停止时把这些规则干净地拆除。如果你更习惯用 ufw,可以改为运行 ufw route allow in on wg0 out on eth0,并在 /etc/ufw/before.rules 中添加一段 masquerade 规则;不过上面这种 nftables 写法不需要任何额外文件。

放行 WireGuard 端口并启动隧道:

ufw allow 51820/udp        # if using ufw
systemctl enable --now wg-quick@wg0
wg show                    # confirm the interface is up

生成密钥,并为每台设备添加 peer

每个客户端(笔记本、手机)都要有自己的一对密钥。为图省事,可以在服务器上代为生成;更好的做法是直接在设备上生成,这样私钥就永远不会离开设备。在客户端上执行:

umask 077
wg genkey | tee client_private.key | wg pubkey > client_public.key

然后把一段 [Peer] 配置块追加到服务端的 wg0.conf 里,其中填入客户端的公钥。每个 peer 都需要一个唯一的隧道 IP:

[Peer]
# laptop
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32, fd86:ea04:1115::2/128

[Peer]
# phone
PublicKey = PHONE_PUBLIC_KEY
AllowedIPs = 10.8.0.3/32, fd86:ea04:1115::3/128

应用这次改动,且不中断现有隧道:

wg syncconf wg0 <(wg-quick strip wg0)

请留意这里的不对称:在服务端,AllowedIPs 是分配给每个客户端的、范围很窄的隧道 IP(一条路由 / ACL 条目);在客户端,AllowedIPs 则是范围很宽的 0.0.0.0/0(也就是哪些流量要走隧道)。把这两者搞混,是 WireGuard 最常见的错误,没有之一。

客户端配置、各平台用法与 kill switch(断网保护)

在客户端上创建 wg0.conf(或者把内容粘贴进应用里)。Endpoint 填你的 VPS 公网 IP 加监听端口。AllowedIPs = 0.0.0.0/0, ::/0 会把所有流量都路由进 VPN:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.8.0.2/32, fd86:ea04:1115::2/128
DNS = 9.9.9.9, 2620:fe::fe

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = YOUR_VPS_IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
  • Linux:保存到 /etc/wireguard/wg0.conf,然后执行 wg-quick up wg0。PersistentKeepalive = 25 能让隧道在 NAT 后面保持存活。
  • macOS / Windows:安装官方的 WireGuard 应用,导入配置文件或扫描二维码。
  • iOS / Android:从应用商店安装 WireGuard。在服务器上用 qrencode -t ansiutf8 < client.conf(需先执行 apt install qrencode)生成二维码,扫一下就行——不用打字。

Kill switch(断网保护)

由于客户端的 AllowedIPs 是 0.0.0.0/0, ::/0,wg-quick 会自动装上一套基于路由的 kill switch:它把隧道设为默认路由,并添加一条 fwmark 规则,丢弃所有目的地不是隧道的数据包。一旦 WireGuard 停止,这条默认路由随之消失,流量会直接断掉(fail closed),而不会从你的真实网卡漏出去。若想在 Linux 上做得更严格,可以再添加 PostUp/PreDown 的 nftables 规则:除 wg0 以及发往你 endpoint 的握手包之外,阻断所有出站流量。移动端应用把这项功能做成了名为“Block untunneled traffic / Exclude private IPs”的开关——请务必打开。

验证出口 IP 现在已经是你的 VPS:curl -4 ifconfig.co 应当返回服务器的地址,而不是你的 ISP 的地址。想要一台经过加固、常年在线的机器,请看 SSH 加固指南。

  1. 开通一台免 KYC VPS

    只用邮箱和密码注册账户,用 Monero(XMR)给余额充值,然后在你选定的地区部署一台运行 Debian 13 或 Ubuntu 24.04 的 S1 VPS(每月 $5 起)。构建约 47 秒完成,你将获得 root 权限,以及一个干净的专属 IP。

  2. 安装 WireGuard

    apt update && apt install -y wireguard wireguard-tools nftables qrencode。WireGuard 模块已随内核提供,无需编译任何东西。

  3. 启用 IP 转发

    把 net.ipv4.ip_forward = 1 和 net.ipv6.conf.all.forwarding = 1 写入 /etc/sysctl.d/99-wireguard.conf,再运行 sysctl --system。这会让 VPS 变成一台路由器,从而能把你的流量转发到互联网。

  4. 生成服务端密钥对

    在 /etc/wireguard 目录下运行 umask 077; wg genkey | tee server_private.key | wg pubkey > server_public.key。私钥永远只留在服务器上;公钥则写进每个客户端的配置。

  5. 编写带 NAT 规则的 wg0.conf

    创建 /etc/wireguard/wg0.conf,写入 [Interface] 配置块(Address 10.8.0.1/24、ListenPort 51820 以及你的私钥),并在公网网卡上加一条 PostUp 的 nftables masquerade 规则。在防火墙中放行 UDP 51820。

  6. 为每台设备添加一个 peer

    在每台设备上各生成一对密钥,然后把一段 [Peer] 配置块追加到服务端配置中,填入客户端的公钥和一个唯一的隧道 IP(例如 10.8.0.2/32)。用 wg syncconf wg0 <(wg-quick strip wg0) 热应用。

  7. 启动隧道并连接客户端

    在服务器上运行 systemctl enable --now wg-quick@wg0。在每个客户端上设置 AllowedIPs = 0.0.0.0/0, ::/0 和 Endpoint = YOUR_VPS_IP:51820 并启动连接——手机上则扫描 qrencode 生成的二维码。

  8. 验证并启用 kill switch

    在客户端上运行 curl -4 ifconfig.co,它应当返回 VPS 的 IP。在应用中启用“Block untunneled traffic”(或依靠 wg-quick 基于默认路由的 fail closed 机制),这样即使隧道掉线,也不会有流量泄漏。

FAQ

常见问题解答

自己搭建 WireGuard VPN,比用商业 VPN 更私密吗?
这取决于威胁模型。自建出口给你的,是一个无人共用的专属 IP,以及一份由你掌控的零日志策略,而不是一句无法验证的营销话术。代价是单个固定 IP 无法混进人群,所以它很适合做私人出口,却不适合追求“藏身人群”式的匿名——那种情况下,请在上面再叠加 Tor。
$5 的 S1 VPS 跑 VPN 够快吗?
够。WireGuard 运行在内核中,极其轻量;在 CPU 成为瓶颈很久之前,S1(2 vCPU / 4 GB)就已经能把 VPS 的网络链路占满。CryptoVpsHost 的网络最高可达 10 Gbps 且不限流量,所以实际的上限取决于你自己的网络连接。
买 VPS 时可以完全不提供证件、不做 KYC 吗?
可以。全部凭证就是邮箱加密码——无需证件,无需手机号,无需任何文件,也无需验证邮箱。你用加密货币给余额充值(支持 8 种币,包括约 30 秒到账的 Monero),部署时从该余额中扣款。
服务端和客户端上的 AllowedIPs 有什么区别?
在服务端,某个 peer 的 AllowedIPs 是分配给该客户端的、范围很窄的隧道 IP(一条路由 / ACL 规则)。在客户端,AllowedIPs 则表示哪些流量要走隧道——设为 0.0.0.0/0, ::/0 就会把全部流量都路由进去。把两者弄反,是最常见的 WireGuard 配置错误。
WireGuard 有内置的 kill switch 吗?
基本上有。当客户端的 AllowedIPs 为 0.0.0.0/0, ::/0 时,wg-quick 会装上一条默认路由,外加一条会丢弃所有不发往隧道的数据包的 fwmark 规则,因此一旦 WireGuard 停止,流量会直接断掉(fail closed)。移动端应用把它做成了“Block untunneled traffic”开关;在 Linux 上,你还可以再加一套严格的 nftables 出站规则,作为双保险。

部署你的离岸服务器。

选择地区。选择套餐。粘贴密钥。付款。接下来的 47 秒由我们负责。