DHCP服务器重新配置
理论分析
因为家里的服务器是ipv6的链接,但我这个Android
手机,刷的新系统却没有v6。这就比较尴尬了,域名直接访问不到局域网的主机。不过问题不大,可以通过DNS劫持
,直接劫持到请求,解析到局域网的主机即可。但每次还得手动指定dns服务器,有点麻烦。于是想起了我那个AP的openwrt,刚好把它配成DHCP服务器
即可,由它分配地址,指定自己为DNS服务器
。之后配置域名来访问服务倒也方便。
实践
1. DNS劫持:
在openwrt管理界面的 网络--主机名映射
来配置DNS劫持,之后再打开DHCP。理论是这样子的
2. DHCP配置
在网络--接口
里,找到入网的接口。因为我是光猫做主路由,两个红米AC2100
直接当AP,通过LAN-LAN
方式接到光猫上的,因此我需要在LAN口配置DHCP。
但是吧,即使打开了DHCP服务
,我的Android手机
还是卡在了获取IP地址
的步骤。
调试
1. 发现问题
我打算用WireShark捕获DHCP报文,看看是哪一步有问题。捕获到的报文如下:
可以看出来,Android手机疯狂Request,想要申请IP地址,但是没有服务器回应它。看来是路由器的锅了。连上去查查
Dnsmasq是一个轻量级的网络服务软件,旨在提供DNS解析和DHCP服务。它通常用于家庭路由器、小型网络和嵌入式设备上。
以下是Dnsmasq的两个主要功能:
- DNS解析:Dnsmasq充当本地DNS服务器,负责将域名解析为IP地址。当你在浏览器中输入网址时,Dnsmasq会接收到DNS查询请求,并根据配置文件中的规则返回相应的IP地址。它还支持DNS缓存,可以提高网络访问速度。
- DHCP服务:Dnsmasq可以作为DHCP服务器分配IP地址和其他网络配置信息给连接到网络的设备。当设备连接到网络时,它会向Dnsmasq发送DHCP请求,Dnsmasq会为该设备分配一个可用的IP地址,并提供其他必要的网络设置,如网关和DNS服务器。
Dnsmasq的优点是它的小巧和易于配置。它占用的系统资源较少,适用于资源有限的设备。它还具有可扩展性,可以通过配置文件进行自定义设置,如添加静态IP地址映射、定义域名别名等。
在OpenWrt等一些路由器固件中,Dnsmasq通常用作默认的DNS解析器和DHCP服务器,提供基本的网络服务功能。
DHCP原理
DHCP请求IP地址的过程如下:
1)主机发送DHCPDISCOVER广播包在网络上寻找DHCP服务器;
2)DHCP服务器向主机发送DHCPOFFER单播数据包,包含IP地址、MAC地址、域名信息以及地址租期;
3)主机发送DHCPREQUEST广播包,正式向服务器请求分配已提供的IP地址;
4)DHCP服务器向主机发送DHCPACK单播包,确认主机的请求
需要说明的是:DHCP客户端可以接收到多个DHCP服务器的DHCPOFFER数据包,然后可能接受任何一个DHCPOFFER数据包,但客户端通常只接受收到的第一个DHCPOFFER数据包。另外,DHCP服务器DHCPOFFER中指定[1] 的地址不一定为最终分配的地址,通常情况下,DHCP服务器会保留该地址直到客户端发出正式请求。
正式请求DHCP服务器分配地址DHCPREQUEST采用广播包,是为了让其它所有发送DHCPOFFER数据包的DHCP服务器也能够接收到该数据包,然后释放已经OFFER(预分配)给客户端的IP地址。
如果发送给DHCP客户端的地址已经被其他DHCP客户端使用,客户端会向服务器发送DHCPDECLINE信息包拒绝接受已经分配的地址信息。
在协商过程中,如果DHCP客户端发送的REQUEST消息中的地址信息不正确,如客户端已经迁移到新的子网或者租约已经过期,DHCP服务器会发送DHCPNAK消息给DHCP客户 端,让客户端重新发起地址请求过程。
注意,通信过程中,客户端源地址都是0.0.0.0
,目的地址都是255.255.255.255
,服务器源地址是服务器地址,目的地址是255.255.255.255
。全是广播报文。
2. 尝试解决
……此处省略大量openwrt的尝试
结果就是Dnsmasq
不知道为什么,配置正确但就是启动不了。最后还是通过我的服务器启动了DHCP服务。算是曲线救国了吧。方法如下:
在 Ubuntu 上,你可以使用 isc-dhcp-server
软件包来启用和配置 DHCP 服务器。以下是在 Ubuntu 上开启 DHCP 服务器的步骤:
确保系统已经连接到网络,并且具有适当的网络配置(例如静态IP地址)。DHCP 服务器需要一个可用的网络接口来监听并为客户端提供 IP 地址。
打开终端,使用管理员权限运行以下命令来安装
isc-dhcp-server
软件包:1
2sudo apt update
sudo apt install isc-dhcp-server安装完成后,编辑
/etc/dhcp/dhcpd.conf
文件,该文件包含 DHCP 服务器的配置。使用你喜欢的文本编辑器打开文件:1
sudo nano /etc/dhcp/dhcpd.conf
在配置文件中,根据你的网络需求,设置适当的 DHCP 选项,例如 IP 地址池范围、子网掩码、网关等。以下是一个简单的示例配置文件:
1
2
3
4
5subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
}保存并关闭文件。确保配置文件中的语法正确,没有任何错误。
编辑
/etc/default/isc-dhcp-server
文件,设置 DHCP 服务器监听的网络接口。将INTERFACESv4
设置为你要用于 DHCP 的网络接口,例如eth0
:1
INTERFACESv4="eth0"
保存并关闭文件。
启动 DHCP 服务器服务:
1
sudo systemctl start isc-dhcp-server
验证 DHCP 服务器是否已经启动,没有错误:
1
sudo systemctl status isc-dhcp-server
如果一切正常,你应该看到类似 “active (running)” 的消息。
(可选) 如果你希望 DHCP 服务器在系统启动时自动启动,执行以下命令以启用服务:
1
sudo systemctl enable isc-dhcp-server
现在,你的 Ubuntu 系统上的 DHCP 服务器已经启动并可以为连接到指定网络接口的客户端提供 IP 地址和其他网络配置。请确保你的网络中没有其他冲突的 DHCP 服务器,以避免干扰和配置冲突。
抓包结果
网卡开不了混杂…抓不到哎
总结评价
X86平台真好使。这个服务器除了功耗大了点,其它跑什么服务都不是大问题。那OpenWRT出问题都不知道该如何调试。