很多人第一次听 WireGuard,会把它和 V2Ray、Xray、Shadowsocks 混在一起。
其实它们不是一类东西。
- V2Ray / Xray / Shadowsocks 更像代理工具
- WireGuard 是 VPN,把你的设备接进一张加密的虚拟网里
如果你的需求是:
- 手机、电脑在外面也能安全访问家里或公司服务
- 给自己的笔记本做一个稳定的加密出口
- 在几台 VPS、NAS、电脑之间组一个小内网
- 不想折腾 OpenVPN 那种又长又复杂的配置
WireGuard 很适合。
这篇就按普通 VPS 用户能落地的方式来讲:怎么选机器、怎么装、怎么放行端口、怎么生成客户端配置,以及连不上时先查哪里。
WireGuard 本身很轻。
一台普通 1 核 1GB VPS 就能跑,甚至 512MB 内存也能撑住轻量使用。真正影响体验的不是 CPU,而是:
| 项目 | 为什么重要 |
|---|---|
| 机房位置 | 决定基础延迟 |
| 线路质量 | 决定晚高峰会不会抖 |
| 流量额度 | 全部设备走 VPN 时很容易消耗出站流量 |
| UDP 是否可用 | WireGuard 默认走 UDP |
| 防火墙/安全组 | 端口没放行就一定连不上 |
如果你人在中国大陆,想要低延迟,通常先看香港、日本、新加坡、美国西海岸这些位置。别只看“1Gbps 带宽”,晚高峰线路才是关键。
如果只是用来远程访问内网服务,机器位置可以离你近一点;如果是跨境业务环境隔离,就要先看目标平台对 IP、地区和稳定性的要求。
系统建议用:
- Ubuntu 22.04 / 24.04
- Debian 12
下面命令以 Ubuntu / Debian 为例。
先更新系统:
apt update
apt upgrade -y
安装 WireGuard:
apt install wireguard -y
确认命令可用:
wg --version
如果能看到版本号,就说明安装好了。
先进入 WireGuard 配置目录:
cd /etc/wireguard
umask 077
生成服务端密钥:
wg genkey | tee server_private.key | wg pubkey > server_public.key
生成一个客户端密钥:
wg genkey | tee client_private.key | wg pubkey > client_public.key
查看密钥:
cat server_private.key
cat server_public.key
cat client_private.key
cat client_public.key
这里注意:
- private key 不要发给别人
- public key 可以写进对端配置
- 每个客户端最好单独生成一组密钥
不要所有手机、电脑共用同一个客户端配置。以后某台设备丢了,你会很难单独吊销。
先确认你的网卡名:
ip route get 8.8.8.8
通常会看到类似:
dev eth0
也可能是 ens3、ens5、enp1s0。下面示例用 eth0,你要按实际网卡名改。
创建配置:
nano /etc/wireguard/wg0.conf
写入:
[Interface]
Address = 10.66.66.1/24
ListenPort = 51820
PrivateKey = 服务端私钥
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = 客户端公钥
AllowedIPs = 10.66.66.2/32
把这两处替换掉:
服务端私钥:cat server_private.key输出的内容客户端公钥:cat client_public.key输出的内容
如果你的公网网卡不是 eth0,也要把 PostUp / PostDown 里的 eth0 改成真实网卡名。
WireGuard 只是建了隧道,要让客户端通过 VPS 出网,还需要开启 IPv4 转发。
编辑:
nano /etc/sysctl.conf
加上或取消注释:
net.ipv4.ip_forward=1
让它生效:
sysctl -p
确认:
sysctl net.ipv4.ip_forward
看到:
net.ipv4.ip_forward = 1
就对了。
WireGuard 默认端口是 51820/udp。
如果你用 UFW:
ufw allow 51820/udp
ufw status
如果你用云厂商安全组,也要在后台放行:
UDP 51820
来源:你的 IP 或 0.0.0.0/0
新手最容易漏掉这里:
- VPS 里防火墙放了
- 云平台安全组没放
结果就是客户端怎么扫都连不上。
如果你不确定是不是端口问题,可以先看服务端有没有监听:
ss -lunp | grep 51820
启动:
systemctl start wg-quick@wg0
设置开机自启:
systemctl enable wg-quick@wg0
查看状态:
systemctl status wg-quick@wg0
wg show
如果配置没写错,wg show 能看到接口和 Peer 信息。
如果启动失败,先看日志:
journalctl -u wg-quick@wg0 -b --no-pager
常见错误:
- 私钥格式复制错
PostUp里的网卡名写错- 配置文件权限太开放
Address和客户端网段冲突
客户端配置可以叫 client.conf:
[Interface]
PrivateKey = 客户端私钥
Address = 10.66.66.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = 服务端公钥
Endpoint = 你的VPS公网IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
替换:
客户端私钥:cat client_private.key服务端公钥:cat server_public.key你的VPS公网IP:VPS 的公网 IP
这里最关键的是 AllowedIPs。
如果你想让所有流量都走 VPS:
AllowedIPs = 0.0.0.0/0
如果你只想访问 WireGuard 内网,比如只访问 10.66.66.0/24:
AllowedIPs = 10.66.66.0/24
新手如果只是想“全局走 VPN”,就用 0.0.0.0/0。
WireGuard 官方客户端支持:
- Windows
- macOS
- Linux
- iOS
- Android
电脑端可以直接导入 client.conf。
手机端更方便的是二维码。
在 VPS 上安装二维码工具:
apt install qrencode -y
生成二维码:
qrencode -t ansiutf8 < client.conf
然后手机打开 WireGuard App,选择扫码导入。
注意:二维码里包含客户端私钥,不要截图发群里,也不要放到公开文档里。
WireGuard 最常见的问题不是装不上,而是“显示已连接,但打不开网页”。
按这个顺序查。
wg show
看 latest handshake。
如果一直没有握手,通常是:
- VPS IP 写错
- UDP 51820 没放行
- 客户端网络屏蔽 UDP
- 服务端没启动
sysctl net.ipv4.ip_forward
必须是:
net.ipv4.ip_forward = 1
iptables -t nat -S | grep MASQUERADE
如果没有 MASQUERADE,客户端可能能连上 WireGuard,但没法通过 VPS 出网。
ip route get 8.8.8.8
如果实际网卡是 ens3,但配置里写的是 eth0,NAT 就不会走对出口。
客户端能 ping IP,但打不开域名时,先试:
ping 1.1.1.1
ping google.com
如果前者通、后者不通,就是 DNS 问题。客户端配置里可以先用:
DNS = 1.1.1.1
不要把同一个 client.conf 复制给所有设备。
每台设备应该有自己的:
- private key
- public key
- 内网 IP
比如第二台设备:
10.66.66.3/32
服务端 wg0.conf 里新增:
[Peer]
PublicKey = 第二台客户端公钥
AllowedIPs = 10.66.66.3/32
改完重载:
systemctl restart wg-quick@wg0
如果以后要踢掉某台设备,只删那台设备对应的 [Peer] 就行。
WireGuard 很好用,但不是万能的。
这几种情况要想清楚:
- 你所在网络经常屏蔽 UDP
- 你需要复杂的伪装和抗封锁能力
- 你完全不会维护 Linux 防火墙
- VPS 流量很小,但你打算全家设备都走它
- 目标业务对 IP 风控很敏感,不能随便混用出口
尤其是最后一点:如果你用 WireGuard 给多个账号、多个业务共用一个出口 IP,很容易把环境混在一起。做跨境账号、电商、TikTok 这类业务时,不要图省事乱共用。
如果你照着配置后连不上,按这个顺序来:
systemctl status wg-quick@wg0:服务有没有启动wg show:有没有握手ss -lunp | grep 51820:端口有没有监听- 云平台安全组:UDP 51820 有没有放行
sysctl net.ipv4.ip_forward:转发有没有开启iptables -t nat -S | grep MASQUERADE:NAT 有没有生效ip route get 8.8.8.8:公网网卡名是否写对- 客户端
Endpoint:IP 和端口是否写错 - 客户端
AllowedIPs:是全局代理还是只走内网 - DNS:能 ping IP 但打不开域名时先查 DNS
WireGuard 的好处是配置文件短,问题也比较集中。真正难的不是安装,而是把 VPS 安全组、系统防火墙、NAT、客户端路由这几层想清楚。
如果你只是想要一个稳定、轻量、自己可控的 VPN,WireGuard 很值得折腾一次。
