在离岸VPS上运行你自己的VPN
商业VPN要求你信任他们市场部门写下的无日志政策。你自己的VPS除了你配置的内容外没有任何日志。以下是完整的WireGuard搭建流程——以及一份诚实的权衡清单。
为什么自建优于商业VPN
商业VPN的“无日志”是一种 政策。你自己VPS的无日志是一种 架构。这个区别比任何审计徽章都重要:
- VPN提供商在架构上就能看到一切。 数以千计用户的流量终止于该公司完全控制的服务器。一份保密命令加上悄无声息的日志策略变更,你是察觉不到的——而这种事在你听说过的服务商身上已经发生过。
- 在你自己的VPS上,你掌控整个技术栈。 你的sshd、你的磁盘、你的WireGuard配置。我们在你的客户机内不运行任何东西,在网络侧也不保留任何活动或连接日志。我们无法窥探你的VPS;而VPN公司的本质恰恰就是能窥探它的隧道。
- 司法管辖权为你所用。 你的出口节点部署在哪里就归属哪里——如果你愿意,可以选在监控联盟之外,受托管地法院管辖,而非VPN公司母国的法律。
再说句公道话: 自建VPN拥有一个完全属于你的独立IP。 网站不会将其标记为VPN(这确实是体验上的升级),但你所有流量都共享一个地址——你无法混入数千人的洪流中。如果需求是群体匿名,用Tor。如果需求是可信的基础设施,没有什么能比得上一台你完全掌控的机器。
我们要搭建什么
手机和笔记本 → WireGuard隧道 → 你选定位置的SV-Pro → 开放互联网。服务器上启用IPv4转发和NAT,客户端全隧道路由(0.0.0.0/0),DNS通过 9.9.9.9。示例服务器IP: 185.220.101.14 ——替换为你自己的。基础系统为Debian 13;如果你还没加固这台机器,先完成 30分钟检查清单 ,然后再回来。
在Debian 13上进行服务器配置
安装并生成密钥
apt update && apt install -y wireguard qrencode
cd /etc/wireguard
umask 077
# server keypair
wg genkey | tee server.key | wg pubkey > server.pub
# one keypair per client device (laptop shown; repeat for phone)
wg genkey | tee laptop.key | wg pubkey > laptop.pub
在服务器上生成客户端密钥对于首次搭建是可以接受的,因为你本来就要通过SSH传输配置文件。更严格的卫生习惯是在每台设备上生成密钥,只把公钥粘贴到服务器配置中。
编写wg0.conf
# /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <contents of server.key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# laptop
[Peer]
PublicKey = <contents of laptop.pub>
AllowedIPs = 10.10.0.2/32
# phone — repeat the block with 10.10.0.3/32
用 ip route | grep default 检查你的上行接口名称——在VPSRento镜像上是 eth0,但如果你的不同,请调整MASQUERADE行。
启用转发并启动
# turn on IPv4 forwarding, persist across reboots
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-wireguard.conf
sysctl -p /etc/sysctl.d/99-wireguard.conf
# firewall: one UDP port, nothing else
ufw allow 51820/udp comment 'WireGuard'
# bring it up, now and on boot
systemctl enable --now wg-quick@wg0
wg show
wg show 应打印出接口、监听端口和对端信息。暂时还没有握手行——这些会在客户端连接时出现。
客户端配置
在笔记本上, laptop.conf:
[Interface]
PrivateKey = <contents of laptop.key>
Address = 10.10.0.2/32
DNS = 9.9.9.9
[Peer]
PublicKey = <contents of server.pub>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 185.220.101.14:51820
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0, ::/0 将所有流量通过隧道传输——如果以后需要,可以稍后改为分流隧道。 PersistentKeepalive 让连接在家庭 NAT 下保持存活。手机端无需手动输入:在服务器上生成手机的配置文件,并在终端中将其渲染为二维码:
# prints a scannable QR in the terminal — scan it with the WireGuard app
qrencode -t ansiutf8 < phone.conf
激活后,从任意客户端验证: curl ifconfig.me 应返回你 VPS 的 IP,DNS 泄漏测试应显示 9.9.9.9的运营商——而非你的 ISP。
性能说明
WireGuard 运行在内核中,使用 ChaCha20 加密——在 AMD EPYC 节点上,单条隧道实际可传输 600–900 Mbps 穿过 NAT——也就是说,端口早在 CPU 吃紧之前就已饱和。真正的约束从来不是加密算法,而是套餐的带宽条款。VPN 纯粹消耗带宽:你每下载 1GB,入向计一次、出向再计一次。在按流量计费的套餐上,这笔账很关键。而在 SV-Pro 上—— $19.99/月,1 Gbps 不限量——则无需担心,这也是我们推荐 VPN 搭建者选择 SV-Pro 的原因。有位客户在阿姆斯特丹的单台 SV-Pro 上运行全家设备,至今未触顶。
多跳:从阿姆斯特丹进入,从雷克雅未克退出
如需第二层,可在不同司法管辖区串联两台 VPS。入口节点位于 荷兰 (对你延迟低),两台服务器之间建立 WireGuard 隧道,出口节点位于 冰岛 (你希望流量实际来源的司法管辖区)。你的设备只看到一个阿姆斯特丹端点;互联网看到的是雷克雅未克的 IP;入口节点只看到经过的密文。机制上与你刚写的配置相同,只是重复一次——在入口节点上添加第二个 wg 接口,其默认路由指向出口隧道。代价是增加约 40–60ms 延迟和一台额外的 $5.99–6.89 VPS。当你的威胁模型有预算时值得;没有时则属装饰。
诚实的局限
- 现在你是运营者。 更新、密钥轮换和可用性都由你负责。 unattended-upgrades 和 加固清单 覆盖大部分内容;其余只是偶尔在周日执行一次 apt upgrade 。
- 一个 IP 即一个身份。 观察者可以关联所有从你地址流出的流量。必要时,在另一个位置重新部署——55 秒后你就有新的出口和新的 IP,并已对照 40+ 个黑名单检查。
- VPS 不是 Tor。 此设置保护你免受 ISP、恶意 Wi-Fi 和 VPN 公司的侵害。面对同时监控隧道两端的国家级对手,时间相关性分析仍然存在。要清楚你在对抗什么。