路漫漫其修远兮
吾将上下而求索

linux动态ip:dhcp命令

简介

动态主机设置协议(Dynamic Host Configuration Protocol,DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:

用于内部网络或网络服务供应商自动分配IP地址给用户

用于内部网络管理员作为对所有电脑作中央管理的手段

dhcp server:
  arp --> address resolving Protocol
    IP --> MAC (已经知道对方的ip,寻找ip对应的mac地址)
  rarp --> reverse arp
    MAC --> IP

工作流程:广播,全程使用udp,因无IP地址,不能点对点通信,只能使用广播

dhcp的前身:bootp –> boot protocol

DHCP统一使用两个IANA分配的端口作为BOOTP:服务器端使用67/udp,客户端使用68/udp。
DHCP运行分为四个基本过程,分别为请求IP租约、提供IP租约、选择IP租约和确认IP租约。
客户在获得了一个IP地址以后,就可以发送一个ARP请求来避免由于DHCP服务器地址池重叠而引发的IP冲突。
(1) Client:dhcp discover
(2) Server: dhcp offer(IP/Netmask, GW, DNS Server, NTP Server, Wins Server, ...)
(3) Client:dhcp request
(4) Server:dhcp ack

lease time:租约期限;当续租成功的时候时间从当前延长为一个周期。

    向dhcp续租请求续租的时刻:50%, 75%, 87.5%, 93.75%

    当一直没有dhcp响应的时候要重新发起dhcp发现广播了,dhcp discover,…

续租:单播方式,因为有ip地址,可以点对点通信,这里不使用广播,

    dhcp request

    dhcp ack|nak

能够实现此功能的软件

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:
    /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";    #搜索域,当ping www,会自动加上domain-name:andblog.cn,
option domain-name-servers DNS_SERVER1, DNS_SERVER2, DNS_SERVER3;    #dns地址,这里可以有三个,
option routers GW1, GW2, ...;    #配置给客户端的默认网关
option broadcast-address BROADCAST_ADDRESS;    #配置给客户端的广播地址

下面这两个选项在自动化安装中有用
filename "/pxelinux.0"; 
#开始启动文件的名称,应用于无盘安装,可以是tftp的相对或绝对路径,告知客户端从TFTP根目录下载pxelinux.0文件  
next-server IP; #This is the name of the server they should get it from  
#tftp服务器,可以和dhcp服务器不在同一机器上,一般是PXE网络使用此参数  

subnet NETWORK netmask MASK {
range START_IP END_IP;
} 定义网络作用域,即一个子网,主要用于指明地址池;分配的地址从哪里到哪里。

host passacaglia {    #定义主机作用域,每一个mac地址对应一个ip地址,是固定的。这里指定的ip要在上面设置的地址池之外的地址
hardware ethernet 0:0:c0:5d:bd:95;
fixed-address IP_ADDR;
}

查看dhcp地址分配情况:/var/lib/dhcpd/dhcpd.leases

其它指令:

filename:也可以向客户端指明引导文件名称;
next-server:指明引导文件所在的服务器的主机IP;
filename “pxelinux.0";
next-server 10.1.0.6;	#这个要是一个tftp server

测试

测试用的dhcp主机:192.168.170.50

[root@localhost ~]#yi dhcp    
[root@localhost ~]#rpm -ql dhcp
/etc/dhcp
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/portreserve/dhcpd
/etc/rc.d/init.d/dhcpd
/etc/rc.d/init.d/dhcpd6
/etc/rc.d/init.d/dhcrelay
/etc/rc.d/init.d/dhcrelay6
/etc/sysconfig/dhcpd
/etc/sysconfig/dhcpd6
/etc/sysconfig/dhcrelay
/etc/sysconfig/dhcrelay6
/usr/bin/omshell
/usr/sbin/dhcpd
/usr/sbin/dhcrelay

自带的配置文件里面是空的,这里使用示例配置文件

[root@localhost /etc/dhcp]#cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.example dhcpd.conf   
cp: overwrite ‘dhcpd.conf’? y 

[root@localhost /etc/dhcp]#vim dhcpd.conf 
option domain-name "andblog.cn";
option domain-name-servers 114.114.114.114, 8.8.8.8, 4.4.4.4;
option routers 192.168.170.2;

default-lease-time 3600;
max-lease-time 7200;

subnet 192.168.170.0 netmask 255.255.255.0 {
range 192.168.170.200 192.168.170.210;
}
可以将后面的都注释掉,没有用了。

然后就可以启动服务了

[root@localhost /etc/dhcp]#service dhcpd start 
[root@localhost ~]#ss -unl
State      Recv-Q Send-Q       Local Address:Port       Peer Address:Port 
UNCONN     0      0                   *:67                *:*

测试的时候可以将dhcpd服务器的防火墙关闭,便于测试

在本测试环境中,要关闭虚拟网络中的dhcp服务,不然会冲突

在本机添加一块网卡,并将网卡配置到同一网络中,将网卡配置文件改为dhcp方式获取IP地址

刚添加网卡就发现配置ip为:192.168.170.200了

文件/var/lib/dhcpd/dhcpd.leases,可以看到被租出去的IP地址和相关信息。

[root@master /var/lib/dhcpd]#cat dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.1.1-P1

server-duid "\000\001\000\001!\0050T\000\014)\3578\333";

lease 192.168.170.200 {
  starts 5 2017/07/21 21:40:31;
  ends 5 2017/07/21 22:40:31;
  cltt 5 2017/07/21 21:40:31;
  binding state active;
  next binding state free;
  hardware ethernet 00:0c:29:ef:38:e5;
}

文件/etc/sysconfig/dhcpd是指定DHCP服务器监听的网卡,如果只有一个网卡,一般不用设置 DHCPDARGS=eth0 或者是eth1 ,如果全部监听就不用管。

单独设置网卡ip地址

也可以设置某个mac地址对应的ip为固定的ip,这里的ip地址要在上面的地址池之外的地址。,这里的ip优先级较高。比如在配置文件中加入刚才添加的网卡eth1的mac地址

host后面的名字可以自己定义

获取mac地址的简单方法,如果主机在线,直接ping这个主机对应的ip,通过arp -n即可看到对应的mac,不用登陆即可

如果不能登录,直接bios设置网络启动,启动后,界面会看到 dhcp 寻找ip的界面,上面有mac地址

host abc {
  hardware ethernet 00:0C:29:EF:38:E5;
  fixed-address 192.168.170.60;
  filename "vmunix.passacaglia";
  server-name "toccata.fugue.com";
}

host abc
[root@localhost /etc/dhcp]#service dhcpd start

服务端重启服务,在客户端重新请求ip就会是固定的地址。

ip地址为60

[root@master ~]#dhclient -d
Internet Systems Consortium DHCP Client 4.1.1-P1
Copyright 2004-2010 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth1/00:0c:29:ef:38:e5
Sending on   LPF/eth1/00:0c:29:ef:38:e5
Listening on LPF/eth0/00:0c:29:ef:38:db
Sending on   LPF/eth0/00:0c:29:ef:38:db
Sending on   Socket/fallback
DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x14086d88)
DHCPACK from 192.168.170.200 (xid=0x14086d88)
bound to 192.168.170.201 -- renewal in 1350 seconds.
DHCPREQUEST on eth1 to 255.255.255.255 port 67 (xid=0x3e480c60)
DHCPACK from 192.168.170.200 (xid=0x3e480c60)
bound to 192.168.170.60 -- renewal in 1492 seconds.

未经允许不得转载:江哥架构师笔记 » linux动态ip:dhcp命令

分享到:更多 ()

评论 抢沙发

评论前必须登录!