为单个主机上的多个 USB 以太网设备分配唯一的 IP 范围

为单个主机上的多个 USB 以太网设备分配唯一的 IP 范围

我目前正在开发一款运行 Linux 的嵌入式设备,该设备允许使用 USB 连接到 Windows 主机。为了实现这一点,我成功地在此设备上使用了 USB 以太网小工具驱动程序,我的 Windows 7 主机将其识别为 USB 以太网适配器,发出 DHCP 请求,该请求由设备上的 udhcpd 应答,并且可以建立 IP 连接。

当仅有一个嵌入式设备连接到 Windows 主机时,这种方法效果很好。当连接多个设备时,每个设备上的每个 udhcpd 都会向 Windows 主机提供相同的 IP 范围和地址,这将导致无法路由到这些不同的设备。

有没有办法让不同的嵌入式设备上的不同 udhcpds 分发不同的范围,而无需在运行时用一些随机性修补 udhcpd.conf?

答案1

您真的尝试过吗?它应该有效。无需使用特殊的 udhcpd.conf。RFC2131 从一开始就解决多个 DHCP 服务器的情况,以避免这种冲突。这是服务器和客户端的责任。

3.1 客户端与服务器交互-分配网络地址

...

  1. 每个服务器都可以用 DHCPOFFER 进行响应 [...] 当分配新地址时,服务器应该检查所提供的网络地址是否尚未被使用;例如,服务器可以使用 ICMP 回显请求探测提供的地址。

...

  1. 客户端收到带有配置参数的 DHCPACK 消息。客户端应对参数进行最终检查(例如,分配网络地址的 ARP),并记下 DHCPACK 消息中指定的租约期限。此时,客户端已配置完毕。如果客户端检测到该地址已被使用(例如,通过使用 ARP),则客户端必须向服务器发送 DHCPDECLINE 消息并重新启动配置过程。

https://www.ietf.org/rfc/rfc2131.txt

事实上,这就是 udhcpd 使用 ARP 所做的事情(以及“TODO”注释,它应该使用 ICMP):

http://git.busybox.net/busybox/tree/networking/udhcp/dhcpd.c#n191

http://git.busybox.net/busybox/tree/networking/udhcp/leases.c#n136

...在客户端,udhcpc 也可以进行此项检查:

http://git.busybox.net/busybox/tree/networking/udhcp/dhcpc.c#n1713

我不知道这是否是 Windows DHCP 客户端的情况,但正如 RFC 所指定,它应该是。

相关内容