免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 瀚海书香
打印 上一主题 下一主题

linux多路路由保持长链接的问题 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2010-06-25 09:56 |只看该作者
回复  ShadowStar

ShadowStar兄,不要在那偷着笑了
给点别的思路吧
瀚海书香 发表于 2010-06-24 17:25

{:3_186:}

conntrack根本不需要关心路由的查找。

【PREROUTING(get conntrack)】——【get route】——【FORWARD】——......

PREROUTING后面的HOOK点都可以获取skb->dst,只要在conntrack中hold一下这个dst,然后在下一个skb进入PREROUTING时赋值给skb不就OK了么?

论坛徽章:
0
32 [报告]
发表于 2010-06-25 09:59 |只看该作者
conntrack根本不需要关心路由的查找。
PREROUTING后面的HOOK点都可以获取skb->dst,只要在conntrack中hold一下这个dst,然后在下一个skb进入 PREROUTING时赋值给skb不就OK了么?
ShadowStar 发表于 2010-06-25 09:56


巧妙的处理方式
赞一个!

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
33 [报告]
发表于 2010-06-25 10:37 |只看该作者
回复 31# ShadowStar
大虾就是大虾啊,豁然开朗啊。。。。。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
34 [报告]
发表于 2010-06-25 10:43 |只看该作者
回复 30# platinum
netfilter的conntrack的tuple,建立连接后,无论在什么时候,都是不变的。
内网:192.168.0.0/24
网关:192.168.0.1(内口) y.y.y.y(外口)
内网主机192.168.0.8访问外网的x.x.x.x
那么conntrack的tuple就是
192.168.0.8---->x.x.x.x   ORIGINAL
x.x.x.x---->y.y.y.y            REPLY
不管是在prerouting还是在postrouting,这个tuple都是不变的。你可以通过/proc/net/ip_conntrack看一下。

论坛徽章:
0
35 [报告]
发表于 2010-06-25 10:49 |只看该作者
回复 34# 瀚海书香

看了 /proc/net/ip_conntrack 之后豁然开朗,谢谢瀚海书香!

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
36 [报告]
发表于 2010-06-25 11:04 |只看该作者
回复 35# platinum
共同学习啊。
刚开始学习linux网络部分的时候,可是看了不少白金兄的贴子啊,收益匪浅啊

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
37 [报告]
发表于 2010-06-25 15:00 |只看该作者
回复 31# ShadowStar
能否通过模块方式实现呢?如果重新编译内核会影响一些东西。

论坛徽章:
0
38 [报告]
发表于 2010-06-25 15:35 |只看该作者
回复 37# 瀚海书香


我觉得应该可以
你在 route 后注册一个 netfilter hook,如果 skb 里有 dst 则把 __refcnt 加 1
并且把 dst 指针写到 nf_conn 结构里
在 route 前再注册一个 netfilter hook,如果有 ct 则把 dst 指针从 ct 里提出来复制到 skb 里,同时把 __refcnt 减 1

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
39 [报告]
发表于 2010-06-25 15:42 |只看该作者
回复  瀚海书香


我觉得应该可以
你在 route 后注册一个 netfilter hook,如果 skb 里有 dst 则把 __ ...
platinum 发表于 2010-06-25 15:35

但是那得修改nf_conn结构体吧?如果修改nf_conn的话,就需要重编内核了吧?

论坛徽章:
0
40 [报告]
发表于 2010-06-25 15:53 |只看该作者
nf_conn 里有个 secmark,是个 32bit 变量
如果你的系统用不到这个内容,且在内核编译时将 secmark 编译进了 nf_conn,且你的系统又是 32bit 的
那么,你可以利用这个 u_int32_t 来存放一个指针,因为在 32bit 系统里指针恰好也占用 4bytes
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP