配置 DHCP 服务器

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

  1. 确保不要同时在多个系统上使用同一个地址
  2. 部署新系统通常需要手动分配 ip 地址,在云环境中,实例的网络是自动化配置的
  • server:vmnet1 10.1.1.10 对外提供网络服务
  • client:vmnet1

简要讲解通信原理

  1. 客户端使用 DHCPv4 配置网络接口时,网卡将 DHCPDISCOVER 数据包发送到 255.255.255.255 广播目标。因为

DHCP 服务器

配置服务流程:

DHCP 客户端申请 IP 地址分为四个阶段:发现、提供、请求和确认(否
认)。

  1. 安装软件包
[root@server ~ 09:11:29]# yum install -y dhcp
[root@server ~ 09:24:48]# rpm -qc dhcp
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases
[root@server ~ 09:24:52]# cat /etc/dhcp/dhcpd
dhcpd6.conf  dhcpd.conf
[root@server ~ 09:24:52]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
[root@server ~ 09:25:23]# mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
[root@server ~ 09:26:08]# cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@server ~ 09:26:17]# vim /etc/dhcp/dhcpd.conf
[root@server ~ 09:26:24]#
  1. 准备一些材料,例如修改服务器配置文件
# /etc/dhcp/dhcpd.conf
subnet 10.1.1.0 netmask 255.255.255.0 {
  range 10.1.1.101 10.1.1.130;
  #option domain-name-servers ns1.internal.example.org;
  option domain-name "aaa.cloud";
  #option routers 10.1.1.1;
  option broadcast-address 10.1.1.255;
  default-lease-time 600;
  max-lease-time 7200;
}

# 根据mac地址绑定ip地址
host fantasia {
  hardware ethernet 08:00:07:26:c0:a5;
  fixed-address fantasia.fugue.com;
}
  1. 配置服务器,例如修改服务器配置文件
  2. 启用服务
[root@server ~ 09:42:28]# systemctl enable dhcpd --now
  1. 配置防火墙
[root@server ~ 09:42:28]# systemctl disable firewalld --now

  1. 客户端验证
default via 10.1.8.2 dev ens32 proto static metric 100
# 默认路由(出去上网或去其他网段的路由)
# 所有不知道去哪里的包,都发给网关 10.1.8.2,走 ens32 这块网卡
# proto static 说明这条默认路由是手动静态配置的(不是 DHCP 动态下发的)
# metric 100 是优先级,数字越小越优先(目前只有一条默认路由,所以无所谓)

10.1.1.0/24 dev ens33 proto kernel scope link src 10.1.1.101 metric 101
# 直连路由(本机直接接入的网段)
# 所有去 10.1.1.0/24 网段的包,直接从 ens33 网卡发出去,不需要网关
# src 10.1.1.101 表示本机发包时源地址用这个 IP
# proto kernel 表示这是内核自动生成的直连路由(网卡一配 IP 就自动加)

10.1.8.0/24 dev ens32 proto kernel scope link src 10.1.8.11 metric 100
# 同样是直连路由
# 所有去 10.1.8.0/24 网段的包,直接从 ens32 网卡发出去
# 源地址用 10.1.8.11
# 这条路由 metric 100,和默认路由一样,属于同一网卡的策略

[root@client ~ 10:18:31]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
ens32            UP             10.1.8.11/24 fe80::20c:29ff:fea1:713e/64
ens33            UP             10.1.1.101/24 fe80::fca9:d7b7:5f07:4b2c/64
[root@client ~ 10:23:03]#

DHCP 中继服务器

介绍简单原理
在有中继的情形下,DHCP 客户端申请 IP 地址仍然分为四个阶段:发现、提供、请求和确认(否
认)。只是客户端发送的报文会被同广播域内的 DHCP 中继收到,然后由 DHCP 中继将 DHCP 报文
以单播的形式转发给服务器。同样,服务器响应的 DHCP 报文以单播形式发给 DHCP 中继,然后再
由中继转发给客户端。

主机名 IP 地址 网卡 备注
dhcp-server.aaa.cloud 10.1.8.10/24 vmnet8 DHCP 服务器
dhcp-relay.aaa.cloud 10.1.8.20/24 vmnet8 DHCP 中继(外网侧)
dhcp-relay.aaa.cloud 10.1.1.20/24 vmnet1 DHCP 中继(内网侧)
dhcp-client.aaa.cloud 自动获取 vmnet1 DHCP 客户端

配置 DNS 服务器

基本概念

  • 根:DNS 层次结构最顶层,使用独立的 **.**表示
  • 顶级域:如.com
  • 二级域:如 aaa.cloud
  • 以此类推域名:…
  1. Domain:统一资源定位符,就算一串名字而已,用来映射域名的。aaa.cloud
  2. Zone:**特定名称服务器之间负责的域。**可能是整个域,也可能只是域的一部分,Zone 可以将部分或全部子域都委派给另一个名称服务器或者多个名称服务器。

DNS 查询
主机的 DNS 查询分为两种,分别为:递归查询和迭代查询

  • 递归查询:以本地名称服务器为中心,DNS 客户端只是发出原始的域名查询请求报文,然后就一直处于等待状态,直到本地名称服务器发来了最终的查询结果。此时的本地服务器就相当于中介代理的作用
  • 迭代查询:以 DNS 客户端自己为中心,所有查询任务都由自己去完成。会以此按照顺序向本地名称服务器、一级名称服务器、二级名称服务器、权威名称服务器发出查询 DNS 的报文。

DNS 资源记录

格式如下:

owner-name            TTL   class type  data
server.aaa.cloud.     300   IN    A     192.16

记录说明:

  • owner-name:域名记录的名字
  • TTL:资源记录的存活时间(以秒为单位),用于指定 DNS 解析器缓存该资源记录的时长。
  • class:记录的类别
  • type:该记录存储的信息类型。例如,A 记录将主机名映射到 IPv4 地址。
  • data:记录的值,记录的内容

type 类型

  • A 资源记录:将主机映射到 ipv4 地址
  • AAAA 资源记录:将主机映射到 ipv6 地址
  • CNAME 资源记录:将一个名称别名为另一个名称,该名称应该具有 A 或者 AAAA 记录
  • PTR 资源记录:将 ipv4 或者 v6 地址映射到主机名
  • NS 资源记录((Name Server Record)):它告诉全世界:“这个域名(比如 example.com)的‘户口本’和所有解析信息,都由这些指定的 DNS 服务器负责管理!”
  • SOA 资源记录:提供有关 DNS 区域如何运行的信息
  • MX 资源记录:将域名映射到接受该域的电子邮件的邮件交换
  • TXT 资源记录:将名称映射到编码为可打印 ASCII 字符的任意文本
  • SRV 资源记录:可帮助客户端找到域中支持特定服务的主机。

开始配置 权威名称服务器

通过 bind 这个软件进行 DNS 服务

  1. 按照 bind 软件
yum install -y bind
rpm -qc bind
  1. 编写配置文件(配置 bind)

编辑/etc/named.conf

vim /etc/named.conf

options {
  // 添加端口访问。
	listen-on port 53 { 127.0.0.1;10.1.8.10; };
	listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
  // 允许哪个网段经过查询
	allow-query     { localhost;10.1.8.0/24; };

	/*
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable
	   recursion.
	 - If your recursive DNS server has a public IP address, you MUST enable access
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface
	*/
	recursion yes;

	dnssec-enable yes;
  // 关闭校验
	dnssec-validation no;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

# 正向解析
zone "aaa.cloud" IN{
	type master;
	file "aaa.cloud.zone";
};
# 反向解析
zone "8.1.10.in-addr.arpa" IN{
	type master;
	file "10.1.8.zone";
};

首先需要进入/var/named

编辑正向解析(域名解析成 ip)

cp named.localhost aaa.cloud.zone

vim aaa.cloud.zone

$TTL 1D
@       IN SOA  dns.aaa.cloud. admin.aaa.cloud. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.aaa.cloud
dns     A       10.1.8.10.
server  A       10.1.8.10.
client  A       10.1.8.11.
www     A       10.1.8.66.

编辑反向解析(ip 解析成域名)

cp named.localhost 10.1.8.zone

vim 10.1.8.zone
$TTL 1D
@	IN SOA	dns.aaa.cloud. admin.aaa.cloud. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	dns.aaa.cloud.
10	PTR	dns.aaa.cloud.
10 	PTR	server.aaa.cloud.
11 	PTR	client.aaa.cloud.
66	PTR	www.aaa.cloud.

重点:记得修改文件权限

# 1. 把拥有者和组都改成 named(最标准做法)
chown named:named aaa.cloud.zone
chown named:named 10.1.8.zone
  1. 启用服务
systemctl enable named --now
  1. 设置防火墙
systemctl disable firewalld --now
  1. 客户端验证
yum install -y bind-utils


dig @10.1.8.10 server.aaa.cloud
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐