你是否遇到过这样的场景:在咖啡厅想访问家里的 NAS 存取文件?或者作为开发者,需要在异地调试公司内网的服务器?WireGuard则可以成为你安全又优雅地进行异地组网方案。
WireGuard 是被直接合并入 Linux 内核的新一代 VPN 协议,它以极简的代码、极高的性能和秒连的体验著称。
本文将带你一步步在 Ubuntu 22.04 上搭建 WireGuard 服务端,配置客户端,并通过脚本实现自动化管理,最后完成多地局域网互联。

一、 服务端部署
首先,我们需要一台拥有公网 IP 的服务器(VPS)作为中转枢纽。
1. 安装与密钥生成
更新软件源并安装 WireGuard:
WireGuard 的安全机制基于公钥和私钥。
生成服务端的密钥对:
2. 服务端核心配置
我们需要规划一个虚拟网段,例如
10.8.0.0/24。服务端本身占用 10.8.0.1。创建并编辑配置文件:
注: PostUp 和 PostDown 中的命令非常关键。它们指示系统在 WireGuard 启动和关闭时,自动配置 iptables 防火墙规则,允许流量转发(NAT),从而让客户端能通过服务器上网。
3. 开启内核转发
为了让服务器能转发流量,必须开启系统的 IP 转发功能:
4. 启动服务
启动 WireGuard 并设置开机自启:
请注意,服务名称 `wg-quick@wg0` 对应配置文件 `/etc/wireguard/wg0.conf`。你也可以创建 `prod.conf` 并通过 `wg-quick@prod` 启动,从而在一台机器上管理多个 VPN 通道。
切记: 在云服务商的后台(AWS/阿里云/腾讯云等)放行你设置的UDP监听端口,如我们的例子中 UDP 端口是
51821。二、 客户端接入
现在我们需要让一台设备(比如你的笔记本)连上这个服务端。
1. 手动创建流程
如果你想理解原理,可以手动走一遍流程。
步骤 A:客户端生成密钥
步骤 B:配置客户端 (
wg0.conf或在软件中直接进行编辑)步骤 C:服务端添加客户端公钥
回到服务端执行:
2. 效率进阶:自动化脚本管理
手动配置容易出错且繁琐。这里提供两个 Shell 脚本,分别用于一键添加和一键删除节点。
脚本一:创建节点 (create_client.sh)
此脚本会自动分配 IP、生成配置,甚至可以生成手机端所需的二维码(需安装
qrencode)。请修改脚本头部和客户端的配置区以适配你的服务器。记得给脚本加上可执行权限(chmod +x xxx.sh)
脚本二:删除节点 (remove_client.sh)
此脚本会清理运行中的接口、配置文件以及本地的密钥备份,保持环境整洁。
三、 高级篇:路由转发与多地组网
这是 WireGuard 最强大的功能之一。我们不仅要连接单个设备,还要让不同地点的整个局域网互通(Site-to-Site VPN)。
例如:将办公室网络 (
192.168.2.x) 和家庭网络 (192.168.1.x) 通过公网 VPS (10.100.0.1) 连在一起。
1. 核心概念:AllowedIPs
理解
AllowedIPs 是搞定路由转发的关键:- 在客户端(发起端):它的意思是“我想去哪里?”。如果填入
192.168.1.0/24,那么访问家庭局域网的流量就会被送入 VPN 隧道。
- 在服务端:它的意思是“谁可以使用这个 IP?”以及“去往这个网段的包该给谁?”。如果你告诉服务端 Peer A 的 AllowedIPs 是
192.168.1.0/24,那么服务端收到发往192.168.1.x的数据包时,就知道要转发给 Peer A。
2. 准备工作清单
在开始之前,请确保完成以下 Checklist:
所有 WireGuard 服务器/网关均已开启
net.ipv4.ip_forward=1。服务器
wg0.conf 中配置了 iptables NAT 规则 (MASQUERADE)。确保不同地点的局域网网段不冲突(例如家里用 192.168.1.x,公司用 192.168.2.x)。
3. OpenWrt 客户端设置(作为家庭网关)
在家庭的 OpenWrt 路由器上配置 WireGuard:
- 创建接口:添加 WireGuard 接口,填入私钥和 VPS 的公钥。
- 配置 AllowedIPs:填入
10.100.0.0/24(VPN网段) 和192.168.2.0/24(你需要访问的公司网段)。
- 开启防火墙转发:
- 在防火墙设置中,将 WireGuard 接口加入一个新的区域(如
vpn_zone)。 - 允许
lan到vpn_zone的转发。 - 重要:开启 IP 动态伪装(Masquerading)。
- 系统内核转发:

4. 完整配置示例
假设网络拓扑如下:
- 中转服务器 (VPS): 虚拟IP
10.100.0.1
- 家 (Home): 虚拟IP
10.100.0.2,局域网192.168.1.0/24
- 公司 (Office): 虚拟IP
10.100.0.3,局域网192.168.2.0/24
A. 中转服务器 (VPS) 配置
B. 家 (Home) 配置
C. 公司 (Office) 配置
配置完成后,当你身在公司,Ping
192.168.1.x 即可直通家里的设备,反之亦然。希望这篇指南能帮你顺利搭建起自己的安全网络!
附wireguard常用命令:
参考资料:
四、进阶:用面板把它管起来
前面从头到尾都是 SSH 加脚本。设备一多、还想做多地组网,这套流程就开始变累:记不清下一个虚拟 IP 分到哪、改了网段要挨个重发配置、谁把密钥权限改乱了也不知道。
因此,我把这套流程做成了一个面板:wg-panel,现在,你可以通过图形化界面直接管理上面这台中转节点。
面板不承载任何 VPN 流量。隧道仍然是 客户端 ↔ 中转节点,它只是个遥控器,关掉它也不影响已经连上的设备。
Docker 部署
在随便一台常开的机器上(NAS、家里的小主机都行)执行:
浏览器打开 http://<部署机IP>:13010,用户名 admin,密码默认是 admin。
进去第一件事:核对「连接设置」
这是标准流程,别跳过。打开左侧「连接设置」,核对服务地址(Endpoint)、SSH 端口与用户、WireGuard 接口名,看 SSH 私钥是否显示「已就绪」,然后点一次「测试连接」——它会重连、把管理脚本下发到节点、读回客户端数量。通了就说明这一层没问题,以后换节点、改端口都在这个页面完成,不用再动 compose 文件。
把已有配置纳管进来
如果节点上已经有前面手工或脚本建的 peer,进「备份 & 审计」点「纳管既有配置」:
- 先自动备份现有 wg0.conf;
- 把现网 peer 收进面板的登记表(能用 clients/*.pub 认出名字的会认出来);
- SaveConfig 改成 false,配置按登记表重渲染并 wg syncconf 同步进内核——在线设备不会掉线。
客户端不需要重新导入,clients/ 里的密钥继续沿用。
日常用它做什么
- 加设备:填名字选隧道模式,虚拟 IP 自动分配;生成的配置可以直接扫码(手机)、下载 .conf(电脑)或复制文本;
- 站点互联:给带内网的节点填上「网关网段」(比如 192.168.1.0/24),点一次「并入客户端并重签」,所有客户端的 AllowedIPs 一起更新——就是前面第三节手工做的那件事;
- 地址不够:/24 用满时在「中转节点 & IP」页加一个新虚拟网段(如 10.8.2.0/24),新设备自动落到有空位的段;段内还有设备时不允许摘除;
- 安全网:每次写配置前自动备份(可回滚、可删单份)、一键体检(能自动修的给「处理」,比如把密钥权限收回 600)、操作审计(谁什么时候下载了含私钥的配置都有记录)。
项目地址:github.com/xueayi/wg-panel,镜像 xueayis/wg-panel,仓库里的 docs/guide/getting-started.md 是从零上手的完整教程。

