域控制器杂谈

工作以来,最早接触的技术就是计算机加域了。但是对域的概念一直不太清晰,尤其是域控制器的搭建,DNS 服务器的配置。网络上的教程多是基于Windows 的,到了新的部门之后发现要是买正版真的太贵了。好在刚开始的时候可以使用群晖做域控制器,搭建过程傻瓜但是极其好用。不幸的是,群晖在做文件索引时,会导致用户认证的失败。于是想着是否可以用一台Linux 专门做认证、域控服务器。本文没有技术细节,只是泛泛谈一下最直观的认识。

最早是想搭建一个LDAP 认证服务器的,因为我对Samba 的印象仅仅停留在它是一个文件共享的协议的层面上。但是随着检索的深入,逐渐了解到Samba 除了共享文件和打印机之外,还可以做域控制器,并且内置了DNS 服务器和LDAP 服务,并且还可以配置FreeRadius 服务,简直满足了我的所有需求。于是想着重点学习一下。

如果粗略地看一下官方的说明文档,你会发现教程非常细致,细致到根本看不下去。因为对很多技术细节都没有概念,比如Kerberos 是什么、BIND9_DLZ 又是干啥的、为什么需要安装winbind?了解这些东西没啥用,但是不了解的话不管做什么都不踏实。于是照着示例和教程配置了三四遍,最终心里还是没太有底。想着先把目前的想法记下来,不然脑袋里太多乱七八糟的细节,根本学不进其他东西了。

关于Samba

Samba 是一个为网域内所有客户端提供文件和打印机共享服务的软件,支持Linux、Unix 和Windows(服务端需要winbind 服务组件)作为客户端。Samba 的一些特性、以及和其他软件系统的关系:

  • 内置LDAP 服务用于管理成员,但并不支持OpenLdap 作为后端。https://wiki.samba.org/index.php/FAQ#LDAP
  • 内置DNS 服务器作为域名解析,支持通过DLZ 模块将BIND9 绑定为后端域名解析服务。但内置的服务器已基本够用。
  • 采用Kerberos 加密用于身份认证。需要进行稍许的配置。
  • 可以作为FreeRadius 单点登录的后端。https://wiki.samba.org/index.php/VPN_Single_SignOn_with_Samba_AD
  • 利用samba-tool 工具可以重新配置Samba 服务,以及管理用户和DNS 记录等资源。

关于BIND9

bind9 是一个网路地址解析的服务,如果要详细学习的话,需要了解许多关于DNS 协议的支持,可以参考《鸟哥Linux 私房菜–服务器》相关的章节。这里主要记一下BIND9 与Samba 如何协同工作的,尽管一般情况下我们用不着很复杂的功能。
一般我们架设DNS 服务器时,总是需要有一个地方存放域名和IP 的对应关系,默认情况下BIND9 会从文本文件中读取这些信息,例如:name.conf 文件。但是这样做不够灵活,尤其是当我们想更新DNS 记录的时候。这时就有大神开发了BIND9_DLZ 模块,这个东西就相当于一个数据库驱动服务,让我们的BIND9 程序可以从数据库中读取数据,这样我们的DNS 记录就可以实时更新,并且可以做出漂亮的Web UI 来管理。网络上有很多关于BIND9 与MySQL 配合使用的案例与教程。
因为我们的Samba 内的机器资源也是通过FQDN 唯一确定的,并且可以通过LDAP 的协议和语法进程增删改查,于是通过配置BIND9_DLZ 模块就可以让BIND9 解析到我们Samba 中的主机名。需要注意的是数据库文件是由Samba 提供的,BIND9 只有使用权,所以一切DNS 记录的更细还是要通过samba 工具来完成。
Samba 内置有一个DNS 服务器,不支持多个域、且在域名解析转移时有BUG。但是一般小企业也不会有多个网域,倒也足够。

如此以来,就简单的理解了几个服务组件之间的关系,这样再去看配置命令时目的性就会更强一些。当然,关于域控的许多技术细节,还是要结合实际慢慢啃的。

参考