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

openwrt dns 处理流程求助

  •  
  •   WizardLeo · 2023-07-11 17:37:56 +08:00 · 1950 次点击
    这是一个创建于 503 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,op 目前 openwrt 的 dns 是 adg 负责国内,passwall 内启用 chinadns-ng ,远程 dns 用 cf 的 dns 。
    adg 端口设置成 5553 ,重定向选择为“作为 dnsmasq 的上游服务器”。
    目前使用情况一切正常

    但是按理说 clinet 的 dns 请求应该先到 adg 处理,再到 dnsmasq 转发,最后到 passwall 分流。为什么 adg 内没有外网域名解析 dns 的记录?
    挺好奇 dns 在这一整套流程中是如何处理的。

    顺带还有一个问题,现在网页打开速度变快了(至少心理上是这样),但经常网页第一次打不开并显示是 dns 解析问题,刷新或者几秒钟后自己恢复,同时 adg 日志显示正常返回了解析结果。这是什么情况?
    10 条回复    2023-07-19 11:31:48 +08:00
    fish3125
        1
    fish3125  
       2023-07-11 17:53:34 +08:00 via iPhone
    因为默认端口是 53.
    mohumohu
        2
    mohumohu  
       2023-07-11 18:12:12 +08:00
    openwrt 的插件和防火墙规则会互相影响,所见未必是所得,单独把 DNS 分离出来跑最好。
    Bingchunmoli
        3
    Bingchunmoli  
       2023-07-11 19:40:18 +08:00 via Android   ❤️ 1
    @mohumohu 正解,不过作为 dnsmasq 的上游服务器指的是 53 端口一般是 dnsmasq 转发到 ad 的。然后看你 passwall 怎么配置哪个端口也是从 dnsmasq 转发吗那有可能规则互相覆盖的问题
    WizardLeo
        4
    WizardLeo  
    OP
       2023-07-11 20:55:09 +08:00
    这不应该是"作为 dnsmasq 的下游服务器"嘛🤣?有点混乱,能不能请大佬稍微理一下整个逻辑,感谢!
    WizardLeo
        5
    WizardLeo  
    OP
       2023-07-11 20:57:02 +08:00
    iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
    iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
    这两条我没注释掉,不过我觉得 adg 的 5553 端口应该和这里的 53 端口关系不太大?请大佬细嗦
    neroxps
        6
    neroxps  
       2023-07-11 22:53:04 +08:00
    你要知道 openwrt 深度绑定 dnsmasq 所以 dnsmasq 基本上就是监听在 53 对外提供服务。然后一切的 dns 流量都是进到 dnsmasq 再分给其他 dns 上游应用。

    uci show dhcp 看看自己的配置。防火墙配置也看看。openwrt web 上的一个按钮,背后不知道干了啥。我个人喜欢看配置,看脚本,web 的那句话真心不知道他背后干了啥。
    Jacksu
        7
    Jacksu  
       2023-07-13 11:01:15 +08:00   ❤️ 1
    你的 adgh 设置了重定向选择为“作为 dnsmasq 的上游服务器”
    那么解析流程就是客户端请求-路由器 dnsmasq ( 53 端口)收到请求发给 adgh ,然后 adgh 再向它的上游请求。
    而 dnsmasq 请求的时候会收到 chinadns-ng 分流影响,导致部分请求并不会发给 adgh ,而是给到 chinadns-ng 配置的服务器处理了。
    Jacksu
        8
    Jacksu  
       2023-07-13 11:04:11 +08:00   ❤️ 1
    正确的做法就是直接把 adgh 监听 53 ,也就是替代 dnsmasq 处理局域网,然后它的上游可以配置为 dnsmasq 的端口(享受 chinadns-ng 的分流处理)
    但这样一来,你得处理下替代 dnsmasq 后导致的其他插件兼容问题。
    WizardLeo
        9
    WizardLeo  
    OP
       2023-07-13 14:03:45 +08:00
    @Jacksu 感谢大佬回复!这下听懂了,但多一个 dnsmasq 用来分流应该不会增加太多延迟吧?既然替换掉 dnsmasq 可能会出一系列插件兼容性问题,那就暂时先不换了。
    ZOZOZO
        10
    ZOZOZO  
       2023-07-19 11:31:48 +08:00
    楼上都说的很清楚,整个流程就是:
    访问设备发起 DNS UDP 请求( 53 端口)——( 53 端口被 dnsmasq 在系统默认层面截胡) dnsmasq 准备解析——(你设置了转发到 ADG )——ADG 查询 DNS——返回 IP 到访问设备。
    建议:系统默认 dns 服务器不要替换别的,不然你就别 freedom 外出了。相关插件基本都依赖 dnsmasq 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3128 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:05 · PVG 22:05 · LAX 06:05 · JFK 09:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.