OpenWrt 主路由 + iStoreOS 旁路由配置记录及踩坑总结
最近重新部署了一下寝室网络,采用 OpenWrt 作为主路由,iStoreOS 作为旁路由 的方案。整体配置参考了 James Life Blog 的教程,并结合自己的实际环境进行了调整。
原教程:
本文主要记录整个配置流程,以及最后遇到的一个很不小心的 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 配置
否则重启以后修改都会丢失。
总结
整个旁路由配置其实并不复杂:
- OpenWrt 保持主路由。
- iStoreOS 选择旁路由模式。
- 配置静态 IP、网关和 DNS。
- 确认 DNS 服务正常运行。
我这次最大的坑其实不是网络,而是一个非常低级的配置错误:
把 DHCP Option 中应该使用的逗号(
,)写成了句号(.)。
这个错误会导致 dnsmasq 无法启动,而表现出来的现象却只是:
- DNS 无法解析
- 旁路由不能联网
/etc/resolv.conf指向127.0.0.1
如果以后再遇到类似问题,建议优先检查:
cat /etc/resolv.conf
ss -lntup | grep :53
logread -e dnsmasq
通常几分钟内就能定位问题。