You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

通过VPS部署的WireGuard VPN实现家庭局域网远程访问的配置求助

通过VPS部署的WireGuard VPN实现家庭局域网远程访问的配置求助

我的问题背景

我现在用VPS搭了WireGuard VPN,已经添加了两个Peer:我的个人笔记本,还有家里一直保持VPN连接的树莓派。目前的情况是:笔记本连VPN后能SSH到树莓派,在树莓派上能访问家里所有设备,但我想直接在笔记本上输入家庭路由器的地址(比如192.168.1.1)就能打开配置页——也就是把家庭局域网的流量通过VPN路由到树莓派,再由树莓派转发到家里的网络。现在树莓派只是普通Peer,是不是得把它配置成路由器?求各位大佬给点建议!


我的当前配置文件

Windows PC客户端配置

[Interface]
PrivateKey = XXXXXXXXXX
Address = 10.66.66.2/32, fd42:42:42::2/128
DNS = 9.9.9.9, 1.1.1.1
PostUp = "C:\Program Files\WireGuard\Data\Configurations\vpn-up.bat"
PostDown = "C:\Program Files\WireGuard\Data\Configurations\vpn-down.bat"

[Peer]
PublicKey = XXXXXXXXXX
PresharedKey = XXXXXXXXXX
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = XXXXXXXXXX

Windows客户端的PostUp/PostDown脚本

vpn-up.bat

@echo off
route -p ADD 192.168.0.0 MASK 255.255.0.0 10.66.66.3 METRIC 10

vpn-down.bat

@echo off
route DELETE 192.168.0.0

已勾选「Block all untunneled traffic」选项

树莓派客户端配置

[Interface]
PrivateKey = XXXXXXXXXX
Address = 10.66.66.3/32,fd42:42:42::3/128
DNS = 9.9.9.9,1.1.1.1

[Peer]
PublicKey = XXXXXXXXXX
PresharedKey = XXXXXXXXXX
Endpoint = XXXXXXXXXX
AllowedIPs = 0.0.0.0/0,::/0
PersistentKeepalive = 25

已在sysctl.conf中开启IPv4转发:net.ipv4.ip_forward=1

树莓派路由表(netstat -rn

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.1.1     0.0.0.0         255.255.255.255 UH        0 0          0 eth0

WireGuard VPS服务器配置

[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 53032
PrivateKey = SPnAugHnka45RWLzrDWBeAt8GA2e92yLVf6jeHXy0kw=

PostUp = iptables -I INPUT -p udp --dport 53032 -j ACCEPT
PostUp = iptables -I FORWARD -i enp1s0 -o wg0 -j ACCEPT
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
PostUp = ip6tables -I FORWARD -i wg0 -j ACCEPT
PostUp = ip6tables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE

PostDown = iptables -D INPUT -p udp --dport 53032 -j ACCEPT
PostDown = iptables -D FORWARD -i enp1s0 -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o enp1s0 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i wg0 -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o enp1s0 -j MASQUERADE

### Client Windows Laptop
[Peer]
PublicKey = XXXXXXXXXX=
PresharedKey = XXXXXXXXXX=
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128

### Client RPi server
[Peer]
PublicKey = XXXXXXXXXX
PresharedKey = XXXXXXXXXX
AllowedIPs = 10.66.66.3/32,fd42:42:42::3/128,192.168.1.0/24

VPS路由表(netstat -rn

0.0.0.0         192.XXX.XXX.1   0.0.0.0         UG        0 0          0 enp1s0
10.66.66.0      0.0.0.0         255.255.255.0   U         0 0          0 wg0
169.YYY.YYY.254 192.XXX.XXX.1   255.255.255.255 UGH       0 0          0 enp1s0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wg0
192.XXX.XXX.0   0.0.0.0         255.255.254.0   U         0 0          0 enp1s0

已在sysctl.conf中开启IPv4转发:net.ipv4.ip_forward=1


问题分析与解决方案建议

兄弟,你的思路完全正确,树莓派确实需要承担路由转发的角色,现在的配置差了几个关键步骤,我帮你梳理下:

1. 树莓派侧补充转发与SNAT规则

你已经开了net.ipv4.ip_forward=1,这是基础,但还需要配置iptables让树莓派能把WireGuard的流量转发到家庭局域网,同时做SNAT转换(不然家里的设备不知道怎么把数据包发回给你的笔记本)。

在树莓派上执行以下命令(可以用iptables-persistent保存规则,或者加到开机自启脚本里):

# 允许WireGuard流量转发到家庭局域网
iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
# 允许家庭局域网的响应流量转发回WireGuard
iptables -A FORWARD -i eth0 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# SNAT转换:把WireGuard过来的数据包源地址换成树莓派的家庭局域网IP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

2. 优化Windows客户端的路由配置

你现在Windows的AllowedIPs0.0.0.0/0(全流量走VPN),虽然加了静态路由脚本,但可以更精准:把家庭局域网段(192.168.1.0/24)加到AllowedIPs里,WireGuard会自动处理路由,不用依赖bat脚本。

修改Windows客户端的[Peer]段:

[Peer]
PublicKey = XXXXXXXXXX
PresharedKey = XXXXXXXXXX
# 保留全流量VPN的同时,明确指定家庭网段路由
AllowedIPs = 10.66.66.0/24, 192.168.1.0/24, 0.0.0.0/0
Endpoint = XXXXXXXXXX

如果还是想用bat脚本,注意你的家庭网段是192.168.1.0/24,脚本里的192.168.0.0/16虽然能覆盖,但更精准的话改成:route -p ADD 192.168.1.0 MASK 255.255.255.0 10.66.66.3 METRIC 10

3. 检查VPS的转发规则

你的VPS配置里已经加了iptables -I FORWARD -i wg0 -j ACCEPT,这个没问题,但要确保VPS的系统防火墙(比如ufw、firewalld)没有阻止转发流量。另外VPS上的树莓派Peer段已经把192.168.1.0/24加到AllowedIPs,这一步很关键,VPS才知道把家庭网段的流量转发给树莓派,这个配置是对的。

4. 家庭路由器添加静态路由(可选但推荐)

如果家里设备无法响应笔记本的请求,可能是因为它们的默认网关是家庭路由器,不知道怎么把数据包发回WireGuard网络。这时候可以在路由器上添加一条静态路由:

  • 目标网络:10.66.66.0/24(WireGuard网段)
  • 下一跳:树莓派的家庭局域网IP(比如192.168.1.X)
    这样路由器就知道把发往WireGuard网段的数据包交给树莓派处理。

测试步骤

  1. 重启树莓派的WireGuard服务:sudo wg-quick down wg0 && sudo wg-quick up wg0
  2. 重启Windows的WireGuard连接
  3. 在Windows上ping 192.168.1.1,验证连通性
  4. 若ping通,浏览器访问192.168.1.1即可打开路由器配置页

备注:内容来源于stack exchange,提问作者vviston

火山引擎 最新活动