桥设备透传802.1x报文
eap报文 eap报文 radius报文
客户端----------->桥设备------------->认证者-------------->认证服务器
(Supplicant) (Authenticator) (Authentication Server)
分析:
1、802.1x认证流程中,第一个报文(EAPOL start)的目的mac为01:80:c2:00:00:03。在linux中的桥代码处理中,将会把此目的mac的报文截断,交给本机处理。
详细代码如下:
int br_handle_frame(struct net_bridge_port *p, struct sk_buff **pskb)
{
struct sk_buff *skb = *pskb;
const unsigned char *dest = eth_hdr(skb)->h_dest;
...
if (unlikely(is_link_local(dest))) { /* 8021x的eapol start报文此处为真 */
skb->pkt_type = PACKET_HOST;
return NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
NULL, br_handle_local_finish) != 0;
}
....
}
因此需要在桥设备中将is_link_local为真的报文透传出去,且需要能进行控制。
解决办法:能对来自指定端口的此类报文透传到指定mac地址。
1、设计用户空间命令行,指定参数端口号和目的mac
# brctl set8021x 端口号 目的mac /*设置*/
# brctl unset8021x 端口号 /*取消*/
a、ioctl(br_socket_fd, SIOCSIFBR, args) /* 用户空间 自定义函数 */
|
|
∨
b、sock_ioctl /* 内核空间 */
|
|
∨
c、br_ioctl_hook(br_ioctl_deviceless_stub)
|
|
∨
d、old_deviceless
|
|
∨
e、具体的处理函数(在对应的net_bridge_port 结构中设置标志位,存储目的mac)
2、修改br_handle_frame,对符合条件的报文,修改其目的mac,透传
阅读(2924) | 评论(1) | 转发(0) |