V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
linuxgo
V2EX  ›  OpenWrt

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

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

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

    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
        3
    Kinnice  
       2022-12-14 15:21:31 +08:00
    https://imgur.com/a/BP7ksgn

    AdguradHome 需要直接改 upstream_dns_file 这个字段为你的分流 DNS 文件的路径
    linuxgo
        4
    linuxgo  
    OP
       2022-12-14 15:32:01 +08:00
    固件当然不可能天天升级,只是有时候看到有些新功能或者新思路想试试才会刷新固件,如果能实现域名分流,主路由的固件基本就不用动了
    Socrazy
        5
    Socrazy  
       2022-12-14 16:15:51 +08:00
    现在用的主 ROS+旁 OP 方案,国外地址走 OP ,国内 ROS 直出,非常稳定。
    linuxgo
        6
    linuxgo  
    OP
       2022-12-14 16:25:44 +08:00
    @Socrazy 有看到网上有相关的介绍
    adoal
        7
    adoal  
       2022-12-14 16:35:06 +08:00   ❤️ 1
    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
        8
    adoal  
       2022-12-14 16:37:02 +08:00
    看了一下,我当年为了搞这事收藏的几篇文章(包括 OpenWRT 和 EdgeRouter 上的)都失效了……
    pymumu
        9
    pymumu  
       2022-12-15 09:26:03 +08:00
    https://github.com/pymumu/smartdns/releases/tag/feature-dns-forwarding
    用用看看?记得配置服务器组和 ipset/nftset
    abc8678
        10
    abc8678  
       2022-12-15 09:33:40 +08:00 via Android
    平时粘贴教程来操作,直到 iptables 消失的时候,一堆需要它的教程派不上用场了
    Junichi
        11
    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
        12
    churchmice  
       2022-12-16 09:56:25 +08:00
    根据域名分流用 dnsmasq-full,遇到墙外域名就用 Ipset 打标签,然后 iptables 根据标签转发不同的目标地址就行了
    linuxgo
        13
    linuxgo  
    OP
       2022-12-20 14:01:45 +08:00
    找了很多文章,看来在 op 下是没有什么好办法了,准备在虚拟机上装个 ros 学习下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3149 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 12:49 · PVG 20:49 · LAX 04:49 · JFK 07:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.