OpenWRT 旁路由实战:解决主路由设网关为旁路由后断网

本文记录了我在 OpenWRT 旁路由上排查 “主路由指向旁路由后无法上网” 的全过程,
以及最终的正确配置与原理分析。


一、网络拓扑与目标

我这里的家庭/实验环境如下:

                   ┌──────────────┐
                   │    光猫      │
                   │  (ISP出口)   │
                   └──────┬───────┘
                          │
                    ┌─────▼────────────┐
                    │ 主路由            │
                    │ IP: 192.168.1.1  │
                    │ DHCP: 开启        │
                    │ 网关: 192.168.1.2 │ ← 指向旁路由
                    └─────┬──────┬─────┘
                          │      │
     ┌────────────────────┘      └────────────────────────┐
     │                                                    │
┌────▼───────┐                                   ┌────────▼─────────────┐
│ 电脑 / 手机 │                                   │ 旁路由 (OpenWRT)      │
│ DHCP 客户端 │                                   │ IP: 192.168.1.2      │
│ 网关: 1.2   │                                   │ 网关: 192.168.1.1    │
└────────────┘                                   │ DNS: 1.1 / 223.5.5.5 │
                                                 └──────────────────────┘

目标是:

  • 主路由将所有流量交给旁路由(由旁路由代理、出网);
  • 所有设备经由旁路由上网
  • 旁路由本身能正常访问互联网;
  • 内网设备也能访问旁路由(SSH / LuCI)。

二、最常见的错误:旁路由把网关指向自己

当主路由网关设置为 192.168.1.2 后,如果旁路由的配置是dhcp或配置中写成:

option gateway '192.168.1.2'

那网络就陷入了“回环死锁”:

  • 主路由把包交给旁路由;
  • 旁路由找不到出口(因为又指向自己);
  • DNS 不通、外网 ping 不通。

正确逻辑应当是:

主路由 → 旁路由(192.168.1.2) → 主路由(192.168.1.1)

因此,旁路由的网关必须指向主路由或上级设备(192.168.1.1)


三、旁路由的正确网络配置

编辑 /etc/config/network

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ipaddr '192.168.1.2'
        option netmask '255.255.255.0'
        option gateway '192.168.1.1'
        list dns '192.168.1.1'
        list dns '223.5.5.5'

✅ 注意:

  • option device 必须是 br-lan(桥接设备),不是 eth0
  • option proto 必须为 static,DHCP 模式下 gateway 会被忽略。

保存后:

/etc/init.d/network restart

四、能上网了却无法访问旁路由?防火墙在挡

配置完上面这步后,我遇到了一个新问题:

OpenWRT 自己能上网、能 ping 外网,但从主路由或电脑 ping 192.168.1.2 不通,LuCI 页面也打不开。

这其实是 OpenWRT 防火墙 zone 没正确绑定 LAN 接口 的问题。
默认 firewall.@zone[0] 可能没有绑定 network=’lan’,或者 input 策略为 REJECT。

解决办法如下:

uci set firewall.@zone[0].name='lan'
uci set firewall.@zone[0].network='lan'
uci set firewall.@zone[0].input='ACCEPT'
uci set firewall.@zone[0].output='ACCEPT'
uci set firewall.@zone[0].forward='ACCEPT'
uci commit firewall
/etc/init.d/firewall restart

这样就允许从内网访问旁路由的 SSH / Web / Ping。


五、配置总结与原理梳理

模块配置说明
主路由网关 → 192.168.1.2所有流量交给旁路由
旁路由 LANIP 192.168.1.2 / 网关 192.168.1.1网关不能指向自己
防火墙zone[0].input=’ACCEPT’ + network=’lan’放行内网访问

核心要点:

  1. 网关方向必须是单向(主路由→旁路由→上级),旁路由绝不能回指自己;
  2. 桥接设备一致性必须保证(LAN 用 br-lan);
  3. 防火墙 zone 必须绑定 lan,否则会挡住局域网访问。

六、验证命令与结果

旁路由上:

ip addr show br-lan
# inet 192.168.1.2/24 br-lan scope global br-lan

ip route
# default via 192.168.1.1 dev br-lan

ping -c 2 8.8.8.8
# OK

nslookup openwrt.org
# OK

主路由或电脑上:

ping 192.168.1.2
# OK,可访问旁路由

traceroute 8.8.8.8
# 192.168.1.1 -> 192.168.1.2 -> 外网

一切正常 🎉


七、结语

很多人第一次做“旁路由接管主路由出口”时,都会遇到这三个坑:

  1. 网关方向写反;
  2. 接口设备用错;
  3. 防火墙 zone 未绑定。

理解这背后的原理后,其实就能非常稳定地运行旁路由了。
如果要进一步实现分流、代理或多出口策略,只要在此基础上配置策略路由即可。


作 者:motorbottle
链 接: https://blog.motorbottle.site/archives/650
来 源:Motor's Blog
版 权 声 明:本博客所有文章除特别声明(如【转载】)外,均采用CC BY-NC-SA 4.0许可协议。文章版权归作者所有,未经允许请勿转载!


评论

  1. Xiao
    1 周前
    2025-11-04 16:52:29

    差点给我袋儿整红温了

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇