DHCP 服务器

DHCP 服务介绍

在大型网络中,系统静态分配IP地址面临问题:

  1. 确保不要同时在多个系统上使用同一个地址。
  2. 部署新系统通常需要手动分配其IP地址。在云环境中,实例的网络是自动化配置的。

动态主机配置协议(DHCP-Dynamic Host Configuration Protocol)提供了一种自动配置网络参数的方法,例如IP地址,默认网关,DNS服务器和域或NTP服务器。在网络中部署DHCP服务器,您可以集中控制这些参数。

部署 DHCP 服务器

要配置DHCPv4服务器,请首先使用ip addr命令确认您的网络接口配置是否指定了BROADCAST地址。

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e5:be:0f brd ff:ff:ff:ff:ff:ff
    inet 10.1.8.10/24 brd 10.1.8.255 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fee5:be0f/64 scope link 
       valid_lft forever preferred_lft forever

服务器必须具有静态IP地址。

安装 DHCP 软件

# 安装软件包
[root@server ~ 17:25:52]# yum install -y dhcp

# 配置防火墙,放行dhcp服务
[root@server ~ 17:19:11]# firewall-cmd --add-service=dhcp
[root@server ~]# firewall-cmd --add-service=dhcp --permanent

配置 DHCP 服务器

dhcpd服务使用/etc/dhcp/dhcpd.conf配置文件。 dhcp软件包提供/usr/share/doc/dhcp-*/dhcpd.conf.example 配置文件示例。

[root@server ~ 17:20:50]# cp /usr/share/doc/dhcp-*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
[root@server ~ 17:21:23]# vim /etc/dhcp/dhcpd.conf

典型的DHCP配置示例:

subnet 10.1.8.0 netmask 255.255.255.0 {
  range 10.1.8.101 10.1.8.130;
  option domain-name-servers 223.5.5.5;
  option domain-name "shaka.cloud";
  option routers 10.1.8.2;
  option broadcast-address 10.1.8.255;
  default-lease-time 600;
  max-lease-time 7200;
}

配置说明:

  • authoritative,指示服务器对其所管理的子网具有权威性。
  • subnet,提供的子网详。
  • range,指定服务器在该范围内分配IP地址。
  • option routers,指定服务器提供默认网关地址。
  • option domain-name-servers,指定服务器提供DNS名称服务器。
  • option domain-search,指定服务器提供DNS域搜索列表。
  • default-lease-time,提供网络信息默认租期,如果客户端不要求任何特定的租期。单位秒。
  • max-lease-time,指示服务器可以从客户端请求接受的最大租期。单位秒。

客户端系统上的NetworkManager使用domain-name-serversdomain-search更新resolv.conf文件中的nameserversearch参数。

验证 DHCP 配置

# 验证配置文件语法
[root@server ~ 17:26:11]# dhcpd -t
Internet Systems Consortium DHCP Server 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file

启用并启动服务

# 启用并启动服务
[root@server ~ 17:26:39]# systemctl enable dhcpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

# 查看服务状态
[root@server ~ 17:26:59]# systemctl status dhcpd

查看日志和租约记录

# 实时查看DHCP分配、报错、地址冲突、授权问题
[root@server ~ 17:27:13]# tail -f /var/log/messages

# 查看已分配IP、租期、客户端MAC
[root@server ~ 17:27:26]# cat /var/lib/dhcpd/dhcpd.leases

配置 DHCP 客户端

配置网卡自动获取

# 添加一个自动获取ip连接,假设网卡设备名为ens33
[root@client ~ 17:33:05]#  nmcli connection add con-name dynamic type ethernet ifname ens33
连接 "dynamic" (d9114b26-1869-4033-8ec2-efebfb7ad5ea) 已成功添加。
[root@client ~ 17:33:14]# nmcli connection up dynamic
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/17)

# 验证
[root@client ~ 17:33:19]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens32            UP             10.1.8.11/24 fe80::9058:482f:f76e:7ca6/64 fe80::8149:7e98:3f4a:94eb/64 
ens33            UP             10.1.8.101/24 fe80::ea7a:9120:3bc5:ff9/64 
virbr0           DOWN           192.168.122.1/24 
virbr0-nic       DOWN 
[root@client ~ 17:33:25]# ip -br link 
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> 
ens32            UP             00:0c:29:ff:db:1c <BROADCAST,MULTICAST,UP,LOWER_UP> 
ens33            UP             00:0c:29:ff:db:26 <BROADCAST,MULTICAST,UP,LOWER_UP> 
virbr0           DOWN           52:54:00:08:f1:80 <NO-CARRIER,BROADCAST,MULTICAST,UP> 
virbr0-nic       DOWN           52:54:00:08:f1:80 <BROADCAST,MULTICAST> 

dhclient 工具

命令帮助
[root@client ~ 17:33:19]# dhclient --help
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Usage: dhclient [-4|-6] [-SNTPI1dvrxc] [-nw] [-p <port>] [-D LL|LLT] 
                [-s server-addr] [-cf config-file] [-lf lease-file]
                [-pf pid-file] [--no-pid] [-e VAR=val]
                [-I <dhcp-client-identifier>] [-B]
                [-H <host-name> | -F <fqdn.fqdn>] [-timeout <timeout>]
                [-V <vendor-class-identifier>]
                [-R <request option list>]
                [-sf script-file] [interface]

This version of ISC DHCP is based on the release available
on ftp.isc.org.  Features have been added and other changes
have been made to the base software release in order to make
it work better with this distribution.

Please report for this software via the CentOS Bugs Database:
    http://bugs.centos.org/

exiting.
使用示例
# 释放当前DHCP获取的IP
[root@client ~ 17:34:29]# dhclient -r ens192

# 重新向DHCP服务器申请IP
[root@client ~ 17:34:56]# dhclient -v ens192

基于 MAC 地址预留IP地址

在配置文件中,host声明可以将MAC地址绑定到IP地址。 此配置对于始终为特定系统的网络接口提供相同的IP地址特别有用,尤其是Web或数据库系统之类的服务器。

客户端MAC地址查看

[root@client ~ 17:33:25]# ip -br link 
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> 
ens32            UP             00:0c:29:ff:db:1c <BROADCAST,MULTICAST,UP,LOWER_UP> 
ens33            UP             00:0c:29:ff:db:26 <BROADCAST,MULTICAST,UP,LOWER_UP> 
virbr0           DOWN           52:54:00:08:f1:80 <NO-CARRIER,BROADCAST,MULTICAST,UP> 
virbr0-nic       DOWN           52:54:00:08:f1:80 <BROADCAST,MULTICAST>

在以下示例中,服务器始终为MAC地址是00:0c:29:ff:db:26的系统分配10.1.8.130地址。

/etc/dhcp/dhcpd.conf最后添加如下内容:

host client.shaka.cloud {
  hardware ethernet 00:0c:29:ff:db:26;
  fixed-address 10.1.8.130;
}

重启服务

[root@server ~17:51:33]# systemctl restart dhcpd

客户端验证

# 激活连接
[root@client ~ 17:52:43]# nmcli connection up dynamic
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/18)

# 验证
[root@client ~ 17:54:23]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens32            UP             10.1.8.11/24 fe80::9058:482f:f76e:7ca6/64 fe80::8149:7e98:3f4a:94eb/64 
ens33            UP             10.1.8.130/24 fe80::ea7a:9120:3bc5:ff9/64 
virbr0           DOWN           192.168.122.1/24 
virbr0-nic       DOWN

DNS 服务器

DNS 服务介绍

DNS 服务介绍

DNS(Domain Name System,域名系统)服务是一种用于将域名转换为IP地址的分布式数据库服务。它是互联网的核心服务之一,使得用户能够通过易于记忆的域名来访问网站和其他网络服务,而无需记住复杂的IP地址。

DNS 也是一个存储网络主机和资源目录的分层命名系统。 目录中的信息将网络名称映射到不同资源记录。

  • 根域:DNS层次结构最顶层,使用独立的"."表示。
  • 顶级域(一级域):DNS层次结构第二层,例如**.com**,.net和**.org**等域。
  • 二级域:DNS层次结构第三层,例如 **shaka.cloud **和 redhat.fun 等域。由各个组织使用。
  • 以此类推。

DNS 查询

主机的 DNS 查询主要有两种方式:递归查询迭代查询

DNS 查询时,DNS 请求报头部RD 字段决定了查询类型:

  • RD 为 1 => 递归查询默认查询方式
  • RD 为 0 => 迭代查询。

递归查询:以本地名称服务器为中心,DNS 客户端只是发出原始的域名查询请求报文,然后就一直处于等待状态,直到本地名称服务器发来了最终的查询结果。此时的本地名称服务器就相当于中介代理 的作用。

迭代查询:以DNS客户端自己为中心。所有查询工作全部是 DNS 客户端自己进行。DNS客户 会按照顺序向本地名称服务器 、一级名称服务器、二级名称服务器、权威名称服务器发出查询 DNS 的 请求查询报文,这个过程中每一级服务器就会返回一个能解答这个查询的下一个名称服务器列表 A,获取到下个查询列表信息 A 后 DNS 客户 会再向返回的列表 A 中发出请求,直到找到最终负责所查域名的名称服务器,从它得到最终结果。

有些DNS服务器,为了减轻自己的负载,则会配置禁止使用递归查询,则客户端只能使用递归查询。

DNS 资源记录

DNS区域中的DNS resource record (RR-DNS资源记录)条目指定有关区域中特定名称或对象的信息。 资源记录格式如下:

owner-name			    TTL 	class 	type 	data
server.shaka.cloud. 	300 	IN 		A 		192.168.1.10

记录说明:

Field name Content
owner-name The name for this resource record.
TTL The Time To Live of the resource record in seconds. This specifies how long this resource record should be cached by DNS resolvers.
class The “class” of the record, almost always IN (“internet”).
type The type of information stored by this record. For example, an A record maps a host name to an IPv4 address.
data The data stored by this record. The exact format varies by record type.
A 资源记录 ⭐️

A 资源记录将主机 名映射到IPv4地址。

server.shaka.cloud. 	86400 IN A 172.25.254.254
AAAA 资源记录

AAAA资源记录(4A记录)将主机名映射到IPv6地址。

a.root-servers.net. 604800 IN AAAA 2001:503:ba3e::2:30
CNAME 资源记录

CNAME资源记录将一个名称别名为另一个名称(规范名称),该名称应具有A或AAAA记录。

当DNS解析程序收到对查询的CNAME记录时,它将使用规范名称而不是原始名称重新发出查询。

CNAME记录的数据字段可以指向DNS中任何区域的名称,无论该区域是内部的还是外部的:

www-dev.shaka.cloud. 	30 IN CNAME lab.shaka.cloud.
server.shaka.cloud. 	30 IN CNAME www.redhat.com.
  • CNAME记录可能指向具有CNAME的名称,但CNAME记录链最终必须解析为A或AAAA记录的名称。
  • 通常,避免将CNAME记录指向其他CNAME记录。 CNAME会使查找效率降低,更脆弱,并且我们可能会意外地创建一个指向彼此的CNAME记录循环。
  • CNAME记录链有合法用途。 例如,它们与Content Delivery Network(CDN)结合使用。 NS和MX记录不得指向带有CNAME记录的名称,而是使用带有A和/或AAAA资源记录的名称。
PTR 资源记录

PTR或pointer资源记录将IPv4或IPv6地址映射到主机名。 它们用于反向DNS解析。

PTR记录以一种类似于主机名的特殊格式对IP地址进行编码。

  • 对于IPv4地址,该地址被颠倒,以最具体的部分开始,然后视为in-addr.arpa域的子域中的主机。
  • 对于IPv6地址,该地址在半字节边界(每个十六进制数字)上划分为子域,并设置为ip6.arpa域的子域。
4.0.41.198.in-addr.arpa. 785 IN PTR a.root-servers.net.
0.3.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.3.a.b.3.0.5.0.1.0.0.2.ip6.arpa. 86400 IN PTR a.root-servers.net.

该语法可能看起来很奇怪,但是它简化了将地址范围的责任委托给其他DNS管理员的情况。

NS 资源记录⭐️

NS或名称服务器资源记录将域名映射到对其DNS区域具有权威性的DNS名称服务器。 该区域的每个公共权威名称服务器都必须具有NS记录。

shaka.cloud. 						86400 IN NS dns.shaka.cloud.
168.192.ip-addr.arpa. 				86400 IN NS dns.shaka.cloud.
9.0.e.1.4.8.4.6.2.e.d.f.ip6.arpa. 	86400 IN NS dns.shaka.cloud.

说明:

  • 其中两个NS记录用于10.1.8.0/16网络和fde2:6484:1e09::/48网络的反向查找。
  • classroom.shaka.cloud上的区域可能包含NS记录,以将对192.168.254.0/24和fde2:6484:1e09::1:: /64的反向查找委托给另一个名称服务器。

NS记录映射的名称必须有A或4A记录。

SOA 资源记录⭐️

SOA资源记录,也叫做起始授权机构记录,提供有关DNS区域如何运行的信息。 每个区域必须有一个SOA记录。

  • 指定了一个序列号
  • 指定其他权威性名称服务器用来确定何时从主要名称服务器传输区域资源记录的各种超时时间。
shaka.cloud. 86400 IN SOA dns.shaka.cloud. root.shaka.cloud. 2015071700 3600 300 604800 60

记录值说明:

示例 含义
MNAME dns.shaka.cloud. 该名称服务器是这个区域的主要名称服务器,负责维护区域资源记录。
RNAME root.shaka.cloud. 该区域中负责人邮件地址,@用.代替,例如root@shaka.cloud.
SERIAL 2015071700 该区域版本号,随着区域中记录更改而增加。
REFRESH 3600 名称服务器向名称服务器更新数据频率。单位秒。
RETRY 300 在重试失败的刷新前,应当等待的时间间隔。单位秒。
EXPIRE 604800 如果刷新失败,从服务器在停止其旧的区域副本响应查询之前等待的时间。单位秒。
MINIMUM 60 如果解析器查找某个名称,并且该名称不存在,解析器应将“记录不存在”这一信息缓存的时间。单位秒。
MX 资源记录

MX资源记录将域名映射到接受该域的电子邮件的邮件交换(mail exchange)。邮件服务器故障时,提供负载平衡和冗余的邮件服务器帮助路由电子邮件。

该记录类型的数据是用于确定在多个MX记录之间选择的优先级(首选最低),以及用于该名称的邮件交换的主机名。

shaka.cloud. 86400 IN MX 20 dns.shaka.cloud.
shaka.cloud. 86400 IN MX 10 mail.shaka.cloud.
shaka.cloud. 86400 IN MX 100 mailbackup.shaka.cloud.

主机和资源记录

⼀个主机,无论是客户端还是服务器,都具有以下 DNS 资源记录:

  • ⼀个或多个A或AAAA记录
  • 用于将其IP地址反向映射到名称的PTR记录
  • ⼀个或多个CNAME记录(可选)

DNS zone 还具有以下资源记录:

  • 唯一的 SOA 记录
  • 每个权威名称服务器的 NS 记录
  • ⼀个或多个MX记录(可选)
  • 用于在域中查找服务的⼀个或多个SRV记录(可选)

配置DNS服务流程

1.安装软件包

通过安装bind软件包来安装BIND。 名称服务器本身作为named服务运行。 bind包将HTML和PDF格式的BIND文档在安装在/usr/share/doc/bind/目录。

[root@server ~ 18:30:51]# yum install -y bind bind-utlis

2.配置服务器(修改配置文件)

[root@server ~ 18:31:22]# vim /etc/named.conf
#增加:10.1.8.10;
options { 
        listen-on port 53 { 127.0.0.1; 10.1.8.10; };
        ......
        # 增加:允许客户端查询
        allow-query     { localhost;10.1.8.0/24; };
        ......
        # 递归查询
        recursion yes;
        ......
         # 修改:安全校验
        dnssec-enable no;
        dnssec-validation no;
        .......
        };
# 最后添加: 正向解析
zone "shaka.cloud" IN {
      type master;
      file "shaka.cloud.zone";
      };   
      
# 最后添加: 反向解析
zone "8.1.10.in-addr.arpa" IN {
      type master;
      file "10.1.8.zone";
      };
# 检查配置文件语法
[root@server ~ 19:24:11]# named-checkconf /etc/named.conf

3.准备相关材料,例如用户、目录、权限等

[root@server ~ 19:36:13]# cd /var/named/

# 准备正向解析zone
#-a可以把权限复制过来
[root@server named 19:36:29]# cp -a named.localhost shaka.cloud.zone
[root@server named 19:36:37]# vim shaka.cloud.zone
$TTL 1D
@       IN SOA  dns.shaka.cloud. admin.shaka.cloud. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN NS   dns.shaka.cloud.
dns     IN A    10.1.8.10
server  IN A    10.1.8.10
client  IN A    10.1.8.11
www     IN A    10.1.8.100
@       IN MX  10 mail.shaka.cloud.
mail    IN A    10.1.8.200
web     IN CNAME www

# 检查zone文件语法
[root@server named 19:41:30]# named-checkzone  shaka.cloud shaka.cloud.zone 
zone shaka.cloud/IN: loaded serial 0
OK
# 准备反向解析zone
[root@server named 19:42:50]# cp -a shaka.cloud.zone 10.1.8.zone
[root@server named 19:43:39]# vim 10.1.8.zone
$TTL 1D
@       IN SOA  dns.shaka.cloud. admin.shaka.cloud. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN NS     dns.shaka.cloud.
10      IN PTR    dns.shaka.cloud.
10      IN PTR    server.shaka.cloud.
11      IN PTR    client.shaka.cloud.
100     IN PTR    www.shaka.cloud.
100     IN PTR    web.shaka.cloud.
200     IN PTR    mail.shaka.cloud.

# 检查zone文件语法
[root@server named 19:51:01]# named-checkzone 10.1.8 10.1.8.zone
zone 10.1.8/IN: loaded serial 0
OK

4.启用并启动服务

[root@server named 19:53:17]# systemctl enable named --now
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.

5.设置防火墙

[root@server ~ 19:53:45]# systemctl stop firewalld

客户端测试

方式1:配置dns

# 配置客户端 dns
[root@client ~ 20:01:25]# nmcli connection modify ens32 ipv4.dns 10.1.8.10
[root@client ~ 20:02:03]# nmcli connection up ens32
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/22)

#查看Linux 系统里的「DNS 解析配置文件」
[root@client ~ 20:09:51]# cat /etc/resolv.conf
# Generated by NetworkManager
search shaka.cloud
nameserver 10.1.8.10
# ping 工具测试
[root@client ~ 20:09:55]# ping -c1 server
[root@client ~ 20:17:13]# ping -c1 mail
[root@client ~ 20:11:53]# ping -c3 10.1.8.10

方式2:dig工具

# dig工具测试
[root@client ~ 20:11:53]# yum install -y bind-utils
# 查询相关记录,@10.1.8.10指定向10.1.8.10服务器查询记录
# 查询NS记录 
[root@client ~ 20:19:00]# dig @10.1.8.10 shaka.cloud NS
# 查询MX记录 
[root@client ~ 19:57:31]# dig @10.1.8.10 shaka.cloud MX
# 查询A记录 
[root@client ~ 20:00:50]# dig @10.1.8.10 server.shaka.cloud
# 查询PTR记录
[root@client ~ 19:59:54]# dig @10.1.8.10 -x 10.1.8.100

递归查询

以dns服务器为中心进行查询,最终结果返回给客户端。

#配置的dns找不到会去根找
[root@client ~ 20:00:22]# ping baidu.com

迭代查询

以客户端为中心进行查询,获取最终结果。

递归查询使用选项 +trace

[root@client ~ 20:00:44]# dig +trace @server www.baidu.com
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐