DHCP服务器重新配置

理论分析

因为家里的服务器是ipv6的链接,但我这个Android手机,刷的新系统却没有v6。这就比较尴尬了,域名直接访问不到局域网的主机。不过问题不大,可以通过DNS劫持,直接劫持到请求,解析到局域网的主机即可。但每次还得手动指定dns服务器,有点麻烦。于是想起了我那个AP的openwrt,刚好把它配成DHCP服务器即可,由它分配地址,指定自己为DNS服务器。之后配置域名来访问服务倒也方便。

实践

1. DNS劫持:

在openwrt管理界面的 网络--主机名映射
DNS劫持配置

来配置DNS劫持,之后再打开DHCP。理论是这样子的

2. DHCP配置

网络--接口里,找到入网的接口。因为我是光猫做主路由,两个红米AC2100直接当AP,通过LAN-LAN方式接到光猫上的,因此我需要在LAN口配置DHCP。
Lan接口

但是吧,即使打开了DHCP服务,我的Android手机还是卡在了获取IP地址的步骤。

调试

1. 发现问题

我打算用WireShark捕获DHCP报文,看看是哪一步有问题。捕获到的报文如下:
截获的报文

可以看出来,Android手机疯狂Request,想要申请IP地址,但是没有服务器回应它。看来是路由器的锅了。连上去查查

Dnsmasq是一个轻量级的网络服务软件,旨在提供DNS解析和DHCP服务。它通常用于家庭路由器、小型网络和嵌入式设备上。
以下是Dnsmasq的两个主要功能:

  1. DNS解析:Dnsmasq充当本地DNS服务器,负责将域名解析为IP地址。当你在浏览器中输入网址时,Dnsmasq会接收到DNS查询请求,并根据配置文件中的规则返回相应的IP地址。它还支持DNS缓存,可以提高网络访问速度。
  2. DHCP服务:Dnsmasq可以作为DHCP服务器分配IP地址和其他网络配置信息给连接到网络的设备。当设备连接到网络时,它会向Dnsmasq发送DHCP请求,Dnsmasq会为该设备分配一个可用的IP地址,并提供其他必要的网络设置,如网关和DNS服务器。
    Dnsmasq的优点是它的小巧和易于配置。它占用的系统资源较少,适用于资源有限的设备。它还具有可扩展性,可以通过配置文件进行自定义设置,如添加静态IP地址映射、定义域名别名等。
    在OpenWrt等一些路由器固件中,Dnsmasq通常用作默认的DNS解析器和DHCP服务器,提供基本的网络服务功能。

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 服务器的步骤:

  1. 确保系统已经连接到网络,并且具有适当的网络配置(例如静态IP地址)。DHCP 服务器需要一个可用的网络接口来监听并为客户端提供 IP 地址。

  2. 打开终端,使用管理员权限运行以下命令来安装 isc-dhcp-server 软件包:

    1
    2
    sudo apt update
    sudo apt install isc-dhcp-server
  3. 安装完成后,编辑 /etc/dhcp/dhcpd.conf 文件,该文件包含 DHCP 服务器的配置。使用你喜欢的文本编辑器打开文件:

    1
    sudo nano /etc/dhcp/dhcpd.conf
  4. 在配置文件中,根据你的网络需求,设置适当的 DHCP 选项,例如 IP 地址池范围、子网掩码、网关等。以下是一个简单的示例配置文件:

    1
    2
    3
    4
    5
    subnet 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;
    }
  5. 保存并关闭文件。确保配置文件中的语法正确,没有任何错误。

  6. 编辑 /etc/default/isc-dhcp-server 文件,设置 DHCP 服务器监听的网络接口。将 INTERFACESv4 设置为你要用于 DHCP 的网络接口,例如 eth0

    1
    INTERFACESv4="eth0"
  7. 保存并关闭文件。

  8. 启动 DHCP 服务器服务:

    1
    sudo systemctl start isc-dhcp-server
  9. 验证 DHCP 服务器是否已经启动,没有错误:

    1
    sudo systemctl status isc-dhcp-server

    如果一切正常,你应该看到类似 “active (running)” 的消息。

  10. (可选) 如果你希望 DHCP 服务器在系统启动时自动启动,执行以下命令以启用服务:

    1
    sudo systemctl enable isc-dhcp-server

    现在,你的 Ubuntu 系统上的 DHCP 服务器已经启动并可以为连接到指定网络接口的客户端提供 IP 地址和其他网络配置。请确保你的网络中没有其他冲突的 DHCP 服务器,以避免干扰和配置冲突。

抓包结果

网卡开不了混杂…抓不到哎

总结评价

X86平台真好使。这个服务器除了功耗大了点,其它跑什么服务都不是大问题。那OpenWRT出问题都不知道该如何调试。


DHCP服务器重新配置
http://blog.jiuge.host/post/20231203002600.html
作者
Pigeon.🕊
发布于
2023年12月3日
许可协议
CC BY-NC-SA 3.0