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

BIND 转发超时的问题

  •  
  •   jamiesun · 2016-05-14 10:15:10 +08:00 · 4352 次点击
    这是一个创建于 3145 天前的主题,其中的信息可能已经有所发展或是发生改变。

    给好几个客户做了 BIND 转发服务,其中一个老是出各种幺蛾子,今天又碰上。

    客户多个出口断开,但不是所有,但全网 DNS 服务全断了, DNS 服务器本身访问内外网络正常,配置如下:

    options { 
        recursion yes;
        blackhole {  };
        forward only;
        allow-query { any; };
        forwarders { a.a.a.a;b.b.b.b; };
    }
    
    ......
    
    zone "taobao.com" { 
    type forward;
    forwarders { a.a.a.a;b.b.b.b; }; 
    };
    
    .....
    

    BIND 的选择算法之前还真没仔细分析过,当其中一个转发目标不可用时,另一个转发目标被启用,但是有个超时时间,我搜索到下面的文章:

    http://blog.csdn.net/midsum/article/details/21477975

    “ 直到客户遇到了这样的问题。该客户有两个转发服务器 A 和 B ,现在是 A 正常, B 超时并且一直超时,也就是说, B 在每一次被重试之后,都被重新设定为 20000 ,之后都会转发给 A , 直到 B 乘以 0.98 的数次之后又小于 A ,才又被重试。但是,根据客户的计算, 20000 的值在 150 多次之后将会减小到 A 值相同的值(即: 20000 * 0.98^150 < A->srtt ),而 B 因为超时,每次往 B 的转发都会长达 30 秒钟(默认设定重试时间为 30 秒)。而当访问量很大时, 150 次的查询只需要几秒钟(该客户好像是每分钟上万次的查询)。这样就造成了这么一种感觉,即几秒钟的反应之后,接着是 30 秒钟的超时,然后又是几秒, 30 秒....,整体上看来,就是绝大多数时间里, DNS 都是不可用的状态。”

    我的客户也正好是碰到这个问题,断开的出口恢复后, DNS 转发也立即恢复了,但是预期的多个转发备份功能失效了。本来客户同时有两个转发服务器,但出口断了,全部都是一样的问题,

    那么如何更好的解决这个问题,避免全网投诉。

    15 条回复    2016-06-23 19:21:23 +08:00
    jamiesun
        1
    jamiesun  
    OP
       2016-05-14 10:19:58 +08:00
    我现在想的是备机的网络隔离,但是某些转发 DNS 是专用的,只能通过某些出口访问,不使用的话就失去加速效果。
    bobopu
        2
    bobopu  
       2016-05-14 11:15:32 +08:00 via iPhone
    以前好像也遇到过这问题,当时不知道是 bind 超时算法问题,后来把转发的第二个 ip 指向内网后好了。试下 unbound 有没有此问题?
    jamiesun
        3
    jamiesun  
    OP
       2016-05-14 11:42:21 +08:00
    @bobopu 谢谢,我现在想明白了不少,给客户做的这个服务确实做得不够周到,覆盖几万用户的服务,后端对 DNS 转发服务是必须做一个可用性检测的,而不能仅仅依赖 BIND 本身的算法机制。

    我现在计划做一个定时检测模块,对所有转发服务地址定时检测可用性,也是通过域名解析实现,一旦发现某个 DNS 转发服务地址不可用,立即从全局配置中剔除(并用其他可用公共 DNS 替换),标记状态不可用,并刷新配置;当检测到服务恢复时,再重新配置并刷新,标记状态可用。

    另外再做一些关键域名的解析检测,用个算法来判断当前 DNS 服务器的综合健康指数。
    bobopu
        4
    bobopu  
       2016-05-14 12:46:43 +08:00
    @jamiesun 厉害。有些公共 DNS 是会限制解析频率,就我所知阿里 DNS 就存在解析限制。另外,觉得这几个新版本的 bind 增加了不少东西,但中文版的 bind 手册又太旧,没这方面新增内容的中文资料也是挺困扰。
    jimzhong
        5
    jimzhong  
       2016-05-14 13:45:14 +08:00
    曾经做过 DNS 转发,觉得 BIND 配置太麻烦,就用 Python 写了一个,可以用 dnslib ,自己写 LRUCache 。一个上游服务器 2s 内不回复就转发给下一个。
    samueldeng
        6
    samueldeng  
       2016-05-14 15:11:39 +08:00
    我记得我之前弄 bind9 的时候,默认是配置了 dnssec ,那玩意儿开启后,速度简直不能忍。
    qcloud
        7
    qcloud  
       2016-05-15 09:49:58 +08:00
    @samueldeng 开启 dnssec 怎么了?
    jamiesun
        8
    jamiesun  
    OP
       2016-05-15 13:03:35 +08:00
    @jimzhong python 做的性能怎么样?

    bind 性能还是不错的,我还是用 bind9 , bind10 早出来了,有很多模块使用 python 开发,但是这玩意是真复杂,没有那么多精力去研究。

    我是在 bind9 上封装了一层管理界面,配置还是文件配置。有个 isc 的配置解析模块。
    samueldeng
        9
    samueldeng  
       2016-05-15 13:54:37 +08:00
    @qcloud dnssec 后,查询速度奇慢~
    qcloud
        10
    qcloud  
       2016-05-15 14:24:59 +08:00
    @samueldeng 我去~~~ 前几天 DNS 服务商推出了 DNSSEC ,我还迫不及待的测试,难道真像你说的很慢吗 。。。。
    jimzhong
        11
    jimzhong  
       2016-05-15 16:52:14 +08:00
    @jamiesun 目前用户数量还不多,每秒 20 个查询轻松应对。 CPU 占用很低。
    samueldeng
        12
    samueldeng  
       2016-05-15 23:37:39 +08:00
    @qcloud 喔,是这样的,我的上游不支持 dnssec ,于是就递归相上查询,导致速度奇慢。坐标国内。不知道歪国的提供商如何?
    hosiet
        13
    hosiet  
       2016-05-17 09:26:38 +08:00 via Android
    bclerdx
        14
    bclerdx  
       2016-06-23 15:40:05 +08:00
    @hosiet 为什么?
    hosiet
        15
    hosiet  
       2016-06-23 19:21:23 +08:00 via Android
    @bclerdx ISC 网站上 bind 10 项目主页写了,直接读一读吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3510 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:45 · PVG 18:45 · LAX 02:45 · JFK 05:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.