免费注册 查看新帖 |

Chinaunix

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

[内核模块] 编写钩子函数实现端口重定向与端口复用 [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
11 [报告]
发表于 2013-03-27 22:47 |只看该作者
回复 8# liziaiya
怎么理解一般不可用呢。你的需求是什么?


   

论坛徽章:
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
12 [报告]
发表于 2013-03-28 08:28 |只看该作者
回复 10# liziaiya
iptables版本不一致啊。我用的是1.4.0的,而你的版本是1.4.12的。修改一下里面的宏定义IPTABLES_VERSION,如果还是不行的话尝试着移植一下吧。

   

论坛徽章:
0
13 [报告]
发表于 2013-04-01 16:48 |只看该作者
回复 12# 瀚海书香

我在NF_INET_PRE_ROUTING钩子下写了一个进行端口和IP重定向的函数,最后一步return nf_nat_setup_info(ct,&newrange,IP_NAT_MANIP_DST),但是我发现我所关心的连接只有第一个包可以通过ct = nf_ct_get(sb, &ctinfo)跟踪信息,连接状态为ctinfo == IP_CT_NEW || ctinfo == IP_CT_RELATED,但是之后的包ct返回都为null,是因为nf_nat_setup_info调用出错了吗?

我之前看过你的http://bbs.chinaunix.net/thread-1976803-1-1.html,感觉设置和你的几乎一样,不知道是什么原因导致了上诉的结果。恳请帮助。非常感谢!
   

论坛徽章:
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
14 [报告]
发表于 2013-04-07 07:54 |只看该作者
回复 13# liziaiya
我在NF_INET_PRE_ROUTING钩子下写了一个进行端口和IP重定向的函数,最后一步return nf_nat_setup_info(ct,&newrange,IP_NAT_MANIP_DST),但是我发现我所关心的连接只有第一个包可以通过ct = nf_ct_get(sb, &ctinfo)跟踪信息,连接状态为ctinfo == IP_CT_NEW || ctinfo == IP_CT_RELATED,但是之后的包ct返回都为null,是因为nf_nat_setup_info调用出错了吗?


根据netfilter的流程,对应NAT的操作,只有连接的第一个数据包会被操作,然后建立相应的连接信息;之后该链接的数据包会根据连接信息,自动进行nat的操作。


   

论坛徽章:
0
15 [报告]
发表于 2013-04-07 15:04 |只看该作者
回复 14# 瀚海书香

谢谢你的回复!如果我在主机A上发出一次请求wget B:80,那么在B上可以同时捕捉到好几个这样的包(A->B),而第一个数据包进行dnat操作之后,置IPS_DST_NAT_DONE_BIT为1,之后的包通过nf_ct_get(sb, &ctinfo)返回的ct均为null,我觉得只是不用更改ct连接信息而已,但是[url=http://127.0.0.1:8080/source/s?defs=IPS_DST_NAT_DONE_BIT&project=net]nf_ct_get(sb, &ctinfo)返回null就觉得奇怪了[/url]
另外,可否麻烦你帮我看一下这个问题,

我测试了一下我自己写的代码,发现若是数据包从A:XX -> B:80 ,在B上实现local redirect是可行的,可以转到B:8081,但若是remote redirect,希望从B:80转到C:8081,则是不可行的;
之前看过你的一篇帖子http://bbs.chinaunix.net/thread-1976797-1-1.html,想向你咨询一下,无论是local还是remote,代码实现会有区别吗?是否只是newrange里的min_ip和max_ip不一样而已?
多谢啦


   

论坛徽章:
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
16 [报告]
发表于 2013-04-07 16:40 |只看该作者
回复 15# liziaiya
无论是local还是remote,代码实现会有区别吗?是否只是newrange里的min_ip和max_ip不一样而已?


是的,只是nf_nat_range结构的不同。
其实看一下ipt_REDIRECT.c就可以知道,redirct到local与remote没有实质的区别
   

论坛徽章:
0
17 [报告]
发表于 2013-04-07 21:42 |只看该作者
A->B->C,  remote方式还是用不了,无法重定向到C,nf_nat_setup_info倒是正常实现了,ct->tuplehash[IP_CT_DIR_REPLY].tuple也变更为C->A了,不过在B上FORWARD钩子点捕捉不到B转发到C的报文。我的代码就是参照ipt_REDIRECT.c写的,核心是一样的。不知道哪里还会有错,!求帮忙!

论坛徽章:
0
18 [报告]
发表于 2013-04-16 17:55 |只看该作者
回复 11# Godbach 谢谢你的回复,。我本来的需求是想实现穿透防火墙的端口封锁,功能和redir/FPIPE差不多,但是想在linux内核下实现。不知道有没有可行的方案?我尝试过一些方法,都没实现local redirect。
现在,我在B上基于netfilter对A->B的报文做了dnat(将目的ip置为C),然后在post routing做了snat(将发往C的报文源IP置为B),具体的也是参照ipt_REDIRECT.c写的。这样,我希望报文经过B的钩子函数时产生这样的变化,如下:
发送:
pre_routing: AB->AC
post_routing :AC->BC
回复
pre_routing:CB->CA
post_routing:CA->BA
不知道这个思路对不对,或者有没有其他更可行的思路?万分感谢!


   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
19 [报告]
发表于 2013-04-16 23:12 |只看该作者
回复 18# liziaiya
如果只是突破端口的封锁,那仅修改端口就可以了吧。为什么还需要使用 NAT 呢


   

论坛徽章:
0
20 [报告]
发表于 2013-04-17 15:01 |只看该作者
回复 19# Godbach 因为想让中间的机器作中转,这样方便控制,所以想实现remote redirect。如果不做nat的话,就得在防火墙内部的服务器上作local redirect吧!


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP