前言

本方案实现:

✅ 云服务器 ↔ 家庭网络 双向加密互通
✅ 云服务器直接访问家庭内网全网段
✅ 重启不失效、无额外依赖、纯系统原生配置,适配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