linux-运维进阶-18 DHCP动态管理主机地址
配置实验环境
有Test和client两台虚拟机,Test用作服务器,client用作客户端,客户端的ip由服务器分配而来。举个栗子,就是你连上了别人家wifi后,那么他家的路由器会给你的电脑或者手机分配一个ip,这样你的电脑或手机才能上网。
做实验之前,最好把用过的虚拟机恢复到比较干净的快照,或者重新装两台虚拟机。例如我的虚拟机Test在前面的章节中,就改了网卡ip,至今它的ens33网卡还有192.168.141.12 、13、14、15多个ip呢,而且ens37我们之前也配置过静态ip,这样会影响本实验的观察,因此我是恢复到之前改网卡配置之前的快照后再进行下面的实验的。
Server硬件配置
Client硬件配置
VMware Workstation Pro 软件设置
在软件上找到“编辑”->“虚拟网络编辑器”->“更改设置”,做如下图的设置
注意:ip不用改,例如我的VMnet1的ip是192.168.23.0网段,VMnet8的ip是192.168.141.0网段,那就让它保持原样,不用去改。
下图中,如图选择即可。注意,不要勾选“使用本地DHCP服务将ip分配给虚拟机”,如果你勾选了,那分配ip给client的就不是Test这台服务器,而是VMware Workstation Pro软件分配的了。
两台虚拟机开机,开始配置。
Test配置DHCP服务
配置网络
Test中能上网的网卡(NAT模式的网卡,也就是网络适配器1,也就是ens33)不用管,给新增的网卡(仅主机模式的网卡,也就是网络适配器2,也就是ens37)配置一个跟默认网卡不同网段的固定IP,此处以网段192.168.10.0/24为例。
[root@localhost ~]# nmcli connection add con-name ens37 ifname ens37 type ethernet autoconnect yes ipv4.method manual ipv4.addresses 192.168.10.254/24
Connection 'ens37' (cae18d83-b6d8-4945-b704-aaf9b918ef04) successfully added.
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:9b:23:d9 brd ff:ff:ff:ff:ff:ff
inet 192.168.141.173/24 brd 192.168.141.255 scope global noprefixroute dynamic ens33
valid_lft 1798sec preferred_lft 1798sec
inet6 fe80::be8c:1227:c5b2:e66d/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:9b:23:e3 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.254/24 brd 192.168.10.255 scope global noprefixroute ens37
valid_lft forever preferred_lft forever
inet6 fe80::81bc:c746:2ead:eb30/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@localhost ~]#
可以看到,ens37的ip已经变成了192.168.10.254/24
安装dhcp服务
[root@localhost ~]# yum install dhcp -y
查看参考示例
[root@localhost ~]# cat /usr/share/doc/dhcp*/dhcpd.conf.example | grep -v "^$" | grep -v "#"
参数 | 作用 |
---|---|
ddns-update-style [类型] | 定义DNS服务动态更新的类型,类型包括none(不支持动态更新)、interim(互动更新模式)与ad-hoc(特殊更新模式) |
[allow | ignore] client-updates | 允许/忽略客户端更新DNS记录 |
default-lease-time [21600] | 默认超时时间 |
max-lease-time [43200] | 最大超时时间 |
option domain-name-servers [8.8.8.8] | 定义DNS服务器地址 |
option domain-name [“domain.org”] | 定义DNS域名 |
range | 定义用于分配的IP地址池 |
option subnet-mask | 定义客户端的子网掩码 |
option routers | 定义客户端的网关地址 |
broadcase-address[广播地址] | 定义客户端的广播地址 |
ntp-server[IP地址] | 定义客户端的网络时间服务器(NTP) |
nis-servers[IP地址] | 定义客户端的NIS域服务器的地址 |
Hardware[网卡物理地址] | 指定网卡接口的类型与MAC地址 |
server-name[主机名] | 向DHCP客户端通知DHCP服务器的主机名 |
fixed-address[IP地址] | 将某个固定的IP地址分配给指定主机 |
time-offset[偏移误差] | 指定客户端与格林尼治时间的偏移差 |
配置dhcp服务
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
ddns-update-style none;
ignore client-updates;
subnet 192.168.10.0 netmask 255.255.255.0{
range 192.168.10.50 192.168.10.150;
option subnet-mask 255.255.255.0;
option routers 192.168.10.254;
option domain-name "feng.io";
option domain-name-servers 8.8.8.8;
default-lease-time 21600;
default-lease-time 43200;
}
保存退出
PS:如果要将某个固定的IP分配给指定的主机,需要在主配置文件追加如下(实际上是将MAC地址和IP做了一个映射):
host subnet1
{
hardware ethernet 00:0c:29:66:3d:fd; #机器的mac地址
fixed-address 192.168.10.88; #提供的独立IP
}
参数作用
参数 | 解析 |
---|---|
ddns-update-style none; | 设置DNS服务不自动进行动态更新 |
ignore client-updates; | 忽略客户端更新DNS记录 |
subnet 192.168.1.0 netmask 255.255. 255.0 | 作用域为192.168.1.0/24网段 |
range 192.168.1.50 192.168.1.150; | IP地址池为192.168.1.50-150(约100个IP地址) |
option subnet-mask 255.255.255.0; | 定义客户端默认的子网掩码 |
option routers 192.168.1.1; | 定义客户端的网关地址 |
option domain-name “test.com”; | 定义默认的搜索域 |
option domain-name-servers 192.168. 1.1; | 定义客户端的DNS地址 |
default-lease-time 21600; | 定义默认租约时间(单位:秒) |
max-lease-time 43200; | 定义最大预约时间(单位:秒) |
} | 结束符 |
启动dhcp服务
[root@localhost ~]# firewall-cmd --add-service=dhcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# systemctl restart dhcpd
[root@localhost ~]# systemctl enable dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
[root@localhost ~]#
client客户端设置成自动获取ip(默认就是),测试
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ip add
可以看到,client获取到的ip是192.168.10.50/24,恰恰是我们IP地址池为192.168.1.50-150(约100个IP地址)的第一个地址,说明我们的DHCP服务配置成功了。
这时,我们试试在Test上关掉DHCP服务
Test上:
[root@localhost ~]# systemctl stop dhcpd
[root@localhost ~]#
client上:
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ip add
可以看到,一旦Tset上面的DHCP服务关掉了,那么client重启网络服务就会直接报错,再次查看其ip发现,它连IP地址都没了,只能看到其物理地址(Mac地址),上图中我的Mac地址就是00:0c:29:98:66:4e。
接下来,我们把它的ens33网卡的Mac地址记下来,加入到Test的DHCP配置中(Mac地址这么长不要敲错了哈,那个冒号:是英文的冒号,容易敲错):
Test上:
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
ddns-update-style none;
ignore client-updates;
subnet 192.168.10.0 netmask 255.255.255.0{
range 192.168.10.50 192.168.10.150;
option subnet-mask 255.255.255.0;
option routers 192.168.10.254;
option domain-name "feng.io";
option domain-name-servers 8.8.8.8;
default-lease-time 21600;
default-lease-time 43200;
}
host subnet1
{
hardware ethernet 00:0c:29:98:66:4e; #机器的mac地址
fixed-address 192.168.10.88; #提供的独立IP
}
保存退出,重启DHCP服务
[root@localhost ~]# systemctl restart dhcpd
[root@localhost ~]#
client上:
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ip add
可以看到,它的ip已经变成了我们指定分配给它的192.168.10.88/24了,配置成功!
实验到此结束!
虚拟机和虚拟网卡的通信原理
host-only(仅主机)模式与VMnet1虚拟网卡进行通信
NAT模式与VMnet8虚拟网卡进行通信
桥接使用的是你机器的真实网卡进行上网
1.仅主机模式
此模式下,虚拟机与VMnet1虚拟网卡进行通信,咱们做一下测试:
在虚拟网络编辑器中,我们将VMnet1如下图设置,给它设置一个DHCP地址池192.168.23.50-150。这样一来,我们的虚拟机网络适配器但凡是使用仅主机模式且以DHCP方式获取ip的,就能从这个地址池中获取到ip。
这样设置以后,只要你的虚拟机网卡是仅主机模式且网卡配置文件里设置的ip获取方式是DHCP(默认就是DHCP),则其ip就会从上图中那个DHCP地址池中选取。例如,我新安装的一台虚拟机,网卡设置为仅主机模式后,打开后其ip如下图:
可以看到它的ip为192.168.23.50,恰恰是上述地址池的第一个ip。
2.NAT模式
此模式下,虚拟机与VMnet8虚拟网卡进行通信,咱们做一下测试:
在虚拟网络编辑器中,我们将VMnet8如下图设置,给它设置一个DHCP地址池192.168.100.50-150。这样一来,我们的虚拟机网络适配器但凡是使用NAT模式且以DHCP方式获取ip的,就能从这个地址池中获取到ip。
这样设置以后,只要你的虚拟机网卡是NAT模式且网卡配置文件里设置的ip获取方式是DHCP(默认就是DHCP),则其ip就会从上图中那个DHCP地址池中选取。例如,刚刚那台虚拟机,网卡设置为NAT模式后,打开后其ip如下图:
可以看到它的ip为192.168.100.50,恰恰是上述地址池的第一个ip。
3.桥接模式
桥接模式使用的是你机器的真实网卡进行上网,也就是说,如果你的虚拟机网络适配器设置为桥接模式的话,则相当于虚拟机与你的电脑物理主机桥接,桥指的是网桥,就是交换机。所以,桥接模式下,你的虚拟机和你的物理机是在同一个网段的,如下图:
我们将刚刚那台虚拟机设置为桥接模式,查看其ip:
可以看到它的ip为192.168.1.105,那么我们看看我的物理机ip:
可以看到我的物理机ip是192.168.1.108,与之确实是同一个网段的。
我们常用的是NAT模式的虚拟机,所以我们按刚刚的NAT那样设置就好。
本篇到此结束。