DHCP

DHCP

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
DHCP协议采用客户端/服务器模型,主机地址的动态分配任务由网络主机驱动。当DHCP服务器接收到来自网络主机申请地址的信息时(基于rarp协议广播,rarp协议即由mac地址到ip地址的地址解析),才会根据实现定义的地址池向网络主机发送相关的地址配置等信息,以实现网络主机地址信息的动态配置。

工作流程:基于广播的方式,dhcp不可以跨网段工作

1、Client:dhcp discover
    客户端发送请求报文
2、Server: dhcp offer
    服务端响应报文,向客户端提供IP/Netmask,GW, DNS Server,还可以有 NTP Server, Wins Server。。。
3、Client:dhcp request
    客户端发送确认报文,确认使用dhcp服务器提供的哪个地址。
4、Server:dhcp ack
    服务器端确认客户端可使用此地址

lease time:租约期限;

客户端从服务端获取地址以后,此地址的可使用时长,客户端在使用期限到达一半的时候向服务器端发送续租请求,如果第一次请求为得到响应,则继续使用此地址待剩余租期的一半时间时再次向服务端发送续租请求,依次类推,直到获得续租响应为止,得到续租响应以后租期会重新从最初租约期限开始,再次到达租约期限一般的时候重新发起续租请求。如果直到租约到期还为得到续租响应的话,客户端则会在租约期限的93.75时再次向服务端发送申请新的地址请求。

dhcp relay:dhcp中继

由代理服务路由器隔开的两个局域网,且两个局域网之间可以相互通信,其中局域网1启动一个dhcp服务器,局域网2的地址请求统统发往中间代理,这个中间代理接收到局域网2广播地址的请求之后,由单播形式将请求转发至局域网1中的dhcp服务器,然后得到dhcp服务器的单播形式的响应。继而中间代理再通过广播形式向局域网2中响应请求。整个工作流程中中间代理和局域网1中的dhcp服务器通信都是单播形式的,和局域网2的通信都是广播形式的。就就叫做dhcp relay server

dhcp协议的实现

dhcp:(isc.org) – The dhcp package provides the ISC DHCP service and relay agent.
dnsmasq:(dns, dhcp) – Dnsmasq is lightweight, easy to configure DNS forwarder and DHCP server. It is designed to provide DNS and, optionally, DHCP, to a small network.

程序环境

dhcp server:dhcp服务
    /usr/sbin/dhcpd
    IPV4网络:
        /etc/dhcp/dhcpd.conf
        /usr/lib/systemd/system/dhcpd.service
    IPV6网络:
        /etc/dhcp/dhcpd6.conf
        /usr/lib/systemd/system/dhcpd6.service
dhcrelay:dhcp代理
    /usr/sbin/dhcrelay
    /usr/lib/systemd/system/dhcrelay.service

监听的地址和端口:

Server: 67/udp
Client: 68/udp

配置文件:/etc/dhcp/dhcpd.conf

配置指令:
    option选项:配置给客户端的相信息
    指令:定义dhcp server的工作特性
配置级别:
    全局配置
    子网配置
    主机配置
常用的配置:
    default-lease-time 600; 默认租约期限
    max-lease-time 7200; 最大租约期限
    option domain-name "search_domain.tld"; 指定搜索域
    option domain-name-servers DNS_SERVER1, DNS_SERVER2, DNS_SERVER3; 指明配置给客户端的dns服务地址
    option routers GW1, GW2, ...; 配置给客户端的默认网关
    option broadcast-address BROADCAST_ADDRESS; 配置给客户端的广播地址

定义网络作用域,即一个子网,主要用于指明地址池;
    subnet NETWORK  netmask MASK {  IP和掩码
        range START_IP END_IP; 起始地址IP和结束地址IP
    }  

为某一个地址固定分配一个地址,固定ip的优先级比subnet优先级高,切subnet的网关配置对固定ip不生效
    host passacaglia { 
        hardware ethernet 0:0:c0:5d:bd:95; 主机的mac地址
        fixed-address IP_ADDR; 要分配给主机的固定IP地址
    }

其他配置指令
    filename:指明引导文件名称;
    next-server:指明引导文件所在的服务器的主机IP;

        filename “pxelinux.0";
        next-server 10.1.0.6;
            tftp server
配置示例:
]# yum install dhcp -y 安装服务程序
]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf 复制配置文件样本到配置文件目录
]# vim /etc/dhcp/dhcpd.conf
    option domain-name "ali.com"; 搜索域
    option domain-name-servers 192.168.25.138,8.8.8.8,114.114.114.114; 指明配置给客户端的dns服务地址
    option routers 192.168.25.138; 指明配置给客户端的网关


    default-lease-time 3600; 默认租约期限
    max-lease-time 7200;最大租约期限

    log-facility local7; 日志发送位置

    subnet 192.168.25.0 netmask 255.255.255.0 { 定义一个子网网段和网关
    range 192.168.25.143 192.168.25.150; 指定起始ip和结束ip
    option routers 192.168.25.200; 在子网中指明的网关优先级高
    }

    :.,$s/^[[:space:]]*[#&]/#/g 在配置文件中使用vim命令注释掉其他行

]# service dhcpd start 启动服务
]# ss -unl 查看udp67号端口是否已经打开
]# 手动设置虚拟机服务器端和客户端的网络接口为vmnet1 然后启动客户端主机
]# dhclient -d 客户端执行命令进行测试 查看是否获得地址池中的地址,注意测试时需要关闭虚拟机的dhcp服务
]# route -n 客户端执行命令进行测试 查看是否获得指定的网关,注意测试时需要关闭虚拟机的dhcp服务
配置示例,给一个地址固定的ip地址
]# ifconfig  先查看一个主机的mac地址
    ether 00:0c:29:5f:86:eb
]# vim /etc/dhcp/dhcpd.conf 编辑配置文件
    host fantasia {
        hardware ethernet 00:0c:29:5f:86:eb; 主机的mac地址
        fixed-address 192.168.25.155; 需要给其配置的固定ip可以是地址池之外的ip
        option routers 192.168.25.100;指明配置给客户端的网关
    }
]# service dhcpd restart 重启dhcp服务   
]# dhclient -d 响应的mac地址的客户端进行测试
]# route -n 客户端执行命令进行测试 查看是否获得指定的网关

原创文章,作者:M20-1马星,如若转载,请注明出处:http://www.178linux.com/58173

(1)
M20-1马星M20-1马星
上一篇 2016-11-07
下一篇 2016-11-07

相关推荐

  • keepalived+nginx-upstream部署高可用反向代理

    keepalived+nginx-upstream部署高可用反向代理 实验拓扑 实验要求 两个web server提供httpd服务,ip地址分别是172.18.27.201、202,掩码是16 两个nginx proxy提供高可用反向代理,ip地址分别是172.18.27.102、200,掩码是16. client能够访问web server,使用dr模型…

    2017-05-15
  • 马哥教育网络班22期-第九周课程作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # declare -i count=0 declare -i bash_num=0 declare -i&nbs…

    Linux干货 2016-11-21
  • 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who user1    tty1         2016-12-27&nb…

    Linux干货 2016-12-28
  • tcp通讯的服务器和客户端解析

    服务器端编程步骤, 1.创建Socket对象,下文中的socket都表示一个socket对象 2.绑定IP地址和端口,服务器的IP和端口 3.开始监听,将在指定的端口上监听,listen() 如果对方申请连接这个IP和端口,将被听到,这个过程 4.获取用于传输数据的Socket对象 socket.accept() ->(socket object,ad…

    Linux干货 2018-01-01
  • 编译安装lamp框架

    一、 先说说啥叫lamp     1. lamp简介: Linux Apache Mysql PHP(Python, Perl)的简称,下面说说他们之间的关系         Linux:系统运行平台    &…

    Linux干货 2015-06-18
  • bash编程初体验(三)

    bash编程初体验之for for while until 概述 本文将介绍以for为代表的循环语句在shell 脚本中的应用,常见的循环语句有for, while,until,作为循环语句,顾名思义,它就是重复地做一件事,直到满足某一条件而退出;另外,还有两个循环控制语句continue与break来配合循环语句,以实现临时中断或跳出循环的功能;以下为fo…

    Linux干货 2016-08-24