关于 openwrt 的域名分流问题的一个想法

2022-12-14 15:02:16 +08:00
 linuxgo
之前一直在硬路由上折腾 openwrt ,每次升级固件都要断网,还有可能新固件不稳定要死机,重启等,如果家人在看电视,上网都会受影响。
我现在想的是有没有 openwrt 上可以分流域名到不同网关的软件,比如国内的就直接从硬路由发到外网,而国外的域名就转发到软路由上经过处理后再发到外网。
这样即使升级软路由上的固件,国内的域名还是直接从硬路由就可以到外网,不会影响看电视直播和国内网站的上网路径。
我看现在一般都是用 pw ( clash )+ad 或者 pw+smartdns 这种方式。不知有没有只其他根据域名进行分流的软件可用呢?功能如下图所示
3082 次点击
所在节点    OpenWrt
13 条回复
linuxgo
2022-12-14 15:02:45 +08:00

功能就如图片中所示
Kinnice
2022-12-14 15:15:07 +08:00
固件别天天升级,就锁死一个就得了。
再来说说方案
目前我在某处的网络是这样

1. 主路由,上面跑着 adguardHome 导入了一份国内常用域名使用 119.29.29.29 解析,默认使用 192.168.100.254 (旁路网关)解析,并设置静态路由 198.18.0.0/16 -> 192.168.100.254
2. 旁路上运行着 clash ,使用 fake-ip 模式,上游 DNS 使用 dot/doh ,并监听 53 端口

结果:

国内的域名 /纯 IP 直接会返回正常的 DNS 解析,直接从主路由出去
国外的域名会返回由 clash 提供的 fakeip,经过静态路由到旁路上处理

缺点:
如果是纯国外 ip 是走不了代理的,但是你要的不就是域名分流吗:)
Kinnice
2022-12-14 15:21:31 +08:00
https://imgur.com/a/BP7ksgn

AdguradHome 需要直接改 upstream_dns_file 这个字段为你的分流 DNS 文件的路径
linuxgo
2022-12-14 15:32:01 +08:00
固件当然不可能天天升级,只是有时候看到有些新功能或者新思路想试试才会刷新固件,如果能实现域名分流,主路由的固件基本就不用动了
Socrazy
2022-12-14 16:15:51 +08:00
现在用的主 ROS+旁 OP 方案,国外地址走 OP ,国内 ROS 直出,非常稳定。
linuxgo
2022-12-14 16:25:44 +08:00
@Socrazy 有看到网上有相关的介绍
adoal
2022-12-14 16:35:06 +08:00
dnsmasq-full 包根据目标域名给解析出来的 ip 打 ipset ,然后防火墙规则里对指定的 ipset 做 mangle 配合 ip rule 走路由规则

前一半自己搜搜,目标域名还有 gfwlist2dnsmasq 这个工具可以用来生成。后一半大体可以参照这篇 https://oogami.wordpress.com/2015/05/31/linux-%E7%AD%96%E7%95%A5%E8%B7%AF%E7%94%B1%E4%B8%8E%E5%A4%9A-vpn-%E5%B9%B6%E5%AD%98%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/

不过照抄是不行的。
adoal
2022-12-14 16:37:02 +08:00
看了一下,我当年为了搞这事收藏的几篇文章(包括 OpenWRT 和 EdgeRouter 上的)都失效了……
pymumu
2022-12-15 09:26:03 +08:00
https://github.com/pymumu/smartdns/releases/tag/feature-dns-forwarding
用用看看?记得配置服务器组和 ipset/nftset
abc8678
2022-12-15 09:33:40 +08:00
平时粘贴教程来操作,直到 iptables 消失的时候,一堆需要它的教程派不上用场了
Junichi
2022-12-15 10:41:00 +08:00
我的是 双 openwrt 弱电箱一个小娱 c5 编译一个最小固件,负责拨号,dhcp 和 ddns ,稳定为主。

不翻墙的设备网关就默认为小娱 c5 ,默认 dns 是旁路由( AdguradHome )和腾讯 119 ,翻墙设备网关就分发旁路由地址为网关

旁路由专门负责翻墙和 dns ( AdguradHome upstream_dns_file 分流,默认 https://doh.pub 解析 黑名单就走 https://dns.google

所以不管怎么折腾也只是影响到自己。
churchmice
2022-12-16 09:56:25 +08:00
根据域名分流用 dnsmasq-full,遇到墙外域名就用 Ipset 打标签,然后 iptables 根据标签转发不同的目标地址就行了
linuxgo
2022-12-20 14:01:45 +08:00
找了很多文章,看来在 op 下是没有什么好办法了,准备在虚拟机上装个 ros 学习下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/902470

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX