免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 19165 | 回复: 11

很不理解linux网桥与iptables的瓜葛. [复制链接]

论坛徽章:
0
发表于 2010-08-16 23:39 |显示全部楼层
本帖最后由 iiiyyyhhhsss 于 2010-08-16 23:40 编辑

bridge,按常理,都是工作在数据链路层.

而iptables,是属于网络层(ip层)的东西.


为什么,一个数据包如果需要转发,还需要经过iptables的forward点呢?

不是网桥来做转发的吗?

按照我的理解,在网桥下,如果一个数据包需要转发,那么,应该不需要往上层的协议栈传送啊,怎么还会送到iptables里的?


感觉bridge与iptables很混...

谁能帮帮忙,理清一下bridge与iptables的关系..

它们俩到底有什么瓜葛?

论坛徽章:
0
发表于 2010-08-17 00:08 |显示全部楼层
实情的确是这样,只能证明:


iptables工作在两层:


数据链路层和网络层


虽然很奇怪,为什么会工作在两层,这样不是使得分层次的网络架构变得模糊了吗?

但事实的确是,两层都有iptables.

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2010-08-17 09:47 |显示全部楼层
而iptables,是属于网络层(ip层)的东西.


为什么,一个数据包如果需要转发,还需要经过iptables的forward点呢?

网桥处理的数据包还要经过IP层,其中一个原因应该是可以利用ip层的conntrack,对进出的数据包进行跟踪。

另外,Netfilter框架的几个hook点,并不是专用给iptables的,其他的功能也需要。iptables只是基于这些hook点,做了一些自己的实现。 不要把隶属关系搞反了。

论坛徽章:
0
发表于 2010-08-17 10:35 |显示全部楼层
本帖最后由 chengtao786 于 2010-08-17 10:36 编辑

回复 1# iiiyyyhhhsss


    这是因为在网桥那块,对INET的hook有一个联动。所以INET的规则对网桥Bridge起到作用。
参看:net/bridge/br_netfilter.c中。
拿br_nf_pre_routing举例说明。
  1.        
  2.         。。。。。       
  3.         return NF_DROP;
  4.         store_orig_dstaddr(skb);

  5.         NF_HOOK(PF_INET, NF_INET_PRE_ROUTING, skb, skb->dev, NULL,
  6.                 br_nf_pre_routing_finish);

  7.         return NF_STOLEN;
复制代码

论坛徽章:
0
发表于 2010-08-17 10:47 |显示全部楼层
本帖最后由 独孤九贱 于 2010-08-17 10:49 编辑

iptables这个名字只存在用于用户态,其内核模块名为Netfilter,而不是ipfilter,也不是ipfirewall……

既然名为NetXXX,所以它一开始就定位于Linux整个网络栈(而非仅是tcp/ip栈)的一套扩展接口处理,包括ip、ipv6,也包括网桥。

事实上,Netfilter对于网桥的支持,一开始也很“原始”,到了后来模仿ip层,形成了一整套完成的框架结构,功能非常的强大!

Netfilter 的作用域,都是通过Hook来实现,楼主不想使用桥下的Netfilter,可以屏蔽这些Hook函数即可。事实上,桥下边的Netfilter非常有用,例如,基于网桥的防火墙功能,或者网桥下的QoS(例如mangle操纵skb mark,为QoS的filter使用)。

评分

参与人数 1可用积分 +18 收起 理由
Godbach + 18 Cool!

查看全部评分

论坛徽章:
0
发表于 2010-08-17 12:06 |显示全部楼层
本帖最后由 platinum 于 2010-08-17 12:10 编辑
iptables这个名字只存在用于用户态,其内核模块名为Netfilter,而不是ipfilter,也不是ipfirewall……

既 ...
独孤九贱 发表于 2010-08-17 10:47


个人认为,netfilter 只是一个内核的包过滤框架
iptables 用户态程序对应的内核态程序应该是诸如 iptable_nat、iptable_filter、iptable_mangle、iptable_raw、ip_tables、x_tables 这样的模块
而这些模块是注册在 netfilter 上的,但实际上策略的遍历都是在 *tables* 的 ko 模块上运作的
netfilter -> ip_tables/x_tables -> iptable_raw/iptable_mangle/iptable_filter/iptable_nat
应该是这样一种结构

同理,用户态 ebtables 程序所对应的内核模块也不是 netfilter,也有它自己的 br_ 模块

论坛徽章:
0
发表于 2010-08-17 15:07 |显示全部楼层
网桥处理的数据包还要经过IP层,其中一个原因应该是可以利用ip层的conntrack,对进出的数据包进行跟踪。
...
Godbach 发表于 2010-08-17 09:47



   
iptables这个名字只存在用于用户态,其内核模块名为Netfilter,而不是ipfilter,也不是ipfirewall……

既 ...
独孤九贱 发表于 2010-08-17 10:47



几位说的很精辟啊,说到点子上了.

netfilter是内核的包过滤架构,它主要就是在内核中放置一些hook点.

这些hook点并不针对具体某一个层.在链路层有hook点,在ip层也有hook点.

iptables是基于hook点实现,也就是说,只是在这些hook点上,加上一些用户的操作而已..


置于ebtables,暂在研究中...
感觉应该也是在数据包路径上的某些点,插入一些用户的操作...
ebtables根据官方的描述,是针对桥的,也即工作在数据链路层...

The ebtables program is a filtering tool for a Linux-based bridging firewall. It enables transparent filtering of network traffic passing through a Linux bridge.

论坛徽章:
0
发表于 2010-08-18 08:51 |显示全部楼层
个人认为,netfilter 只是一个内核的包过滤框架
iptables 用户态程序对应的内核态程序应该是诸如 ipta ...
platinum 发表于 2010-08-17 12:06



嘿嘿,我说的Netfilter,包含了整个内核部份了。不再细分了喔

论坛徽章:
0
发表于 2010-08-18 11:48 |显示全部楼层
这种东西见仁见智,关键是看你需要如何去用。如果你愿意,你可以不必用ebtables/iptables这种用户层工具,直接修改layer2,layer3层代码。工具是为了达到目的的一种手段,不是唯一。

论坛徽章:
0
发表于 2010-08-18 14:02 |显示全部楼层
转发可以通过两种方式
一种:工作在链路层,根据mac不同转发,就是网桥,此时网卡工作在混杂模式。
二种:工作在网络层,根据ip不同转发,就是路由器,网卡不需要工作在混杂模式;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP