
关于
WireGuard VPN 服务器搭建、对等节点配置、密钥生成、分流隧道 vs 全隧道路由,以及从移动端和笔记本远程访问家庭网络。
name: homelab-wireguard-vpn description: WireGuard VPN 服务器搭建、对等节点配置、密钥生成、分流隧道与全流量隧道路由,以及从手机和笔记本远程访问家庭网络。 origin: community
家庭实验室 WireGuard VPN
WireGuard 是一种快速、现代的 VPN 协议。它是远程访问家庭网络的最佳选择——比 OpenVPN 配置更简单,比大多数替代方案更快。
所有配置示例展示的是常见设置。在应用到你的系统之前,请检查每条命令——特别是 iptables 转发规则和密钥文件权限——并在维护窗口期进行更改。
适用场景
- 在树莓派、Linux 主机、pfSense 或路由器上搭建 WireGuard 服务器
- 生成 WireGuard 密钥对并编写对等节点配置文件
- 配置从手机或笔记本远程访问家庭网络
- 解释分流隧道(仅路由家庭流量)与全流量隧道(路由所有流量)
- 排查无法建立的 WireGuard 连接
- 自动化生成多客户端的对等节点配置
WireGuard 工作原理
你的手机(WireGuard 客户端)
│
│ 加密 UDP 隧道(端口 51820)
│
你的家庭路由器(WireGuard 服务器——需要公网 IP 或 DDNS)
│
你的家庭网络(192.168.1.0/24,NAS、树莓派等)
每个设备都有一个密钥对(公钥 + 私钥)。
服务器知道每个客户端的公钥。
客户端知道服务器的公钥 + 端点(IP:端口)。
流量端到端加密,无需中央服务器或证书颁发机构。
服务器搭建(Linux)
# 安装 WireGuard
sudo apt update && sudo apt install wireguard -y
# 生成服务器密钥对——从一开始就创建具有私有权限的文件
sudo mkdir -p /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server_private.key'
sudo sh -c 'wg pubkey < /etc/wireguard/server_private.key > /etc/wireguard/server_public.key'
# 编写服务器配置——替换实际的私钥值
# 不要将私钥存储在版本控制中或分享它们
sudo tee /etc/wireguard/wg0.conf << 'EOF'
[Interface]
Address = 10.8.0.1/24 # VPN 子网——服务器获得 .1
ListenPort = 51820
PrivateKey = <paste_server_private_key_here>
# 限定范围的转发规则:允许 VPN 流量进出,而非全局 FORWARD ACCEPT
PostUp = iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
PostUp = iptables -A FORWARD -i eth0 -o wg0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -o eth0 -j ACCEPT
PostDown = iptables -D FORWARD -i eth0 -o wg0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# 手机——替换为实际的手机公钥
PublicKey = <phone_public_key>
AllowedIPs = 10.8.0.2/32
[Peer]
# 笔记本——替换为实际的笔记本公钥
PublicKey = <laptop_public_key>
AllowedIPs = 10.8.0.3/32
EOF
sudo chmod 600 /etc/wireguard/wg0.conf
# 将 eth0 替换为你实际的出站接口名称
# 使用以下命令检查:ip route show default
# 启用 IP 转发(路由流量通过服务器所必需)
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system
# 启动 WireGuard 并设置开机自启
sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0
客户端配置
# 为每个客户端设备生成唯一的密钥对
# 在客户端运行,或在服务器上生成后安全传输私钥——绝不使用明文
umask 077
wg genkey | tee phone_private.key | wg pubkey > phone_public.key
# 客户端配置文件(phone_wg0.conf):
[Interface]
PrivateKey = <phone_private_key>
Address = 10.8.0.2/32
DNS = 192.168.1.2 # 可选:通过隧道使用 Pi-hole 进行 DNS 解析
[Peer]
PublicKey = <server_public_key>
Endpoint = your-home-ip.ddns.net:51820 # 你的公网 IP 或 DDNS 主机名
AllowedIPs = 192.168.1.0/24 # 分流隧道:仅家庭网络流量
# AllowedIPs = 0.0.0.0/0, ::/0 # 全流量隧道:所有流量通过 VPN
PersistentKeepalive = 25 # 保持 NAT 穿透(移动客户端必需)
分流隧道 vs 全流量隧道
# 分流隧道:AllowedIPs = 192.168.1.0/24
仅目标为家庭网络的流量通过 VPN。
互联网流量(YouTube、Spotify)直接访问——移动端性能更好。
最适合:"我只想从任何地方访问我的 NAS 和树莓派。"
# 全流量隧道:AllowedIPs = 0.0.0.0/0, ::/0
所有流量都通过你的家庭网络连接。
适用于:利用家庭 DNS/Pi-hole 广告拦截。
缺点:家庭上传速度成为你在任何地方的瓶颈。
# 多子网分流隧道(最常见的家庭实验室用例):
AllowedIPs = 192.168.10.0/24, 192.168.20.0/24, 192.168.30.0/24, 10.8.0.0/24
将所有 VLAN 路由通过隧道;互联网保持直连。
密钥生成与对等节点管理
兼容工具
Claude CodeCursor
标签
运维部署

