V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
EricInBj
V2EX  ›  宽带症候群

dnsmasq 支持动态上游 DNS 服务器吗?

  •  
  •   EricInBj · 2020-10-19 12:23:44 +08:00 · 2612 次点击
    这是一个创建于 1256 天前的主题,其中的信息可能已经有所发展或是发生改变。
    当然支持了,配置读取 /etc/resolve.conf 就可以

    我想知道是否可以直接从上游 DHCP 获取 DNS 服务器地址?

    情况是这样的:

    1. MAC 上装了 DNSMASQ,加了些自定义的解析(比较多,用 HOSTS 不方便)
    2. 在网络设置里设置了 DNS 服务器为 127.0.0.1, 这样的话 resolve 文件里也就变成了 127.0.0.1
    3. 现在在网络设置里面增加了 1.2.4.8 这样的公共 dns

    希望实现的效果是:不通过 resolve 文件来动态寻找上游服务器,而是根据 DHCP 来获取,请问是否可行?
    第 1 条附言  ·  2020-10-19 14:30:04 +08:00
    补充一下:
    1. 根据 WIFI 名称做后续处理动作:
    https://razeencheng.com/post/auto-change-network-location-base-on-name-of-wifi.html

    2. 获取 DHCP 下发的信息:
    DNS=`ipconfig getpacket en0|grep domain_name_server|awk -F"[{,}]" '{print $2}'`

    3. 写入临时文件
    DNS=`ipconfig getpacket en0|grep domain_name_server|awk -F"[{,}]" '{print $2}'`
    echo "nameserver $DNS" > /tmp/upstream.conf
    echo "nameserver 1.2.4.8" >> /tmp/upstream.conf

    4. resolve-file=/tmp/upstream.conf

    多个 DNS 的情况我也只取了第一个,懒得处理了,反正我加了个公共 DNS 兜底
    19 条回复    2020-10-21 10:32:17 +08:00
    zro
        1
    zro  
       2020-10-19 13:12:09 +08:00
    貌似比较适合用 ADGuardHome 。。
    amplatzer
        2
    amplatzer  
       2020-10-19 13:13:35 +08:00
    #dnsmasq.conf
    server=1.2.4.8

    这样?
    amplatzer
        3
    amplatzer  
       2020-10-19 13:14:33 +08:00
    -R, --no-resolv
    Don't read /etc/resolv.conf. Get upstream servers only from the command line or the dnsmasq configuration file.

    或者这个选项?
    EricInBj
        4
    EricInBj  
    OP
       2020-10-19 13:15:52 +08:00
    @zro 这东西可以?他不也是指定上游吗?

    我主要是在单位上游应该是 10.X.X.X, 到了家可能又是 172.X.X.X,然后连自己的热点又是 192.X.X.X
    EricInBj
        5
    EricInBj  
    OP
       2020-10-19 13:17:34 +08:00
    @amplatzer no-resolve 只是告诉他不去读取 resolve.conf 里的配置,通过命令行参数或者直接在配置文件里写上游。
    我是想让他不读 resolve,而是从 dhcp server 获取上游 DNS 地址。
    EricInBj
        6
    EricInBj  
    OP
       2020-10-19 13:19:20 +08:00
    @amplatzer 配置文件或命令行指定上游地址都不行,因为我是笔记本上用,网络环境总变的,还是希望使用运营商的 DNS,所以想要动态。
    amplatzer
        7
    amplatzer  
       2020-10-19 13:19:53 +08:00
    你 DHCP 分配的 DNS 会一直变化 吗? 为什么不直接把 DHCP 到的 DNS 写死到 配置文件里?
    amplatzer
        8
    amplatzer  
       2020-10-19 13:24:50 +08:00
    整一个可以获取 dhcp 信息的脚本(dhclient ?), 当发现上游 DNS 服务器变化时, 重启 dnsmasq, 并设置成新 DNS 。
    EricInBj
        9
    EricInBj  
    OP
       2020-10-19 13:42:38 +08:00
    @amplatzer 换了环境就变了啊,比如从家到公司。

    是的,不行就把 DHCP 拿到的往一个文件去更新了,倒不用自己重启 DNSMASQ,换成自己定义的 resolve 文件就行,文件变化了会自动 reload 的。
    EricInBj
        10
    EricInBj  
    OP
       2020-10-19 14:19:43 +08:00
    搞定了
    在 WIFI 切换完成之后,获取 DHCP 给过来的 DNS,然后写到 /tmp/upstream.conf,dnsmasq.conf 里面设置 resolve-file 到这个文件。
    kerro1990
        11
    kerro1990  
       2020-10-19 14:22:14 +08:00
    上游也没啥用,运营商现在是 udp 端口劫持到省级 dns 服务器,DOH 作为上游试试
    EricInBj
        12
    EricInBj  
    OP
       2020-10-19 14:25:51 +08:00
    @kerro1990 不是为了 XX,纯粹 CDN 考量,所以还是得运营商的 DNS 。
    至于别的,一般也不需要考虑 CDN,那不是还有 dnsmasq.conf 么。
    geekvcn
        13
    geekvcn  
       2020-10-19 18:28:56 +08:00 via iPhone
    选个国内 EDNS 支持比较好的 DNS 不就行了,比如阿里 DNS
    bclerdx
        14
    bclerdx  
       2020-10-19 23:57:35 +08:00
    @geekvcn 感觉是这样的,目前阿里的公共 DNS 是支持 EDNS 了。
    EricInBj
        15
    EricInBj  
    OP
       2020-10-20 09:00:16 +08:00
    @geekvcn 也得在 dnsmasq 的配置文件里使用 add-subnet 来指定一下吧?而这个是变化的,公司和家里的不一样。
    geekvcn
        16
    geekvcn  
       2020-10-20 09:56:47 +08:00 via iPhone
    @EricInBj 加参数是指定 ip,不加参数,默认参数就是请求 ip
    geekvcn
        17
    geekvcn  
       2020-10-20 10:13:17 +08:00 via iPhone   ❤️ 1
    @EricInBj 而且不建议用 dnsmasq 来搭建个人 dns 了,Smartdns,ADGuardHome 之类的用 DoT/DoH 还能防劫持。

    阿里 DoH EDNS 测试链接
    移动:
    https://223.5.5.5/resolve?name=www.taobao.com.&type=1&edns_client_subnet=112.25.2.98/24
    联通:
    https://223.5.5.5/resolve?name=www.taobao.com.&type=1&edns_client_subnet=219.158.100.149/24
    电信:
    https://223.5.5.5/resolve?name=www.taobao.com.&type=1&edns_client_subnet=61.152.24.70/24
    当前网络:
    https://223.5.5.5/resolve?name=www.taobao.com.&type=1
    EricInBj
        18
    EricInBj  
    OP
       2020-10-21 10:21:23 +08:00
    @geekvcn 感谢,我抽空再研究一下。
    EricInBj
        19
    EricInBj  
    OP
       2020-10-21 10:32:17 +08:00
    @geekvcn 刚拿家里的 ADGuardHome 试了一下,用 Ali 的 EDNS 确实解析结果跟运营商的差不多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3320 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:36 · PVG 21:36 · LAX 06:36 · JFK 09:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.