鸟哥的服务器《十五》DHCP服务器

1. DHCP 服务的实现原理

  1. 初始化:客户端使用源地址为 0.0.0.0 的 TCP/IP地址通过 DHCP/BOOTP 服务器端口向本地子网发送一个“DHCP Discover(DHCP发现)”广播信息包
  2. 选择:服务器检查自己是否为给客户机分配了IP。如果是,则发送“DHCP Offer(DHCP提供)”信息包作为响应
  3. 请求:客户端对收到的第一个信息包产生响应,并以广播的方式发送“DHCP Request(DHCP请求)”信息包作为回应。该信息包告诉服务器,我想让你给我提供服务,我接受你给我的租用期限。
  4. 捆绑:服务器收到“DHCP Request”信息包后,会以一个“DHCP Acknowledge(DHCP确认)”信息包作为响应。

2. IP 地址租约和更新

  1. 地址租约:分为限定租期和永久租用两种
  2. 更新租期:租期达50%以上,则需要更新租期。客户端发送一个“DHCP Request”信息包给原始信息的服务器,用于询问舒服可以续租,服务器同意则服务器返回一个DHCP Acknowledge 信息包给客户端。当租期达87.5%,客户端尝试与任何一台DHCP服务器联系以获取有效的IP地址,再次进入捆绑状态。若当前IP租期满,则客户端重新进入初始化状态,重新获取IP。
  3. 解除租约:客户端离线会造成租约解除。客户端到期也会造成租约解除

3. 查询网卡地址

# 如何查询本机网卡MAC地址
[root@CentOS ~]# ifconfig 
# 查询远程主机MAC地址
[root@CentOS ~]# ping 192.168.1.110
[root@CentOS ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.1              ether   14:e6:e4:9f:94:28   C                     eth0
192.168.1.110            ether   00:0c:29:cf:88:43   C                     eth0

4. 全局设置

全局参数 说明
default-least-time (默认组约时间) 默认21600s 即6小时
max-lease-time (最大租约时间) 超过这时间没有打出请求,DHCP 服务器回收该 IP
domain-name-server (DNS 服务器) 指定 DNS 服务器
option domaim-name (域名) 指定本地网络的域名
option subnet-mask (子网掩码) 设置子网掩码
option routers(网关) 指定客户端的网关IP
ddns-update-style(动态更新DNS资料) 有三种:interim,ad-hoc,none
option broadcast-address(广播地址) 默认系统会自动计算

5. dhcpd.conf 的配置格式

全局选项/参数; 全局有效
声明{
选项/参数; 局部有效
}

声明 说明
shared-network 用来告知一些子网络是否分享相同网络
subnet 描述一个IP地址是否属于该子网
range 起始IP 终止 IP 提供动态分配IP的范围
host 主机名称 参考特别的主机
group 为一组参数提供声明
allow unknown-clients;deny unknown-clients 是否动态分配IP给未知的使用者
allow bootp;deny bootp 是否响应激活查询
allow booting;deny booting 是否响应使用者查询
filename 开始启动文件的名称,应用于无盘工作站
next-server 设置服务器从引导文件中加装主机名,应用于无盘工作站

6. dhcpd.conf 的选项

选项 说明
subnet-mask 为客户端设定子网掩码
domain-name 为客户端指明DNS名字
domain-name-servers 为客户端指明DNS服务器的IP地址
host0name 为客户端指明主机名字
routers 为客户端设定默认网关
broadcast-address 为客户端指定广播地址
ntp-server 为客户端指定网络时间服务器IP地址
time-offset 为客户端设定和格林威治的偏移时间单位秒|

7. 配置IP作用域

subnet 子网 ID netmask 子网掩码 {
range 起始IP ,结束IP地址;
IP参数;
}

Subnet 192.168.3.0 nermask 255.255.255.0 {
range dynamic-bootp 192.168.3.10 192.168.3.100;
range dynamic-bootp 192.168.3.120 192.168.3.220;
}

8.配置客户机的IP选项

    option 选项代码 设置内容
    option routers IP地址;                #为客户设置默认网关和路由器IP地址
    option subnet-mask 子网掩码;        #设置子网掩码
    option nis-domain “名称”;         #设置NIS服务器域名
    option domain-name “名称”;            #设置DHCP客户端的DNS域名
    option domain-name-servers IP地址;    #设置DNS服务器的IP地址
    option broadcast-address IP地址;  #设置DHCP客户端在该子网中的广播地址
    default-lease-time time;            #设置默认组约时间长度,单位s
    max-lease-time time;                #设置最大租约期限

    host computer1
    {
        hardware ethernet MAC地址;        #绑定的网卡地址
        fixed-address IP地址;         #绑定的IP地址
    }
option routers 192.168.3.5;             
option subnet-mask 255.255.255.0;   
option nis-domain “JavaEye.org”;            
option domain-name “JavaEye.org”;           
option domain-name-servers 192.168.3.2,202.115.3.11;    
option broadcast-address 192.168.3.255; 
default-lease-time 2400;            
max-lease-time 7200;                

host computer1
{
    hardware ethernet 00:0C:29:38:02:64;        
    fixed-address 192.168.1.32;         
}

9. 设置租约期限

default-lease-time time #设置默认组约时间长度,单位s
max-lease-time time #设置最大租约期限

10. 保留特定的IP地址

要保留特定的IP地址给指定的DHCP客户端使用,可先用 arp 命令将该客户端网卡的MAC地址查出,然后在/etc/dhcp.conf文件中加入如下格式host语句。

host 主机名
next-srver marvin.radhat.com;       #仅用于无盘工作站
    hardware ethernet 网卡的MAC地址     #指定DHCP客户端网卡的MAC地址
    fixed-address IP地址              #指定为该DHCP客户端分配的IP地址
    IP参数                                  #指定默认网关等其他IP参数
}

11. 多网段的IP地址分配(设置DHCP中继代理)

为每一个网段设置一个DHCP服务器
在某一个子网中安装DHCP服务器(使用DHCP中继代理)

# 设置DHCP中级代理
[root@CentOS ~]# service dhcrelay start    #除非使用INTERFACESzhiling在/etc/sysconfig/dhcrelay文件中指定接口
# 指定DHCP中继代理
[root@CentOS ~]# dhcrelay-i eth1 -i eth2 192.168.2.6       # 192.168.2.6是eth0连接的子网内的DHCP服务器,-i是向指定的子网提供服务

12. 安装 DHCP 服务

# 确认网卡具有广播功能
[root@CentOS ~]# ifconfig eth0

[root@CentOS ~]# yum list all | grep dhcp
dhcp.x86_64                                12:4.1.1-53.P1.el6.centos     base   
dhcp-common.x86_64                         12:4.1.1-53.P1.el6.centos     base   
dhcp-devel.i686                            12:4.1.1-53.P1.el6.centos     base   
dhcp-devel.x86_64                          12:4.1.1-53.P1.el6.centos     base   
sblim-cmpi-dhcp.i686                       1.0-1.el6                     base   
sblim-cmpi-dhcp.x86_64                     1.0-1.el6                     base   
sblim-cmpi-dhcp-devel.i686                 1.0-1.el6                     base   
sblim-cmpi-dhcp-devel.x86_64               1.0-1.el6                     base   
sblim-cmpi-dhcp-test.x86_64                1.0-1.el6                     base 

[root@CentOS ~]# yum install dhcp
[root@CentOS ~]# rpm -ql dhcp
[root@CentOS ~]# vim /etc/dhcp/dhcpd.conf 
see /usr/share/doc/dhcp*/dhcpd.conf.sample
see 'man 5 dhcpd.conf'

[root@CentOS ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample  /etc/dhcp/dhcpd.conf 
cp: overwrite `/etc/dhcp/dhcpd.conf'? y

# 启动服务
[root@CentOS ~]# service dhcpd start
[root@CentOS ~]# service dhcpd stop
[root@CentOS ~]# service dhcpd restart

# 开机启动
[root@CentOS ~]# chkconfig dhcpd on
  1. Linux 主机对内的 eth0 的IP 设置为 192.168.1.120
  2. 内部网段设置为192.168.100.0/24,且内部计算机的 router 为192.168.1.1,此外DNS主机的IP为电信的168.95.1.1及Seednet的139.175.10.20
  3. 每个用户默认租约3天,最长6天
  4. 要分配的IP只有192.168.100.101到192.168.100.200这几个,其他的IP则保留下来
  5. 还有一台主机,其MAC是 54:27:1E:21:EE:E3 ,这是其主机名为win7,且IP为 192.168.100.30
[root@CentOS ~]# vim /etc/dhcp/dhcpd.conf 
ddns-update-style        none;
ignore client-updates;

subnet 192.168.1.0 netmask 255.255.255.0 {
        option routers  192.168.1.1;
        option subnet-mask      255.255.255.0;
        option domain-name      "centos.virtual";
        option domain-name-servers      192.168.1.1;
        range 192.168.1.10 192.168.1.20;
        default-lease-time 21600;
        max-lease-time  43200;

        host ns2{
                hardware ethernet 00:0C:29:CF:88:43;
                fixed-address 192.16.100.15;
        }


}

# 重启服务
[root@CentOS ~]# service dhcpd restart
#重启另一台主机的网络(动态获取IP)
[root@CentOS ~]# service network restart
#此时另一台主机的IP会显示成如上的IP


[root@CentOS ~]# netstat -tulnp | grep dhcp
udp        0      0 0.0.0.0:67                  0.0.0.0:*                               36772/dhcpd 

#查看DHCP租约及地址分配情况
[root@CentOS ~]# tail /var/lib/dhcpd/dhcpd.leases~
server-duid "\000\001\000\001 \217\036\346\000\014)8\002d";
lease 192.168.1.10 {
  starts 0 2017/04/23 08:39:08;     #租约开始
  ends 0 2017/04/23 14:39:08;       #租约结束
  cltt 0 2017/04/23 08:39:08;       
  binding state active;
  next binding state free;
  hardware ethernet 00:0c:29:cf:88:43;
}

[root@CentOS ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
domain centos.virtual
search centos.virtual virtual
nameserver 192.168.1.1

[root@CentOS ~]# dhclient eth0

13. 网络唤醒局域网主机

网络唤醒局域网主机,安装net-tools后会有ether-wake命令
[root@www ~]# ether-wake -i eth1 11:22:33:44:55:66 
    # 更多功能可以这样查阅喔: 
    [root@www ~]# ether-wake -u

14. 脚本编程

#在动态获取IP地址之后,利用此脚本在配置文件中配置成主机绑定IP
[root@www ~]# vim setup_dhcpd.conf 
#!/bin/bash 
read -p "Do you finished the IP's settings in every client (y/n)? " yn 
read -p "How many PC's in this class (ex> 60)? " num 
if [ "$yn" = "y" ]; then 
    for site in $(seq 1 ${num}) 
    do 
        siteip="192.168.100.${site}" 
        allip="$allip $siteip" ping -c 1 -w 1 $siteip > /dev/null 2>&1 
        if [ "$?" == "0" ]; then
            okip="$okip $siteip" 
        else
            errorip="$errorip $siteip" 
            echo "$siteip is DOWN" 
        fi 
    done 
    [ -f dhcpd.conf ] && rm dhcpd.conf 
    for site in $allip 
    do 
        pcname=pc$(echo $site | cut -d '.' -f 4) 
        mac=$(arp -n | grep "$site " | awk '{print $3}') 
        echo " host $pcname {" 
        echo "      hardware ethernet ${mac};" 
        echo "      fixed-address ${site};" 
        echo " }" 
        echo " host $pcname {"     >> dhcpd.conf 
        echo "      hardware ethernet ${mac};"     >> dhcpd.conf 
        echo " fixed-address ${site};" >> dhcpd.conf 
        echo " }" >> dhcpd.conf 
    done 
fi 
echo "You can use dhcpd.conf (this directory) to modified your /etc/dhcp/dhcpd.conf" echo "Finished."

你可能感兴趣的:(服务器,linux服务器)