基于Wireguard的家庭内网安全远程访问方案

实现目标

以云服务器作为中转节点,使用 WireGuard 建立点对点的加密隧道,实现外网安全访问家庭内网。

环境准备

云服务器

这里使用 Ubuntu 22.04,有独立公网 ip,能放行指定 TCP/UDP 端口。

家庭客户端

  • 家庭电脑(Linux / Wiindows)
  • 支持 WireGuard 的路由器

云服务器配置

安装 WireGuard

通过 ssh 连接到云服务器,执行以下命令:

1
2
3
apt upgrade
apt update
apt install -y wireguard

安装成功后输入以下命令,确认 WireGuard 安装成功:

1
2
3
4
wg version

## 输出
wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/

安装 WireGuard-UI

WireGuard 是根据配置文件来进行管理的,对于非技术人员来说非常不友好,所以选择一个 UI 界面项目来管理 WIreGuard。

下载

WireGuard-UI 是在 Github 中相关项目最多赞的,界面美观性、实用性都很好,所以选择这个项目来管理我们的 WireGuard。使用以下命令去进行下载:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 目前我是安装在/etc/wireguard目录下
cd /etc/wireguard
mkdir ui && cd ui

wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.0/wireguard-ui-v0.6.0-linux-386.tar.gz

## 解压文件
tar -zxvf wireguard-ui-v0.6.0-linux-386.tar.gz

## 解压后会在当前文件生成一个名为wireguard-ui的二进制文件
ls
## 输出
wireguard-ui wireguard-ui-v0.6.0-linux-386.tar.gz

创建配置文件

创建 WireGuard-UI 的配置文件,该项目是用 .env 环境变量的方式去管理配置,所有的配置项点击这里进行查看;这里为了方便展示,选用一个最简单就能运行的配置项:

1
2
3
4
5
6
7
8
9
vim .env

## 编辑.env文件内容

#配置绑定IP和端口,默认为5000
BIND_ADDRESS=0.0.0.0:11194 # ui的登录账户
WGUI_USERNAME=admin
# ui的登录账户密码
WGUI_PASSWORD=jh826708

配置开机启动以及参数配置

下载之后使用 Systemd 进行管理,使用以下命令创建 Service 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vim /lib/systemd/system/wireguard-ui.service


## 粘贴以下内容到文件内
[Unit]
Description=WireGuard UI Daemon
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
WorkingDirectory=/etc/wireguard/ui
EnvironmentFile=/etc/wireguard/ui/.env
ExecStart=/etc/wireguard/ui/wireguard-ui

[Install]
WantedBy=multi-user.target

配置开机启动

1
2
3
4
systemctl daemon-reload
systemctl start wireguard-ui.service
systemctl enable wireguard-ui.service
systemctl status wireguard-ui.service

启动后会在 /etc/wireguard 目录下创建 wg0.conf 配置文件,查看该文件的 Listen Port,修改你想要监听的见口,然后去云服务器处放行该端口,这样就可以在公网访问到该 UI 界面了。

设置当配置文件修改时,自动重启 WireGuard

WireGuard 在有一个新的客户端要连接时,都会修改配置文件添加 Peer 的信息,还要手动敲入命令进行重启,这就很麻烦。虽然 WireGuard-UI 只负责配置信息生成,但也需要我们手动的重启 WireGuard。

我们可以使用 Systemd 对 WireGuard 的配置文件进行监听,只要我们通过 WireGuard-UI 添加或者删除了 Peer,就会重新生成 WireGuard 的配置文件,Systemd 就会监听到这个操作,自动的帮我们重启 WireGuard。

使用 Systemd 实现文件监听和发生事件后的脚本操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## 该服务文件是监听wireguard配置文件的修改事件
vim /lib/systemd/system/wgui.path

## 编辑文件
[Unit]
Description=监听/etc/wireguard/wg0.conf文件的改动

[Path]
PathModified=/etc/wireguard/wg0.conf

[Install] WantedBy=multi-user.target


## 当配置文件发生时所做的操作
vim /lib/systemd/system/wgui.service

[Unit] Description=当监听到/etc/wireguard/wg0.conf文件的改动时,重启 WireGuard After=network.target
[Service] Type=oneshot ExecStart=/usr/bin/systemctl restart wg-quick@wg0.service

[Install] RequiredBy=wgui.path

wgui.service 文件内的 ExecStar 选项中,是对 wg-quick@wg0.service 进行重启,@符号后的wg0字符 对应 WireGuard 位于 /etc/wireguard 目录下的配置文件名称;比如现在我是对 wg-quick@wg0.service 进行重启,所以我服务端 /etc/wireguard 目录下的配置名称就是叫 wg0.conf。

具体的 Systemd 语法请看 Systemd详解(1)

访问、管理、添加客户端配置

浏览器打开

访问你云服务器的公网 IP 以及对应的端口

输入 .env 配置文件里面的账户密码

修改管理员默认密码

WireGuard 服务端配置

1
2
3
4
5
## Post Up Script
iptables -I FORWARD 1 -i wg0 -j ACCEPT; iptables -I FORWARD 2 -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

## Post Down Script
iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

将上面的脚本命令粘贴到下图中

修改后再页面右上角点击 Apply Config 按钮生成新的配置文件,因为之前也生成了对配置文件的监听,所以当配置文件有内容上的更新时,就会重新 WireGuard 服务。

新建客户端

按照下图所示步骤添加客户端

添加后就可以通过 Download 和 QR Code 按钮下载配置文件到客户端。

家庭客户端

家庭客户端我这里只演示 Linux(Ubuntu 22.04)的,其他平台就不演示了。

安装 WireGuard

安装 WireGuard 步骤和云服务器侧一致,这里就不赘述了。

新建配置文件

在 /etc/wireguard 目录下新建 wg0.conf 配置文件,文件内容就是在 Web 界面中下载的内容:

1
2
3
4
5
6
7
8
9
10
11
12

vim /etc/wireguard/wg0.conf

## 文件内容
[Interface] Address = 10.252.1.1/32 PrivateKey = 密钥内容
DNS = 1.1.1.1,8.8.8.8 MTU = 1450

[Peer] PublicKey = 公钥内容
PresharedKey = aiKWUo3g33V8kwOldFjOeVwR8O2OtfnbCf+I9xvMBMM=
AllowedIPs = 0.0.0.0/0
Endpoint = 云服务公网地址:51820
PersistentKeepalive = 60

然后执行以下命令启动 WireGuard:

1
sudo wg-quick up wg0

执行成功后在 Web 界面就可以看到对应的客户端上线了

到现在 WireGuard 服务就搭建完成了,后面要是有新的客户端要接入,就在 Web 界面中新建客户端,填写好信息后提交。在下载该配置文件到客户端中,使用 WireGuard 命令完成连接。连接后就可以访问对方的网络了。


基于Wireguard的家庭内网安全远程访问方案
https://sunshinechen.cn/2026/01/05/基于Wireguard的家庭内网安全远程访问方案/
作者
sunshine
发布于
2026年1月5日
许可协议