带有 PFSense DHCP(发现/提供循环)的 Juniper EX4200 堆栈

带有 PFSense DHCP(发现/提供循环)的 Juniper EX4200 堆栈

我目前正在为我的 Juniper 交换机堆栈而苦苦挣扎。

拓扑是这样的拓扑

堆栈上的客户端端口配置为带 dot1x(多个请求者)的标记访问,并根据 Radius 身份验证进行切换。此操作没有问题,VLAN 也得到正确分配。

2 个 PFSense 防火墙确实为故障转移配置中的每个 VLAN 提供了一个 DHCP 实例,其 CARP IP 与 VLAN 位于同一子网上。因此不需要 DHCP 中继。

Windows 客户端可以获取 IP 并正常工作,但 Linux 客户端和 PXE 启动则不能。

从 tcpdump 和 Wireshark 中,我们看到 Linux 客户端上存在 DHCP Discover/Offer 循环。Offer 到达客户端,但客户端未发送 DHCP 请求。我们尝试了多种 Linux 衍生产品和 PXE 实现,但均未成功。我们还比较了 Windows 和 Linux 的 Wireshark 捕获结果,发现两者完全没有区别。

关于如何追踪该问题有什么建议吗?

提前致谢。

更新:

只是为了添加更多信息。

IP分配流程如下:

  1. 客户端启动(NIC 连接到交换机堆栈)
  2. 交换机通过 Radius 服务器对客户端进行身份验证
  3. Radius 服务器回复“Accept”和 VLAN ID 940
  4. 交换机堆栈将 VLAN 940 分配给客户端在多请求者模式下连接的端口
  5. 客户端发送 DHCP Discover
  6. DHCP 服务器(均为 PFSense)以一个提议做出响应。
  7. 客户端发送 DHCP 请求
  8. DHCP 服务器发送 DHCP ACK

因此,显然 1-6 是有效的。客户端通过 Radius 服务器分配到 VLAN 940,发出 DHCP 发现,两个 PFSense 都为 VLAN 940(IP 范围 10.94.0.1-200/24)配置了 DHCP 实例,并且它们发送了提供。

这是 PFsense 防火墙之一上的 tcpdump,希望它有帮助。

18:55:25.538580 IP (tos 0x0, ttl 20, id 3, offset 0, flags [none], proto UDP (17), length 576)
        0.0.0.0.bootpc > 255.255.255.255.bootps: [udp sum ok] BOOTP/DHCP, Request from 00:19:99:f7:3d:23 (oui Unknown), length 548, xid 0x99f73d23, secs 18, Flags [Broadcast] (0x8000)
              Client-Ethernet-Address 00:19:99:f7:3d:23 (oui Unknown)
              Vendor-rfc1048 Extensions
                Magic Cookie 0x63825363
                DHCP-Message Option 53, length 1: Discover
                Parameter-Request Option 55, length 36:
                  Subnet-Mask, Time-Zone, Default-Gateway, Time-Server
                  IEN-Name-Server, Domain-Name-Server, RL, Hostname
                  BS, Domain-Name, SS, RP
                  EP, RSZ, TTL, BR
                  YD, YS, NTP, Vendor-Option
                  Requested-IP, Lease-Time, Server-ID, RN
                  RB, Vendor-Class, TFTP, BF
                  Option 128, Option 129, Option 130, Option 131
                  Option 132, Option 133, Option 134, Option 135
                MSZ Option 57, length 2: 1260
                GUID Option 97, length 17: 0.72.178.216.253.99.205.17.226.190.154.221.134.53.14.178.59
                ARCH Option 93, length 2: 0
                NDI Option 94, length 3: 1.2.1
                Vendor-Class Option 60, length 32: "PXEClient:Arch:00000:UNDI:002001"
                END Option 255, length 0
                PAD Option 0, length 0, occurs 200
    
    18:55:26.546900 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 334)
        10.94.0.253.bootps > 255.255.255.255.bootpc: [udp sum ok] BOOTP/DHCP, Reply, length 306, xid 0x99f73d23, secs 18, Flags [Broadcast] (0x8000)
              Your-IP 10.94.0.5
              Server-IP 10.91.0.1
              Client-Ethernet-Address 00:19:99:f7:3d:23 (oui Unknown)
              file "pxelinux.0"
              Vendor-rfc1048 Extensions
                Magic Cookie 0x63825363
                DHCP-Message Option 53, length 1: Offer
                Server-ID Option 54, length 4: 10.94.0.253
                Lease-Time Option 51, length 4: 600
                Subnet-Mask Option 1, length 4: 255.255.255.0
                Default-Gateway Option 3, length 4: 10.94.0.254
                Domain-Name-Server Option 6, length 8: 10.0.2.1,10.0.2.2
                Domain-Name Option 15, length 9: "domain.intra"
                NTP Option 42, length 4: 10.94.0.254
                TFTP Option 66, length 9: "10.91.0.1"
                END Option 255, length 0
                
    18:55:26.547180 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 334)
        10.94.0.252.bootps > 255.255.255.255.bootpc: [udp sum ok] BOOTP/DHCP, Reply, length 306, xid 0x99f73d23, secs 18, Flags [Broadcast] (0x8000)
              Your-IP 10.94.0.104
              Server-IP 10.91.0.1
              Client-Ethernet-Address 00:19:99:f7:3d:23 (oui Unknown)
              file "pxelinux.0"
              Vendor-rfc1048 Extensions
                Magic Cookie 0x63825363
                DHCP-Message Option 53, length 1: Offer
                Server-ID Option 54, length 4: 10.94.0.252
                Lease-Time Option 51, length 4: 600
                Subnet-Mask Option 1, length 4: 255.255.255.0
                Default-Gateway Option 3, length 4: 10.94.0.254
                Domain-Name-Server Option 6, length 8: 10.0.2.1,10.0.2.2
                Domain-Name Option 15, length 9: "domain.intra"
                NTP Option 42, length 4: 10.94.0.254
                TFTP Option 66, length 9: "10.91.0.1"
                END Option 255, length 0

客户端看到完全相同的内容,但只是忽略它。看起来不对吗?

如果我在服务器端交换机(Radius 服务器连接的地方)上对 Linux VM 执行相同操作,它就会正常工作。因此,我非常确定问题出在 Juniper 交换机堆栈的某个地方。

更新 2:

我对交换机堆栈中问题的假设是正确的。似乎“标记访问”端口模式没有按应有的方式运行。切换到“访问”端口模式确实解决了问题。但这对我来说没有多大意义,因为“访问”模式不应该能够处理不同 VLAN 中的多个请求者,但它显然可以。

答案1

许多 Linux 发行版ipconfig在配置网络接口时使用 klibc(请注意,这与 Windows 中使用的同名工具不同)

https://kernel.googlesource.com/pub/scm/libs/klibc/klibc/+/klibc-0.130/ipconfig/README

请查看变量

-c proto    

可以指定为 BOOTP 或 DHCP

我发现,根据所使用的 DHCP 服务器,DHCP 客户端会完全忽略符合要求的 DHCP 提议,但是当正确设置参数时,-c客户端会接受该提议。

在启动 Ubuntu 时,您可以通过在内核命令行中添加IP=DHCP或来指定此参数。在 Debian 中情况有所不同,它们将内核变量用于不同的目的,在这种情况下,您必须编辑启动 initrd 并手动更改相应脚本中的 ipconfig 行(通常是 /lib/live/boot/9990-networking.sh)。IP=BOOTPIP

相关内容