环境:centos 64位
案例一:
192.168.2.0网络动态分配地址
地址池: 192.168.2.200 192.168.2.240
子网掩码:255.255.255.0
网关:192.168.2.254
dns指向:202.102.224.68 203.102.227.68
原理:dhcpcover 客户端向各个dhcp服务器发送广播,看谁可以分配地址。
dhcpoffer 各个服务器发送dhcpoffer,但是只包含ip地址,没有掩码等信息。
dhcprequest 向第一个送给他地址的服务器要一个地址,而且还会告诉其他服务器自己已经有地址,不需要他们分配了。
dhcpack 第一个也就是最先给客户端ip地址的服务器,会给客户端一个地址。
拓扑图:
图1
实现:
一.
1.安装dhcp
先挂载,在再安装
mount /dev/cdrom /media/cdrom
[root@host1 ~]# yum install dhcp
2.查看dhcp软件包的详细文件信息:
[root@host1 ~]# rpm -ql dhcp |less
其中:
/etc/dhcp/dhcpd.conf // dhcp服务器的配置脚本:
/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample //样例文件,可以参考它进行配置。
3.
1 #
2 # DHCP Server Configuration file.
3 # see /usr/share/doc/dhcp*/dhcpd.conf.sample
4 # see 'man 5 dhcpd.conf'
5 #
底行模式下执行:r /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample把其读取到/etc/dhcp/dhcpd.conf中。
第一处修改:
图2
修改为
图3
第二处修改:
删掉28,29 2行,因为是空作用域。
图4
第三处修改:删除掉第38行到最后的所有内容。
底行模式下执行38,$d
图5
第4处修改
30到34行修改为:
图6
注:sbunet是作用域,作用一个网段,option routers 是默认网关。
注意:这个作用域里面的网段一定要和你的虚拟机的网卡是同一个网段。
我的虚拟机网卡是2.0网段,seunet后面也应该是2.0网段的,这样DHCP服务才能工作。
二
1.看service dhcpd 下面有什么选项
[root@host1 ~]# service dhcpd
Usage: /etc/init.d/dhcpd {start|stop|restart|force-reload|condrestart|try-restart|configtest|status}
选项configtest 可以测试语法是否正确
[root@host1 ~]# service dhcpd configtest
Syntax: OK
2.启动dhcpd服务
[root@host1 ~]# service dhcpd start
开机自启动dhcpd服务
[root@host1 ~]# chkconfig dhcpd on
查看和dhcp有关的端口状态
[root@host1 ~]# netstat -tupln |grep dhcp
udp 0 0 0.0.0.0:67 0.0.0.0:* 1826/dhcpd
三.
建一个windows server 2003虚拟机进行测试,看是否能通过dhcp获得一个ip地址.
双击本地连接,双击Internet 协议(TCP/IP),选择自动获得IP地址,自动获得DNS服务器地址。
图7
tail -f /var/log/messages 通过查看日志可以清楚地看到DHCP的工作过程。
图8
双击本地连接,选择支持,可以看到虚拟机已经通过DHCP服务器获得了地址。
点”详细信息”选项可以查看详细信息。
图9
虚拟机里
ipconfig /renew 可以重新获得地址。
四.也可以给这个虚拟机一个静态绑定的地址,比如把192.168.2.211永久分配给它。
查看样例文件来获得帮助!
vim /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample,
格式下面这样的:
图10
把75到78行内容追加到/etc/dhcp/dhcpd.conf里面。
:75,78 w >>/etc/dhcp/dhcpd.conf
编辑文件
vim /etc/dhcp/dhcpd.conf
通过查看日志知道虚拟机网卡的MAC,这里面的00:0c:29:c1:53:c0 就是我的虚拟机的MAC.
Apr 27 12:22:44 host1 dhcpd: DHCPRELEASE of 192.168.2.200 from 00:0c:29:c1:53:c0 (kkkk-804lqin0ew) via eth0 (found)
Apr 27 12:22:50 host1 dhcpd: DHCPDISCOVER from 00:0c:29:c1:53:c0 via eth0
Apr 27 12:22:50 host1 dhcpd: DHCPOFFER on 192.168.2.200 to 00:0c:29:c1:53:c0 (kkkk-804lqin0ew) via eth0
Apr 27 12:22:50 host1 dhcpd: DHCPREQUEST for 192.168.2.200 (192.168.2.60) from 00:0c:29:c1:53:c0 (kkkk-804lqin0ew) via eth0
Apr 27 12:22:50 host1 dhcpd: DHCPACK on 192.168.2.200 to 00:0c:29:c1:53:c0 (kkkk-804lqin0ew) via eth0
进而把MAC换成虚拟机的。
绑定地址也换成192.168.2.211,
38 host fantasia {
39 hardware ethernet 00:0c:29:c1:53:c0;
40 fixed-address 192.168.2.211;
41 }
再把38到41行剪切到声明里面(subnet里面)就好了。还有由于绑定的地址211在range200到240之间,所以要把它排除掉,即它不参与dhcp分配。
图11
测试语法是否正确。
[root@host1 ~]# service dhcpd configtest
Syntax: OK
重启dhcpd服务。
[root@host1 ~]# service dhcpd restart
\Shutting down dhcpd: [ OK ]
Starting dhcpd: [ OK ]
通过日志跟踪分配情况:
[root@host1 ~]# tail -f /var/log/messages
ipconfig /release 释放地址,
图12
ipconfig /renew重新获得地址!
案例二
题目:网络比较大,有500台PC:
作用域(subnet)1: 192.168.2.0
192.168.2.2-192.168.2.253
网关 192.168.2.254
dns1 1.1.1.1
dns2 2.2.2.2
作用域(subnet)2:192.168.3.0
192.168.3.2 -192.168.3.253
网关 192.168.3.254
dns1 1.1.1.1
dns2 2.2.2.2
这个和案例一基本相似,只需要在一的基础上改动一下就好。
1.编辑/etc/dhcp/dhcpd.conf文件就行。
1.1查看手册,知道怎么配置超级作用域:
[root@host1 ~]# man dhcpd.conf
查到超级作用域用法如下:
图14
1.2 编辑/etc/dhcp/dhcpd.conf文件,作如下修改:
[root@host1 ~]# vim /etc/dhcp/dhcpd.conf
第一处修改:
图15
第二处修改:
我的dhcp服务器地址为192.168.2.60,所以要把这个地址排除掉.
图16
:wq 保存退出。
2.
2.1测试语法是否正确
[root@host1 ~]# service dhcpd configtest
Syntax: OK
2.2启动dhcpd服务
[root@host1 ~]# service dhcpd start
chkconfig dhcpd on 开机启动
打开一台server 2003虚拟机测试:(注意:这个虚拟机选择桥接,对应的网卡VMnet1改为自动获得ip地址和DNS服务器地址)
图17
图18
打开本地连接:
图19
另外 vim /var/lib/dhcpd/dhcpd.leases 也可以看到已经分配出去的地址。
案例3
题目:网络中存在多个vlan,每一个vlan中的机器都是dhcp client。
在存放各种server的vlan中架构dhcp server。
实验拓扑图:
图20
1.宿主机和虚拟机配置
宿主机网卡配置:
图21
虚拟机配置(DHCP server): 192.168.30.100
centos系统的dhcp server 虚拟机选择桥接.
2.[root@host1 ~]# vim /etc/dhcp/dhcpd.conf
图22
[root@host1 ~]# service dhcpd configtest
Syntax: OK
[root@host1 ~]# vim /etc/dhcp/dhcpd.conf
[root@host1 ~]# service dhcpd restart
Starting dhcpd: [ OK ]
[root@host1 ~]# chkconfig dhcpd on
3.设备配置
交换机:
[Quidway]vlan 10
[Quidway-vlan10]port eth0/10
[Quidway-vlan10]vlan 20
[Quidway-vlan20]port eth0/20
[Quidway-vlan20]vlan 30
[Quidway-vlan30]port eth0/22
[Quidway-vlan30]int eth0/24
[Quidway-Ethernet0/24]port link-type trunk
[Quidway-Ethernet0/24]port trunk permit vlan all
防火墙:
取消端口隔离:
[H3C]undo insulate
划分子接口,加标签,配置地址
[H3C-Ethernet0/0.1]int eth0/0.1
[H3C-Ethernet0/0.1]vlan-type dot1q vid 10
[H3C-Ethernet0/0.1]ip add 192.168.10.1 24
[H3C-Ethernet0/0.1]int eth0/0.2
[H3C-Ethernet0/0.2]vlan
[H3C-Ethernet0/0.2]vlan-type dot1q vid 20
[H3C-Ethernet0/0.2]ip add 192.168.20.1 24
[H3C-Ethernet0/0.2]int eth0/0.3
[H3C-Ethernet0/0.3]vlan
[H3C-Ethernet0/0.3]vlan-type dot1q vid 30
[H3C-Ethernet0/0.3]ip add 192.168.30.1 24
查看路由表:有10,20,30网段
图23
把3个接口都加入防火墙trust区域
[H3C]firewall zone trust
[H3C-zone-trust]add int eth0/0.1
[H3C-zone-trust]add int eth0/0.2
[H3C-zone-trust]add int eth0/0.3
[H3C-zone-trust]q
[H3C]firewall packet-filter default permit
ping dhcp服务器192.168.30.100:能通
图24
防火墙1的eth0/0.1和eth0/0.2上做dhcp中继,eth0/0.3接口不用做中继。
[H3C]dhcp select relay interface eth0/0.1
[H3C]dhcp select relay interface eth0/0.2
进入2个子接口,都中继给192.168.30.100
[H3C]int eth0/0.1
[H3C-Ethernet0/0.1]ip relay address 192.168.30.100
[H3C-Ethernet0/0.1]int eth0/0.2
[H3C-Ethernet0/0.2]ip relay address 192.168.30.100
3.测试:
把测试用的防火墙1(是用来当PC的)先连接到eth0/0接口上面,模拟10.0网段的一台PC,看是否能获得地址。
[H3C]firewall packet-filter default permit
[H3C]firewall zone trust
[H3C-zone-trust]add int eth0/0
去掉eth0/0的地址
[H3C]sysname PC
[PC]int eth0/0
[PC-Ethernet0/0]undo ip add
设置该接口自动获得地址:
[PC-Ethernet0/0]ip address dhcp-alloc
进入ETH0/0看是否通过DHCP获得了地址:
图25
也得到了网关:
图26
也得到了DNS.
图27
把测试用的防火墙2(是用来当PC的)连接到交换机eth/20接口,
通过DHCP动态获得了地址
图28
也获得了DNS和网关192.168.20.1
图29