OpenWrt + OpenClash + AdGuard Home 打造家庭专用网络
目录
注意
本文最后更新于 2023-09-11,文中内容可能已过时。
搞了个低功耗小玩具N5105,做软路由刚刚好。
总体方案
家庭网络,要使用顺手,我认为要符合以下几点:
- 光猫只桥接信号,主路由负责拨号,摆脱光猫弱鸡性能,保证并发量及持续稳定。
- 旁路由负责科学上网、VPN、DNS防污染、广告过滤等,功能只覆盖专用网络内部使用,影响面可控,保障就算旁路由宕机,也不影响大众群体网络正常访问。
- NAS可根据储存数据的重要性分情况考虑,更建议独立机器部署,以免磁盘共用使得物理读写频繁损耗加剧,从而影响导致整体性能。
主路由规划
为达到以上要求,方案自然就出来了。
- 主路由通过 DHCP 规划网段,以一个C段(192.168.3.0/24)为例,可分网段管理:
- 主路由设置内网IP(192.168.3.1),DNS自动获取或手动设置均可;
- 旁路由设置静态IP(192.168.3.2),GW(192.168.3.1),DNS(223.5.5.5);
- 正常接入网络自动获取,IP(192.168.3.101 - 192.168.3.200),GW(192.168.3.1),DNS(223.5.5.5、119.29.29.29);
- 对家庭成员常用设备手工静态分配,IP(192.168.3.41 - 192.168.3.80),GW(192.168.3.1),DNS(223.5.5.5、119.29.29.29);
- 个人专用网络静态分配,IP(192.168.3.91 - 192.168.3.100),GW(192.168.3.2),DNS(192.168.3.2、223.5.5.5);
- 剩余地址按需分配使用。
旁路由配置
最终方案:客户端→AdGuard Home(53)→OpenClash(7874)
配置思路
- 客户端→Dnsmasq(53)→Clash(7874)→AdGuard Home(5335)
- 客户端→Dnsmasq(53)→AdGuard Home(5335)→OpenClash(7874)
- 客户端→AdGuard Home(53)→OpenClash(7874)
按思路1,在OpenClash里开启DNS劫持,让Dnsmasq把请求转发到OpenClash,然后在OpenClash里设置自定义上游DNS,把底下所有的上游DNS勾选都去掉,新建一个FallBack从AdGuard Home里获取结果;配置虽然成功了,但广告去除效果不好,根因是要屏蔽广告的地址经过OpenClash时就被代理出去了,所以不会向上游AdGuard Home去请求解析,而且AdGuard Home里客户端只能看见127.0.0.1这一条,也不够完美,所以这方案放弃;随后尝试方案2,AdGuard Home里的客户端也都能正常显示了,发现前面多了Dnsmasq似乎多余了,因为它只负责转发,所以衍生出方案3,但有个缺点,因为Dnsmasq和DHCP功能是在一起的,跳过了Dnsmasq则DHCP也不能用了,解决方案就是禁用旁路由DHCP功能,去lan接口里设置忽略此接口(不在此接口提供DHCP服务),完美。
安装OpenWrt系统
- 网络-接口-Lan,底下基本设置勾选 「忽略此接口」
- 网络-DHCP/DNS-高级设置,把DNS服务器端口由53改为其他,比如5335,主要不要端口冲突,保存生效
OpenClash科学上网
- 服务-OpenClash-全局设置-DNS设置,去掉本地DNS持,勾选自定义上游DNS服务器,然后在下面自定义DNS里看够不够,有更好的DNS也可以加上去,勾选远程域名解析,应用配置
AdGuard Home广告过滤
服务-AdGuard Home,点更新核心,点启用,重定向选择「无」,点手动设置,按如下修改,改完保存&应用
1 2 3 4 5 6 7 8 9 10
bind_host: 0.0.0.0 bind_port: 3003 ... dns: bind_hosts: - 0.0.0.0 port: 53 ... upstream_dns: - 127.0.0.1:7874
配置结束,点击AdGuard Home里AdGuardHome Web:3003,可以打开ADG的管理界面,点击「过滤器->DNS封锁清单」,去网上找一些大神维护的ADG的去广告规则,加进去。