V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
k9982874
V2EX  ›  分享创造

5.1 劳动成果 - 给 unbound 增加 ipset 支持

  •  
  •   k9982874 · 2019-05-06 15:35:36 +08:00 · 4131 次点击
    这是一个创建于 1810 天前的主题,其中的信息可能已经有所发展或是发生改变。

    出于某些众所周知的原因,dns 服务器需要使用 ipset 支持域名分流,然鹅性能更好更强大的 unbound 不支持 ipset,一直只能忍受老旧的 dnsmasq。

    当然也可以使用 unbound 做上游 dns 服务器,dnsmasq 做主 dns 负责 ipset 分流,但是那也太不简约了。 故,利用 5.1 假期给 unbound 增加了 ipset 支持。

    已经向 unbound 提交了 PR,但是还没有合并入主分支,想尝鲜的同学可以先自行编译体验。 https://github.com/k9982874/unbound

    13 条回复    2021-06-14 16:21:16 +08:00
    li3p
        1
    li3p  
       2019-05-08 14:48:12 +08:00
    赞一个,期待早日合入 master !
    k9982874
        2
    k9982874  
    OP
       2019-05-09 19:20:38 +08:00 via iPhone
    @li3p unbound 的人已经 review 过了,他还要了解一下使用场景,至于什么时候合并入 master 还得看大佬什么时候有时间,国外的工作效率你懂的。
    zhaibin18
        3
    zhaibin18  
       2019-09-15 08:44:44 +08:00
    不能匹配二级域名,比如配置文件里写
    local-zone: "wikipedia.org" ipset
    但是无法匹配 zh.wikipedia.org
    k9982874
        4
    k9982874  
    OP
       2019-09-16 09:01:32 +08:00
    @zhaibin18 #3 肯定是可以匹配二级域名的呀

    ```
    [router@router ~]$ dig zh.wikipedia.org

    ; <<>> DiG 9.14.5 <<>> zh.wikipedia.org
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16257
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;zh.wikipedia.org. IN A

    ;; ANSWER SECTION:
    zh.wikipedia.org. 3600 IN CNAME dyna.wikimedia.org.
    dyna.wikimedia.org. 3600 IN A 198.35.26.96

    ;; Query time: 506 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Mon Sep 16 08:59:55 CST 2019
    ;; MSG SIZE rcvd: 127
    ```
    zhaibin18
        5
    zhaibin18  
       2019-10-01 01:40:36 +08:00
    找到问题的所在了,不是匹配的问题,而是 CNAME 的问题,比如:

    dig www.reddit.com

    ; <<>> DiG 9.11.3-1ubuntu1.9-Ubuntu <<>> www.reddit.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9095
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 65494
    ;; QUESTION SECTION:
    ;www.reddit.com. IN A

    ;; ANSWER SECTION:
    www.reddit.com. 186 IN CNAME reddit.map.fastly.net.
    reddit.map.fastly.net. 19 IN A 151.101.77.140

    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.53#53(127.0.0.53)
    ;; WHEN: Tue Oct 01 01:36:12 CST 2019
    ;; MSG SIZE rcvd: 94


    如果不在配置文件里写
    local-zone: "fastly.net" ipset
    151.101.77.140 这条记录是不会写到 ipset 里的

    但是 dnsmasq 貌似可以,因为我最近将 ipset 有 dnsmasq 切换到 unboud 后才发现的以上问题。
    zhaibin18
        6
    zhaibin18  
       2019-10-12 11:23:23 +08:00
    @k9982874 能否再来个 PR,多谢了哦!
    k9982874
        7
    k9982874  
    OP
       2019-10-12 12:41:37 +08:00 via iPhone
    @zhaibin18 必须在配置文件中指明才会加入 ipset,这是 feater 哦,不然就全局走代理了,那样也不需要用 dns 分流了。
    k9982874
        8
    k9982874  
    OP
       2019-10-12 12:42:15 +08:00 via iPhone
    featet -> feature
    zhaibin18
        9
    zhaibin18  
       2019-10-12 22:17:25 +08:00
    如果是 A 记录的话是没问题的,但是如果是 CNAME 的话还是有点不方便,比如我想通过 ipset 访问 www.reddit.com ,但是因为记录返回的是 CNAME 没有加入的 ipset 里,所以就访问不了了。
    zhaibin18
        10
    zhaibin18  
       2019-10-12 22:17:38 +08:00
    @k9982874 不知道我说清楚了没有。
    k9982874
        11
    k9982874  
    OP
       2019-10-13 08:41:00 +08:00 via iPhone
    @zhaibin18 理解你的意思了。不过这个问题还是要通过手动添加配置解决。
    毕竟无法追踪 fastly.net 的源头是哪,而且也可能与用户的本意出现差异(可能用户就是不想分流 fastly.net )。
    wwbfred
        12
    wwbfred  
       2020-01-02 01:29:03 +08:00
    @k9982874 当一个域名同时含有 CNAME 和 A 记录的时候,与 dnsmasq 不同,unbound 会向 forward 服务器重新查询 CNAME 的 A 记录,并舍弃初始域名的 A 记录.这就导致了若初始域名与 CNAME 的 A 记录不同,则会向客户端返回 CNAME 的 A 记录,并将初始域名的 A 记录添加进 ipset.这个确实是 feature 而不是 bug 么?
    adoal
        13
    adoal  
       2021-06-14 16:21:16 +08:00
    一年半过去了,没有下文了。为啥 dnsmasq 可以跟踪到源头而 unbound 不行呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3184 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:51 · PVG 18:51 · LAX 03:51 · JFK 06:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.