WireGuard组网方案
前言
本方案实现:
✅ 云服务器 ↔ 家庭网络 双向加密互通
✅ 云服务器直接访问家庭内网全网段
✅ 重启不失效、无额外依赖、纯系统原生配置,适配openEuler环境
核心前提
- 云服务器:Debian系统、公网IP 111.111.111.111
- 家庭内网:192.168.3.x网段、一台24h开机设备
假设如下固定参数:
-
云服务器公网IP:111.111.111.111
-
WireGuard虚拟网段:10.10.10.0/24
-
云服务器虚拟IP:10.10.10.1
-
树莓派虚拟IP:10.10.10.2
-
家庭内网网段:192.168.3.0/24
-
WireGuard端口:52810/udp
一、云服务器(Debian)配置
1. 安装WireGuard核心组件
apt update && apt install -y wireguard
2. 生成服务端密钥
cd /etc/wireguard
# 生成服务端公私钥
wg genkey | tee server.key | wg pubkey > server.pub
# 赋予密钥安全权限
chmod 600 server.key server.pub
3. 编写WireGuard配置
vi wg0.conf
粘贴以下配置,私钥直接替换为server.key内内容
[Interface]
# WireGuard服务端虚拟IP
Address = 10.10.10.1/24
# 监听端口(固定UDP)
ListenPort = 52810
PrivateKey = $(cat server.key)
# 没有iptables/nftables则不需要如下内容
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
4. 开启内核IP转发(永久生效)
# 临时开启转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久开启,重启生效
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
5.防火墙放行 52810/UDP
ufw allow 52810/udp
ufw reload
6. 启动并开机自启WireGuard
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
查看状态:
wg show
7. 查看并保存服务端公钥
cat server.pub
复制这段公钥,后续客户端配置要用。
二、客户端配置
1. 安装WireGuard
- 正常的OS
apt update && apt install -y wireguard
- OpenEuler
# openEuler用 Debian/Ubuntu 预编译的 wireguard-go(arm64)
wget https://http.kali.org/pool/main/w/wireguard-go/wireguard-go_0.0.20231211-1+b10_arm64.deb
ar x wireguard-go_0.0.20231211-1+b10_arm64.deb
tar xf data.tar.xz
# 得到文件:./usr/bin/wireguard-go
mv ./usr/bin/wireguard-go /usr/bin/
# 加权
chmod +x /usr/bin/wireguard-go
# 安装wireguard-tools
dnf install -y wireguard-tools
2. 生成客户端密钥
cd /etc/wireguard
wg genkey | tee pi.key | wg pubkey > pi.pub
3. 编写客户端配置文件
cat > wg0.conf <<EOF
[Interface]
Address = 10.10.10.2/24
PrivateKey = $(cat pi.key)
# 不修改路由表(禁止WireGuard修改原有路由表)
Table = off
# 添加NAT伪装(解决回程路由缺失的问题)
PostUp = iptables -t nat -A POSTROUTING -d 192.168.3.0/24 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -d 192.168.3.0/24 -j MASQUERADE
[Peer]
PublicKey = 云服务器server.pub公钥
Endpoint = 111.111.111.111:52810
AllowedIPs = 10.10.10.0/24,192.168.3.0/24
PersistentKeepalive = 25
EOF
将文中的公钥替换为云服务器生成的server.pub内容,无需配置iptables/nftables。
4. 开启树莓派内核转发
# 临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久开启
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
5. 启动并开机自启
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
6. 查看并保存树莓派公钥
cat pi.pub
复制这段公钥,后续云服务器添加客户端要用。
三、云服务器绑定树莓派客户端
1. 编辑服务端配置,追加Peer
vi /etc/wireguard/wg0.conf
在文件末尾追加以下内容,替换为树莓派公钥:
# 树莓派客户端
[Peer]
PublicKey = 树莓派pi.pub公钥
AllowedIPs = 10.10.10.2/32,192.168.3.0/24
2. 重启WireGuard生效
systemctl restart wg-quick@wg0
四、连通性测试
# 云服务器测试树莓派虚拟IP
ping 10.10.10.2
# 云服务器测试家庭内网设备IP
ping 192.168.3.x
# 树莓派测试云服务器虚拟IP
ping 10.10.10.1
一键查看连接状态
# 原生状态查看
wg show
# 一键状态脚本
vi /usr/local/bin/wg-status
#!/bin/bash
echo "=== WireGuard 连接状态 ==="
wg show
echo -e "\n=== 内网连通测试 ==="
ping -c 2 10.10.10.2
ping -c 2 192.168.3.1
chmod +x /usr/local/bin/wg-status
# 直接运行查看
wg-status
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Salted Fish
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果


