路由器实现 vlan 透传
路由器怎么实现 vlan 透传,就是打上 vlan tag 的封包,经过路由器之后,vlan tag 还保持原样?通过 ebtables 实现? 回复 1# trackoftimevlan tag是二层的的标签呀。Linux收到后就扔了呀。不明白你的场景是怎么样的。
回复 2# Tinnal
就是打上 vlan tag 的封包,经过路由器之后,vlan tag 还保持原样,万能透传!
感觉路由器上应该也需要配vlan才行,具体没整过。。。 回复 4# humjb_1983
配vlan不要紧。就一个vconfig 给一个网口添加子端口就行了。内核打开8021q支持就可以。不理解的是楼主的那个”透传“。
Tinnal 发表于 2014-08-05 19:33 static/image/common/back.gif
回复 4# humjb_1983
配vlan不要紧。就一个vconfig 给一个网口添加子端口就行了。内核打开8021q支持就可 ...
个人理解,那路由器端也应该需要配置相应的vlan端口,否则包肯定丢了。。。 回复 3# trackoftime
你这种做法有具体的应用场景??
我对Linux的协议栈不熟,只能大概给个想法,具体还得你自己去研究。还是我之前一个贴那句话,要自己去研读代码,别什么去先问。
1.Vlan的报文ID号为ETH_P_8021Q,并不是IP报文的ETH_P_IP, 你要像Vlan模块一样自己注册一个协议处理模块(插入你的模块,标准的Vlan模块就不能再插入了)。
2.把Vlan的信息存起来,可先的方式有1)就让它躺在sk_buf里;2)转化为mark标识存储;3)存在自己管理的结构里并和sk_buf建立关联。这里要注意的是,我没有研究过整个转发流程对数据包的处理,你要自己去研读,确定那种方式可能把Vlan的信息最后保持到发送。这个可以看看转发的核心函数ip_forward。
可以上面流程的缺失或有问题。但我只能想到这了。你这个是非标用法,只能自己去改代码实现。你要把数据包转发的过程先掌握了,掌握了我觉得这个事情期实不难,只是重在细节的处理。
同时,内核标准vlan模块(net/8021q目录)是一个非常好的参考。结构非常清晰。既然你是做VLAN相关功能的,标准的东西建议你还是先掌握再自己做非标的。
本帖最后由 Tinnal 于 2014-08-05 20:53 编辑
humjb_1983 发表于 2014-08-05 19:53 static/image/common/back.gif
个人理解,那路由器端也应该需要配置相应的vlan端口,否则包肯定丢了。。。
他现在就是想在路由端把Vlan包按正常包给转发。目前内核处理Vlan是通过vconfig命令以及Vlan模块处理的,但经那样处理后,Vlan包会解开,路由,然后重新生成新的Vlan包。如果不进行Vlan的配置就会像你说的那样,内核去和丢弃这个包,因为找不到相应的Vlan处理协议(这个协议在Vlan的内核处理模块里头会注册)。因此,要做这个事情,必须自己注册Vlan的处理协议。
但说实在我到现在还搞不清楚他想干什么,他也不详细描述一个所谓的透转是什么。按我理解,目前内核Vlan的处理方式就是标准的处理方式,也是我能和实际应用场景联系得上的唯一的场景。
+------------------------+
| IP FORWARD |
| |
| ethx.1 ethx.2 |
| +-----+------+ |
| | |
+------------------------+
|ethx
|
+vlan trunk
+----------++-----------+
| |
| Switch |
+-+------------------+--+
| |
+--+--+ +--+---+
| | | |
|Vlan1| |Vlan2 |
+-----+ +------+ Tinnal 发表于 2014-08-05 20:50 static/image/common/back.gif
他现在就是想在路由端把Vlan包按正常包给转发。目前内核处理Vlan是通过vconfig命令以及Vlan模块处理的, ...
应该就是这个意思。。。,在路由器端vconfig应该就可以。。 非常感谢各位的回复,具体的应用场景和需求还不是很清楚,给的需求就是:WIFI 支持 VLAN 全透传!!
页:
[1]
2