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

关于企业内部自建 DNS,来和大佬了们取取经

  •  
  •   Tsunayoshi · 234 天前 · 6095 次点击
    这是一个创建于 234 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在做企业内自建 DNS 的升级,我们要自己搭建一套 DNS 服务,借这个题和大家一起讨论讨论目前企业内的 DNS 大家都是怎么玩的。

    目前看主流的其实有多种方案,比如 bind ,powerdns ,coredns ,当然也有用 dnsmasq 的。不过目前随着我们的发展,dnsmasq 基本已经不适用于我们了,性能太低。最终我们选择了 bind 进行的构建。

    然后现在我们有大概 20 多个分公司吧,然后每个公司都需要做差异化的管理,配置不太一样,当然目前管理方式比较 lowb ,就是手动人工管理。管理成本比较高吧。然后现在想做一个简单的管理工具,想实现集中化的管理,不一定非得要做成平台,但是肯定是以那种工具化的方式纳管,我想用 mysql ,把所有的解析记录保存起来。之前了解过 bind-dlz ,但是我们需要差异化管理,又不能每个分公司都搞一套 mysql ,感觉这样维护压力更大了。

    所以我想的是自己搞一套中心管控节点,然后设计一个表,能保存所有的解析记录,然后每次查询动态生成配置推送到对应分公司的主节点,实现变更,当然我不知道有没有这么干的哈。。。所以问问大佬们,你们一般都怎么维护。感觉互联网上这一类的资料比较少,要不就是直接用 WindowsDNS 的。

    68 条回复    2024-07-31 12:25:54 +08:00
    kkocdko
        1
    kkocdko  
       234 天前
    没弄过这么大规模的,很好奇楼主的用途。我之前在实验室里弄的主要是为了劫持一些内网域名,省得每个人都改 hosts ,其他的就直接转发了。
    imlonghao
        2
    imlonghao  
       234 天前 via iPhone
    dnscontrol.orf
    imlonghao
        3
    imlonghao  
       234 天前 via iPhone
    s/orf/org/
    testcaoy7
        4
    testcaoy7  
       234 天前   ❤️ 1
    首先搞清楚企业内自建 DNS 的目的:
    1 、内部网络非常大,甚至需要内部自己使用自己的顶级域名,那么需要的就是 Authoritative DNS Server
    解决方案:Bind ,另外捷克互联网中心开发的 Knot DNS 口碑也挺不错的( https://www.knot-dns.cz

    2 、需要的是缓存( Caching )解析结果,降低公司外网压力
    解决方案:Unbound
    ho121
        5
    ho121  
       234 天前 via Android
    要不试试 powerdns ?纯 api+数据库操作,没有配置文件
    gksec
        6
    gksec  
       234 天前   ❤️ 1
    谢邀,工作相关,有接触到国内大型的甲方。
    互联网企业可以追新,喜欢弄一些些花里胡哨的新技术,也见过用 Bind 的
    传统/体制内 大甲方基本都是直接用域环境 + WindowsDNS

    如果你们那有域环境建议直接 WindowsDNS , 如果单纯只用 DNS 楼上说的可以
    ho121
        7
    ho121  
       234 天前 via Android
    @ho121 数据库也可以做主从同步,意味着在中心节点改记录,自动同步到边缘节点
    Tsunayoshi
        8
    Tsunayoshi  
    OP
       234 天前
    @kkocdko 用途的话就是内网解析使用,我们有很多内部系统,所以会单独的维护一套办公网的 DNS 。
    Tsunayoshi
        9
    Tsunayoshi  
    OP
       234 天前
    @testcaoy7 大佬,是的,目前我们最大的办公事务所内部员工不到领完人,这也是我们之前从 dnsmasq 换到 bind 的原因。
    Tsunayoshi
        10
    Tsunayoshi  
    OP
       234 天前
    @ho121 powerdns 我们也简单调研过。用的话,我们就得引入两套,把 powerdns 以及对应的 powerdns-recursor 都给引入进来。所以目前我们是用的 binddns + unbound 作为自建递归 dns 的方式。但是没有太深入的使用,不知道是否支持不同职场进行差异化的管理。因为会有一些仅供办公网内部的权威域和一些特殊的劫持的策略。每个职场都不太一样
    testcaoy7
        11
    testcaoy7  
       234 天前
    @Tsunayoshi 说真的,建议采购现成的解决方案,省心省事
    Tsunayoshi
        12
    Tsunayoshi  
    OP
       234 天前
    @testcaoy7 话是那么说,不过贵呀,哈哈。其实我们之前最早的时候没想自己搞,因为自己搞不管是说配置管理还是说自建 DNS 都是挺麻烦的。我们之前联系过 bluecat 问过。他们家搞 dhcp 和 dns 挺好的。但是价格太贵了。大几百万
    testcaoy7
        13
    testcaoy7  
       234 天前
    @Tsunayoshi 自建不光是麻烦,而且会有些幺蛾子问题,更何况你还要劫持

    或者你试试 Sophos Firewall 的家庭版,免费的,就是别让 Sophos 知道你在商用……
    Kaiyuan
        14
    Kaiyuan  
       234 天前 via Android   ❤️ 1
    额,政府单位的操作是,发份文件下去叫他们自己改电脑 hosts 。没错,全省的都这样,有些有设备维护的单位就在路由器上设,乡镇下边会是改自己电脑。
    mohumohu
        15
    mohumohu  
       234 天前
    windows 的最简单好用,AD 域方案非常成熟。
    mytsing520
        16
    mytsing520  
       234 天前
    用 bind 写
    一台 DNS 主控,主打管理
    两到四台 DNS 是 slave ,主打服务,用一个 VIP 面向公司内部网络提供解析,开启递归

    这是我的建议
    hefish
        17
    hefish  
       234 天前
    帮公司省下的钱,进个人账户吗?如果能进,哪怕十个点,那也是极好的。
    lcy630409
        18
    lcy630409  
       234 天前
    AdGuardHome
    他不香么,图形化设置,每个分公司来一个 做解析和缓存, 上级 dns 指向当地或者总公司的地址
    lcy630409
        19
    lcy630409  
       234 天前
    而且 AdGuardHome 的解析配置文件可以自己写规则
    fxxkgw
        20
    fxxkgw  
       234 天前 via Android
    我搞了个 dns 系统,管理公司内网十来万个域名和几十万主机正反解
    用的 bind
    web 负责配置
    物理机做 bgp+Anycast ,部署 bind 服务和终端
    另有专门 bind 负责校验配置是否正确,正确才下发
    还有流量监控、转发配置、流量存储、禁封等等模块
    xusp
        21
    xusp  
       234 天前
    国内有一些做 saas 化的云,可以考虑一下。
    xusp
        22
    xusp  
       234 天前
    @xusp saas 化的 dns 产品。
    retanoj
        23
    retanoj  
       234 天前
    差异化解析这个可以了解下 DNS RPZ
    支持按多种触发条件进行不同的解析策略
    Tsunayoshi
        24
    Tsunayoshi  
    OP
       234 天前
    @testcaoy7 幺蛾子我们已经遇到了很多,比如说之前没有自建递归 DNS 的时候,我们基本就是个转发器,转发到 114dns ,dnspod ,aliyun 的 dns 。114dns 三天两头给你返回点垃圾地址。dnspod 虽然相对比较稳,但是我们也遇到了缓存污染的问题了。所以坑其实踩了不少
    Tsunayoshi
        25
    Tsunayoshi  
    OP
       234 天前
    @retanoj 谢谢大佬,目前我们已经在用 rpz 了,做劫持处理。但是劫持处理每个职场的行为也不太一样,这块可能还有部分 rpz 的功能我没有调研到,我再看看
    Tsunayoshi
        26
    Tsunayoshi  
    OP
       234 天前
    @hefish 哈哈,这当然是不会的。如果真这样那岂不是太美好了。公司的策略就是能省尽可能省
    Tsunayoshi
        27
    Tsunayoshi  
    OP
       234 天前
    @lcy630409 adguradhome 没有用过,我看了一下它本身是一个 dns 服务,目前其实我们的 bind 服务已经投入生产环境使用了,所以不太可能直接再更换 dns 服务的选型了
    defunct9
        28
    defunct9  
       234 天前
    dnsmasq 解千愁
    Tsunayoshi
        29
    Tsunayoshi  
    OP
       234 天前
    @defunct9 我们之前用的就是 dnsmasq 。。但是性能不足,我们就给换了。
    Mrealy
        30
    Mrealy  
       234 天前
    我公司用的是 dnsmasq+dnsforward 组合的,每个分公司也是同样方案定时去同步总部的内网记录。
    lxyv
        31
    lxyv  
       234 天前
    我工作过的 4 家公司从几十人的小公司到上万人的全球公司,无一例外全部用的是基于 windows server 的 ad 和 dns
    Tumblr
        32
    Tumblr  
       234 天前
    做 DNS 我觉得起码要考虑两方面的问题,一个是整体的架构设计,一是技术实现,其中技术实现是没有太大难度的。
    你们每个分公司是用统一的 IP ( anycast ),还是都有自己的 IP ?是考虑权威服务器之间的同步,还是在权威服务器上管理,各分公司用递归服务器?等乖

    另外,还可以考虑另一条路: 这么多分公司的统一管理是否有域呢?可以把 DNS 服务器和 AD 域集成到一起,我觉得这应该是实现起来最简单的方案。
    weite
        33
    weite  
       234 天前
    商用阿里云了解一下
    yumusb
        34
    yumusb  
       234 天前
    Tsunayoshi
        35
    Tsunayoshi  
    OP
       234 天前
    @Tumblr 目前暂未引入 anycast ,基本上 20 多个分公司每个公司都有不同的网段,不同的 IP 。基本就是每一个分公司一套把。只不过总公司的话是最大的规模,人数也在不到 2w 人也是最多的。关于加域的问题,分公司是有域控管理的,然后总公司是没有的。所以总公司这边用的 bind ,为了统一,分公司也并未采用 windows DNS 的方式。
    Tsunayoshi
        36
    Tsunayoshi  
    OP
       234 天前
    @yumusb 好的,我看一下,大佬
    defunct9
        37
    defunct9  
       234 天前
    dnsmasq 性能不足,还是头一次听说。
    retanoj
        38
    retanoj  
       234 天前
    @Tsunayoshi #25
    你这个需求里有一点是“差异化管理”,细挖一下就是根据不同来源执行不同的解析策略返回不同的结果。
    这个的话,DNS RPZ 好像也的确不能实现。
    maniaccn
        39
    maniaccn  
       234 天前
    公司内部三个分公司,一样有不同区域解析的需求,我们是使用 docker+coredns ,最开始用的 dnsmasq 单线程真的扛不住。
    说一下管理方案,写了一个脚本,读取数据库表,然后根据表生成对应公司的 dns 服务器配置文件,然后用 gitlab 的 ci 来实现自动化部署,修改数据库后,直接触发 CI ,然后进行自动部署。自动登录到 DNS 服务器,替换掉当前旧的配置文件,直接写入新的配置文件,然后 reload 配置文件。
    目前配置规模,每个分公司+总部两台 DNS 服务器,每个 DNS 服务器使用 NUC 部署的,目前稳定运行三年。无任何故障。
    Tsunayoshi
        40
    Tsunayoshi  
    OP
       234 天前
    @defunct9 是的,因为内部解析和转发到外部的域名解析大概二八开吧,我们这边峰值的一个 qps 达到过 2k 差点 3000 吧,除了用户的使用场景,还有办公网机房的使用场景。转发量大的时候,用户其实体感是非常明显的。
    Tsunayoshi
        41
    Tsunayoshi  
    OP
       234 天前
    @maniaccn 非常感谢大佬的建议,其实我一开始打算这么做,因为目前用 bind ,主备都已经分开了,然后我当时考虑的就是设计一张表,然后存所有职场的配置,通过一个字段区分开。下发的时候就动态查库然后生成一份 zone 文件。不过我当时没考虑用 gitlab-ci ,我是考虑直接通过文件分发,或者通过 rndc 远程调用的方式去刷新配置,现在想想中间加一层,其实可扩展性更高。比如加一层检测的手段之类的。当然这都是设想,没敢搞的原因就是网络上基本找不到这么干的。所以心里有些没底,哈哈。总之,感谢大佬的建议。
    qishua
        42
    qishua  
       234 天前
    我们之前是用 django 写的管理后台,然后运维人员通过 web 界面写入解析,然后生成配置,点击发布按钮,对应的 dns 配置文件更新
    XiLingHost
        43
    XiLingHost  
       234 天前
    我们现在是用的 powerdns 作为权威+dnsdist 作为递归和策略转发,挺方便的,性能也不错
    wangbin11
        44
    wangbin11  
       234 天前
    量不是很大,但是你的公司太大了,建议找个外包单独开发个,你收点红包多少,自己搞你会被高心态的
    xuanbg
        45
    xuanbg  
       234 天前
    内部解析,bind 也没多少管理成本啊。除非你天天改 dns 玩
    fuzzsh
        46
    fuzzsh  
       234 天前 via Android
    F5 GSLB
    Catheryan
        47
    Catheryan  
       234 天前
    Tsunayoshi
        48
    Tsunayoshi  
    OP
       234 天前
    @xuanbg 现在变更还是挺频繁的,除了各种机房更换呀,以及相关的办公网业务上线呀,变更还是不少的。
    Tsunayoshi
        49
    Tsunayoshi  
    OP
       234 天前
    @XiLingHost 感谢大佬的建议
    wheat0r
        50
    wheat0r  
       233 天前
    如果是每个分支机构做一套 dnsmasq ,性能应该不成问题。
    各分支机构的 dns 的记录也没必要同步,分公司只写自己的记录,查不到的去总公司找,总公司做转发就好了。
    至于管理平台,最好还是找人写一个小系统,复杂性应该也不高。
    baobao1270
        51
    baobao1270  
       233 天前 via Android
    我觉得可以用 octodns
    Torpedo
        52
    Torpedo  
       233 天前
    首先我也不太懂。
    我想问下 git+ci 这种不行吗?
    life90
        53
    life90  
       233 天前 via Android
    如果用 bind 的话,企业还有 AD 域,可能要做整合。不然域解析会有很多麻烦事。
    zhlxsh
        54
    zhlxsh  
       233 天前 via iPhone
    主节点是 bind ,配置通过数据库保存。子公司 dns 装 unbound 提供服务,公网直接查询公共 dns ,内网域名通过本地的 knot 去主节点 bind 查询。
    搞一个管理页面,修改数据库配置。每个子公司 dns 算一个单独的?相同的域名可以有不同的记录
    HalloCQ
        55
    HalloCQ  
       233 天前
    AdGuardHome 应该还是最好用的
    Tsunayoshi
        56
    Tsunayoshi  
    OP
       233 天前
    @life90 ad 域控这块我们目前把一众的 srv 记录接管过来了。。成本比较高的维护方式
    VIVIANSNOW
        57
    VIVIANSNOW  
       233 天前
    不说技术。只说管理。这种事情你不采购做?赚钱不说。还省心 出了问题。都会说你或部门技术性 弄的什么破玩意。弄好了也不涨你薪水。
    min
        58
    min  
       233 天前
    放着 windows server 不用找其他的方案,图啥
    Tsunayoshi
        59
    Tsunayoshi  
    OP
       232 天前
    @min 一些历史包袱吧,不过就算是用了 windows 也是还得需要有自动化管理的平台或者是工具呀。管理一份一台肯定好说
    Tsunayoshi
        60
    Tsunayoshi  
    OP
       232 天前
    @VIVIANSNOW 其实最开始考虑的就是采购,谈的 blucat ,但是费用太贵了。每年的维保,维护以及技术支持费用。这种事情肯定就是看 roi 嘛,花钱采购,买维保是成本,人力维护也是成本。就看怎么划算了。
    sofarsonear
        61
    sofarsonear  
       232 天前
    自己建设运维成本、稳定性保障能力都得考虑好。
    Mianmiss
        62
    Mianmiss  
       224 天前
    @Tsunayoshi 大佬,这个问题有进展了吗。同样有类似需求
    RockHan
        63
    RockHan  
       222 天前
    这个必须搞一个中心节点,数据库里存储 N 份配置,然后分公司装个 agent ,远程读取中心节点数据库并转化成配置文件。
    定制化开发的单我接。
    GLaDOS
        64
    GLaDOS  
       220 天前
    Windows 是企业 DNS 的最省事又稳定的方案,而且和 AD 集成,利用 AD 复制 DNS 到其他的服务器,统一身份认证也有了。其他方案都弱爆了,花钱开发,有 BUG 还要维护……
    Tsunayoshi
        65
    Tsunayoshi  
    OP
       121 天前
    @Mianmiss 我们自己维护了。然后自研平台做差异化管理了
    8675bc86
        66
    8675bc86  
       100 天前
    DNS 这么简单的东西,dnsmasq 搞不定? adguard 搞不定?逗
    Tsunayoshi
        67
    Tsunayoshi  
    OP
       99 天前
    @8675bc86 dns 本身的确很简单,但是你得考虑规模呀。你还得考虑频繁自动化变更等等规范性管理,标准。你抛开这些谈服务本身简不简单这不耍流氓么。。服务本身肯定简单呀。
    8675bc86
        68
    8675bc86  
       99 天前
    @Tsunayoshi 就企业内部这点需求,又不是没弄过,算个啥。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3125 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:10 · PVG 21:10 · LAX 05:10 · JFK 08:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.