为何要运行自己的 VPN
商业 VPN 要你信任一家公司的无日志声明,而这声明横跨数以千计、共用寥寥几个出口 IP 的用户。在离岸 VPS 上自托管 WireGuard 则颠覆了这个信任模型:你持有密钥,你设定日志策略,存在的唯一元数据就是你选择保留的元数据。对某些威胁模型而言,这是正确的取舍——你不再信任营销文案,转而信任你自己的配置外加服务器所处的司法管辖区。
WireGuard 是胜任此事的现代之选。它只有区区几千行经过审计的内核代码,相比 OpenVPN 或 IPsec 攻击面极小,并且内置固定的现代密码学——Curve25519、ChaCha20-Poly1305、BLAKE2s——因此不存在哪个密码套件会被误配成脆弱方案。握手迅速,在 Wi-Fi 与移动网络之间漫游无缝衔接,一条空闲隧道几乎不耗资源。在离岸 VPS 上,你能在自己从 6 个区域中挑选的管辖区内获得一个专属出口,大约 15 min 内上线,并配有 1.5 Tbps 的 L3/4 防护以及每个套餐标配的不限量端口。
SP·02自托管隧道能隐藏什么——以及不能隐藏什么
在动手搭建之前,请对这个模型保持诚实。自托管隧道会加密你的设备与 VPS 之间的一切,把它对你的本地网络和 ISP 隐藏起来,并且对于你经它路由的任何流量,都用 VPS 的 IP 替换掉你的家庭 IP。这在敌对的 Wi-Fi 上、在通过一个稳定地址访问你自己的服务时,或在让你的接入 ISP 看不到你的浏览行为时,确实很有用。
它做不到的,是让你匿名。出口 IP 只属于你一人——没有其他用户的人群可供混入,所以任何能将连接两端关联起来、或取得针对该主机的具约束力命令的人,都能把那个地址归到你的账户名下。在主机一侧,立场是固定的:DMCA 通知不予处理也不予回复——DMCA 是一部美国法律,在我们的管辖区内毫无效力,我们只对来自对特定服务器拥有管辖权的法院、具有约束力的命令采取行动。这能保护你免受自动化下线机器人的侵扰;它并不能让一个单用户 VPN 变成匿名工具。如果你的对手是一个全球性的被动观察者,那就改用 Tor。自托管隧道是一件保密与掌控工具,而非一件隐身斗篷。
SP·03先选定地点与套餐
个人 VPN 受带宽约束,而非受 CPU 约束,所以最小的套餐就绰绰有余——每月 $8.00 起的 Drift VPS 早在 vCPU 出汗之前就会把端口跑满。把你的决策预算花在地点上吧。当交互使用的延迟至关重要时,把服务器放得离你近些;当法律上的距离比往返时延更重要时,则放得远些。
罗马尼亚和荷兰按基础价计费,并拥有最佳的欧洲连通性;瑞士、冰岛、马来西亚和巴拿马则适用一项在配置器中实时显示的地区系数。马来西亚是亚太之选;巴拿马和冰岛在司法距离上倾斜得最为彻底。如果你拿不定主意,配套指南你该选哪个离岸地点?会逐个区域地权衡各项取舍。无论你选哪个,都用加密货币从 $30.00 起充值你的余额然后部署——没有身份核验,也无需在册的银行卡。
SP·04各部分如何拼合在一起
WireGuard 把 VPN 建模为一组对等节点,每个节点由一个公钥标识,通过一个虚拟接口(此处为 wg0)通信。服务端获得一个私有子网——比如 10.66.0.0/24 外加一个 IPv6 ULA——每个客户端在其中取用一个地址。服务端的 [Interface] 区块存放它的私钥和监听端口;每个客户端则是一个 [Peer] 区块,承载该客户端的公钥及其被允许使用的地址。
在客户端一侧,AllowedIPs = 0.0.0.0/0, ::/0 正是让这成为全隧道 VPN 的关键:它告诉客户端把所有流量都经 wg0 路由。随后服务端用一条伪装规则把这些流量经其真实网络接口做 NAT 转发出去,这也是为什么必须在内核中启用 IP 转发。PersistentKeepalive = 25 让路径穿过有状态防火墙和运营商 NAT 时保持开启。在客户端把 DNS 设为你信任的解析器,这样域名查询便在隧道内传输,而不会泄露到你的本地网络。WireGuard 本身是无连接的——不存在需要中断的长期会话,因此当笔记本休眠、或手机从 Wi-Fi 切到移动网络时,链路无需任何重连仪式即可存活。如果某条路径的 MTU 别扭、大数据包卡住,把客户端接口的 MTU 调低到 1380 左右通常就能解决。掌握这四个概念——接口、对等节点、AllowedIPs、伪装——下面的配置读起来就像散文一样顺畅。
趁此机会顺手加固服务器
VPN 端点值得严加防护。将 SSH 改为仅密钥认证,并在 /etc/ssh/sshd_config 中禁用密码登录和 root 登录(PasswordAuthentication no、PermitRootLogin prohibit-password),然后重载 sshd。让防火墙保持默认拒绝:一台 WireGuard 主机所需的入站端口只有 SSH 和 UDP 51820,其余一律关闭。
将 WireGuard 密钥文件保持为 0600 权限——下方步骤中的 umask 077 会处理好这一点——并且绝不要把私钥复制到它所属主机之外的地方。开启无人值守安全更新,让内核和 wireguard 软件包无需专人盯守就能持续打补丁。隧道建好后测试一下 DNS 泄漏——一次能通过你所选解析器(而非你的接入 ISP)完成的解析,就确认了查询确实留在 wg0 之内。如果你之后还要对外开放其他服务,应添加 fail2ban 和按服务划分的规则,而不是放宽防火墙。这一切都不依赖于主机商:VPS 是你的,root 是你的,而 99.9% 的在线时长承诺让这台主机保持可达,使你的隧道始终在线。
添加更多设备并让它持续运行
每台接入的设备都需要自己的密钥对,以及服务器上自己的 [Peer] 配置块,每个都在子网内拥有唯一地址——在笔记本和手机之间复用同一个密钥对会破坏漫游,也会让任何排障变得混乱。生成一对全新的 client2.key/client2.pub,追加一个对等节点,然后用 wg syncconf wg0 <(wg-quick strip wg0) 重载接口,或用 systemctl restart wg-quick@wg0 重启它。
对于手机,完全可以跳过文件复制:在服务器上用 qrencode -t ansiutf8 < client.conf 把客户端配置渲染成二维码,直接扫码导入官方 WireGuard 应用。要查看谁已连接、以及每个对等节点上次握手的时间,运行 wg show 即可——对于个人部署而言,这就是监控的全部。在内核升级前做快照,万一某个新版本出问题,你就能干净地回滚。
什么时候商用 VPN 或 Tor 才是更好的工具
自托管并不总是答案,假装它是反倒不诚实。如果你的目标是隐没于人群之中,一家信誉良好的多用户 VPN 能给你许多人同时使用的共享出口 IP——单租户隧道做不到这一点。如果你需要随时在不同出口国家之间切换,一项带有一键切换应用的商用服务,就是比临时开机器要方便得多。而如果你需要在面对资源雄厚的对手时获得真正的匿名性,Tor 的洋葱路由正是为应对自托管 VPN 无法解决的关联性问题而设计的。
自托管的优势在于控制权和机密性:你不必信任别人的日志策略,你能获得一个稳定的专用 IP 用于管理和白名单,而且由你来决定司法管辖区。许多人两者并用——用自托管隧道处理日常机密性,用 Tor 应对偶尔需要匿名的任务。挑选与威胁相匹配的工具,而不是落地页做得最漂亮的那个。
SP·08分步操作
-
01
部署 VPS 并安装 WireGuard
部署一台搭载 Debian 13 或 Ubuntu 24.04 的 VPS,通过 SSH 以 root 身份登录,然后更新并安装你所需的两个软件包。
apt update && apt full-upgrade -y apt install -y wireguard qrencode
-
02
启用 IP 转发
全隧道 VPN 会把客户端流量从服务器的接口转发出去,因此内核必须允许 IPv4 和 IPv6 的转发。
cat > /etc/sysctl.d/99-wg.conf <<'EOF' net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 EOF sysctl --system
-
03
生成服务器密钥
在
/etc/wireguard目录下以严格的 umask 进行操作,让每个密钥文件都落到0600权限。cd /etc/wireguard umask 077 wg genkey | tee server.key | wg pubkey > server.pub
-
04
生成客户端密钥对
每台设备都有自己的密钥对。现在先生成第一个。
wg genkey | tee client.key | wg pubkey > client.pub
-
05
编写服务器配置
用
ip route get 1.1.1.1找出你真实的网络接口,如果下面的eth0与之不同就替换掉(它往往是enp1s0)。其中的$(cat ...)调用会内联你刚刚生成的密钥。cat > /etc/wireguard/wg0.conf <<EOF [Interface] Address = 10.66.0.1/24, fd86:ea04:1115::1/64 ListenPort = 51820 PrivateKey = $(cat server.key) PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] PublicKey = $(cat client.pub) AllowedIPs = 10.66.0.2/32, fd86:ea04:1115::2/128 EOF
-
06
编写客户端配置
在同一目录下创建
client.conf。在标注的位置粘贴client.key和server.pub的内容,并把Endpoint设为你服务器的公网 IP。AllowedIPs = 0.0.0.0/0, ::/0会把所有流量都经由隧道路由。[Interface] PrivateKey = <paste client.key> Address = 10.66.0.2/32, fd86:ea04:1115::2/128 DNS = 9.9.9.9 [Peer] PublicKey = <paste server.pub> Endpoint = YOUR_SERVER_IP:51820 AllowedIPs = 0.0.0.0/0, ::/0 PersistentKeepalive = 25
-
07
开放防火墙
放行 SSH 和 WireGuard 的 UDP 端口,然后启用
ufw。对其余一切保持默认拒绝的姿态。ufw allow OpenSSH ufw allow 51820/udp ufw enable
-
08
启动隧道
启用该接口使其在重启后仍然存活,然后确认对等节点和握手情况。
systemctl enable --now wg-quick@wg0 wg show
-
09
用二维码连接手机
把客户端配置渲染成可扫描的二维码,并导入 WireGuard 移动应用——无需任何文件传输。
qrencode -t ansiutf8 < client.conf

