V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Liang
V2EX  ›  程序员

Dnsmasq 如何转发客户的请求到上游 DNS

  •  
  •   Liang · 2019-05-11 10:35:32 +08:00 · 4690 次点击
    这是一个创建于 2014 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:公司为了方便开发时测试域名的 Hosts,用 Dnsmasq 搭建了一个 DNS,线路是电信。

    因为有些分公司使用的是联通网络。部分正式的 CDN 业务,公司 DNS 递归上游 DNS 查询出来的返回了电信的线路,导致跨线路体验很慢。

    假设公司 DNS 是 1.2.3.4,上游 DNS 是 114.114.114.114

    联通线路的客户端测过结果是这样的:

    # nslookup www.163.com 114.114.114
    Address: 11.11.11.11 (联通线路)
    
    # nslookup www.163.com 1.2.3.4
    Address: 22.22.22.22 (电信线路)
    

    请问 Dnsmasq 如何转发客户的请求到上游 DNS,是带上客户的线路信息的。

    9 条回复    2019-05-11 18:04:31 +08:00
    Judoon
        1
    Judoon  
       2019-05-11 10:47:02 +08:00   ❤️ 1
    不能,简单的 dns 请求是根据请求来源的 ip 直接判断后返回的地址
    dnsmasq 服务器只有一个公网出口的话基本上不行了

    可以给 dnsmasq 机器配两个运营商的出口,然后识别请求来源,不同的请求来源按照不同的网络分发到上游服务器
    不过印象中 dnsmasq 实现不了这么复杂,你需要的可能是 bind
    tomczhen
        2
    tomczhen  
       2019-05-11 10:51:56 +08:00 via Android   ❤️ 1
    运行两个实例,一个上游 DNS 是电信一个是联通,然后根据不同线路分配。
    expy
        3
    expy  
       2019-05-11 10:55:49 +08:00   ❤️ 1
    可以换成 https://github.com/shawn1m/overture
    上游 dns 要用支持 EDNS Client Subnet 的,配置里用 auto 会把客服端的 ip 发送给上游 dns。
    也支持 hosts 文件。
    Judoon
        4
    Judoon  
       2019-05-11 11:28:46 +08:00
    @expy 我觉得单纯这样不行,我猜楼主的分公司请求走的是内网,所以这里的客户端 ip 会是内网 ip,传给上游 dns 没有用吧? 这中间需要自己做一下映射转换
    Liang
        5
    Liang  
    OP
       2019-05-11 11:54:33 +08:00
    @Judoon DNS 是公网,分公司请求的也是通过公网的,只不过 DNS 部署在电信,部分业务就返回了电信的线路。内部的 Hosts 没受影响
    Judoon
        6
    Judoon  
       2019-05-11 14:41:24 +08:00
    @Liang 既然如此为啥不直接在你的 DNS 服务商配置你的 ip,比如阿里云或者 dnspod
    然后全部走公网
    ipwx
        7
    ipwx  
       2019-05-11 15:12:18 +08:00   ❤️ 1
    用 iptables 控制内网走哪个 dns。

    @Judoon
    Liang
        8
    Liang  
    OP
       2019-05-11 15:51:50 +08:00
    @expy
    @Judoon

    感谢,用 shawn1m/overture 实现了。上游支持 EDNS 就可以了
    NUT
        9
    NUT  
       2019-05-11 18:04:31 +08:00
    直接使用 CoreDNS 配置简单,插件强大。

    还可以根据 Etcd 上面的数据进行动态解析。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2673 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.