关键字:飞牛 NAS、OpenWrt x86 虚拟机、二级路由、旁路由、OpenClash、dnsmasq-full
这篇是我在飞牛 NAS 上,用官方 OpenWrt x86 做 “纯二级路由 + OpenClash” 的完整配置记录,重点包括:
- 关闭 IPv4 DHCP,让主路由统一分配地址;
- 关闭 IPv6(LAN + WAN),不折腾 v6;
- 安装并正确依赖切换到 dnsmasq-full;
- 安装 luci-app-openclash,解决常见依赖冲突;
- 一些踩坑记录:fake-ip 模式下
ping 异常的原因。
一、网络拓扑和目标说明
拓扑大致是这样:
- 主路由器(光猫或现有路由):拨号 / 上网 / DHCP 服务器
- 飞牛 NAS 上的 OpenWrt x86 虚拟机:
- 作为“二级路由 / 旁路由”,主要职责:
- 跑 OpenClash 做分流/代理;
- 不再对下发 IP,不做 DHCP 服务;
- 不参与 IPv6(v6 全部关掉)。
- IP:
192.168.3.100
- 终端设备(电脑 / 手机):
- IP:由主路由发(如
192.168.3.x);
- 需要走 OpenClash 的设备,把网关改成
192.168.3.100(OpenWrt)。
一句话目标:
主路由负责“发号 + 上网”,OpenWrt 只负责“流量处理 / OpenClash”,不抢 DHCP,不玩 IPv6。
二、在 OpenWrt 上关闭 IPv4 DHCP(作为纯二级路由)
前提:OpenWrt 的 LAN 已经配置成和主路由一个网段,例如:
IP:192.168.3.100
掩码:255.255.255.0
网关:192.168.3.1
DNS:192.168.3.1(或公共 DNS)
2.1 LuCI 图形界面做法
- 登录 LuCI → 网络 → 接口
- 找到
LAN → 点“修改”
- 切换到 DHCP 服务器 这一页
- 勾选:“忽略此接口”(Disable DHCP for this interface)
- 保存并应用。
2.2 命令行做法(备忘推荐)
SSH 进 OpenWrt,执行:
# 关闭 LAN 的 IPv4 DHCP
uci set dhcp.lan.ignore='1'
uci commit dhcp
/etc/init.d/dnsmasq restart
此时:
- LAN 口不再给终端发 IPv4 地址;
- 终端会从主路由拿 IP。
三、彻底关掉 IPv6(LAN + WAN)
你已经关了 IPv4 DHCP,还想让这个 OpenWrt 完全不掺和 IPv6,那主要做两件事:
- LAN 侧不再发 IPv6(DHCPv6/RA/NDP)
- WAN 侧不再向上级申请 IPv6(关
wan6)
3.1 关闭 LAN 的 IPv6 功能
LuCI 做法
- 网络 → 接口 → LAN → 修改
- 切到 DHCP 服务器 → IPv6 设置
- 将三项全部设为“已禁用”:
- RA 服务:
已禁用
- DHCPv6 服务:
已禁用
- NDP 代理:
已禁用
- 保存并应用。
命令行做法
uci set dhcp.lan.dhcpv6='disabled'
uci set dhcp.lan.ra='disabled'
uci set dhcp.lan.ndp='disabled'
uci commit dhcp
/etc/init.d/odhcpd restart
3.2 禁用 WAN 的 IPv6 接口(wan6)
LuCI 做法
- 网络 → 接口
- 找到
wan6 → 点“修改”
- 勾选“接口已禁用”或直接在接口列表点“停用/禁用”
- 保存并应用。
命令行做法
uci set network.wan6.disabled='1'
uci commit network
/etc/init.d/network restart
到这里,OpenWrt 对 IPv6 的“日常活动”基本就全关了。
如果你有强迫症,想在内核层面直接禁用 IPv6 协议栈,可以额外加一手:
cat >> /etc/sysctl.d/99-disable-ipv6.conf << 'EOF'
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
EOF
/etc/init.d/sysctl restart
重启后 ip addr | grep inet6 基本就看不到 IPv6 地址了。
四、为 OpenClash 做准备:用 dnsmasq-full 覆盖内置 dnsmasq
很多人装 OpenClash 时会撞到这一堆报错:
Collected errors:
* check_data_file_clashes: Package dnsmasq-full wants to install file /etc/init.d/dnsmasq
But that file is already provided by package * dnsmasq
...
* opkg_install_cmd: Cannot install package luci-app-openclash.
原因是:
- 系统里内置了精简版
dnsmasq;
luci-app-openclash 依赖功能更全的 dnsmasq-full;
- 两个包要往同一堆文件路径装,opkg 检测到冲突就拒绝。
更坑的是:内置 dnsmasq 属于“ROM 包”,opkg remove dnsmasq 还删不掉,会报:
opkg remove dnsmasq
# -> Command failed: Not found
正确姿势:用 dnsmasq-full 覆盖内置 dnsmasq
直接粗暴但标准地覆盖掉:
opkg update
opkg install dnsmasq-full --force-overwrite
必要时再加一层(一般用不到):
opkg install dnsmasq-full --force-overwrite --force-depends
完成后确认一下:
opkg list-installed | grep dnsmasq
# 看到 dnsmasq-full 存在即可
重启服务:
/etc/init.d/dnsmasq restart
从此以后:
- system 里的 DHCP/DNS 服务跑在
dnsmasq-full 上;
- OpenClash 对 dnsmasq-full 的依赖就满足了。
五、安装 luci-app-openclash(以本地 ipk 为例)
我使用的飞牛下载功能,下载到了飞牛主机,然后使用scp命令拷贝到openwrt里。
我这里是提前下载好的 OpenClash 安装包,比如叫 11.ipk,放在 /tmp 下:
cd /tmp
opkg install 11.ipk
如果前面的 dnsmasq-full 没处理好,就会遇到前文那一串 file clash 报错;
处理完 dnsmasq-full 再装,一般就能一次过。
装完后,在 LuCI 左侧菜单里能看到:
服务 → OpenClash
第一次进入 OpenClash 页面,会有这些常规步骤(这里只写备忘,不展开细节):
- 上传并选择 Clash 内核(Meta / Premium 等);
- 填写订阅链接 / 导入配置文件;
- 选择运行模式(一般选 fake-ip 或 redir-host);
- 启动 OpenClash 服务。
六、fake-ip 模式下 ping 异常的说明
装完 OpenClash,尤其 fake-ip 模式下,在路由器上执行:
ping www.baidu.com
你很可能会看到类似:
PING www.baidu.com (198.18.0.12): 56 data bytes
ping: sendto: Operation not permitted
看到这别慌,这是 正常现象,原因是:
- 198.18.0.0/15 是保留的“测试地址段”,Clash fake-ip 模式会用这个网段作为“假 IP”;
- 你
ping 域名时,DNS 已经被 OpenClash 接管,返回的是 fake-ip,而不是百度的真实 IP;
- 这个地址段的 ICMP 在本机上会被防火墙/内核拦下,所以报
Operation not permitted。
判断网络是否真的正常,应该这么测:
# 1. 直接 ping 公网 IP(不走域名)
ping -c 4 223.5.5.5
ping -c 4 8.8.8.8
# 2. 看内网终端是否能正常上网
如果强迫症想让 ping www.baidu.com 也正常,可以:
七、让 OpenWrt 作为“纯二级路由 + OpenClash 出口”来用
到目前为止,这台 OpenWrt 的状态大致是:
- IPv4:
- LAN 不发 DHCP;
- 自己是主路由同网段的一个静态 IP(如
192.168.3.100);
- IPv6:
- LAN 不发 v6;
- WAN 不拿 v6(
wan6 禁用);
- DNS:
- 用
dnsmasq-full,OpenClash 接管;
- OpenClash:
- 正常运行、支持 fake-ip/redir-host 分流。
怎么让终端流量经过 OpenClash?
最简单的一种玩法:
“谁想走 OpenClash,就把网关改成 OpenWrt 的 IP”
举个例子:
- 主路由:
192.168.3.1
- OpenWrt:
192.168.3.100
某台电脑手动设置:
- IP:
192.168.3.50
- 子网掩码:
255.255.255.0
- 网关:
192.168.3.100(OpenWrt)
- DNS:
192.168.3.100 或 192.168.3.1
这样这台电脑所有流量都会先打到 OpenWrt,由 OpenClash 处理后再转发到主路由,主路由继续负责上网。
如果想更自动化,可以在主路由里做:
- 静态路由 / 策略路由 / DHCP 选项,把特定 MAC / IP 的网关发成
192.168.3.100。
这个就取决于你主路由的高级功能了,这里不展开。
八、一条龙命令备忘(纯命令行党收藏)
假设 OpenWrt 已经能正常上网,只是要快速变成“纯 IPv4 二级路由 + 关 IPv6 + 安装 OpenClash”,可以按下面顺序执行(路径、版本按实际调整):
# 1. 关闭 LAN IPv4 DHCP
uci set dhcp.lan.ignore='1'
uci commit dhcp
/etc/init.d/dnsmasq restart
# 2. 关闭 LAN IPv6
uci set dhcp.lan.dhcpv6='disabled'
uci set dhcp.lan.ra='disabled'
uci set dhcp.lan.ndp='disabled'
uci commit dhcp
/etc/init.d/odhcpd restart
# 3. 禁用 WAN IPv6 接口
uci set network.wan6.disabled='1'
uci commit network
/etc/init.d/network restart
# 4. 用 dnsmasq-full 覆盖内置 dnsmasq(为 OpenClash 做准备)
opkg update
opkg install dnsmasq-full --force-overwrite
/etc/init.d/dnsmasq restart
# 5. 安装 OpenClash ipk(假设文件名为 11.ipk)
cd /tmp
opkg install 11.ipk
完成后进 LuCI “服务 → OpenClash”,完成内核、配置文件、订阅等设置即可。
九、最后的小结
这次折腾下来的几点心得:
-
做纯二级路由,关键是:
- LAN 不发 DHCP;
- IP 与主路由同网段;
- 想让谁走 OpenClash,就把谁的网关指向 OpenWrt。
-
不打算玩 IPv6,就干脆在 LAN 和 WAN 两头都关掉,世界清静不少。
-
OpenClash 的两个高频坑:
dnsmasq vs dnsmasq-full 文件冲突 → 用 dnsmasq-full --force-overwrite 覆盖;
- fake-ip 模式下
ping 域名 异常 → 属正常情况,用 ping IP 或客户端访问真实网页来判断网络。
如果你看到这里,说明你也在折腾飞牛 + OpenWrt + OpenClash,欢迎点赞收藏、转给需要的朋友,少踩一点我踩过的坑 😄