VPN 上的 eapol_test:RADIUS 交换需要二层吗?
eapol_test 把 peer 和 RADIUS 客户端跑在同一个进程里,所以一条路由式 VPN 就能承载 UDP 1812。先看编译进去的方法列表,再单独验证真实接入。
开口就要实验室交换机端口来跑 eapol_test,多半是读错了工具。peer 和 RADIUS 客户端都住在同一个二进制里,所以离开这台机器的唯一对话就是 RADIUS 交换本身。测试主机与认证服务器之间有一条路由式隧道,就是全部网络要求。物理 802.1X 路径是另一回事,可能仍需要单独测试,不是这里要谈的。
为什么这个名字让人去找交换机端口
EAPOL 是请求者和交换机在局域网上使用的帧格式,工具借用这个名字,是因为它从那个世界长出来。实际交付的是一个测试程序,把 peer 状态机和 RADIUS 客户端装进同一个进程,因此 802.1X 对话的两半永远不会在线上相遇。名字是历史,不是拓扑要求。
人们仍然要端口,是因为程序建立在认证器行为之上,而这听起来像硬件。它的粘合层复现了认证器状态机,所以房间里没有任何接入点也能完成测试;编译出来的二进制把 wpa_supplicant 的 EAP peer 和 hostapd 的 RADIUS 客户端链接在一起。去掉交换机只去掉 EAPOL 那一跳,去不掉认证逻辑。剩下的就是两台 IP 主机之间的客户端—服务器交换。
逐跳跟踪一次 RADIUS 交换
跟一次尝试,路径很短。eapol_test 内部的 peer 为你配置的方法生成 EAP-Response,同一进程里的 RADIUS 客户端把它放进 Access-Request,把载荷放在 Message-Authenticator 旁边的 EAP-Message 属性里。这个数据报被发往服务器的 UDP 端口 1812,像其他 IP 包一样离开主机,隧道正是在这里介入。服务器按策略和方法模块评估它,然后回 Access-Challenge、Access-Accept 或 Access-Reject。
eapol_test -c peap-mschapv2.conf -a 198.51.100.20 -p 1812 \
-s REPLACE_WITH_RADIUS_SECRET -t 30二进制从命令行取服务器地址、端口和共享密钥,从 wpa_supplicant 风格的配置块取方法和凭据。这个调用没有任何一处依赖 2 层邻接:-a 靠路由就能到达,一条能路由它的 VPN 就够了。如果隧道丢掉数据报,测试失败的情形与在扁平局域网上够不到服务器完全一样。
二进制和服务器策略是两份不同的列表
两个互相独立的列表决定一个方法能不能通过,把它们混为一谈会浪费一天。第一份列表编译进二进制:构建配置决定存在哪些 EAP 方法,所以缺少某个方法的构建,无论服务器允许什么都无法协商它。第二份列表在服务器上,策略规定这类客户端可以使用受支持方法中的哪些。通过需要取交集,任何一份列表都填不上另一份的空缺。
在怪服务器之前,先查那份列表。在已安装的二进制里搜方法名,或者读它的构建配置。方法不存在就重新构建,而不是去改 RADIUS 策略;方法存在而交换仍然失败,问题就转到凭据、策略或证书信任上。
通过之后仍然没有覆盖的东西
一次成功的运行只证明一个方法、一套凭据、一份 RADIUS 策略、一条网络路径。它没有检验接入点的射频、交换机的 EAPOL 处理、认证之后的 VLAN 分配,也没有检验 VPN 集中器与同一台服务器对接的方式。这些组件从来不在被测试的路径上。把结果当作有边界的证据,报告时说清它覆盖的是哪条边界。
有用的记录是服务器和进程各自观察到的东西:协商了哪个方法、交换停在哪里、服务器记了什么。共享密钥和私钥不要进这份记录。
引用结果之前的检查清单
在任何人把输出当成批准之前,先确认四件事。构建包含被测方法;RADIUS 端点和共享密钥属于被测环境;服务器策略放行这个测试身份;网络路径与生产客户端所用路径属于同一类。然后点名这次运行没有碰的东西:接入点、交换机、VLAN 和集中器对接,各自都需要在测试计划里单列一行。
两个负责人做两次测试,胜过一次含糊的签字。eapol_test 那次运行回答的是方法与服务器的问题;接入服务回答的是执行的问题。