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

树莓派自建WireGuard VPN更换OpenWRT路由器后无法访问互联网

树莓派自建WireGuard VPN更换OpenWRT路由器后无法访问互联网

看起来你已经搞定了VPN连接和远程SSH树莓派,唯独互联网访问卡壳了——这大概率是地址转换(MASQUERADE)或者路由配置没跟上,咱们一步步排查解决:

第一步:检查树莓派WireGuard的地址伪装规则

这是最常见的问题!当VPN客户端的流量通过树莓派转发到OpenWRT时,树莓派需要把客户端的IP伪装成自己的LAN IP,否则OpenWRT不知道该把返回的流量发回给哪个客户端。

  1. 登录树莓派,打开WireGuard配置文件:
    nano /etc/wireguard/wg0.conf
    
  2. 检查文件末尾是否有类似这样的PostUpPostDown规则(注意把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
    
  3. 如果没有,添加这两行,然后保存退出,重启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界面操作

  1. 登录OpenWRT的Web管理后台,进入「网络」→「静态路由」
  2. 添加一条路由:
    • 目标地址:10.0.0.0/24(替换成你的实际子网)
    • 网关:192.168.1.9(树莓派的LAN IP)
    • 接口:lan
  3. 保存并应用配置

方法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流量:

  1. 执行命令检查状态:
    sysctl net.ipv4.ip_forward
    
    如果输出是net.ipv4.ip_forward = 1就没问题;如果是0,执行:
    sysctl -w net.ipv4.ip_forward=1
    
  2. 为了永久生效,编辑/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

火山引擎 最新活动