通过 WireGuard 实现云服务器与家庭 NAS 的安全互联:完整教程
一、背景需求你是否遇到过以下问题?
[*]想在外网安全访问家中 NAS 的 SSH、Web 服务或私有 GitLab?
[*]云服务器有公网 IP,但家庭宽带没有固定公网 IP?
[*]直接暴露 NAS 端口到公网存在安全隐患?
WireGuard 的解决方案:
通过轻量级 VPN 买通云服务器与家庭 NAS,所有流量加密传输,仅需开放 1 个 UDP 端口即可实现双向通信。
二、环境阐明(其他系统过程相近)
角色配置网络信息云服务器Fedora 40+,公网 IP 1.2.3.4WireGuard 服务端 IP 10.8.0.1家庭 NASFedora 40+,内网 IP 192.168.1.100WireGuard 客户端 IP 10.8.0.2 三、完整配置流程
1. 云服务器(服务端)配置
步骤 1:安装 WireGuard
sudo dnf install wireguard-tools
步骤 2:天生密钥对
wg genkey | sudo tee /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
sudo chmod 600 /etc/wireguard/private.key
步骤 3:创建配置文件 /etc/wireguard/wg0.conf
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <云服务器私钥># 替换为 private.key 内容
PublicKey = <NAS公钥> # 后续从 NAS 获取
AllowedIPs = 10.8.0.2/32
步骤 4:启用内核转发与防火墙
# 启用 IP 转发
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl -p
# 开放 WireGuard 端口
sudo firewall-cmd --permanent --add-port=51820/udp
sudo firewall-cmd --reload
# 启动服务
sudo systemctl enable --now wg-quick@wg0
2. 家庭 NAS(客户端)配置
步骤 1:安装 WireGuard
sudo dnf install wireguard-tools
步骤 2:天生密钥对
wg genkey | sudo tee /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
sudo chmod 600 /etc/wireguard/private.key
步骤 3:创建配置文件 /etc/wireguard/wg0.conf
Address = 10.8.0.2/24
PrivateKey = <NAS私钥># 替换为 private.key 内容
PublicKey = <云服务器公钥># 替换为云服务器的 public.key 内容
Endpoint = 1.2.3.4:51820
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25
步骤 4:启动服务
sudo systemctl enable --now wg-quick@wg0
3. 验证毗连
查抄隧道状态
# 在云服务器执行
sudo wg show
# 预期输出应包含:
# peer: <NAS公钥>
# latest handshake: 时间戳
# transfer: 有数据流量
测试连通性
# 从云服务器 ping NAS
ping 10.8.0.2
# 从 NAS ping 云服务器
ping 10.8.0.1
四、通过云服务器访问 NAS 服务
场景 1:SSH 毗连
# 在云服务器上直接访问 NAS 的 VPN IP
ssh your_username@10.8.0.2
# 或通过公网端口转发(将云服务器的 2222 端口映射到 NAS 的 22 端口)
sudo firewall-cmd --permanent --add-forward-port=port=2222:proto=tcp:toaddr=10.8.0.2:toport=22
sudo firewall-cmd --reload
# 外部用户访问命令
ssh -p 2222 your_username@1.2.3.4
场景 2:访问 Web 服务
假设 NAS 运行了一个博客在 8080 端口:
# 映射云服务器的 8080 端口到 NAS
sudo firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toaddr=10.8.0.2:toport=8080
sudo firewall-cmd --reload
# 外部用户访问
curl http://1.2.3.4:8080
五、深入解析:WireGuard 配置中的关键差异
在配置 WireGuard 时,仔细的读者大概注意到 云服务器(服务端) 和 家庭 NAS(客户端) 的 wg0.conf 文件中 AllowedIPs 参数存在显着差异。这种“不对称”设计是 WireGuard 实现高效路由和安全通信的核心逻辑,本节将具体解读其原理。
1. 配置对比:服务端 vs 客户端
配置项云服务器(服务端)家庭 NAS(客户端)Address = 10.8.0.1/24Address = 10.8.0.2/24 段每个客户端独立配置仅需配置服务端信息AllowedIPs10.8.0.2/32(精确 IP)10.8.0.0/24(整个子网)PersistentKeepalive通常无需配置(服务端被动监听)必须配置(穿透 NAT 保持毗连) 2. AllowedIPs 的双重作用
AllowedIPs 参数界说了两种行为:
[*]流量准入规则
[*]答应哪些来源 IP 的流量进入本机(类似白名单)。
[*]路由规则
[*]指定哪些目标 IP 的流量要通过 VPN 隧道发送。
3. 服务端的 /32 设计解析
配置示例
# 云服务器的 wg0.conf
PublicKey = <NAS公钥>
AllowedIPs = 10.8.0.2/32
设计逻辑
[*]10.8.0.2/32 的寄义
[*]/32 表示一个精确的单个 IP(仅匹配 10.8.0.2)。
[*]服务端声明:“我只接受来自 10.8.0.2 的流量,且所有发送到 10.8.0.2 的流量都通过此隧道”。
[*]扩展性上风
[*]当新增其他客户端(如手机 10.8.0.3)时,只需为每个设备添加独立的 段,每个 AllowedIPs 对应一个 /32 地点,避免路由冲突。
4. 客户端的 /24 设计解析
配置示例
# 家庭 NAS 的 wg0.conf
AllowedIPs = 10.8.0.0/24
设计逻辑
[*]10.8.0.0/24 的寄义
[*]/24 表示一个子网范围(10.8.0.1 ~ 10.8.0.254)。
[*]客户端声明:“所有目标在 10.8.0.0/24 网段的流量(如服务端或其他客户端),都通过此隧道发送”。
[*]通信机动性
[*]即使当前只有服务端(10.8.0.1),这种设计也答应未来直接与其他客户端(如 10.8.0.3)通信,无需修改配置。
5. 错误配置的后果
错误 1:服务端误用 /24
# 错误的服务端配置
AllowedIPs = 10.8.0.0/24# 错误!
[*]后果:
服务端会将所有目标为 10.8.0.0/24 的流量转发给该客户端(NAS),导致其他客户端无法正确路由。
错误 2:客户端误用 /32
# 错误的客户端配置
AllowedIPs = 10.8.0.1/32# 错误!
[*]后果:
客户端只能访问服务端 10.8.0.1,无法与其他 VPN 设备(如未来新增的 10.8.0.3)通信。
6. 进阶场景:多客户端扩展
假设未来添加一个手机客户端(10.8.0.3):
服务端配置更新
# 新增手机客户端配置
PublicKey = <手机公钥>
AllowedIPs = 10.8.0.3/32
手机客户端配置
AllowedIPs = 10.8.0.0/24# 仍需要整个子网
通信验证
[*]手机 → NAS:
10.8.0.3 访问 10.8.0.2,因手机的 AllowedIPs=10.8.0.0/24 包罗该目标,流量经服务端转发。
[*]服务端 → 手机:
服务端明白知道 10.8.0.3/32 对应手机的隧道。
7. 总结:WireGuard 的设计哲学
[*]最小化路由规则:通过精确的 AllowedIPs 界说,避免不必要的流量转发。
[*]高扩展性:服务端通过 /32 隔离客户端,客户端通过 /24 感知整个网络。
[*]安全性:默认拒绝所有流量,仅答应显式声明的 IP 通信。
通过这种“服务端精确控制 + 客户端全局感知”的设计,WireGuard 在保障安全性的同时,实现了高效机动的内网互通。理解这一原理后,您可以根据实际需求自由扩展 VPN 网络!
六、安全加固发起
[*] 限制 SSH 访问源
# 在 NAS 上仅允许来自 VPN IP 的 SSH 连接
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.8.0.1 port port=22 protocol=tcp accept'
sudo firewall-cmd --reload
[*] 密钥安全管理
[*]将 private.key 设为 600 权限
[*]禁止将私钥上传到版本控制工具
[*] 定期更新 WireGuard
sudo dnf update wireguard-tools
七、常见问题排查
问题 1:WireGuard 服务未启动
sudo systemctl status wg-quick@wg0
sudo journalctl -u wg-quick@wg0 --since "10 minutes ago"
问题 2:防火墙拦截流量
# 检查防火墙规则
sudo firewall-cmd --list-all
# 临时关闭防火墙测试(测试后务必重新启用)
sudo systemctl stop firewalld
问题 3:NAT 配置错误
# 检查云服务器的 NAT 规则
sudo iptables -t nat -L POSTROUTING
八、总结
通过本文的配置,您实现了:
[*]加密隧道通信:所有流量通过 WireGuard 的 UDP 加密隧道传输
[*]机动服务暴露:通过端口转发安全访问内网服务
[*]低延迟高性能:WireGuard 内核级实现,资源占用极低
扩展大概性:
[*]添加更多客户端(如手机、条记本)到 10.8.0.0/24 网络
[*]联合 Nginx 反向代理实现域名访问
[*]部署私有 GitLab/Jenkins 等工具并远程管理
注意事项:
[*]家庭宽带上行带宽大概成为速率瓶颈(国内通常为 10-30 Mbps)
[*]发起为云服务器配置 SSH 密钥登录 + Fail2ban 防护
相干资源:
[*]WireGuard 官方文档
[*]Fedora FirewallD 指南
原文链接:通过 WireGuard 实现云服务器与家庭 NAS 的安全互联:完整教程 - Lixx Blog - 李晓旭的博客
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]