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

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

  •  
  •   Tsunayoshi · 2024-03-18 10:27:18 +08:00 · 6683 次点击
    这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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