OpenWrt 主路由 + iStoreOS 旁路由配置记录及踩坑总结

OpenWrt 主路由 + iStoreOS 旁路由配置记录及踩坑总结

最近重新部署了一下寝室网络,采用 OpenWrt 作为主路由,iStoreOS 作为旁路由 的方案。整体配置参考了 James Life Blog 的教程,并结合自己的实际环境进行了调整。

原教程:

https://jameslifeblog.com/istoreos#toc---2a

本文主要记录整个配置流程,以及最后遇到的一个很不小心的 DNS 配置错误


网络拓扑

                Internet
                    │
                  光猫
                    │
          OpenWrt(主路由)
          LAN:192.168.77.1
                    │
              交换机 / LAN
        ┌──────────┴──────────┐
        │                     │
     普通终端             iStoreOS
                        192.168.77.220
                     (旁路由模式)

整个网络仍然由 OpenWrt 完成:

  • PPPoE 拨号
  • DHCP
  • 防火墙
  • NAT

iStoreOS 仅负责旁路由相关功能,不参与 DHCP。


一、OpenWrt 配置

保持 OpenWrt 为唯一主路由。

主要负责:

  • WAN 拨号
  • DHCP 服务
  • DNS(可选)
  • NAT
  • 防火墙

LAN:

192.168.77.1/24

DHCP 正常开启。


二、iStoreOS 配置

安装完成后,进入网络向导。

选择:

旁路由模式

随后配置:

IP:

192.168.77.220

子网掩码:

255.255.255.0

网关:

192.168.77.1

DNS:

192.168.77.1

保存后重启网络。


三、为什么主路由 DHCP 列表里没有旁路由?

这里我一开始以为配置失败了。

实际上:

这是正常现象。

原因很简单:

iStoreOS 使用的是 静态 IP

DHCP 客户端列表只显示:

通过 DHCP 获取 IP 的设备。

因此:

OpenWrt 后台不会出现:

192.168.77.220

但是:

ping 192.168.77.220

完全正常。

如果需要确认:

ip neigh

或者:

arp -n

即可查看 ARP 表。


四、遇到的问题:旁路由无法联网

配置完成以后:

主路由:

ping iStoreOS

正常。

iStoreOS:

ping 主路由

正常。

但是:

ping www.baidu.com

失败。

然而:

ping 223.5.5.5

正常。

说明:

网络是通的。

真正的问题:

DNS。


五、排查 DNS

首先查看:

cat /etc/resolv.conf

结果:

nameserver 127.0.0.1

这意味着:

iStoreOS 自己作为 DNS。

继续检查:

ss -lntup | grep :53

结果:

没有任何程序监听 53。

只有:

5353

对应:

  • avahi-daemon
  • wsdd2

因此:

DNS 请求全部发送到了:

127.0.0.1

但是:

本地根本没有 DNS Server。


六、继续排查 dnsmasq

查看状态:

/etc/init.d/dnsmasq status

显示:

running

但是:

logread -e dnsmasq

出现:

bad dhcp-option at line 29 of /var/etc/dnsmasq.conf.cfg01411c

FAILED to start up

Instance dnsmasq in a crash loop

说明:

dnsmasq 一直启动失败。


七、最终找到问题

查看:

sed -n '20,35p' /var/etc/dnsmasq.conf.cfg01411c

发现:

dhcp-option=tag:gc_us_proxy,3.192.168.77.220

dhcp-option=tag:gc_us_proxy,6.192.168.77.220

这里居然写成了:

3.192.168.77.220

正确应该是:

3,192.168.77.220

以及:

6,192.168.77.220

也就是说:

我把:

,

误写成了:

.

导致 dnsmasq 无法解析配置文件。

最终一直 Crash。


八、另一个同样的错误

后来又发现:

接口配置里面,

我同样把:

,

写成了:

.

导致对应配置也异常。

修改后:

/etc/init.d/dnsmasq restart

成功启动。

再次检查:

ss -lntup | grep :53

已经能够看到:

dnsmasq

监听:

53

随后:

ping www.baidu.com

恢复正常。


九、经验总结

整个过程中最容易误判的是:

1、DHCP 列表没有旁路由

不用担心。

只要:

ping

正常即可。

因为静态 IP 不会出现在 DHCP Lease 中。


2、DNS 看 resolv.conf

第一时间:

cat /etc/resolv.conf

如果:

127.0.0.1

一定要继续确认:

53

端口是否真的有 DNS Server。


3、dnsmasq Crash Loop

最重要的一条命令:

logread -e dnsmasq

基本所有配置错误都会直接指出:

bad dhcp-option

line xx

定位效率非常高。


4、不要直接修改 /var/etc/

例如:

/var/etc/dnsmasq.conf.cfgxxxxx

这些文件都是自动生成的。

真正应该修改的是:

  • LuCI 配置
  • UCI 配置

否则重启以后修改都会丢失。


总结

整个旁路由配置其实并不复杂:

  1. OpenWrt 保持主路由。
  2. iStoreOS 选择旁路由模式。
  3. 配置静态 IP、网关和 DNS。
  4. 确认 DNS 服务正常运行。

我这次最大的坑其实不是网络,而是一个非常低级的配置错误:

把 DHCP Option 中应该使用的逗号(,)写成了句号(.)。

这个错误会导致 dnsmasq 无法启动,而表现出来的现象却只是:

  • DNS 无法解析
  • 旁路由不能联网
  • /etc/resolv.conf 指向 127.0.0.1

如果以后再遇到类似问题,建议优先检查:

cat /etc/resolv.conf

ss -lntup | grep :53

logread -e dnsmasq

通常几分钟内就能定位问题。

updatedupdated2026-07-062026-07-06