免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1876 | 回复: 4
打印 上一主题 下一主题

[网络子系统] 连接跟踪和NAT的模块化问题--CONNMARK该怎样应用?【已解决】 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-03 15:09 |只看该作者 |倒序浏览
本帖最后由 jiufei19 于 2014-12-06 20:49 编辑

请问各位大侠,连接跟踪和NAT都能以模块的方式进行动态加载吗?因项目需求,发现需要对连接跟踪的struct nf_conn进行修改,同时要在连接跟踪代码中增加几个处理函数,另外还需要在系统NAT的代码中也增加部分处理,那么能将连接跟踪和nat的代码修改编译后,再以模块方式进行加载吗?

如果不行,那么需要对nf_conn的修改能在所谓的ext扩展中进行吗?

论坛徽章:
0
2 [报告]
发表于 2014-12-04 12:42 |只看该作者
为什么要修改struct nf_conn呢?连接跟踪扩展完全可以做任何基于连接跟踪的你想做的事。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
3 [报告]
发表于 2014-12-04 13:33 |只看该作者
本帖最后由 jiufei19 于 2014-12-04 15:49 编辑

回复 2# breakCU


    感谢breakCU的答复,的确,这几天看了许多关于连接跟踪的帖子和资料,都说的不要去直接修改nf_conn,而且我也看到了nf_conn中有一个我正需要的CONNMARK字段  u_int32_t mark,目前正在尝试使用这个字段,用于标记某个特定连接,但是我这里仍然有个疑问,还没有想到答案,即当有此连接的数据返回后,怎样才能将之前的connmark标记通过--restore-mark设置给skb->mark?因为此连接返回的数据我无法简单识别出来到底是哪些,有的返回数据是之前连接的,有的却不是,我没有更好的标志能够用于区分它们(仅从ip,端口等信息判断在我的场景中是做不到的)

换句话讲,此时,在连接跟踪和nat的代码中,实际是非常容易判断出来返回的数据到底是否属于之前打了connmark的连接的数据,因为我这里的场景是凡是经过了SNAT变换的数据所对应的连接,都要打相应的connmark,其他的都不打,因此在nat反变换的时候,一查对应ct的mark属性,只要匹配就直接修改此返回skb->mark即可。但是现在如果不修改nat的代码,能做到根据返回的数据区restore mark吗?

希望不吝赐教,谢谢!


论坛徽章:
0
4 [报告]
发表于 2014-12-04 16:51 |只看该作者
只要你这个连接还在,你打上去的标记就在,标记是跟连接绑定的,不是跟数据包绑定的。你的场景我也不太清楚,不行就写个扩展是肯定行的。
jiufei19 发表于 2014-12-04 13:33
回复 2# breakCU

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
5 [报告]
发表于 2014-12-04 17:29 |只看该作者
回复 4# breakCU


    谢谢,忽然我自己想明白了,其实只要打上CONNMARK标记,然后再配置好--restore-mark这个target,则系统自动会对相关连接的返回数据包恢复标记的,这是合理的动作,否则内核给连接打connmark就没有任何意义了,linux的设计者不会像我这样傻
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP