zoukankan      html  css  js  c++  java
  • iptables & physdev-is-in & physdev-is-out -- net.bridge.bridge-nf-call-iptables对Netfilter中数据包的影响

    http://blog.csdn.net/zxygww/article/details/45028731

    当开启时:sysctl -w net.bridge.bridge-nf-call-iptables=1

    skb中存在physin和physout的接口信息,此时iptables规则可以使用-m physdev --physdev-in 和-m physdev --physdev-out去匹配物理接口。

    PREROUTING-MANGLE-SSH-71: IN=br-lan0 OUT= PHY-m physdev --physdev-in=eth1MAC=70:f1:a1:aa:bd:60:00:23:cd:9c:e7:0a:08:00 SRC=192.168.1.254 DST=192.168.1.130 LEN=92 TOS=0x00 PREC=0x00 TTL=64 ID=25901 DF PROTO=TCP SPT=55377 DPT=22 WINDOW=16395 RES=0x00 ACK PSH URGP=0 


    当关闭时:sysctl -w net.bridge.bridge-nf-call-iptables=0

    skb中没有physin和physout的接口信息,此时iptables规则无法使用-m physdev --physdev-in 和-m physdev --physdev-out去匹配物理接口。

    PREROUTING-MANGLE-SSH-71: IN=br-lan0 OUT= MAC=70:f1:a1:aa:bd:60:00:23:cd:9c:e7:0a:08:00 SRC=192.168.1.254 DST=192.168.1.130 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=26088 DF PROTO=TCP SPT=55757 DPT=22 WINDOW=8192 RES=0x00 SYN URGP=0 


    其原因是:

    在内核代码中net/bridge/br_netfilter.c --> br_nf_pre_routing()函数(对应Netfilter/Iptables中的PREROUTING hook之前)有一段代码用来控制2层数据是否发送到3层中:

    #ifdef CONFIG_SYSCTL
    if (!brnf_call_iptables)
    return NF_ACCEPT;//该ACCEPT动作将该数据直接从2层转发,不经过三层处理,即该数据包skb不会经过iptables的chains(PREROUTING)处理。

    #endif

    skb和物理接口有关的数据结构是skb->nf_bridge,该数据结构是在net/bridge/br_netfilter.c --> br_nf_pre_routing()函数的代码nf_bridge_alloc(skb)进行分配,并在同文件下的setup_pre_routing()函数进行初始化。



    -->配置该参数:


    当在Linux命令行执行sysctl -w net.bridge.bridge-nf-call-iptables=x命令的时候,会通过系统调用执行net/bridge/br_netfilter.c 中的brnf_sysctl_call_tables()函数将变量static int brnf_call_iptables __read_mostly = 1;设置为x值。相关结构定义如下:

    {
    .procname = "bridge-nf-call-iptables",
    .data = &brnf_call_iptables,
    .maxlen = sizeof(int),
    .mode = 0644,
    .proc_handler = brnf_sysctl_call_tables,
    },
  • 相关阅读:
    [工作积累点滴整理]虚拟化、云计算配置规划<一>
    视频监控——从其他浏览器打开低版本IE方案
    好记性不如烂笔头-nginx安装环境与Linux安装ftp组件
    (阿里巴巴)数据库连接池——Druid (未完持续更新)
    条形码和二维码编码解码工具类源码
    JS防抖与节流函数封装
    根据设备width(375)动态设置font-size
    JS写一个简单日历
    js常用身份校验规则
    list之flex布局写法及禁止橡皮筋效果
  • 原文地址:https://www.cnblogs.com/ztguang/p/12644592.html
Copyright © 2011-2022 走看看