假设您有两个 dhcp 服务器,A 和 B。
服务器 A 有两个 IP 地址,10.0.0.1 和 10.0.0.2。服务器 B 有一个 IP 地址,10.0.0.3。
服务器 A 有两个正在运行的 isc-dhcp 实例,一个指定本地地址为 10.0.0.1,另一个指定本地地址为 10.0.0.2。
服务器 B 有一个 isc-dhcp 实例正在运行,指定本地地址为 10.0.0.3。
如果您有另一个独立于 dhcp 服务器的子网,则为 192.168.0.0/24。此子网池托管在服务器 A 上的 isc-dhcp 实例下,IP 为 10.0.0.1。此子网位于带有语句“ip helper-address 10.0.0.1”的 cisco 设备后面。路由已设置好,可以顺利到达该子网。
如果将设备插入到具有 ip helper 语句和子网 192.168.0.0/24 的交换机/路由器中,那么服务器 A 上的两个实例如何接收发现而服务器 B 没有接收?服务器 A 上的 10.0.0.1 和 10.0.0.2 都位于同一接口上。
我不明白的是,如果确实发生这种情况,为什么一个接口会与其上的两个 IP 共享发现。如果确实共享,为什么 isc-dhcp 看不到数据包的目的地是哪个 IP,而不是假设因为它击中了它正在监听的 IP,那么它一定是为它准备的。
我唯一的猜测是:
- 这要么是我不知道或者不理解的网络问题。
- 接口本身将数据包传递给其上的所有 IP,并且 isc-dhcp 假定无论它侦听哪个 IP,都应该查看和使用到达该 IP 的所有数据包。
- 一旦数据包到达服务器,其中就没有任何内容可以表明它只用于特定的 IP,两个 IP 都会像集线器一样获取数据,因此 isc-dhcp 必须假定如果它命中它所监听的 IP,那么它将被使用。
重写了整个问题,希望能澄清情况。希望我没有让情况变得更糟。
答案1
典型的 DHCP 事务有 4 个步骤(维基百科)
- 发现
- 提供
- 要求
- 确认
具有“ip helper-address 10.0.0.1”语句的路由器将发现将 dhcp 客户端广播到 10.0.0.1 的单播。
10.0.0.1 将发送提供作为单播返回到 ip-helper-router,后者会将其转换为广播。
客户端可以从多个 dhcp 服务器接收 dhcp-offers,但只会发送一个要求(通常是给第一个提供食物的服务员)。如果一切顺利,服务员会以确认。