Loading
XUEAYI_SPACE
0%
INITIALIZING
如何优雅地异地组网?超详细的WireGuard安装与使用说明
DOC_ID // 2d16beONLINE

如何优雅地异地组网?超详细的WireGuard安装与使用说明

2025-12-22
UPDATED: 2026-10-2
技术分享
3899 CHARS
#WIREGUARD#NAS#VPN#异地组网
XUEAYI_SPACE
你是否遇到过这样的场景:在咖啡厅想访问家里的 NAS 存取文件?或者作为开发者,需要在异地调试公司内网的服务器?WireGuard则可以成为你安全又优雅地进行异地组网方案。
WireGuard 是被直接合并入 Linux 内核的新一代 VPN 协议,它以极简的代码、极高的性能和秒连的体验著称。
本文将带你一步步在 Ubuntu 22.04 上搭建 WireGuard 服务端,配置客户端,并通过脚本实现自动化管理,最后完成多地局域网互联。
WireGuard 组网拓扑示意图
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) 连在一起。
notion image

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:
  1. 创建接口:添加 WireGuard 接口,填入私钥和 VPS 的公钥。
  1. 配置 AllowedIPs:填入 10.100.0.0/24 (VPN网段) 和 192.168.2.0/24 (你需要访问的公司网段)。
  1. 开启防火墙转发:
      • 在防火墙设置中,将 WireGuard 接口加入一个新的区域(如 vpn_zone)。
      • 允许 lan 到 vpn_zone 的转发。
      • 重要:开启 IP 动态伪装(Masquerading)。
  1. 系统内核转发:
OpenWrt 后台防火墙区域设置截图
OpenWrt 后台防火墙区域设置截图

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 是从零上手的完整教程。
NAVIGATION // Related Articles
Loading...