【问题标题】:ISC dhcrelay is not forwarding the DISCOVER packets to dhcp serverISC dhcrelay 未将 DISCOVER 数据包转发到 dhcp 服务器
【发布时间】:2018-06-02 10:28:30
【问题描述】:

我正在做 DHCP 中继 POC。我的设置如下。

DHCP 客户端(VX-works)----------- DHCP 中继----------- DHCP 服务器(VXworks)

在此设置中,DHCP 客户端正在发送 DICOVER 数据包,但中继代理没有收到数据包。我查看了代码,发现在套接字上应用了 Berkeley Packet Filtering (BPF)。 DHCP 中继只是丢弃数据包而不将其转发到服务器。

为了进一步调试,我从代码中删除了 BPF 过滤器和校验和验证部分。

现在,DHCP 中继正在转发数据包,但数据包不是 DHCP 服务器所期望的。 DHCP 中继正在正确地将数据包从广播更改为单播。服务器端收到的帧、以太网报头、IP 报头和 UDP 报头都是正确的(我在 Wireshark 日志中检查过),但引导协议选项字段不正确。

我还在客户端捕获了 Wireshark 日志。客户端正在按预期发送 DICOVER 数据包。

如果您需要更多信息,请发表评论。

真的:基于 ISC dhcrelay(4.3.1P1) Linux(3.14 内核)

提前致谢。

编辑:下面是在 DHCP 客户端捕获的单个数据包的十六进制转储。

ff ff ff ff ff ff 00 20 61 1e 9e 14 08 00 45 00 01 1a 4f fe 40 00 20 11 09 d6 00 00 00 00 ff ff ff ff 00 44 00 43 01 06 fd 9b 01 01 06 00 00 ae af 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 61 1e 9e 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 63 82 53 63 35 01 01 39 02 02 4e 37 04 0f 06 03 01 ff

【问题讨论】:

  • 为什么要从代码中删除校验和验证部分?校验和是否不正确并且数据包被丢弃?
  • 实际上,ISC DHCP 中的 BPF 正在丢弃数据包,因此为了进一步调试,我删除了应用在中继创建的 RAW 套接字上的 BPF 过滤器。但是随后校验和失败错误限制了要转发到服务器的数据包。所以我删除了校验和部分。现在我在客户端捕获了数据包,它正在广播完美的数据包,而 BPF 仅在内核中丢弃数据包。所以我认为我的博通芯片正在破坏数据包。这只是一个假设。请提供您的意见。
  • 能否在 BPF 丢弃数据包之前将其转储,以尝试查看 BPF 丢弃数据包的原因?

标签: dhcp bpf


【解决方案1】:

BPF 过滤器在common/bpf.c 中定义。它会检查数据包是否是一个 IP/UDP 数据包,其中包含单个片段(无片段)并以端口 67 为目标,否则将丢弃它。

您提到您的数据包是一个 IP/UDP 数据包,但您是否确保它没有分段并且具有正确的端口?

【讨论】:

  • 感谢@pchaigno 的评论。我检查了接口的 MTU 大小和数据包大小。数据包大小范围为 296-590,因此数据包不应被分段。另一项观察是,我在 DHCP 服务器上接收到大约 1190 的数据包,但引导协议字段错误,端口是正确的,因为端口是 UDP 标头的一部分,而 DHCP 服务器正在接收正确的 UDP 标头。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多