管理DHCP和IP地址分配
一,DHCP基本概念
动态主机配置协议(DHCP)为系统提供了一种方法来自动检索它们的网络配置参数,如IP地址、默认网关、DNS服务器和域或NTP服务器。
通过在网络上部署DHCP服务器,可以集中控制这些参数。您可以为客户端分配一定范围的IP地址,也可以为特定客户端分配保留的IP地址。
DHCP有两种类似的协议:用于IPv4组网的DHCPv4(原DHCP)和用于IPv6组网的DHCPv6。本节主要介绍DHCPv4。DHCPv6将在本章后面讨论。
二,部署DHCP服务器
服务器的静态IP地址必须在DHCP服务器管理的范围内。如上所示,DHCP服务器的地址为192.168.0.2/24。该服务器管理192.168.0.0/24 子网。
[root@host ~]# yum install dhcp-server
配置DHCP服务器
dhcpd服务使用/etc/dhcp/dhcpd.conf配置文件。dhcp-server包中提供了/usr/share/doc/dhcp-server/dhcpd.conf.example置文件示例。使用该文件作为配置的起点。
典型的DHCP配置为例:
基于MAC地址预留IP地址
在配置文件中,主机声明可以将MAC地址与IP地址绑定。这种配置对于始终为特定系统的网络接口提供
相同的
IP地址特别有用,特别是当它提供web或数据库系统等服务时。
三,配置DHCP客户端
如果需要在客户端上配置用于DHCP的接口,请使用nmcli命令设置ipv4.method为auto。
[root@host ~]# nmcli con add con-name dhcp-connection type ethernet
ifname eth0 ipv4.method auto
配置DHCP的步骤:
(1)安装dhcp-server
[root@servera ~]# yum -y install dhcp-server
[root@servera ~]# rpm -qa |grep dhcp
[root@servera ~]# rpm -ql dhcp-server-4.3.6-34.el8.x86_64
配置DHCP服务器如下表:
修改DHCP的配置文件
[root@servera dhcp]# vim dhcpd.conf
authoritative;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.200;
option broadcast-address 192.168.0.255;
option domain-name-servers 172.25.250.254;
option domain-search "example.net";
default-lease-time 600;
max-lease-time 7200;
}
[root@servera dhcp]# dhcpd -t
[root@servera ~]# nmcli con add con-name ge-conn type ethernet ifname eth1 ipv4.addresses 192.168.0.10/24 ipv4.method manual
[root@servera ~]# umcli con up ge-conn
[root@servera ~]# systemctl restart dhcpd
[root@servera ~]# systemctl status dhcpd
四,配置分配IPV6地址
IPv6有多种配置网络接口的方法。在本节中,将学习其中的两个:
无状态地址自动配置Stateless Address Autoconfiguration (SLAAC)
动态主机配置协议Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
使用ip addr show命令获取链路本地IPv6地址:
[root@servera ~]# ip addr show dev eth0
IPv6无状态地址自动配置
无状态地址自动配置(SLAAC)
方法依赖路由器为客户端系统提供网络配置。这可以包括IPv6网络的前缀(客户端可以用它来创建地址)和DNS信息。对于这种方法,您的网络团队必须激活并配置路由器上的邻居发现协议(NDP)。
在SLAAC中,当客户端系统启动时,或者当您激活网络连接时,接口使用它的链路本地地址发送一个Router Solicitation消息到ffo2::2组播地址。路由器应答路由器通告消息,提供网络参数。
路由器通告消息可以提供以下网络配置参数:
IPv6前缀
DNS服务器的IPv6地址
DNS搜索列表
比较路由器通告报文与DHCPv6
配置DHCPv6服务器
dhcpd6服务使用/etc/dhcp/dhcpd6.conf配置文件。dhcp-server包中提供了/usr/share/doc/dhcp-server/dhcpd6.conf文件以用作配置示例。可使用该文件作为配置的起点。
authoritative; # 权威指令指示服务器对其管理的IPv6前缀是权威的。
subnet6 fde2:6494:1e09:2::/64 { # subnet6位置提供子网的详细信息。
range6 fde2:6494:1e09:2::20 fde2:6494:1e09:2::60; # 服务器分配该范围内的IPv6地址。
option dhcp6.name-servers fde2:6494:1e09:2::cc; # 服务器还提供DNS名称服务器。
option dhcp6.domain-search "example.net"; # 服务器提供DNS域搜索参数。
default-lease-time 600; # 如果客户端没有要求任何特定的租期长度,default-lease-time参数提供了一个以秒为单位的默认值。
max-lease-time 7200; # max-lease-time表示服务器可以接受客户端请求的最大租约时间。
}
重要:
当您从同一个磁盘映像部署多个虚拟系统时,请确保在第一次引导之后重新生成/etc/machine-id文件。否则,所有这些系统将获得相同的机器ID,因此也将获得相同的DUID。要生成一个新的机器ID,使用以下命令:
[root@host ~]# rm /etc/machine-id
[root@host ~]# systemd-machine-id-setup
[root@host ~]# systemctl restart NetworkManager
使用journalctl -u dhcpd6.service命令访问该信息的:
五,Ansible部署DHCP服务器
安装包
使用yum Ansible模块安装dhcp-server包如下:
部署DHCP配置文件
DHCPv4的配置文件(/etc/dhcp/dhcpd.conf)和DHCPv6的配置文件(/etc/dhcp/dhcpd6 .conf)可由多个文件模块配置。
启用和启动服务
使用Ansible service模块开启和启动服务。DHCPv4的服务名称为dhcpd。对于DHCPv6,服务名称为dhcpd6。
配置防火墙规则
使用Ansible firewalld模块开启DHCPv4的dhcp服务和dhcpv6的dhcp服务。
使用Ansible配置DHCP Client
客户端系统,使用网络系统角色。对于IPv4,将dhcp4变量设置为yes。对于IPv6,将auto6变量设置为yes。
配置DHCP服务的Ansible剧本:
---
- name: Deploy a DHCPv4 and DHCPv6 server
hosts: servera.lab.example.com
become: true
vars:
network_connections:
- name: static_net
type: ethernet
mac: "{{ mac_if2 }}"
state: up
ip:
address:
- 192.168.0.10/24
- fde2:6494:1e09:2::a/64
roles:
- rhel-system-roles.network
tasks:
- name: the dhcp-server package is installed
#FIXME: see "ansible-doc yum" for some examples
yum:
name: dhcp-server
state: present
- name: the DHCPv4 configuration file is deployed
#FIXME: see "ansible-doc copy" for some examples.
# Copy files/dhcpd.conf to /etc/dhcp/dhcpd.conf
# on servera
copy:
src: files/dhcpd.conf
dest: /etc/dhcp/dhcpd.conf
notify: reload dhcpd
- name: the DHCPv6 configuration file is deployed
#FIXME: see "ansible-doc copy" for some examples.
# Copy files/dhcpd6.conf to /etc/dhcp/dhcpd6.conf
# on servera
copy:
src: files/dhcpd6.conf
dest: /etc/dhcp/dhcpd6.conf
notify: reload dhcpd6
- name: the dhcpd and dhcpd6 services are started and enabled
#FIXME: see "ansible-doc service" for some examples
service:
name: "{{item}}"
state: started
enabled: yes
loop:
- dhcpd
- dhcpd6
- name: the dhcp and dhcpv6 firewall services are opened
#FIXME: see "ansible-doc firewalld" for some examples
firewalld:
service: "{{item}}"
state: enabled
immediate: yes
permanent: yes
loop:
- dhcp
- dhcpv6
handlers:
- name: reload dhcpd
service:
name: dhcpd
state: restarted
- name: reload dhcpd6
service:
name: dhcpd6
state: restarted
dhcp-client.yml Ansible剧本。
在系统上客户端组配置连接到次要网络的网络接口,使用DHCP获得IPv4地址,使用SLAAC和DHCPv6获得IPv6地址。
$ vim dhcp-client.yml
---
- name: Configure a DHCPv4 and DHCPv6 network interface
hosts: clients
become: true
vars:
network_connections:
- name: dyn_net
type: ethernet
mac: "{{ mac_if2 }}"
state: up
ip:
dhcp4: yes
auto6: yes
roles:
- rhel-system-roles.network
tasks:
- name: the system can connect to servera IPv4 address
wait_for:
host: 192.168.0.10
port: 22
timeout: 10
- name: the system can connect to servera IPv6 address
wait_for:
host: fde2:6494:1e09:2::a
port: 22
timeout: 10