yum install -y epel-release
yum install -y dhcp
yum install -y dhcp-server
systemctl stop firewalld
systemctl disable firewalld
systemctl start dhcpd
systemctl restart dhcpd
alias cp=cp
cp -rf /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
systemctl restart dhcpd
# /etc/dhcp/dhcpd.conf
#其中全局语句块和subnet语句块均可使配置生效,subnet语句块优先级高于全局语句块:
#全局语句块:
# option definitions common to all supported networks...
#指定获取主机域后缀:
option domain-name "michael.com";
#指定DNS,可选
option domain-name-servers 114.114.114.114, 8.8.8.8;
#ip的租期,单位:秒
default-lease-time 86400; #默认是600s,客户端会在租期的一半也就是300s后进行续租,组曲太短会占用大量的网络带宽,建议改时间长一点。这里修改为86400s,一天。
#最大租期时间
max-lease-time 100000;
log-facility local7;
#subnet配置 #指定网段
subnet 192.168.1.0 netmask 255.255.255.0 {
#指定分配的ip范围,可以跳过一些地址
range 192.168.1.10 192.168.1.100;
range 192.168.1.150 192.168.1.200;
#指定网关
option routers 192.168.1.1;
}
#为一个mac地址分配一个固定的ip,效果等同于静态获取;
#为00:0c:29:52:ab:a2这个mac地址固定的分配192.168.1.190这个地址;
host michelle {
hardware ethernet 00:0c:29:52:ab:a2;
fixed-address 192.168.1.190;
}
dhcpd配置文件语法检查功能
systemctl status dhcpd.service
journalctl -xeu dhcpd.service
dhcpd -t -cf /etc/dhcp/dhcpd.conf
在/etc/dhcp/dhcpd.conf
配置文件中,存在许多不同的配置项,用于定义DHCP服务器的行为和属性。以下是一些常见的配置项及其含义:
ddns-update-style
:指定动态DNS更新的方式。可以设置为none
、ad-hoc
或interim
。默认值为none
,表示禁用动态DNS更新。
option domain-name
:设置域名选项,指定DHCP客户端所属的域名。
option domain-name-servers
:设置DNS服务器的IP地址列表,用于DHCP客户端的DNS解析。
default-lease-time
:指定默认的租约时间,即DHCP客户端获取到IP地址的有效期,以秒为单位。
max-lease-time
:指定最大的租约时间,即DHCP客户端可以使用IP地址的最长时间,以秒为单位。
subnet
:定义子网配置块,指定子网的IP地址范围、子网掩码和其他相关选项。
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
}
range
:在子网配置块内定义IP地址范围。指定DHCP服务器可以分配给客户端的IP地址范围。
option routers
:设置默认网关(路由器)的IP地址,用于将数据包从DHCP客户端转发到其他网络。
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
option subnet-mask
:设置子网掩码的值,用于指定DHCP客户端的网络子网。
option broadcast-address
:设置广播地址,用于向DHCP客户端广播消息。
host
:用于定义静态分配的主机IP地址。通过指定主机的MAC地址和相应的IP地址,使特定的设备始终获取相同的IP。
host pc1 {
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.1.66;
}
group
:用于设置一组主机的共享选项。
group {
option domain-name-servers 8.8.8.8, 8.8.4.4;
option routers 192.168.1.1;
host pc1 {
hardware ethernet 00:11:22:33:44:55;
}
host pc2 {
hardware ethernet 66:77:88:99:AA:BB;
}
}
- 以上只是一些常见的配置项,还有许多其他可以在
dhcpd.conf
文件中进行配置的选项,以满足不同的需求。
shared-network
:用于定义共享网络中的多个子网。例如:
shared-network mynet {
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
}
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.100 192.168.2.200;
option routers 192.168.2.1;
}
}
allow
和 deny
:用于设置对特定主机或子网的访问控制。例如:
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
deny unknown-clients;
allow known-clients;
}
上述配置将拒绝未知客户端,并允许已知客户端分配IP地址。
include
:用于包含其他配置文件。例如:
include "/etc/dhcp/myoptions.conf";
上述配置将包含/etc/dhcp/myoptions.conf
文件中的所有配置选项。
除了上述常见选项外,dhcpd.conf
文件还提供了其他高级配置选项,例如动态DNS更新、租约时间、DDNS协议等。您可以参考dhcpd.conf
文件的注释和手册文档以获取更详细的配置信息。
请注意,在修改dhcpd.conf
文件后,需要重新加载或重启DHCP服务器以使配置生效。
要在Linux上配置多个VLAN ID的DHCP,您可以按照以下步骤进行操作:
确保您的Linux系统已经安装并正确配置了DHCP服务器软件,比如ISC DHCP服务器(dhcpd)。
编辑DHCP服务器的配置文件。通常情况下,该文件位于/etc/dhcp/dhcpd.conf
。使用文本编辑器打开该文件。
在配置文件中,定义每个VLAN的DHCP池。根据您的需求,可以为每个VLAN定义一个独立的子网和IP地址范围。例如,假设有两个VLAN,VLAN10和VLAN20,可以按照以下方式定义它们的DHCP池:
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200;
option routers 192.168.10.1;
option domain-name "vlan10.example.com";
}
subnet 192.168.20.0 netmask 255.255.255.0 {
range 192.168.20.100 192.168.20.200;
option routers 192.168.20.1;
option domain-name "vlan20.example.com";
}
您可以根据需要进行调整,并根据实际情况添加更多的子网和DHCP池。
在配置文件中,为每个VLAN定义一个DHCP预定义主机。这允许您为特定的MAC地址分配静态IP。例如:
host host1 {
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.10.50;
}
host host2 {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address 192.168.20.50;
}
您可以根据需要定义更多的静态主机。
保存并关闭配置文件。
检查DHCP服务器的其他配置,例如监听接口(如果有多个网络接口)和日志设置,并根据需要进行调整。
启动或重新加载DHCP服务器以使用新的配置。具体的命令可能因您所使用的Linux发行版而有所不同。通常,您可以使用以下命令重新加载配置:
sudo systemctl reload dhcpd
如果您使用的是其他的DHCP服务器软件,请参考相应的文档以了解正确的重新加载配置的步骤。
完成上述步骤后,您的DHCP服务器将根据所定义的VLAN ID提供IP配置。确保客户端设备的网络配置与所分配的子网和VLAN ID 匹配。
要在CentOS上配置多个子网的DHCP服务器,并使客户端能够选择指定的子网,您可以按照以下步骤进行操作:
打开DHCP服务器的配置文件/etc/dhcp/dhcpd.conf
。
在配置文件中添加多个subnet
块,每个块表示一个子网,并提供相应的IP地址范围、配置设置和选项。例如:
subnet 172.16.0.0 netmask 255.255.0.0 {
range 172.16.0.2 172.16.0.240;
option domain-name-servers 172.16.1.120, 114.114.114.114;
option routers 172.16.1.120;
option broadcast-address 172.16.255.255;
default-lease-time 600;
max-lease-time 7200;
}
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name "example1.com";
}
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.100 192.168.2.200;
option routers 192.168.2.1;
option domain-name "example2.com";
}
subnet 192.168.3.0 netmask 255.255.255.0 {
range 192.168.3.100 192.168.3.200;
option routers 192.168.3.1;
option domain-name "example3.com";
}
您可以根据需要添加更多的子网和相关配置。
保存并关闭文件。
启动或重新加载DHCP服务器以使用新的配置。执行以下命令:
sudo systemctl restart dhcpd
客户端选择指定子网的方法可以通过两种方式进行配置:
a. 子网选择器(Subnet Selector)选项:在DHCP客户端上配置子网选择器选项,以指示客户端应该从哪个子网获取配置。
打开DHCP客户端的配置文件/etc/dhcp/dhclient.conf
。
添加以下行,其中x.x.x.x
是您希望选择的子网所在的服务器IP地址。
option rfc3442-classless-static-routes code 121 = string;
request subnet-mask, broadcast-address, routers, domain-name-servers, rfc3442-classless-static-routes;
send dhcp-class-identifier "subnet-select-01";
send dhcp-client-identifier "01:02:03";
send rfc3442-classless-static-routes 1.0.0.0 192.168.1.x, 2.0.0.0 192.168.2.x, 3.0.0.0 192.168.3.x;
在rfc3442-classless-static-routes
行中,使用具体的CIDR格式子网地址替换1.0.0.0
、2.0.0.0
和3.0.0.0
。
保存并关闭文件。
重启DHCP客户端以使用新的配置。
b. 使用虚拟局域网标识(VLAN ID):如果您的网络已经使用了虚拟局域网(VLAN)来分隔不同的子网,并且DHCP服务器已经针对每个VLAN进行了配置,那么客户端可以通过连接到相应VLAN的接口来选择特定的子网。
确保客户端的网络接口已经正确配置为相应的VLAN。
客户端将通过与特定子网关联的VLAN接口来获取DHCP配置,而不需要特别指定子网。
无论是使用子网选择器选项还是基于VLAN ID,重要的是确保您的DHCP服务器已正确配置,以提供适用于每个子网的IP地址池和相关配置。客户端和DHCP服务器之间的通信和协商过程将确保客户端获得正确的配置。
/etc/dhcp/dhclient.conf
文件是DHCP客户端的配置文件,用于指定客户端与DHCP服务器进行通信时使用的配置选项。以下是对dhclient.conf
文件的常见配置选项的详细解释:
timeout
:设置DHCP客户端等待DHCP服务器响应的超时时间(以秒为单位)。例如:
timeout 10;
retry
:设置DHCP客户端在未收到DHCP服务器响应时进行重试的次数。例如:
retry 5;
request
:指定客户端请求从DHCP服务器获取的选项。一般包括 IP 地址、子网掩码、网关地址、DNS服务器地址等。例如:
request subnet-mask, routers, domain-name-servers;
send
:指定客户端在DHCP通信中发送的选项。例如:
send dhcp-client-identifier "01:02:03";
prepend
:在请求的选项值前添加其他选项。例如:
prepend domain-name-servers 8.8.8.8, 8.8.4.4;
上述配置将在请求的DNS服务器地址之前添加Google的公共DNS服务器。
supersede
:覆盖DHCP服务器提供的选项值。例如:
supersede domain-name-servers 8.8.8.8, 8.8.4.4;
上述配置将覆盖DHCP服务器提供的DNS服务器地址。
ignore
:忽略来自DHCP服务器的指定选项。例如:
ignore domain-name-servers;
上述配置将忽略DHCP服务器提供的DNS服务器地址。
script
:指定在从DHCP服务器获取配置后执行的脚本。例如:
script "/path/to/script.sh";
上述配置将在获取到DHCP配置后执行/path/to/script.sh
脚本。
alias
:为客户端接口指定别名。例如:
alias {
interface "eth0";
fixed-address 192.168.1.50;
option subnet-mask 255.255.255.0;
}
上述配置将为eth0
接口设置别名,并使用指定的IP地址和子网掩码。
请注意,在修改dhclient.conf
文件后,需要重新启动或重启DHCP客户端以使配置生效。
modprobe --first-time 8021q
ip link add link ens32 name ens32.200 type vlan id 200
ip link add link ens32 name ens32.300 type vlan id 300
ip link set ens32.200 up
ip link set ens32.300 up
ip address add 172.168.10.51/24 dev ens32.200
ip address add 172.168.20.51/24 dev ens32.300
但是上面使用ip address添加的VLAN和地址不会永久生效的。重启系统之后都不存在了。我们需要把这些配置保存在配置文件里面。
首先修改ifcfg-ens33的配置文件,其次创建ifcfg-ens33.200和ifcfg-ens33.300配置文件:
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
DEVICE=ens33
ONBOOT=yes
接下来为vlan 200创建配置文件,命名为ifcfg-ens33.200
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33.200
DEVICE=ens33.200
BOOTPROTO=none
ONBOOT=yes
IPADDR=172.168.10.51
PREFIX=24
NETWORK=172.168.10.0
VLAN=yes
接下来为vlan 300创建配置文件,命名为ifcfg-ens33.300
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33.300
DEVICE=ens33.300
BOOTPROTO=none
ONBOOT=yes
IPADDR=172.168.20.51
PREFIX=24
NETWORK=172.168.20.0
VLAN=yes
default-lease-time 600;
max-lease-time 7200;
subnet 172.16.1.0 netmask 255.255.255.0 {
range 172.16.1.150 172.16.1.200;
option routers 172.16.1.254;
option domain-name-servers 172.16.1.1, 211.138.24.66;
}
subnet 172.16.1.0 netmask 255.255.255.0 {
range 172.16.2.150 172.16.2.200;
option routers 172.16.2.254;
option domain-name-servers 172.16.1.1, 211.138.24.66;
}
启动路由转发功能
enable ipforwarding
启动dhcp中继转发功能
enable bootprelay
指定dhcp服务器地址
config bootprelay add 172.16.1.1
华为文档 IEEE 802.1Q封装的VLAN数据帧格式
在某些场景中,我们希望在Linux服务器(CentOS / RHEL)上的同一网卡分配来自不同VLAN的多个ip。这可以通过启用VLAN标记接口来实现,但要实现这一点,首先必须确保交换机上添加多个vlan。
假设我们有一个Linux服务器,其中有两个以太网卡(ens33和ens38),第一个网卡(ens33)用于数据流量,第二个网卡(ens38)用于控制/管理流量。对于数据流,将使用多个vlan(将在数据流网卡上分配来自不同vlan的多个ip)。
假设从交换机连接到服务器数据流量网卡的端口被配置为Trunk,通过映射多个vlan到它。下面是映射到数据流量网卡的vlan:
VLAN ID (200),172.168.10.0/24
VLAN ID (300),172.168.20.0/24
在CentOS 7 /RHEL 7 / CentOS 8 /RHEL 8系统上使用VLAN标记接口,必须加载内核模块8021q。
使用以下命令加载内核模块“8021q”
lsmod | grep -i 8021q
modprobe --first-time 8021q
lsmod | grep -i 8021q
8021q 33080 0
garp 14384 1 8021q
mrp 18542 1 8021q
使用modinfo命令列出8021q的信息:
modinfo 8021q
现在使用ip命令创建vlan 200和vlan 300到ens33网卡:
ip link add link ens33 name ens33.200 type vlan id 200
ip link add link ens33 name ens33.300 type vlan id 300
发现ens33.200和ens33.300的链路状态为DOWN,下面启用它们。
ip link set ens33.200 up
ip link set ens33.300 up
下面为两个vlan 分配ip地址:
ip address add 172.168.10.51/24 dev ens33.200
ip address add 172.168.20.51/24 dev ens33.300
可以看到ens33.200和ens33.300已经配置好ip地址了。
但是上面使用ip address添加的VLAN和地址不会永久生效的。重启系统之后都不存在了。我们需要把这些配置保存在配置文件里面。
首先修改ifcfg-ens33的配置文件,其次创建ifcfg-ens33.200和ifcfg-ens33.300配置文件:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
DEVICE=ens33
ONBOOT=yes
接下来为vlan 200创建配置文件,命名为ifcfg-ens33.200
vim /etc/sysconfig/network-scripts/ifcfg-ens33.200
DEVICE=ens33.200
BOOTPROTO=none
ONBOOT=yes
IPADDR=172.168.10.51
PREFIX=24
NETWORK=172.168.10.0
VLAN=yes
接下来为vlan 300创建配置文件,命名为ifcfg-ens33.300
vim /etc/sysconfig/network-scripts/ifcfg-ens33.300
DEVICE=ens33.300
BOOTPROTO=none
ONBOOT=yes
IPADDR=172.168.20.51
PREFIX=24
NETWORK=172.168.20.0
VLAN=yes
编辑完配置文件,重启一下网络服务。
systemctl restart network
可以看到vlan200, 300的信息都没有消失。
在 Linux 中,配置 VLAN 需要通过修改网络接口和创建虚拟网络接口来实现。下面是具体步骤:
首先确认网卡是否支持 VLAN 功能。可以通过执行命令 ethtool -i
来查看。
如果网卡支持 VLAN,则需要安装 vlan 工具,可以通过执行以下命令进行安装:
sudo apt-get update
sudo apt-get install vlan
sudo vconfig add <interface_name> 100
此命令将会在系统中创建一个新的虚拟网络接口,名称为
,其中
为原本接口的名称。
如果您需要将 VLAN 100 配置为静态 IP,请编辑位于 /etc/network/interfaces
的网络配置文件,并添加以下行:
auto <interface_name>.100
iface <interface_name>.100 inet static
address <ip_address>
netmask <netmask>
gateway <gateway>
如果您需要将 VLAN 100 配置为动态 IP,请将 inet static
更改为 inet dhcp
。如果有必要,为 VLAN 接口设置 DNS 信息,添加以下行:
dns-nameservers <dns_server_ip>
sudo ifup <interface_name>.100
现在您已经成功配置了 VLAN,可以使用
作为具有 VLAN 100 标签的新网络接口。