免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2173 | 回复: 9

[内核模块] kernel 2.6.18内核 链接跟踪表重定向数据包出现的问题 [复制链接]

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-27 06:20:0015-16赛季CBA联赛之福建
日期:2017-03-23 18:32:41
发表于 2016-03-04 15:37 |显示全部楼层
实验场景:
  Host A:192.168.1.112 做客户端
  WebServer B:192.168.1.113:8088 nginx server
  WebServer C:  192.168.1.114:80 nginx server

  流程:
      A:curl 访问 B:nginx----redirect---->A:curl访问C:nginx

    在客户端A上使用curl web服务器B的nginx的页面 想要把这个数据包重定向到C的nginx服务器上,IP端口如上。
   实现:
       在2.6.32.431 X86_64内核上已经实现了,但是把代码迁移到2.6.18内核的时候出现了问题,迁移的时候 函数调用不变 只是把变动的接口修复了,编译没问题,但是在转发的时候出现了问题,就是客户端发出来的数据包 只是重复发syn包。

      2.6.32内核上实现流程:
                     LOCAL_OUT钩子点:  根据skb获取到ip port,符合条件的跳转到转发函数流程:
                         1、 填充 struct nf_nat_range newrange 结构体
                         2、 if( !nf_nat_initialized(ct, IP_NAT_MANIP_DST) ) {
                                            ret = nf_nat_setup_info(ct, &newrange, IP_NAT_MANIP_DST);
                                             set_bit 给包打上特定的标志位set_bit(IPS_OWN_NAT_BIT, &ct->status);  
                           }
                          3、nf_nat_packet(ct, ctinfo, hooknum, skb);
                          4、ip_route_me_harder(skb, RTN_UNSPEC)
                    POST_ROUTING钩子点:
                                1、test_bit检测是不是已经打了标记的包  只对打了标记的包做处理
                                2、ret = nf_nat_packet(ct, ctinfo, hooknum, skb);
                                3、 if (ip_route_me_harder(skb, RTN_UNSPEC)) 路由表处理

如上流程 在2.6.32上测试 没问题 但是在2.6.18上包转发出现了问题 求解救
                  

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-03-04 17:54 |显示全部楼层
没太理解需求,标准的NAT逻辑(无论是2.6.32还是2.6.18)不满足么?做了什么扩展?

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-27 06:20:0015-16赛季CBA联赛之福建
日期:2017-03-23 18:32:41
发表于 2016-03-04 21:18 |显示全部楼层
回复 2# nswcfd
扩展就是增加来对进程的控制

   

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-27 06:20:0015-16赛季CBA联赛之福建
日期:2017-03-23 18:32:41
发表于 2016-03-05 10:12 |显示全部楼层
问题解决了 在ip_nat_standalone.c 文件中可以看到 刷新路由的函数 是ip_xfrm_me_harder 而不是ip_route_me_harder。
至于二者的区别 继续查看中

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-03-07 10:34 |显示全部楼层
xfrm貌似跟ip sec有关系?
在没有配置任何ip sec规则的情况下,执行xfrm_lookup的结果是啥样的?
直觉上是不会修改dst? 这是不是意味着不需要再调用xxx_harder?

PS,这个代码是在webB上运行的,还是在hostA上运行的?

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-27 06:20:0015-16赛季CBA联赛之福建
日期:2017-03-23 18:32:41
发表于 2016-03-08 15:01 |显示全部楼层
回复 5# nswcfd 最新实验了下 ip_xfrmXX这个函数是宏定义CONFIG_XFRM开启之后才需要定义,因此在POST_ROUTING 如果未定义CONFIG_XFRM 则只需要调用 ip_nat_packet就行了。
内核是在HostA上调用的


   

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-03-08 18:43 |显示全部楼层
估计跟rp-filter有关系?

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-03-08 18:49 |显示全部楼层
既然是在hostA上运行,在local-out修改dst就够了,在postrouting上的hook是干什么用的?

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-27 06:20:0015-16赛季CBA联赛之福建
日期:2017-03-23 18:32:41
发表于 2016-03-11 10:55 |显示全部楼层
链接跟踪表的机制吧 只在local_out试过了 不行,还需要在POST_ROUTING上packet一次回复 9# nswcfd


   

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-03-11 15:59 |显示全部楼层
本帖最后由 nswcfd 于 2016-03-11 16:00 编辑

原则上没道理,不过既然楼主已经尝试过了,估计还是某个实现问题吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP