ebtables的OUTPUT链DNAT问题
来源:互联网 发布:问道钓鱼软件 编辑:程序博客网 时间:2024/05/29 15:50
man一下ebtables即可知道,或者随便想一下也会知道,ebtables在OUTPUT链上可以做DNAT,修改目的MAC地址,和iptables一样,到达OUTPUT链的时候已经经过路由表了,只不过对于桥设备,该路由表是一个“MAC地址-出口设备”的映射表。我们知道,IP层的OUTPUT链上作了DNAT后需要重新路由,这是IP-DNAT这个target自己完成的,在IP-OUTPUT的钩子函数中调用了ip_route_me_harder重新路由,然而在链路层的BR-OUTPUT中我们没有发现重新路由的代码,这样会有问题吗?如果做一个实验,发现这样是有问题的,一个桥两个口,分别是1和2,如果本地发出的包准备从2发出,此时发生了DNAT,DNAT的结果目的MAC位于1的那一侧,由于没有重新路由(查找地址-端口映射表),数据帧依然从2发出,启动了STP的网络,数据帧将永远到达不了目的地,这就出了问题了...
且慢,虽然这是个问题,然而以太网链路层的路由和IP路由却是两码事,其机制一点都不一样,可以说链路层的路由是自动学习得到的,其方式就是众所周知的交换机学习,而IP路由却是需要显式配置的,虽然有所谓的动态路由协议,但是还是需要应用层程序的帮助,对于自动学习的表项,它早晚是要收敛的,也就是说即使没有重新路由,由于链路层设备遵循要么往特定出口发,要么泛洪,所以DNAT后的目的地址早晚会被桥设备学习到的,链路层的映射表永远都处于一种躁动不安的状态,不像IP路由,一旦有个永久的静态路由,OUTPUT中执行了DNAT不重新路由就杯具了...
既然链路层可以自动学习映射表,无需人工帮助,那么BR-OUTPUT之后不打扰这种机制也是必要的,为何要重新路由呢?此时说不定正在泛洪,你再重路由就要重新泛洪,本来在n个口泛洪,每个口执行了DNAT后重路由都可能要再次泛洪...只要DNAT后的目的设备发一个包到达桥设备,就算学习成功了。只有在DNAT之前和之后永久的位于不同侧的时候才会出现不通的问题,如果你的网络足够大,启用了STP,那么不同时刻两个地址是否位于同侧是不一定的。
因此,我觉的在泛洪时不重新路由,而不泛洪时重新路由,这样比较好。
且慢,虽然这是个问题,然而以太网链路层的路由和IP路由却是两码事,其机制一点都不一样,可以说链路层的路由是自动学习得到的,其方式就是众所周知的交换机学习,而IP路由却是需要显式配置的,虽然有所谓的动态路由协议,但是还是需要应用层程序的帮助,对于自动学习的表项,它早晚是要收敛的,也就是说即使没有重新路由,由于链路层设备遵循要么往特定出口发,要么泛洪,所以DNAT后的目的地址早晚会被桥设备学习到的,链路层的映射表永远都处于一种躁动不安的状态,不像IP路由,一旦有个永久的静态路由,OUTPUT中执行了DNAT不重新路由就杯具了...
既然链路层可以自动学习映射表,无需人工帮助,那么BR-OUTPUT之后不打扰这种机制也是必要的,为何要重新路由呢?此时说不定正在泛洪,你再重路由就要重新泛洪,本来在n个口泛洪,每个口执行了DNAT后重路由都可能要再次泛洪...只要DNAT后的目的设备发一个包到达桥设备,就算学习成功了。只有在DNAT之前和之后永久的位于不同侧的时候才会出现不通的问题,如果你的网络足够大,启用了STP,那么不同时刻两个地址是否位于同侧是不一定的。
因此,我觉的在泛洪时不重新路由,而不泛洪时重新路由,这样比较好。
- ebtables的OUTPUT链DNAT问题
- ebtables的使用
- ebtables
- ebtables
- ebtables
- iptables的理解问题兼及iptables配置dnat, snat
- ebtables与iptables的区别(ebtables的简单应用)
- SNAT和DNAT的区别
- SNAT和DNAT的区别
- SNAT和DNAT的区别
- iptables的DNAT和SNAT
- iptables规则下的DNAT
- SNAT、DNAT、MASQUERADE的区别
- SNAT和DNAT的区别
- 当心-链路层复用加ebtables的broute的恶果
- Glusterfs的Input/Output Error问题
- iptables中DNAT的配置方法
- DNAT:网络漏洞扫描器厂商的梦魇
- 数字证书原理
- Ajax使用(引用)
- [iOS] 关于 self = [super init];
- 启动OpenLDAP的命令
- 关于c语言自加运算的问题(a++)
- ebtables的OUTPUT链DNAT问题
- 哈佛公开课《Positive Psychology 1504》学习笔记 - What’s Positive Psychology 1504 about
- 黑马程序员-构造器内部的多态方法的行为
- unsigned引起的bug
- 哈佛公开课《Positive Psychology 1504》学习笔记 - Why Positive Psychology
- centos 配置nginx php mysql
- java/数字运算
- Linux ALSA声卡驱动之八:ASoC架构中的Platform
- 黑马程序员_学员周峰_java变量