iiiyyyhhhsss 发表于 2010-08-16 23:39

很不理解linux网桥与iptables的瓜葛.

本帖最后由 iiiyyyhhhsss 于 2010-08-16 23:40 编辑

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

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


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

不是网桥来做转发的吗?

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


感觉bridge与iptables很混...

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

它们俩到底有什么瓜葛?

iiiyyyhhhsss 发表于 2010-08-17 00:08

实情的确是这样,只能证明:


iptables工作在两层:


数据链路层和网络层


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

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

Godbach 发表于 2010-08-17 09:47

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


为什么,一个数据包如果需要转发,还需要经过iptables的forward点呢?
网桥处理的数据包还要经过IP层,其中一个原因应该是可以利用ip层的conntrack,对进出的数据包进行跟踪。

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

chengtao786 发表于 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举例说明。       
      。。。。。       
      return NF_DROP;
        store_orig_dstaddr(skb);

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

        return NF_STOLEN;

独孤九贱 发表于 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使用)。

platinum 发表于 2010-08-17 12:06

本帖最后由 platinum 于 2010-08-17 12:10 编辑

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

既 ...
独孤九贱 发表于 2010-08-17 10:47 http://linux.chinaunix.net/bbs/images/common/back.gif

个人认为,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_ 模块

iiiyyyhhhsss 发表于 2010-08-17 15:07

网桥处理的数据包还要经过IP层,其中一个原因应该是可以利用ip层的conntrack,对进出的数据包进行跟踪。
...
Godbach 发表于 2010-08-17 09:47 http://linux.chinaunix.net/bbs/images/common/back.gif


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

既 ...
独孤九贱 发表于 2010-08-17 10:47 http://linux.chinaunix.net/bbs/images/common/back.gif


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

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.

独孤九贱 发表于 2010-08-18 08:51

个人认为,netfilter 只是一个内核的包过滤框架
iptables 用户态程序对应的内核态程序应该是诸如 ipta ...
platinum 发表于 2010-08-17 12:06 http://linux.chinaunix.net/bbs/images/common/back.gif


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

ruoyisiyu 发表于 2010-08-18 11:48

这种东西见仁见智,关键是看你需要如何去用。如果你愿意,你可以不必用ebtables/iptables这种用户层工具,直接修改layer2,layer3层代码。工具是为了达到目的的一种手段,不是唯一。

jianhuali0118 发表于 2010-08-18 14:02

转发可以通过两种方式
一种:工作在链路层,根据mac不同转发,就是网桥,此时网卡工作在混杂模式。
二种:工作在网络层,根据ip不同转发,就是路由器,网卡不需要工作在混杂模式;
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 很不理解linux网桥与iptables的瓜葛.