实现目标
以云服务器作为中转节点,使用 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
| 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
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
BIND_ADDRESS=0.0.0.0:11194 WGUI_USERNAME=admin
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
| 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
| 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
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:
执行成功后在 Web 界面就可以看到对应的客户端上线了

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