DHCP协议介绍
环境准备
交换机(关闭了DHCP的家用路由器也可以),DHCP Server(使用了树莓派3B,下文称树莓派),DHCP Client(普通能上网的设备,包括树莓派,甚至PC均可以。笔者刚好还有一台树莓派2,用来做client,下文称Client)
设置静态IP
DHCPServer作为DHCPServer,一定要先设置好静态IP地址。比如我们用网段10.0.0.0/24,将作为DHCP Server的树莓派设置静态IP:vi /etc/dhcpcd.conf
添加内容如下
interface eth0
static ip_address=10.0.0.4/24
static routers=10.0.0.1
static domain_name_servers=10.0.0.1 8.8.8.8 114.114.114.114
然后重启生效。
树莓派DHCP Server的安装
安装DHCP Server
在作为Server的树莓派上安装DHCP Server:apt-get install isc-dhcp-server
配置DHCP网卡
编辑配置文件, 指定开启dhcp Server的网卡INTERFACESv4, 我们用了其中的以太网卡vi /etc/default/isc-dhcp-server
内容如下
INTERFACESv4="eth0"
#INTERFACESv6=""
配置DHCP配置文件
vi /etc/dhcp/dhcpd.conf
主要增加如下内容
default-lease-time 600;
max-lease-time 7200;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.2 10.0.0.30; #分配网段
option domain-name-servers 10.0.0.1; #DNS服务
option domain-name "internal.example.org";
option routers 10.0.0.1; #路由地址
option broadcast-address 10.0.0.255; #广播地址
}
启动DHCP服务
systemctl start isc-dhcp-server
启动服务
systemctl statuc isc-dhcp-server
查看服务状态
如果遇到下面错误Starting ISC DHCPv4 server: dhcpddhcpd service already running (pid file /var/run/dhcpd.pid currenty exists…Failed!
执行rm -rf /var/run/dhcpd.pid
删除后重启服务即可以
抓包过程
在树莓派上安装tcpdump工具
使用tcpdump命令可以在linux侧抓包,甚至可以将抓包内容拿到desktop上使用工具进行解析。树莓派默认是没有安装tcpdump工具的,下面先介绍如何在树莓派上安装tcpdump,然后介绍基于tcpdump抓包的过程。tcpdump和依赖的运行库libpcap均是开源工具,我们可以下载源码后进行编译获取。编译的方式可以在自己的PC机采用交叉编译,也可以直接在树莓派上进行编译。本文使用后面这种方式。
安装tcpdump前准备工作
安装c编译所需包
apt-get install build-essential
安装libpcap的前置包
apt-get install flex
apt-get install bison
下载libpcap和tcpdump
官网可以获得软件源码包.
到LATEST RELEASES部分下载压缩包,笔者下载的是tcpdump-4.99.0.tar.gz
和 libpcap-1.10.0.tar.gz
下载后解压
安装
分别进入上述libpcap和tcpdump解压后的文件夹内进行编译和安装,基本步骤均如下
- 生成makefile文件
./configure
- 编译
make
- 安装
make install
确认是否安装成功
root@raspberrypi:/home/pi/soft/tcpdump-4.99.0# tcpdump --version
tcpdump version 4.99.0
libpcap version 1.10.0 (with TPACKET_V3)
OpenSSL 1.1.1d 10 Sep 2019
开始抓包
执行下面命令开始监听数据包tcpdump -i eth0 -w /root/dhcp.pcap -s 0 port 67 and port 68
此时上电client并接入到交换机,则会有DHCP租赁过程出现。我们用dhcp status也可以查看到这个交互过程。
将
tcpdump停下来,将上面的/root/dhcp.pcap考回到pc机,用WireShark打开,就可以观看到DHCP过程。
如果错过了这个过程怎么办?可以在Client上执行下述命令释放dhcp租约sudo dhclient -r
同样方法抓报文可以看到如下释放的过程
然后使用sudo dhclient
重新从client端申请