本文记录了我在 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 | 所有流量交给旁路由 |
| 旁路由 LAN | IP 192.168.1.2 / 网关 192.168.1.1 | 网关不能指向自己 |
| 防火墙 | zone[0].input=’ACCEPT’ + network=’lan’ | 放行内网访问 |
核心要点:
- 网关方向必须是单向(主路由→旁路由→上级),旁路由绝不能回指自己;
- 桥接设备一致性必须保证(LAN 用
br-lan); - 防火墙 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 -> 外网
一切正常 🎉
七、结语
很多人第一次做“旁路由接管主路由出口”时,都会遇到这三个坑:
- 网关方向写反;
- 接口设备用错;
- 防火墙 zone 未绑定。
理解这背后的原理后,其实就能非常稳定地运行旁路由了。
如果要进一步实现分流、代理或多出口策略,只要在此基础上配置策略路由即可。
差点给我袋儿整红温了