WireGuard 极简 VPN 搭建指南:比 Shadowsocks 更优雅的远程组网方案

作者:Yolo 发布时间: 2026-05-19 阅读量:6

WireGuard 极简 VPN 搭建指南:比 Shadowsocks 更优雅的远程组网方案

前两篇写了 SSH 隧道FRP + Shadowsocks 两种内网穿透方案。这篇聊聊 WireGuard,一个 Kernel 级的 VPN 协议,配置比 OpenVPN 简单得多,性能却更好。

如果说 FRP + Shadowsocks 是「端口映射 + 加密代理」,那 WireGuard 就是「直接把外网设备拉进内网」。思路完全不同,但各有适用场景。


三种方案怎么选

方案本质优点缺点适合谁
SSH 端口转发单端口隧道零配置、即开即用只能一个端口、不稳定临时救急
FRP + Shadowsocks端口映射 + SOCKS5 代理多端口、灵活、可控配置分散、需要维护两套精准控制每个服务
WireGuardKernel VPN 组网整网接入、性能最好、配置极简需要内核支持、整网暴露远程办公、多台设备组网

简单决策:

  • 临时调试用 SSH
  • 只想暴露几个端口用 FRP
  • 多台设备需要像在内网一样互相访问,用 WireGuard

WireGuard 为什么快

传统 VPN(OpenVPN、IPSec)在用户态和内核态之间来回拷贝数据,还要处理复杂的握手和重连逻辑。WireGuard 直接跑在 Kernel 里,代码量只有 4000 多行(OpenVPN 几十万行),握手协议极简,连接恢复几乎是瞬时的。

实测数据:

  • 同样 100M 带宽,WireGuard 能跑满,OpenVPN 大概 60-70M
  • 手机切换 WiFi/4G 时,WireGuard 重连几乎没有感知
  • 树莓派这种弱鸡设备也能轻松转发几百兆

环境准备

你需要:

  1. 一台有公网 IP 的服务器(作为 VPN 网关)
  2. 内网机器(家里或公司,想被远程访问的)
  3. 外网设备(手机、笔记本,想接入内网的)

本文示例:

  • 公网服务器 vps.yolonote.cc(Ubuntu 22.04)
  • 内网机器 homelab.local(Ubuntu 22.04,内网 IP 192.168.1.100)
  • 外网笔记本 macbook.local
  • 组网网段:10.200.200.0/24

第一步:服务端安装

Ubuntu/Debian 很简单:

# 安装 WireGuard
sudo apt update
sudo apt install wireguard wireguard-tools

# 生成密钥对
wg genkey | tee privatekey | wg pubkey > publickey

# 查看密钥
cat privatekey # 私钥,保密
cat publickey # 公钥,给客户端用

服务端配置 `/etc/wireguard/wg0.conf`

[Interface]
# 服务器 VPN 地址
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <服务器私钥>

# 开启 IP 转发和 NAT
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

# 第一个客户端:内网机器
[Peer]
PublicKey = <内网机器公钥>
AllowedIPs = 10.200.200.2/32, 192.168.1.0/24

# 第二个客户端:外网笔记本
[Peer]
PublicKey = <笔记本公钥>
AllowedIPs = 10.200.200.3/32

关键点解释:

  • AllowedIPs 控制该客户端能访问什么。内网机器配了 192.168.1.0/24,意味着连上 VPN 后,其他客户端可以访问它背后的整个内网网段。
  • PostUp/PostDown 是启动/关闭时自动执行的 iptables 规则,开启路由转发。

启动:

# 启用 IP 转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

# 启动 WireGuard
wg-quick up wg0

# 开机自启
systemctl enable wg-quick@wg0

防火墙放行 UDP 51820。


第二步:内网机器配置

同样安装 WireGuard,生成密钥对。

配置 /etc/wireguard/wg0.conf

[Interface]
Address = 10.200.200.2/24
PrivateKey = <内网机器私钥>
ListenPort = 51820

[Peer]
PublicKey = <服务器公钥>
Endpoint = vps.yolonote.cc:51820
AllowedIPs = 10.200.200.0/24
PersistentKeepalive = 25

启动:

wg-quick up wg0
systemctl enable wg-quick@wg0

这里 PersistentKeepalive = 25 意思是每 25 秒发一个心跳包,防止 NAT 超时断开。内网机器通常有路由器 NAT,必须开这个。


第三步:外网笔记本配置

macOS 客户端

App Store 搜 WireGuard,安装后导入配置:

[Interface]
PrivateKey = <笔记本私钥>
Address = 10.200.200.3/24
DNS = 192.168.1.1

[Peer]
PublicKey = <服务器公钥>
Endpoint = vps.yolonote.cc:51820
AllowedIPs = 10.200.200.0/24, 192.168.1.0/24
PersistentKeepalive = 25

点「Activate」就连上了。

Windows / Linux / Android / iOS

各平台都有官方客户端,配置格式完全一样。Android/iOS 可以扫二维码导入,很方便。

生成二维码:

qrencode -t ansiutf8 < /etc/wireguard/client.conf

第四步:验证组网效果

笔记本连上 WireGuard 后:

# 看分配到的 VPN IP
ip addr show wg0 # 或 ifconfig wg0
# 应该看到 10.200.200.3

# ping 服务器
ping 10.200.200.1

# ping 内网机器
ping 10.200.200.2

# 直接访问内网机器背后的设备!
ssh 192.168.1.100 # 内网机器的 SSH
curl http://192.168.1.50 # 内网另一台设备的 Web
smbclient -L 192.168.1.10 # Samba 共享

注意:不需要记 FRP 的那一堆端口号了,直接走内网 IP 访问,就像坐在家里一样。


进阶:选择性路由 + 分流

默认配置里 AllowedIPs = 0.0.0.0/0 会让所有流量走 VPN,适合科学上网。但如果只想访问内网资源,不改其他流量:

# 笔记本配置 - 只走内网流量
AllowedIPs = 10.200.200.0/24, 192.168.1.0/24

这样只有访问 VPN 网段和内网网段的流量走 WireGuard,上百度、刷抖音还是直连,不绕路。

如果想科学上网(所有流量走 VPN):

AllowedIPs = 0.0.0.0/0, ::/0

配合服务端 PostUp 里的 MASQUERADE,公网服务器就成了你的流量出口。


进阶:多内网组网(Site-to-Site)

如果你有多个地点的内网需要互联——比如家里 192.168.1.0/24 和公司 10.0.0.0/24

服务端配置:

[Interface]
...

# 家里网关
[Peer]
PublicKey = <家里公钥>
AllowedIPs = 10.200.200.2/32, 192.168.1.0/24

# 公司网关
[Peer]
PublicKey = <公司公钥>
AllowedIPs = 10.200.200.3/32, 10.0.0.0/24

这样连上 VPN 后,笔记本可以同时访问家里和公司的内网,两个内网之间也能互通。这就是 WireGuard 相比 FRP 最大的优势:整网互通,不是单端口映射


和 FRP 配合使用

两者不冲突,可以互补:

  • WireGuard 作为「基础组网层」,让所有设备在同一个虚拟内网里
  • FRP 作为「精准暴露层」,只把特定服务通过域名暴露出去给外人访问

比如:

  • 你自己用 WireGuard 连回家,所有内网资源随便访问
  • 给朋友的博客 demo 用 FRP 映射到 demo.yolonote.cc,不需要让他连进你的内网

安全建议

  1. 密钥保管privatekey 文件权限设为 600,绝不要上传 Git
  2. 限制 Peer:每个客户端配精确的 AllowedIPs,不要给 0.0.0.0/0 除非需要
  3. 防火墙:服务端只开 UDP 51820,其他端口靠 VPN 内网访问
  4. 定期轮换密钥:WireGuard 不支持自动轮换,建议半年手动更新一次
  5. 关闭不需要的 Peer:直接注释掉 [Peer] 段,比改防火墙快

总结

场景推荐方案
临时调试一个端口SSH 端口转发
暴露特定服务给公网FRP + Nginx/HTTPS
多台设备远程组网、像在内网一样互访WireGuard
既要内网互访又要暴露部分服务WireGuard + FRP 组合

WireGuard 最大的优势是「无感」。连上之后,你不会感觉自己在用 VPN,只是突然发现能访问内网资源了。配置极简,性能极高,这才是现代 VPN 该有的样子。

如果你还在用 OpenVPN 或者 IPSec,真的建议试试 WireGuard。迁移成本很低,体验提升很大。