wireguard 局域网VPN方案
本文用一台云服务器作为 WireGuard 服务端,手机、电脑、CatWrt 作为客户端接入。这个方案最稳定,也最适合普通用户:云服务器有公网 IP,客户端不需要公网 IP,直接连服务器即可。
一、网络规划
先统一规划 IP,后面所有配置都按这个来。
| 设备 | 角色 | WireGuard IP |
|---|---|---|
| 云服务器 | 服务端 | 10.8.0.1 |
| 手机 | 客户端 | 10.8.0.2 |
| 电脑 | 客户端 | 10.8.0.3 |
| CatWrt | 客户端 | 10.8.0.10 |
| 端口 | UDP | 51820 |
需要记住一个原则:一台设备一套密钥,一个独立 IP,不要多个设备共用同一个配置。
二、服务器安装 WireGuard
1. 安装软件
Ubuntu / Debian 执行:
sudo apt update
sudo apt install -y wireguard qrencode iptables
CentOS / Rocky / AlmaLinux 执行:
sudo dnf install -y wireguard-tools qrencode iptables
2. 开启 IP 转发
编辑系统配置:
sudo vim /etc/sysctl.conf
加入或确认有这一行:
net.ipv4.ip_forward=1
让配置立即生效:
sudo sysctl -p
检查结果:
cat /proc/sys/net/ipv4/ip_forward
输出 1 就是成功。
3. 查看服务器公网网卡
执行:
ip route | grep default
你会看到类似:
default via 172.31.0.1 dev eth0
这里的 eth0 就是公网网卡。也可能是 ens3、ens5、enp1s0,后面配置里的 eth0 要按实际结果替换。
4. 生成服务端密钥
sudo mkdir -p /etc/wireguard/clients
cd /etc/wireguard
sudo umask 077
sudo wg genkey | sudo tee server_private.key | sudo wg pubkey | sudo tee server_public.key
查看服务端私钥和公钥:
sudo cat /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_public.key
私钥不要泄露,公钥后面要填到客户端里。
5. 创建服务端配置
编辑配置文件:
sudo vim /etc/wireguard/wg0.conf
写入:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = 填服务端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
注意:如果你的公网网卡不是 eth0,把上面的 eth0 改成你的实际网卡名。
6. 放行 UDP 端口
如果服务器用了 UFW:
sudo ufw allow 51820/udp
sudo ufw reload
如果是云服务器,还要去云厂商安全组放行:
协议:UDP
端口:51820
来源:0.0.0.0/0
这是最容易漏的一步。WireGuard 用的是 UDP,不是 TCP。
7. 启动 WireGuard
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
查看状态:
sudo wg show
看到 interface: wg0 就说明服务端启动成功。
三、添加手机、电脑、CatWrt 客户端
1. 生成客户端密钥
生成手机密钥:
cd /etc/wireguard
sudo wg genkey | sudo tee clients/phone_private.key | sudo wg pubkey | sudo tee clients/phone_public.key
生成电脑密钥:
sudo wg genkey | sudo tee clients/pc_private.key | sudo wg pubkey | sudo tee clients/pc_public.key
生成 CatWrt 密钥:
sudo wg genkey | sudo tee clients/catwrt_private.key | sudo wg pubkey | sudo tee clients/catwrt_public.key
2. 把客户端加入服务端
编辑服务端配置:
sudo vim /etc/wireguard/wg0.conf
在文件末尾追加:
[Peer]
# phone
PublicKey = 填phone_public.key里的内容
AllowedIPs = 10.8.0.2/32
[Peer]
# pc
PublicKey = 填pc_public.key里的内容
AllowedIPs = 10.8.0.3/32
[Peer]
# catwrt
PublicKey = 填catwrt_public.key里的内容
AllowedIPs = 10.8.0.10/32
服务端这里一定要写 /32,不要给每个客户端都写 10.8.0.0/24,否则多客户端容易冲突。
3. 重启服务端
sudo systemctl restart wg-quick@wg0
sudo wg show
四、生成客户端配置文件
1. 手机配置 phone.conf
查看需要填的密钥:
sudo cat /etc/wireguard/clients/phone_private.key
sudo cat /etc/wireguard/server_public.key
创建手机配置:
sudo vim /etc/wireguard/clients/phone.conf
写入:
[Interface]
PrivateKey = 填phone_private.key里的内容
Address = 10.8.0.2/32
DNS = 1.1.1.1
MTU = 1420
[Peer]
PublicKey = 填server_public.key里的内容
Endpoint = 你的服务器公网IP或域名:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0 表示手机所有流量都走 WireGuard。如果只想访问 WireGuard 内网,改成:
AllowedIPs = 10.8.0.0/24
生成二维码:
sudo qrencode -t ansiutf8 < /etc/wireguard/clients/phone.conf
2. 电脑配置 pc.conf
查看电脑私钥:
sudo cat /etc/wireguard/clients/pc_private.key
创建电脑配置:
sudo vim /etc/wireguard/clients/pc.conf
写入:
[Interface]
PrivateKey = 填pc_private.key里的内容
Address = 10.8.0.3/32
DNS = 1.1.1.1
MTU = 1420
[Peer]
PublicKey = 填server_public.key里的内容
Endpoint = 你的服务器公网IP或域名:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
3. CatWrt 配置 catwrt.conf
查看 CatWrt 私钥:
sudo cat /etc/wireguard/clients/catwrt_private.key
创建 CatWrt 配置:
sudo vim /etc/wireguard/clients/catwrt.conf
写入:
[Interface]
PrivateKey = 填catwrt_private.key里的内容
Address = 10.8.0.10/32
DNS = 1.1.1.1
MTU = 1420
[Peer]
PublicKey = 填server_public.key里的内容
Endpoint = 你的服务器公网IP或域名:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
如果你第一次配置 CatWrt,建议先把 AllowedIPs 写成:
AllowedIPs = 10.8.0.0/24
确认能连通后,再改成:
AllowedIPs = 0.0.0.0/0
这样可以避免路由器一启用 WireGuard 就全家断网。
五、手机设置 WireGuard
1. iPhone / iPad
在 App Store 安装 WireGuard,打开 App,点击 +,选择扫码导入,扫描服务器生成的二维码,保存后打开开关。
2. Android
安装 WireGuard App,点击 +,选择扫码导入或导入配置文件,保存后打开开关。
3. 手机测试
手机打开 WireGuard 后,访问查 IP 网站。如果显示的是服务器公网 IP,说明手机流量已经走服务器。如果只是访问内网,可以测试:
ping 10.8.0.1
六、电脑设置 WireGuard
1. Windows
安装 WireGuard 官方客户端,点击 Import tunnel(s) from file,选择 pc.conf,然后点击 Activate。
2. macOS
在 App Store 安装 WireGuard,导入 pc.conf,然后启用。
3. Linux
安装:
sudo apt update
sudo apt install -y wireguard
复制配置:
sudo cp pc.conf /etc/wireguard/wg0.conf
sudo chmod 600 /etc/wireguard/wg0.conf
启动:
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
查看:
sudo wg show
七、CatWrt 设置 WireGuard
CatWrt 可以按 OpenWrt 的方式配置。这里推荐把 CatWrt 当客户端,连接云服务器。
1. 安装 WireGuard 组件
SSH 登录 CatWrt,执行:
opkg update
opkg install luci-proto-wireguard wireguard-tools kmod-wireguard qrencode
安装后重启:
reboot
如果提示 kmod-wireguard 内核版本不匹配,不要硬装。通常是固件和软件源不匹配,需要换匹配的软件源或升级 CatWrt 固件。
2. 新建 WireGuard 接口
进入 CatWrt 后台:
网络 -> 接口 -> 添加新接口
设置:
名称:wg_vps
协议:WireGuard VPN
如果没有 WireGuard VPN 选项,说明插件没装好,或装完没有重启。
3. 填写接口信息
在 wg_vps 接口中填写:
私钥:catwrt_private.key 的内容
IP 地址:10.8.0.10/32
MTU:1420
监听端口:留空
CatWrt 作为客户端时,监听端口可以留空。
4. 添加服务端 Peer
在 对端 / Peers 里添加:
公钥:server_public.key 的内容
端点主机:服务器公网IP或域名
端点端口:51820
允许的 IP:10.8.0.0/24 或 0.0.0.0/0
持久 KeepAlive:25
如果只是测试,允许的 IP 先写:
10.8.0.0/24
如果想让 CatWrt 下的设备都走 WireGuard,再改成:
0.0.0.0/0
如果页面有 Route Allowed IPs / 路由允许的 IP,需要勾选。
5. 设置防火墙区域
如果只是让 CatWrt 自己访问 WireGuard,把 wg_vps 放到 lan 区域即可。
如果想让 CatWrt 下面的设备通过 WireGuard 上网,建议把 wg_vps 放到 wan 区域,因为 wan 通常已经开启 NAT,并允许 lan -> wan 转发。
如果你新建了 vpn 区域,需要确认:
lan -> vpn:允许转发
vpn:开启 Masquerading
vpn:允许输出
普通用户建议先放到 wan 区域,少踩坑。
6. CatWrt 测试
SSH 到 CatWrt:
wg show
ping 10.8.0.1
如果看到 latest handshake,说明已经连上。如果 CatWrt 配的是全局流量,可以测试出口 IP:
curl ifconfig.me
显示服务器公网 IP,说明 CatWrt 已经通过 WireGuard 出口上网。
八、常见坑
1. 没有握手
优先检查:云服务器安全组是否放行 UDP 51820,服务器防火墙是否放行 UDP 51820,客户端 Endpoint 是否写错,服务端是否添加了对应客户端 Peer,公钥是否填反。
2. 有握手但不能上网
检查服务器是否开启转发:
cat /proc/sys/net/ipv4/ip_forward
必须输出:
1
再检查 NAT 网卡名是否正确:
ip route | grep default
如果实际网卡是 ens3,配置里却写 eth0,就会连上但不能上网。
3. 多个客户端互相顶掉
原因通常是多个设备用了同一个配置。每台设备都要有独立 PrivateKey 和独立 Address。
4. CatWrt 一启用就断网
先把 CatWrt 的 AllowedIPs 从:
0.0.0.0/0
改成:
10.8.0.0/24
确认基础连接正常后,再考虑全局代理。旁路由不会自动接管全家流量,如果 CatWrt 是旁路由,还需要让设备网关指向 CatWrt,或者使用策略路由。
5. 能连但网页打不开
优先检查 DNS。客户端可以先写:
DNS = 1.1.1.1
如果某些网络下不稳定,保留:
PersistentKeepalive = 25
必要时把 MTU 改小:
MTU = 1280
九、新增客户端接入时怎么修改
后面如果要新增手机、电脑、平板、路由器,不需要重装 WireGuard,只需要做三件事:生成新客户端密钥、服务端增加一个 Peer、生成新客户端配置。
1. 规划一个新 IP
先给新设备分配一个没有用过的 WireGuard IP。例如前面已经用了:
手机:10.8.0.2
电脑:10.8.0.3
CatWrt:10.8.0.10
新增一台平板,可以用:
平板:10.8.0.4
不要和已有设备重复。
2. 生成新客户端密钥
假设新客户端叫 pad:
cd /etc/wireguard
sudo bash -c 'umask 077; wg genkey | tee /etc/wireguard/pad_private.key | wg pubkey > /etc/wireguard/pad_public.key'
查看新客户端公钥:
sudo cat /etc/wireguard/pad_public.key
3. 修改服务端配置
编辑服务端配置:
sudo vim /etc/wireguard/wg0.conf
在文件末尾追加:
[Peer]
# pad
PublicKey = 填pad_public.key里的内容
AllowedIPs = 10.8.0.4/32
注意:服务端这里只需要新增这个客户端的 [Peer],不要修改已有手机、电脑、CatWrt 的配置。
4. 重启 WireGuard
sudo systemctl restart wg-quick@wg0
查看状态:
sudo wg show
重启时已有客户端会短暂断开,几秒后会自动恢复。普通用户用这种方式最简单。
5. 生成新客户端配置
查看服务端公钥和新客户端私钥:
sudo cat /etc/wireguard/server_public.key
sudo cat /etc/wireguard/clients/pad_private.key
创建新客户端配置:
sudo vim /etc/wireguard/clients/pad.conf
写入:
[Interface]
PrivateKey = 填pad_private.key里的内容
Address = 10.8.0.4/32
DNS = 1.1.1.1
MTU = 1420
[Peer]
PublicKey = 填server_public.key里的内容
Endpoint = 你的服务器公网IP或域名:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
如果这个客户端只想访问 WireGuard 内网,不想让所有流量都走服务器,把:
AllowedIPs = 0.0.0.0/0
改成:
AllowedIPs = 10.8.0.0/24
6. 导入新客户端
手机或平板可以生成二维码:
sudo qrencode -t ansiutf8 < /etc/wireguard/clients/pad.conf
然后用 WireGuard App 扫码导入。电脑客户端则直接导入 pad.conf 文件。
7. 新增客户端时最容易出错的地方
新增客户端时,只记住这几条:
1. 新设备必须用新的 PrivateKey 和 PublicKey
2. 新设备必须用新的 Address,不能和旧设备重复
3. 服务端必须新增一个对应的 [Peer]
4. 服务端 Peer 里的 AllowedIPs 要写这个客户端的 /32
5. 原有客户端配置不用改
例如新增 pad,服务端只新增:
[Peer]
# pad
PublicKey = pad的PublicKey
AllowedIPs = 10.8.0.4/32
客户端只使用:
Address = 10.8.0.4/32
不要复制旧手机的配置直接用,否则两个设备会互相顶掉。
-
obsidian修改字体间距
背景 我的方案是使用云盘进行obsidian的文件同步的,各端都使用云盘进行数据的同步。最近刚买了macmini,配置在obsidian同步的时候,macos不知道为什么".obsidian"隐藏文件...
2024/11/18
-
优必选小方头刷小智机器人
1. 背景 最近在调研看智能萌宠机器人,正好看到网上有人买了优必选的小方头机器来刷目前的小智,所以买来试试。小方头机器人在2019年9月20日发布,售价1099元,现在咸鱼100块钱就能买到;小智机器...
2025/03/27
-
dify和ragflow同时启动redis冲突
1. 背景 在同一台服务器上同时启动 Dify 和 Ragflow 时,可能会遇到 Redis 容器冲突的问题。具体表现为:当两个服务都启动后,其中一个服务的 Redis 容器可能会被删除,导致该服务...
2025/03/20
-
cursor内claude4.0 中国区无法使用解决方案
相信最近大家在使用cursor的claude4.0的时候突然发现提示: https://blog.askerlab.com/content/uploadfile/202511/c97117620656...
2025/07/20
求索空间
apostle9891
360视觉云
360智慧生活
gitea
导航
hoppscotch
暂无评论