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

itoedr的it学苑

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

 
 
 

日志

 
 

ebtables自动加载更新与存储桥规则的方法与分析  

2014-06-18 08:32:47|  分类: xtables应用 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


本文要解决的问题是自动负载或更新表(brouter规则表)。

    为什么我们要实现自动加载或更新一个桥的规则表呢?当然原因是多方面的。
    其中一个原就是因为,实现了自动更新加载表功能后,就可以一步将表中的各项规则一次性快带加载到内核。This is sometimes desirable to prevent race conditions when adding multiple rules at once.一个最明显的使用案例就是,当规则表最初初始化的时候,自动地一次性提交表规则到内核之中,可以节省了大量的上下文切换和内核时间,从而实现了更快的配置。下面是一个简短的案例描述,指导我们该怎么做类似的工作。
     本实例将使用nat表,当然这种方法对于任何表都可以借鉴使用。

一、单个表规则自动存储方法

     最简单的情形是,内核规则表都是能正确运行的数据,否则ebtables会在进行内容校验时报错,中止配置工作。

     在确保存内核表nat中数据正常的情况下,我们可以按下顺序起进行配置:

     1)首先把内核的表规则都导入到文件nat_table中去,其命令如下:

    $# ebtables --atomic-file nat_table -t nat –atomic-save
     说明:上句语义表示将内核中正确运行的nat表中规则一次性导入到自定义的临时文件 nat_table中加以存储。

     2)然后我们(这则语句是可选的)清零文件中规定的计数器,方法如下:

     $#ebtables -t nat --atomic-file nat_table -Z

 
     3)此后,在系统重引导时,我们可以使用下面的命令来一次性将存储于上文设置的临时规则文件nat_table的规则到系统内核之中;

     $#ebtables --atomic-file nat_table -t nat –atomic-commit
     值得注意的是,在保存到临时文件时,用的是–atomic-save命令。而现在从文件中加载(向内内核提交)原有规则时,使用的是命令–atomic-commit。

     二、完整表内空存储与自动加载

      
     我们可以对单个特殊表进行保存与一次性加载。当然也可以建立完整表规的存储文件,然后统一加载原有规则。这里我们可以使用环境变量“EBTABLES_ATOMIC_FILE”来完成本项工作。当然与上文一样,内核规则也要是完全正常运行的。
     1)我们首先使用shell命令export 设置环境变量,方法如下:

        $# export EBTABLES_ATOMIC_FILE=nat_table
        这样我们的系统环境变量中就有了EBTABLES_ATOMIC_FILE的记录。
        参考图示如下:
ebtables自动加载更新与存储桥规则的方法与分析 - itoedr - itoedr的it学苑
                   图1 : EBTABLES_ATOMIC_FILE环境变量配置

        第1步中从env的环境参数中并未搜索到有关ebtable的环境变量;
        在第2步执行“export EBTABLES_ATOMIC_FILE=nat_table”命令之后的第3个语句再从环境变量中就检索到了“EBTABLES_ATOMIC_FILE=nat_table”的内容。
        第4步在shell中就直接读到了 “EBTABLES_ATOMIC_FILE”的内容了:nat_table。当然这个文件名你可另为设立。
ebtables自动加载更新与存储桥规则的方法与分析 - itoedr - itoedr的it学苑
 图2 :默认条件下的ebtables表内容

     2)接下来,我们就可以使用内核中的默认表内容来初始化我们定义的存储文件。这个时候,系统内核的ebtables规则表可以还只有空链和与默认决策规则:ACCEPT(如图2)。需要说明的是,图2 显示,在常用权限下使用遍历filter时,ebtables也是从EBTABLES_ATOMIC_FILE(本例中是nat_table)这个文件中去读取数据。

     $#ebtables -t nat --atomic-file EBTABLES_ATOMIC_FILE  --atomic-init
     需要小心的是,此语句中指定“--atomic-file”时,用的是“EBTABLES_ATOMIC_FILE”而不是shell常规读取变量$ EBTABLES_ATOMIC_FILE。此句有作用是向文件中写入内容(--atomic-init初始化文件,而--atomic-commit则表示向内核提交文件的内容)。

     
    3)跟着的步骤,我们向ebtables的规则表中加入规则或者我们自定义的工作链,也可以改变默认策略。
     首先改变一下:
      $#ebtables -t nat -A PREROUTING -j DROP
      原来是围默认接受(ACCEPT)从nat表PREROUTING链上经过的报文。现在是默认抛弃从此经过的报文,在报文到达默认规则链以前,nat表上的PREROUTING链已经将报文抛弃了而不能到达默认链。
       新的内容加入了,现在我们可检测一表内容:
       $#ebtables -t nat -L --Lc –Ln
ebtables自动加载更新与存储桥规则的方法与分析 - itoedr - itoedr的it学苑
 
           图3:nat表的第一条规则就是将年所的经过报文无条件抛弃

    4)接着我们使用下面的命令来让一切表中内容一次性提交到内核:
      $#ebtables -t nat --atomic-file EBTABLES_ATOMIC_FILE  --atomic-commit
ebtables自动加载更新与存储桥规则的方法与分析 - itoedr - itoedr的it学苑
                          图4:使用环境变量提交文件
     说明:向内核提交文件规则内容后,用户态的ebtables内容已发生变化。这与iptables的机制稍有不同(关注所见到的表内容)。
ebtables自动加载更新与存储桥规则的方法与分析 - itoedr - itoedr的it学苑
                                                   图附4:nat通过--atomic-commit提交到内核后,其它表就隐藏了
       5)环境变量只是我们的一个中间变量,使用之后,将之清退。
       $#unset EBTABLES_ATOMIC_FILE
        最终,现在所有的ebtables命令将再次执行实际的新的核心表内容了,而不是在原环境变量文件nat_table中的内容了。
***************************************
增补
***************************************
 
ebtables自动加载更新与存储桥规则的方法与分析 - itoedr - itoedr的it学苑
图5:使用--atomic-init命令可以恢复某张表到用户态的可见状态

从图中可以理解到:
     “EBTABLES_ATOMIC_FILE”是作者为ebtables的终极化操作的一个专门的中间量。包括在shell用$EBTABLES_ATOMIC_FILE可以读取其存在的值,而在ebtables语句中则只需要使用EBTABLES_ATOMIC_FILE就可以快速读取其值了。本句语义在于将基础表又众缓存数据中恢复到用户区(可见)。
ebtables自动加载更新与存储桥规则的方法与分析 - itoedr - itoedr的it学苑
图6:ebtable会被隐藏的基础表
   说明:从图6显示的过程可以看出,在利用环境变量EBTABLES_ATOMIC_FILE的中转作用下,现利用内核参数将EBTABLES_ATOMIC_FILE初始化后(--atomic-init)后(实际上是保留了ebtables核心的表结构),然后就可以实时在用户态的规节表中加入需要的规则。在确保这些规则正确运行的情况下,再通过--atomic-init命令将记录于用户表格中的规则推入系统内核。为了提高运行功效率,也防止其它你愿意的原因让用户态表被修改,所以非你主动推入系统内核的表也就隐避起来,好处不言而喻。
  上图中使用“ebtables -t nat  --atomic-commit”后,除了nat表以外的表都看不到了。
  评论这张
 
阅读(170)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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