树莓派自建WireGuard VPN更换OpenWRT路由器后无法访问互联网
树莓派自建WireGuard VPN更换OpenWRT路由器后无法访问互联网
看起来你已经搞定了VPN连接和远程SSH树莓派,唯独互联网访问卡壳了——这大概率是地址转换(MASQUERADE)或者路由配置没跟上,咱们一步步排查解决:
第一步:检查树莓派WireGuard的地址伪装规则
这是最常见的问题!当VPN客户端的流量通过树莓派转发到OpenWRT时,树莓派需要把客户端的IP伪装成自己的LAN IP,否则OpenWRT不知道该把返回的流量发回给哪个客户端。
- 登录树莓派,打开WireGuard配置文件:
nano /etc/wireguard/wg0.conf - 检查文件末尾是否有类似这样的
PostUp和PostDown规则(注意把eth0换成树莓派连接OpenWRT的实际网卡名,比如wlan0如果是无线连接的话,可以用ip addr查看网卡名称):PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE - 如果没有,添加这两行,然后保存退出,重启WireGuard服务:
wg-quick down wg0 && wg-quick up wg0
第二步:给OpenWRT添加静态路由
OpenWRT需要知道WireGuard客户端的子网流量要转发到树莓派,否则它会把这些流量直接丢到WAN口,导致无法返回。
假设你的WireGuard客户端子网是10.0.0.0/24(这个可以从树莓派的wg0.conf里的Address字段看到,比如服务器地址是10.0.0.1/24,那子网就是10.0.0.0/24):
方法1:Web界面操作
- 登录OpenWRT的Web管理后台,进入「网络」→「静态路由」
- 添加一条路由:
- 目标地址:
10.0.0.0/24(替换成你的实际子网) - 网关:
192.168.1.9(树莓派的LAN IP) - 接口:
lan
- 目标地址:
- 保存并应用配置
方法2:SSH命令操作
登录OpenWRT的SSH,执行以下命令:
uci add network route uci set network.@route[-1].target='10.0.0.0/24' uci set network.@route[-1].gateway='192.168.1.9' uci set network.@route[-1].interface='lan' uci commit network /etc/init.d/network restart
第三步:确认树莓派的IP转发已开启
确保树莓派允许转发IP流量:
- 执行命令检查状态:
如果输出是sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 1就没问题;如果是0,执行:sysctl -w net.ipv4.ip_forward=1 - 为了永久生效,编辑
/etc/sysctl.conf,找到net.ipv4.ip_forward=1这一行,去掉前面的注释符号#,保存退出。
第四步:排查DNS问题(如果能ping通IP但打不开网页)
如果连接VPN后能ping通8.8.8.8但无法浏览网页,那是DNS解析的问题:
- 打开WireGuard客户端的配置,把DNS设置为OpenWRT的LAN IP(比如
192.168.1.1)或者公共DNS(比如8.8.8.8) - 或者在树莓派的
wg0.conf里添加DNS = 192.168.1.1,这样客户端连接时会自动获取这个DNS
做完这些步骤后,重新连接VPN试试,应该就能正常访问互联网了!
备注:内容来源于stack exchange,提问作者Pisuke




