注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

Linux Bridge的镜像端口实现思路(收集)  

2014-08-31 18:10:56|  分类: 自动组网 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
网桥的工作原理

网桥处理包遵循以下几条规则:

  • 在一个接口上接收到的包不会再往那个接口上发送此包。
  • 每个接收到的包都要学习其源MAC地址。
  • 如果数据包是多播或者广播包(通过2层MAC地址确定)则要向接收端口以外的所有端口转发,如果上层协议感兴趣,则还会递交上层处理。
  • 如果数据包的地址不能再CAM表中找到,则向接收端口以外的其他端口转发。
  • 如果CAM表中能找到,则转发给相应端口,如果发送和接收都是统一端口,则不发送。

注意,网桥是以混杂模式工作的。关于网桥更多,请查阅相关资料。

        很多种交换机上都可以配置镜像端口,也就是说所有的流量都要顺便发一份到镜像端口,一般都是在镜像端口上接一个主机,上面开启抓包或者审计程序,保证时刻监控网络流量。

        镜像端口解决了学习型交换机无法抓包的问题。

         下面对一网友关于实现linux-bridge的镜像功能的办法:

        Linux实现了一个软件版本的Bridge,也正是一个交换机,只是可能端口少些,通过brctl setageingtime <brname> <time>time设置成0也可以使该软交换机退化成一个Hub。然而我没有在brctlman手册中找到如何来配置镜像端口的任何信 息,于是自己实现了一个。我的实现目前只测试了支持一个镜像端口的情形,当然很容易扩展成支持任意多个。

         总的来讲,对代码的修改有两处:

0.对基础数据结构的修改

net_bridge_port结构体中增加一个flag,设为M,表示该端口为镜像端口;

::1::br_add_if函数增加一个参数

      该新增参数表示是否为镜像端口,若是,则设置新增net_bridge_portM标志

::2::修改br_handle_frame_finish函数

      此处修改最为关键,主要有下面的逻辑:

  1. ...

  2. if (skb) {

  3. if (dst) {

  4. if (!dst->dst->flags & M) {

  5. struct net_bridge_port *p;

  6. list_for_each_entry(p, &br->port_list, list) {

  7. if (p->flags & M) {

  8. struct sk_buff *skb3 = skb_clone(skb, GFP_ATOMIC);

  9. br_forward(dst->dst, skb3);

  10. }

  11. }

  12. }

  13. br_forward(dst->dst, skb);

  14. } else

  15. br_flood_forward(br, skb);

  16. }

  17. ...

       以上012基本就可以实现镜像端口了,方便了网络抓包和网络调试。对于用户态的brctl也需要修改,很简单,只需要能在addif时传入一个M标志即可以。

 

    注笔者认为还可以通过另外三种办法来直接实现:

      1)netfilter的ebtables;

      2) iptables的physdev的模块;

      3) OpenvSwitch的bridge模块;

ubuntu下网桥设置的参考语句 auto br0
iface br0 inet static
        address 192.168.0.100
        network 192.168.0.0
        netmask 255.255.255.0

        broadcast 192.168.0.255
        gateway 192.168.0.1
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

说明:这些语句可以写在文件"/etc/network/interfaces"中实现系统网络自动发起。

  评论这张
 
阅读(116)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017