免费注册 查看新帖 |

Chinaunix

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

在linux中如何修改带vlan标签的报文的vlan字段? [复制链接]

论坛徽章:
0
发表于 2009-05-25 11:49 |显示全部楼层
10可用积分
这个问题一直没有解决,前几天我想用iptables/netfilter来修改,但是vlan标签是在链路层打上和去掉的,netfilter改不了,现在在研究ebtables,但是这方面的文章比较少,谁做过这样的工作或对这个比较了解的,传授下经验啊

最佳答案

查看完整内容

其实,我觉得这两种模式没什么区别。但是,按照目前内核本身的这个结构(VLAN的),TAG是在“网卡驱动”中压入的。也就是在vlan的虚拟网卡中处理的。这也就是在协议栈之后了。2种方法1:在netfilter的时候,选择一个对应tag的正确的出接口2:在netfilter的时候,给skb做个标记,在vlan的vlan_dev_hard_start_xmit中的skb = __vlan_put_tag(skb, veth_TCI);传入标记,取代veth_TCI。

论坛徽章:
0
发表于 2009-05-25 11:49 |显示全部楼层
原帖由 piginthetree 于 2009-5-25 13:28 发表

能否两种模式都实现这个功能呢


其实,我觉得这两种模式没什么区别。

但是,按照目前内核本身的这个结构(VLAN的),TAG是在“网卡驱动”中压入的。也就是在vlan的虚拟网卡中处理的。这也就是在协议栈之后了。

2种方法
1:在netfilter的时候,选择一个对应tag的正确的出接口
2:在netfilter的时候,给skb做个标记,在vlan的vlan_dev_hard_start_xmit中的skb = __vlan_put_tag(skb, veth_TCI);传入标记,取代veth_TCI。

论坛徽章:
0
发表于 2009-05-25 12:15 |显示全部楼层
这个可能需要设置硬件才可以吧。
不过我这边用的是bsd,不是linux。

帮顶一下,

论坛徽章:
0
发表于 2009-05-25 12:16 |显示全部楼层
我觉得这个修改其实并不难的。只要判断一下是否是vlan的报文(skb->protocol == ETH_P_802_X)。然后跳指针并修改就OK了。

论坛徽章:
0
发表于 2009-05-25 12:25 |显示全部楼层
因为这个vlan tag的添加是在vlan虚拟网卡中处理的。是在netfilter处理之后。

所以,如果你想修改压入的tag的话,我觉得可能需要需要修改路由,毕竟这个出接口的查找是根据路由来进行的。

总体来说,我觉得这个的难度不大,主要看你的详细需求。

论坛徽章:
0
发表于 2009-05-25 12:38 |显示全部楼层
ShadowStar 能否再详细的讲解 如何修改路由 我刚开始弄这块 不是很懂linux的vlan模块 就我目前的理解 vlan的tag在netfilter之后加上 或netfilter之前去掉 那netfilter无法捕捉到他 只能通过在链路层工作的ebtables中修改了
在链路层可以用 (skb->protocol == ETH_P_802_X)来判断是否是vlan的报文么?

论坛徽章:
0
发表于 2009-05-25 12:59 |显示全部楼层
是不是dev.c里有个函数能改?netif_receive_skb()?
但是我好像记得有的网卡是支持vlan的,也就是送到协议栈的时候vlan头已经去掉了,上层只能根据某个字段知道那是不是vlan。

论坛徽章:
0
发表于 2009-05-25 13:02 |显示全部楼层
说一下你得详细需求吧。

在链路层可以用protocol来判断。但是在进入协议栈后,这个会改为ETH_P_IP的。

论坛徽章:
0
发表于 2009-05-25 13:13 |显示全部楼层
ShadowStar  
需求是这样的 在一台linux主机上 我要建立一个模块,这个模块能够修改这台主机发出的或转发的报文的vlan标签信息(如果它带有vlan标签的话),这个模块最好能配合iptables一起使用,比如:我要修改一个tcp报文的vlan id为xxxx。

现在的情况是我用netfilter/iptables无法过滤到vlan的报文,想转到ebtables去弄,但是又缺乏相关的参考文档,毕竟,ebtables用的人并不是很多。前提:我在这方面的经验不够丰富,只能够边学边做。

论坛徽章:
0
发表于 2009-05-25 13:24 |显示全部楼层
原帖由 piginthetree 于 2009-5-25 13:13 发表
ShadowStar  
需求是这样的 在一台linux主机上 我要建立一个模块,这个模块能够修改这台主机发出的或转发的报文的vlan标签信息(如果它带有vlan标签的话),这个模块最好能配合iptables一起使用,比如:我要修 ...


网桥模式还是路由模式?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP