Skip to content

Latest commit

 

History

History
500 lines (319 loc) · 38.4 KB

File metadata and controls

500 lines (319 loc) · 38.4 KB

六、配置网络服务

到目前为止,我们已经配置了节点,并允许它们彼此进行实际通信。 我们可以访问节点来远程管理它们,在它们之间传输文件,监视它们的资源,并执行基本的网络连接。 在这一章中,我们将设计我们的网络使用的 IP 地址方案,如,并设置所需的服务,将计划付诸实施。 这将包括讨论设置和配置动态主机控制协议(DHCP),域名服务、【显示】网络时间协议**(【病人】国家结核控制规划)。**

在本章中,我们将介绍:

  • 规划 IP 地址布局
  • 安装和配置 DHCP 服务器
  • 安装配置 DNS 服务器
  • 搭建内部 NTP 服务器

规划 IP 地址布局

在您的网络上实现任何东西之前,花时间想出一个伟大的计划是一个伟大的想法,但 IP 地址方案尤其重要。 接受默认设置并让每个人都快速启动和运行太容易了。 对于一些小公司来说,路由器(或任何默认处理 DHCP 的设备)提供的默认 IP 地址布局可能就足够了。 但在未来,随着公司的成长,它需要改变。 为潜在增长做好准备至关重要。 实现 IP 地址方案很容易,但在已经推出的网络上更改这个方案是一个巨大的挑战。 总是花时间做相应的计划。

确定 IP 地址方案的第一个考虑因素是需要向哪些类型的机器提供地址。 通常,您需要处理服务器、工作站和打印机。 但现在,我们的网络上也有其他设备,比如 IP 电话、公司发布的电话、会议系统、平板电脑等等。 当你开始把所有这些设备加在一起时,一个典型的 24 位网络有 254 个可用地址,即使对一个小公司来说,似乎也不算大。 更糟糕的是,一些设备(如笔记本电脑)有多个网络接口卡。 如果你把所有这些放在一起,你会发现这 254 个地址很快就会用完。

有多个子网肯定会有帮助。 通过子网,您可以为每种类型的服务创建单独的网络,每个网络都有自己的一组 IP 地址。 例如,您可以将服务器放在一个子网中,将打印机放在另一个子网中,并将终端用户工作站放在它们自己的子网中。 不必在这三种类型的设备之间分割单个 24 位子网,您可以将它们分散到几个网络上。 我们将在第 8 章理解高级网络概念中更详细地介绍子网,但现在隔离网络几乎总是一个好主意,甚至超出了 IP 地址的原因。

另一个要考虑的因素是限制您的广播域。 单个 24 位网络(通常是网络设备的默认值)是单个广播域。 简而言之,一个设备可以与网络上的另一个设备进行通信,而不需要首先路由,并共享相同的广播域。 如果你只有几个设备,这真的不重要(除非一个设备处理大量的流量)。 但在大多数网络中,分割广播域可以提高性能。 如果你有一个路由器来分割你的子网,你就有效地分割了你的广播域。 因此,如果单个节点在它自己的子网中,它将更难以饱和您的网络。 然而,没有完美的解决方案,单个广播域可能会变得饱和。

在规划 IP 方案时可以使用的一个有用工具是ipcalc实用工具。 实用程序可以帮助您了解每个方案可以提供多少 IP 地址。 这个实用程序可以通过 Debian 中的apt-get获得,而且它不需要任何额外的存储库。 虽然 CentOS 中内置了ipcalc命令,但这不是一回事,也没有什么用处。 如果可能的话,我会坚持使用 Debian 版本。 要使用它,只需将ipcalc与您正在考虑使用的网络一起执行。 例如,您可以运行以下测试:

ipcalc 10.10.96.0/22

Planning your IP address layout

Ipcalc 显示 10.10.9.60/22 内部网络的子网信息

在前面的示例中,我们可以看到,如果我们选择10.10.96.0/22方案,我们将拥有1022允许的 IP 地址和255.255.252.0子网掩码,这将是 a 类私有网络。 虽然您将在本书后面学习更多关于子网的知识,但ipcalc实用程序将方便您玩和确定具体的 IP 布局将如何看。

关于 IP 地址的另一个值得讨论的话题是 IPv4 和 IPv6。 很长一段时间以来,IPv4 已经足够满足每个人的需求。 不幸的是,公共互联网上的 IPv4 地址已经开始耗尽(在许多情况下,已经耗尽)。 IPv6 的好处是有很多可用的 IP 地址; 我们完全不可能再用完。 IPv6 还有一个安全方面的好处,因为地址空间太大了,目标被抽象了(本质上是通过隐藏实现安全性)。

考虑到这一点,您可能会试图在网络中通过 IPv4 启用 IPv6 地址。 然而,我的建议是,除非你有一个很好的理由这样做,否则不要麻烦。 IPv4 地址耗尽只会影响公共互联网,不会影响您的内部网络。 虽然可以在内部推出 IPv6,但这样做没有任何好处。 鉴于 IPv4 有超过 40 亿个可用地址,你需要相当多的设备才能证明 IPv6 的合理性。 另一方面,IPv6 对电信来说肯定是有用的(并且最终是必需的)。 这对正在学习思科考试的人也很有用,因为理解这个主题是必需的。 但是出于本书和设置 Linux 网络的目的,IPv6 并不能证明管理开销是合理的。

总之,提前计划是很重要的。 IPv4 已经足够满足我们的需求,将我们的网络划分为多个子网是一个好主意(即使你认为你的网络永远不会超过 254 个地址)。 大计划; 即使在最坏的情况下,您也可能永远不会使用您配置的所有 IP 地址。 但是,即使您不打算使用大量的 IP 地址,如果您希望扩展您的网络,拥有它们是一个好主意,并且更容易在以后实现。 根据我的经验,我实际上有过重新配置公司网络的任务,这不是为了增长而设计的。 虽然这绝对是一次学习的经历,但并不令人愉快。

安装配置 DHCP 服务器

到目前为止,在本章的中,我们讨论了如何为你的网络创建布局。 在本节中,我们将实施该计划。 这里,我们将在 Debian 或 CentOS 机器上设置一个 DHCP 服务器,并将其配置为为我们的网络提供 IPv4 地址。 那么,让我们开始吧!

首先,决定哪个发行版将运行您的 DHCP 服务器。 选择 Debian、CentOS 或其派生产品都没有关系。 每个版本的配置都是相同的,主要的区别是您需要安装的包的名称和启动的守护进程。 使用 Debian,您将安装isc-dhcp-server包,而您将安装dhcp用于 CentOS。 Debian 将为您启用 DHCP 守护进程(isc-dhcp-server),但它不会启动,因为我们还没有配置它。 CentOS 将不会尝试启动或启用其 DHCP 守护进程(dhcpd)。

对于 Debian 和 CentOS,我们需要编辑的配置文件位于/etc/dhcp/dhcpd.conf。 为了设置我们的 DHCP 服务器,我们需要编辑这个文件,然后启动或重启这个守护进程。 继续,用您最喜欢的文本编辑器打开这个文件。 如果您在 Debian 上安装 DHCP 服务器,您将注意到提供了一个默认的/etc/dhcp/dhcpd.conf文件,其中包含相当数量的示例配置。 另一方面,CentOS 几乎给了你一个空白文件。 出于我们的目的,我们将从头创建一些配置。 对于 Debian,您可以删除或备份默认配置文件。

以下是 DHCP 配置/etc/dhcp/dhcpd.conf文件的示例。 在本例中,我们在演示ipcalc实用程序(10.10.96.0/22)时使用了与前面标识的相同的网络。 这个网络给了我们几个可以使用的子网,但你不必继续使用这个方案; 请随意调整以适应您的环境。

default-lease-time 86400;
max-lease-time 86400;
option subnet-mask 255.255.252.0;
option broadcast-address 10.10.99.255;
option domain-name "local.lan";
authoritative;
subnet 10.10.96.0 netmask 255.255.252.0 {
 range 10.10.99.100 10.10.99.254;
 option routers 10.10.96.1;
 option domain-name-servers 10.10.96.1;
}

那么,让我们逐行检查这个构型。

首先,我们有以下两行:

default-lease-time 86400;
max-lease-time 86400;

在这里,我们正在确定我们希望 DHCP 租期持续多久。 在实践中,当一个节点请求一个 IP 地址时,它的客户端将与这个 IP 地址一起获得一个租约。 这意味着 IP 地址只在特定的时间段内有效。 这里,我们将租赁时间设置为86400,这意味着我们的租赁时间为一天,因为它是以秒为单位引用的。 这个数字我们列出了两次,分别是默认和最大租赁时间。 如果没有指定请求保持 IP 地址的特定时间量,则向任何客户端提供default-lease-timemax-lease-time意味着如果客户端请求保持 IP 地址超过这个时间,它将不被允许这样做。 我们将默认和最大租期设置为相同的数量。 如果我们愿意,我们还可以包括min-lease-time,以便在客户要求更少的情况下强制执行最小租赁时间。

考虑以下两行:

option subnet-mask 255.255.252.0;
option broadcast-address 10.10.99.255;

在这一节中,我们将设置给客户端的子网掩码和广播地址。 正如您可能已经知道的,子网掩码标识每个连接节点将属于的网络。 当客户端检查他们的 IP 信息后,提供了一个地址,我们识别的子网掩码将显示。 广播地址是子网内的所有节点都能在其上接收数据包的地址。

考虑以下两行:

option domain-name "local.lan";
authoritative;

在这里,我们将域名local.lan附加到连接到 DHCP 服务器的每个节点的主机名。 这一步无论如何都不是必需的,但如果要在网络中规范化域名,这一步会很有用。 我们还将authoritative包含在我们的配置中,以确定我们的 DHCP 服务器是这个子网的主服务器。

考虑以下几行:

subnet 10.10.96.0 netmask 255.255.252.0 {
 range 10.10.99.1 10.10.99.254;
 option routers 10.10.96.1;
 option domain-name-servers 10.10.96.1;
}

最后,我们在最后有一个非常重要的代码块。 这里,我们识别子网的网络地址、子网掩码、我们发布的 IP 地址范围、默认网关和 DNS 服务器。 在本例中,我们将从10.10.99.100开始第一个 dhcp 发出的地址,并在10.10.99.254结束池。 如果您回想一下前面的ipcalc输出,您会注意到这个子网中的第一个地址从10.10.96.1开始。 相反,在那里开始我们的泳池,我们在更晚的时候开始我们的泳池。 为了便于参考,我们使用了10.10.96.0/22网络,它给我们提供了以下子网:

10.10.96.0
10.10.97.0
10.10.98.0
10.10.99.0

如果需要,可以将 DHCP 范围设置为从10.10.96.1开始,从10.10.99.254结束。 在这种情况下,我们将有 1022 个 DHCP 地址。 但是,在我的配置中没有这样做的原因是,前三个网络已经被保留了几种用途。 我将第一个(10.10.96.0/22)用于服务器,第二个用于 DHCP 预订,第三个用于网络设备。 由于前三个子网不在 DHCP 范围内,DHCP 服务器永远不会向客户端提供任何这些地址,所以我不必担心 DHCP 租期处理我可能设置的静态地址。 确保静态 IP 地址不在 DHCP 范围内是一种非常常见的做法。

公平地说,这种配置相当复杂,因为我将向您展示如何使用 DHCP 使用多个子网,而不是只关注一个网络。 简化一点,如果我们设置一个默认的 24 位网络,我们的配置将如下所示(如果我们使用的是10.10.10.0/24网络):

default-lease-time 86400;
max-lease-time 86400;
option subnet-mask 255.255.255.0;
option broadcast-address 10.10.10.255;
option domain-name "local.lan";
authoritative;
subnet 10.10.10.0 netmask 255.255.255.0 {
    range 10.10.10.10 10.10.10.254;
    option routers 10.10.96.1;
    option domain-name-servers 10.10.96.1;
}

通过这个配置,我将 DHCP 范围设置为从10.10.10.10开始,到10.10.10.254结束。 这给了我 9 个永远不会被分配的 IP 地址(10.10.10.1-10.10.10.9),所以我有空间设置一些静态 IP 地址。

所以,我在这里多次提到了静态 IP 地址。 您可能已经知道这意味着什么,但有必要详细说明静态 IP 地址对于服务器是一个很好的想法。 这些地址是为某些服务器或节点保留的,您希望它们每次都有相同的 IP 地址。 如果您以前配置过网络,那么这可能是一个很简单的操作。 还有一个静态租赁的概念很重要嗯。 静态租期也称为预订。 在是静态租约的情况下,IP 地址仍然由 DHCP 服务器提供,客户端仍然使用 DHCP 请求地址。 不同之处在于客户端每次连接时都会收到相同的地址。

建立静态租约非常简单。 可以将预约放在您的/etc/dhcp/dhcpd.conf文件的末尾。 下面是一个示例来展示它的语法:

host bahamut {
    hardware ethernet 28:B2:BD:05:1E:00;
    fixed-address 10.10.97.4;
}

这里,我们有一个名为bahamut的主机,其 MAC 地址为28:B2:BD:05:1E:00。 名称是任意的; 除了让我们记住预订是给哪位主人外,它没有任何实际意义。 它不必匹配请求 IP 的设备的主机名。 这段代码中的两行简单地表示,当网卡连接到带有 MAC 地址28:B2:BD:05:1E:00的 DHCP 服务器时,它需要提供一个 IP 地址10.10.97.4。 我们可以为希望分配的静态租期添加尽可能多的类似代码块。

您可能想知道,什么时候应该使用静态 IP,什么时候应该使用静态租期? 在我看来,只要有意义并且适合您的网络设计,就应该使用静态租期。 对于静态租期,只要您想查看所有预订的概述,就只需要检查/etc/dhcp/dhcpd.conf文件。 此外,主机将始终收到相同的 IP 地址,即使您重新安装操作系统或从动态安装镜像启动它。 对于静态租约,您不需要在主机本身上配置任何东西。 一般来说,静态租赁更容易管理。 当然,您自己的偏好将取代这一点。

最后,为了使 DHCP 服务器正常运行,必须启动它并将其配置为在引导时运行。 Debian 已经启用了守护进程,所以你只需要重新启动它,我们的配置才能生效:

# systemctl restart isc-dhcp-server

对于 CentOS,我们需要手动启用和启动服务:

# systemctl enable dhcpd
# systemctl start dhcpd

如您所见,在 Linux 上配置 DHCP 服务器相当简单和直接。 当然,还有高级的使用场景和大量的额外选项。 但是对于大多数的目的,这里概述的配置应该足够了。

安装配置 DNS 服务器

域名系统(DNS)使得网络资源的导航更加容易。 除非您有一个非常小的网络,否则不太可能记住哪些 IP 地址属于哪些机器。 DNS 通过将名称映射到 IP 地址来提供帮助,因此您可以通过计算机的主机名来引用计算机,而 DNS 将完成将主机名转换回 IP 地址的工作。

DNS 是几乎每个拥有网络连接设备的人都一直在使用的东西之一,不管用户是否意识到它。 计算机、服务器、智能手机、平板电脑、智能电器等等都利用 DNS。 每当您在 Internet 上查找服务(例如网站或远程资源)时,DNS 将资源的名称转换为 IP 地址。

虽然 DNS 的概念和它对我们的作用可能是众所周知的,但它是那些很容易被认为是理所当然的事情之一。 DNS 是那些神秘的东西之一,它在后台工作,让我们的生活更轻松。 我们大多数人使用它,但很少人真正了解它是如何工作的。 每当您连接到一个Internet 服务提供商(ISP)时,通常会分配一两个 DNS 服务器用于您的连接。 更聪明的用户通常会绕过 ISP 分配给第三方服务器的 DNS 服务器,比如谷歌或 OpenDNS 所使用的服务器,以争取额外的性能。

DNS 在您的内部网络中也很有用。 大多数拥有超过几个工作站的公司都会设置 DNS,而且这是合理的。 它使你的网络导航变得轻而易举。 例如,将本地彩色打印机称为hp-color-01比记住 IP 地址(如10.19.89.40)更容易。 在这种情况下,添加打印机将很容易。 只需让您的操作系统通过名称浏览它。 网络上的任何资源都可以命名,为所有网络资源创建一致且可预测的命名方案是一个好主意。 我们来做一下。

通常,在基于 debian 的发行版中,所需包的命名与 CentOS 略有不同。 在 Debian 中,您要安装的包是bind9。 CentOS 只是简单的调用他们的bind。 如果你想知道,BIND代表伯克利互联网域名(以其开发的地方命名,即加州大学伯克利分校)。 这是互联网上最流行的名称服务器,所以您一定要熟悉它。 同时,如果您在 CentOS 系统上运行此活动,我建议安装bind-utils。 这为我们提供了dig命令,该命令对我们的目的非常有用。

第一步是在服务器上安装所需的包,然后您需要做的就是启动它,并确保它能够在启动时运行。 Debian 已经负责启动守护进程并为我们启用它。 你可以用下面的命令来确认:

# systemctl status bind9

CentOS 没有配置bind守护进程来自动启动,它也没有为你启动它。 如果 CentOS 是你的发行版,你会想要执行以下命令来启用bind并启动它:

# systemctl enable named
# systemctl start named

完成此操作后,您实际上拥有了一个可用的 DNS 服务器。 当然,我们没有配置任何东西,所以我们的 DNS 服务器实际上并没有为我们做很多事情。 但是现在我们已经安装了它,我们可以向它添加记录并构建配置。

首先,让我们看一下默认配置文件。 Debian 将 bind 的默认配置文件存储在/etc/bind/named.conf。 CentOS 将其存储在/etc/named.conf(它没有自己的目录)。 看看这个文件,了解一下配置是如何工作的。 我们将使用我们自己的配置文件,所以我建议您备份默认文件,然后安装我们自己的。

首先,让我们在发行版的默认目录(Debian 中的/etc/bind/named.conf和 CentOS 中的/etc/named.conf)中创建一个新的named.conf文件。 不管您使用的是哪个发行版,我们都将使该文件保持不变。 如果该文件中已经有文本,则将其复制到备份中或将其清空,因为以下两行是该文件中唯一需要的文本:

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";

这里,我们将包含两个额外的文件(我们将很快创建)。 如您所见,我们的named.conf文件只是调用这些文件,并且不包含其他配置。 这样,我们就可以创建自己的标准位置来查找这些文件。 /etc/bind已经是 Debian 中的默认位置,但是在 CentOS 中调用这个目录,我们可以强制它在相同的位置寻找配置。 但是在 CentOS 中,您需要创建/etc/bind目录。 命令如下:

# mkdir /etc/bind

接下来,让我们创建我们的/etc/bind/named.conf.options文件并自定义它:

options {
    forwarders {
        8.8.8.8; 8.8.4.4;
    };
};

在这里,我们创建了一个选项块,其中一些代码夹在花括号之间,然后包括一组额外的花括号,用于标识转发地址。 由于此 DNS 服务器用于在我们的内部网络中定位资源,所以转发器块告诉我们的 DNS 服务器将请求发送到哪里,如果它在本地无法找到它要查找的内容。 您的 DNS 服务器很可能在没有此功能的情况下仍然运行良好,因为在大多数情况下,它仍然会尝试另一个 DNS 服务器。 但是在这里设置转发器允许我们强制执行我们想要的 DNS 查找,以防我们在外部寻找某些东西。 在这个示例中,我使用的是谷歌的公共 DNS 服务器。 但是,你可以自己选择。 在www.opennicproject.org可以找到一些额外的 DNS 服务器(通常比较好),如果您关心隐私或跟踪,这也是一个很好的选择。

我们的下一个文件是/etc/bind/named.conf.local,它包含以下代码:

zone "local.lan" IN {
    type master; file "/etc/bind/net.local.lan";
};

zone "96.10.10.in-appr.arpa" {
    type master; notify no; file "/etc/bind/revp.10.10.96";
};

zone "97.10.10.in-appr.arpa" {
    type master; notify no; file "/etc/bind/revp.10.10.97";
};

zone "98.10.10.in-appr.arpa" {
    type master; notify no; file "/etc/bind/revp.10.10.98";
};

zone "99.10.10.in-appr.arpa" {
    type master; notify no; file "/etc/bind/revp.10.10.99";
};

在这个文件中,我们从标识我们的域名开始。 这里,我选择了local.lan。 由于此服务器对 Internet 上的任何内容都不具有权威性,因此此名称很适用。 在这个块中,我们调用另一个文件/etc/bind/net.local.lan。 实际上,如您所见,这里调用了几个文件(总共五个)。 第一个是我们的主要 DNS 区域,也是其中最重要的一个。 接下来是我们配置反向 DNS 查找的地方。 从本质上讲,DNS 不仅允许我们将主机名映射到 IP 地址,而且我们还可以反向操作(将 IP 地址映射回主机名)。 您可能不需要我在示例中创建的所有文件。 对于我的子网,我正在为我的四个子网中的每个创建一个反向查找文件。 如果不创建多个子网,则只需要创建一个。 它们的命名约定是revp,后面是 IP 地址的网络部分。 例如,我的10.10.99.0网络的反向查找文件是revp.10.10.99。 这些文件也将存储在/etc/bind中。

现在,让我们看看我们的主记录,也就是/etc/bind/net.local.lan文件:

;
; dns zone for for local.lan
;

$TTL 1D

@ IN SOA local.lan. hostmaster.local.lan. (

201507261 ; serial

8H ; refresh
4H ; retry
4W ; expire
1D ) ; minimum
IN A 10.10.96.1
;
@ IN NS hermes.local.lan.
ceres           IN      A   10.10.98.1
euphoria        IN      A   10.10.97.4
galaxy          IN      A   10.10.96.4
hermes          IN      A   10.10.96.1
puppet      CNAME galaxy
;
; dns zone for for local.lan
;

首先,我放置了一些以分号开头的通用注释。 如果一行以分号开头,它将被bind忽略。 注释是一种留下关于配置的笔记或事实的好方法。 然而,注释在bind中并不常用。 接下来,我们将Time To Live(TTL)设为一天:

$TTL 1D

这个值决定了其他 DNS 服务器能够缓存每条记录的时间。 在此期间之后,任何缓存了其中一条记录的服务器都必须丢弃它们。 对于设置内部 DNS 服务器而言,这个值对我们影响不大。 但是,如果您正在设置多个 DNS 服务器,那么这可能是一个需要配置的重要值。 TTL 值可能有用的一个例子是将地址记录更改为不同的 IP 地址。 假设您要将电子邮件主机切换到另一个提供商。 在这种情况下,您将相应地更改地址记录。 然而,在您执行此更改之前,您可以将 TTL 降低到更低的值,例如 1 小时,并在进行此更改之前执行此操作。 然后,服务器被迫放弃这个区域并刷新它,从而使它更快地看到您在电子邮件提供者中的更改。 当你完成时,你会把这个变回来。 通过以下一行,我们确定了 a起始权限(SOA):

@ IN SOA local.lan. hostmaster.local.lan. (

在本例中,我们正在识别此 DNS 服务器对local.lan域具有权限。 我们也澄清hostmaster.local.lan对此负责。 尽管看起来可能不像,但hostmaster.local.lan实际上是 bind 喜欢的格式的电子邮件地址。 然而,这显然是一个假地址,这对我们的内部 DNS 服务器没有影响。 在这一行的末尾,我们打开了一个配置块,在本例中是一个左括号。 下面的行代表我们的串行,这是一个非常重要的概念,为了我们的 DNS 服务器正常工作:

201507261 ; serial

每次我们的bind守护进程重启时,它都会重新加载这个文件。 但当它这样做的时候,序列号是它首先要看的东西。 如果是相同的,它可能不会加载任何更改。 因此,每当您更改bind中的区域文件时,您也必须更改此序列号。 在本例中,当前日期不使用连字符或空格。 最后一位数字只是当天的修订号,如果文件在一天中被更改多次。 您可以使用任何您喜欢的方案。 但使用日期是一种非常流行的方法。 无论您使用的格式是什么,每次更改时都要确保将序列增加 1。 这样您就不用担心为什么新创建的记录不起作用了。

8H ; refresh
4H ; retry
4W ; expire
1D ) ; minimum

这些值指示从 DNS 服务器检查更新的频率。 第一个值将配置从服务器每 8 小时刷新主服务器(此服务器)的区域记录。 至于重试,我们让奴隶知道,如果有一个问题连接,在这段时间检查回来。 最后,我们将区域记录的最低年龄设定为一天,最高为四周。 配置从 DNS 服务器超出了本书的范围,但是如果您以后决定配置从 DNS 服务器,那么在适当的地方配置这个配置不会有任何影响。

@ IN NS hermes.local.lan.

这里,我们正在识别这个名称服务器。 在我的例子中,我称其为hermes,其完整域名为hermes.local.lan

galaxy        IN    A   10.10.96.4
hermes        IN    A   10.10.96.1

最后,在这个示例配置中,将调用四个地址记录。 这基本上意味着,任何时候当有人在寻找这些主机之一时,请求就会映射到列出的域名。 它们可以在多个子网中,也可以在单个子网中。 在我的例子中,这些主机在不同的子网中:

puppet      CNAME galaxy

该配置的最后一行包含一个规范名(CNAME)记录。 基本上,这允许我们通过另一个名称来引用服务器。 在本例中,galaxy还用于称为puppet的软件,因此为其设置了一个 CNAME 记录。 这样,如果有人试图访问galaxy.local.lanpuppet.local.lan,他们的请求将解析到相同的 IP 地址(10.10.96.4)。 如果单个服务器向网络提供多个服务,那么 CNAME 记录可能非常有用。

前面,我调用了四个反向查找记录/etc/bind/revp.10.10.96/etc/bind/revp.10.10.97/etc/bind/revp.10.10.98revp.10.10.99。 接下来,我将演示其中一个文件(在本例中,是针对10.10.96.0网络的):

$TTL 1D
@ IN SOA hermes.local.lan. hostmaster.local.lan. (
201507261 ; serial
28800 ; refresh (8 hours)
14400 ; retry (4 hours)
2419200 ; expire (4 weeks)
86400 ; minimum (1 day)
)
;
@ NS hermes.local.lan.
1    PTR    hermes.local.lan.
3    PTR    nagios.local.lan.
4    PTR    galaxy.local.lan.

通过这个配置,您将注意到我们有一个与主区域一样的起始权限记录,并且我们还有一个序列号。 同样的想法也适用于这里。 无论何时更新任何记录(包括反向查找记录),都应该更新文件的序列号。 权限输入的开始和前面一样,这里没有什么奇怪的。 文件的不同之处在于如何调用主机。 我们不需要调用整个 IP 地址,只需要识别最后一个八位元,因为整个文件都专门用于从10.10.96.0网络反向查找 IP 地址。 对于每个子网,您都需要创建一个类似的文件。 同样,在我们的示例配置中有 4 个子网,但您不需要那么多。 以这种方式提供它只是为了提供一个如何处理独立子网的示例,如果您需要这样做的话。

在我们的配置就绪后,您可以在 DNS 服务器上重新启动绑定服务并进行测试。 我们可以像前面一样使用systemctl命令重新启动bind

对于 Debian,使用以下命令:

# systemctl restart bind9

对于 CentOS,使用如下命令:

# systemctl restart named

测试 DNS 服务器的一种方法是通过dig命令。 使用 Debian,您应该已经安装了这个包。 CentOS 操作系统需要安装bind-utils包。 dig(域名信息摸索器)是一个实用程序,它允许我们从 DNS 服务器请求信息。 尝试使用一个内部主机名:

dig myhostname.local.lan

如果您的 DNS 服务器出现在输出的SERVER下,那么您的 DNS 服务器运行正常。 如果由于某些原因它没有,验证您键入的内容、您的序列号,以及自上次配置更改以来是否重新启动了bind

您可以在 DNS 服务器中练习设置其他节点和记录。 开始时,设置bind可能会令人沮丧,但坚持下去,你很快就会成为专业人士。 通过使用本节中的示例,您应该有了一个可用于在环境中设置 DNS 服务器的工作框架。 确保将配置文件中包含的主机名和 IP 地址更改为与您的网络匹配的主机名和 IP 地址。 此外,确保您设置了bind来匹配您的子网,或者删除其他子网(如果没有的话)。 为了安全起见,与其直接从本书中复制配置,为了以防万一,通常最好是手动键入所有内容。

搭建内部 NTP 服务器

大多数 Linux 发行版都提供了网络时间协议(NTP)客户端,可以用来更新本地时间。 其思想是,在配置了 NTP 客户端后,您的计算机或服务器将定期检查互联网上某处的 NTP 服务器,并同步其时钟,以确保它尽可能准确。 这一点非常重要; 如果时钟关闭,在 Linux 机器上会发生非常奇怪的事情。 这些异常包括节点无法与 DHCP 服务器关联以获取 IP 地址,文件在文件服务器之间无法同步,等等。 这个故事的寓意是:您将希望在您的环境中设置 NTP 并使其工作。

相当多的针对终端用户工作站的 Linux 发行版(如 Ubuntu、Linux Mint 等)通常会为您设置一个 NTP 客户机。 这意味着开箱即用,您的时钟很有可能已经同步了,当然,假设您的安装可以访问 Internet。 默认情况下,这些客户机将连接到特定于发行版的 NTP 服务器。 这可能非常好,但是设置自己的 NTP 服务器也有好处。 这样做的一个很好的原因是,通过设置自己的 NTP 服务器,您就是一个优秀的网络公民。 这样想。 如果您有一个公司,有 100 台 Linux 机器,如果保留默认配置,那么每台机器都将定期检查一个公共 NTP 服务器。 这会对服务器造成不必要的压力。 如果您设置了自己的 NTP 服务器,那么只有一个服务器将检查公共服务器,这意味着您将吸收更少的资源。 另外,一些公司出于安全原因不允许公众访问端口 123(NTP 使用的端口)。 然而,可能会允许单个 NTP 服务器访问端口 123,然后您可以将客户机配置为连接并使用 NTP。

在我们开始设置 NTP 服务器之前,有一点很重要,那就是 Debian 和 CentOS 通常是没有安装 NTP 客户端的例外。 取决于您在安装期间选择的选项和包,NTP 客户端可能还没有正常工作,也可能还没有正常工作。 在我的测试环境中,当我分别通过最小安装和网络安装安装 CentOS 和 Debian 时,默认情况下都没有工作的 NTP 客户端。 然而,设置 NTP 客户端非常简单。 您所要做的就是安装 NTP 并启用它。 这实际上是 Debian 和 CentOS 对同一个包使用相同名称的罕见情况之一。 这个包被简单地称为ntp,所以如果您还没有安装它,请继续安装它。 安装完成后,Debian 将启动ntp守护进程并为您启用它。 在 CentOS 中,执行以下命令来启动它:

# systemctl enable ntpd
# systemctl start ntpd

对于这两个发行版,安装包后将创建文件/etc/ntp.conf,并且这个文件将有一个默认配置,将您的 NTP 客户端指向您发行版的 NTP 服务器。 如果您想知道它是什么样子的,请随意快速查看这个文件。 要查看您的机器正在与哪个服务器同步,以及与同步有关的一些统计信息,请执行ntpq -p命令。

Setting up an internal NTP server

查看已连接的 NTP 服务器

首先,让我们快速看一下这些数字的含义。 第一列remote包括我们所连接的 NTP 服务器的列表,这并不奇怪。 接下来是refid,这是这些服务器连接到的地方。 st列指的是该服务器的,这个数字指的是该时间服务器所在的层。 通常情况下,数字越低越好; 因为这意味着服务器离提供它时间的源相当近。 链下的每个服务器都有一个增加的层; 最低并不总是意味着服务器更好,但一般来说,较低的数字是好的。 t列表示类型。 这可以是单播、广播、多播或多播。 在本例中,我们有u用于单播。

when列表示服务器最近一次轮询是多久以前。 在示例截图中,每个服务器分别在 28 秒、24 秒、21 秒和 61 秒之前轮询。 这也可以以小时或天为单位列出。 poll列表示轮询频率,这里设置为每 64 秒轮询一次。 reach列是一个八进制数字,它包含最近 8 次 NTP 更新的结果。 如果所有 8 个都成功了,这个值将读取 377,这是它所能获得的最高值。 这意味着所有 8 次尝试都得到 1(成功),在八进制中,总数为 377。

最后,delay字段将延迟(以毫秒为单位)引用到 NTP 服务器。 offset字段表示本地时钟与服务器时钟的差值。 最后,jitter表示您与服务器之间的网络延迟。

为了设置 NTP 服务器,您必须首先安装本章前面提到的客户端。 安装它,将守护进程配置为自动启动,然后启动它。 在执行这些任务之后,您已经基本完成了(同样的客户机也用于服务器)。 基本上,如果您将其他计算机指向一个安装并配置了 NTP 的服务器,您基本上就拥有了所需的一切。

然而,有一些东西应该首先配置。 主要是/etc/ntp.conf配置文件。 这个文件在 Debian 和 CentOS 中位于相同的位置。 如果你查看这个文件,你会看到一些类似如下的行:

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

这里,您可以看到,在默认情况下,CentOS 会识别四个要同步的 NTP 服务器。 这些服务器对于大多数用例来说通常都很好,但是您可能想要考虑官方的 NTP 服务器。 为此,请浏览以下网站:

http://www.pool.ntp.org

通过该网站可以查看“NTP Pool Project”的官方 NTP 服务器。 要导航,在右边选择你的大陆,然后选择你的国家。 然后,您应该看到可以使用的 NTP 服务器的列表。 在我的案例中,我得到了以下细节:

server 0.north-america.pool.ntp.org
server 1.north-america.pool.ntp.org
server 2.north-america.pool.ntp.org
server 3.north-america.pool.ntp.org

是使用发行版提供的 NTP 服务器,还是使用 NTP 池项目提供的 NTP 服务器,这取决于您。 就我个人而言,我更喜欢后者。 在配置好服务器之后,还有一处需要修改。 你应该在配置中看到类似以下的一行在 CentOS:

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

或者,在 Debian 中类似如下:

#restrict 192.168.123.0 mask 255.255.255.0 notrust

在您的 NTP 服务器上,取消对这一行的注释,并将网络地址和子网改为您的。 如果有notrust,删除它。 作为参考,我的配置中的行显示如下:

restrict 10.10.96.0 mask 255.255.252.0 nomodify notrap

通过这个配置,我们限制了对本地客户机的 NTP 访问,并确保它们无法访问更改 NTP 服务器上的配置(只能从服务器读取)。 我喜欢在 NTP 中做的另一个更改是指定一个日志文件。 systemd 负责使用journalctl进行日志记录,但有时在出现问题时,使用一个文本文件来仔细阅读是很有用的。 如果你喜欢这样,那么在靠近顶部的地方添加以下一行:

logfile /var/log/ntp.log

如果你有任何问题,检查那个文件。 接下来,如果您使用 CentOS 作为 NTP 服务器,您应该通过其防火墙启用 NTP 通信。 要做到这一点,运行以下代码:

firewall-cmd --add-service=ntp –permanent
firewall-cmd --reload

现在我们已经解决了这个问题,重新启动您的 NTP 服务器。 我们可以通过以下命令之一(作为根)来完成。

在 CentOS 上使用 systemctl restart ntpd命令,在 Debian 上使用systemctl restart ntp命令。

此时,您拥有一个 NTP 服务器。 在您的客户机上,将它们配置为与之同步的服务器更改为您已指定为 NTP 服务器的机器的 IP。 在我的例子中,命令如下:

server 10.10.99.133

重新启动 NTP 后,给系统一些时间进行同步。 在某些情况下,它们可能需要半个多小时才能开始同步。 给它一点时间,然后检查您的配置,以确保它与ntpq -p命令同步。

Setting up an internal NTP server

与自定义 NTP 服务器同步的机器的输出

正如您可以在我的测试环境的输出中看到的,我在10.10.99.123启动了一个 NTP 服务器,Debian 机器正在与之同步,当前服务器的可达性为7,但是这个数字正在缓慢上升。 这很好,因为服务器只运行了几分钟。

如果您有任何问题,请确保您的网络中的任何防火墙中的 123 端口是开放的(使用 CentOS 作为服务器,请确保您已经运行了前面提到的防火墙命令)。 但是在您感到沮丧之前,给它一些时间——在第一次设置 NTP 服务器时,花一点时间启动它是很常见的。 通常情况下,所有事情都应该在 20 分钟内完成,但我曾见过需要更长的时间。

总结

在本章中,我们配置了我们的网络布局。 我们首先讨论了如何规划网络 IP 地址布局,然后通过创建自己的 DHCP 服务器将其付诸实践。 本文讨论了如何在没有多个子网的情况下将该配置划分为多个子网。 我们继续设置一个 DNS 服务器,以便可以通过名称解析网络节点。 通过设置 NTP 服务器,我们可以确保所有节点都有正确的时间,从而结束了本章。

在下一章中,我们将研究用 Apache 托管 web 内容。