您的位置:首页 > 其它

桥设备透传802.1x报文

2015-08-27 13:19 351 查看
桥设备透传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,透传
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: