免费注册 查看新帖 |

Chinaunix

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

本机伪装为自己当前的DNS问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-23 22:12 |只看该作者 |倒序浏览
iptables -t nat -A POSTROUTING -p udp --sport 27961 -j SNAT --to 221.130.33.52:53
iptables -t nat -A POSTROUTING -p tcp --sport 27961 -j SNAT --to 221.130.33.52:53
iptables -t nat -A OUTPUT -p udp -d 221.130.33.52 -j DNAT --to-destination 127.0.0.1:27961
iptables -t nat -A OUTPUT -p tcp -d 221.130.33.52 -j DNAT --to-destination 127.0.0.1:27961

此时,27961端口可以正常得到UDP包,但是在27961上的DNS服务回应客户端时,socket函数sendto返回-1,错误代码EPERM。这个在Linux下应该是不允许,被防火墙拒绝的含义。

但若SNAT修改的源地址不是221.130.33.52或者,不是53端口,回应时能发送成功,不过当然客户端不会接收DNS回答的包。

客户端除了不理从221.130.33.52:53上来的包(应该的吧?),一切正常。仅仅是DNS服务如果伪装成221.130.33.52:53,就无法发出回应。

大家能不能帮忙实验一下在你们那里有没有这个问题? 要是有详细了解这个问题的更好....

[ 本帖最后由 ilei1e 于 2009-10-24 00:41 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-10-23 23:02 |只看该作者

回复 #1 ilei1e 的帖子

补充说明: 当前没有任何其它规则存在,这是不是就应该表明什么都不阻止? 还是有其它隐藏的规矩....

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
3 [报告]
发表于 2009-10-24 10:21 |只看该作者
没看懂楼主的规则要实现什么.
包转给lo,还会返回?

论坛徽章:
0
4 [报告]
发表于 2009-10-24 16:51 |只看该作者

回复 #3 chenyx 的帖子

这个规则用于,把本机发出到外网的DNS请求转回本机27961端口,由本机的一个程序解析,并伪装成这个外网DNS,再返回给本机的请求者。

这是由于这个Linux(实际上就是google给手机出的那个啦)有自己的DNS设置方式(就是那个外网的DNS地址),但是实际上那个DNS根本不存在,导致DNS请求出问题~

我身边现在暂时没有其它Linux机器,所以想看看正经的Linux是不是也有类似的问题:就是伪装成本机当前设置的外网DNS的那个程序(它使用27961端口发送和接受,由IpTables做SNAT伪装成外网IP和53端口)不能发出udp包,报错说不允许。

但是,如果不SNAT成这个DNS的IP和端口,就能成功发出udp包了,但是返回给本机的请求者时因为不是请求者请求的地址,请求者就不理这个包了。

[ 本帖最后由 ilei1e 于 2009-10-24 17:02 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-10-24 17:18 |只看该作者

论坛徽章:
0
6 [报告]
发表于 2009-10-24 17:29 |只看该作者

回复 #5 hyagami 的帖子

谢啦,不过这里我有一个问题,不用伪装成客户软件原来请求的IP地址,回复就能被请求方接受吗?

先试试用这两条替换我在OUTPUT上的两条去。

论坛徽章:
0
7 [报告]
发表于 2009-10-24 17:31 |只看该作者

回复 #5 hyagami 的帖子

啊不对,我的问题是我要在本地转向,而不是网关上转向,所以不走PREROUTING,只能在OUT上吧?

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
8 [报告]
发表于 2009-10-24 18:32 |只看该作者
LZ你详细说说你的需求。

你的方法我没弄明白。

论坛徽章:
0
9 [报告]
发表于 2009-10-24 19:05 |只看该作者

回复 #8 ssffzz1 的帖子

我的需求是这样的,我的系统是Android(基本没怎么再修改),运行在移动设备上。当接入移动公司内网时,移动会给分配一个10.x.x.x的IP地址,给出一个10.x.x.x+1的网关,并给出两个2xx.xx.xx.xx的DNS,这两个DNS在外网。这时系统使用自定义方法记录着两个DNS(使用nslookup则看到Server是0.0.0.0)。

当我的移动设备上的一些软件请求域名解析时,系统根据它记录的这两个DNS地址发送请求,但实际上根本发送不到,因为移动给的网关就是假的,或者至少不做响应。

这时,我使用Iptables在OUTPUT上截获所有对53端口的请求,并且DNAT到127.0.0.1:27961上。我在27961上则起了一个UDP监听,并成功收到DNS查询请求。

我通过一个自己的列表查找到域名对应的IP地址,并作一个应答包,通过27961端口发送出去(我试验了发送到以下两个目标地址:一个是本机在移动内网内的IP地址10.x.x.x,一个是127.0.0.1。接受端口就是对方、也就是本机软件发出请求时所用的那个端口)。

现在的情况是,发出请求的软件仍然报不能解析域名,我唯一能知道的是,那是个Java程序,报的错是Java的UnknowHost Excption。因为环境所限,我也没法使用其它工具分析具体的情况。那么我估计有两种可能性:

1. 我发出的响应包格式有问题。 如果是这个问题,我想知道的是,一般标准的域名解析客户端对包有什么要求?我发的包中填充了如下信息:

HEADER
opcode: QUERY, status: NOERROR, id: 25444
flags: qr aa ; qd: 1 an: 1 au: 0 ad: 0

QUESTIONS:
www.foobarfoobarhahahah.com., type = A, class = IN

ANSWERS:
www.foobarfoobarhahahah.com.        60        IN        A        72.14.203.187

AUTHORITY RECORDS:

ADDITIONAL RECORDS:


总体格式应该错不了,但是是不是缺少什么内容我不敢确定,有对这方面比较熟的兄弟么?

2. 我怀疑是不是比如Java的网络库验证对方的IP地址,但是这是我瞎想的,一般来说会这么做么?

在这种怀疑下,我就用Iptables在POSTROUTING上做了SNAT,但是一旦我伪装成移动告诉我的那两个DNS地址+53端口号(如果我伪装成其它地址+53端口号,或者DNS地址加其它端口号,则全都没问题),我的响应发包程序就会报错,说没有权限(我查了一下说基本就是防火墙拒绝,而我的Iptables没有任何其它规则)。这就让我很挠头:Linux或者这个系统不允许我装成当前网络设置的DNS?

另外实际上我上面说了,我的响应发包程序是在27961端口发包的,而伪装是IpTables做的(不伪装就畅通无阻,当然客户端发起查询的软件还是不能正确解析,见上面说的)啊...,就算无声无息给我吞了,我都能接受:因为我的响应发包程序没有干任何反人类的事情嘛!!凭什么是我的这个程序内发包的函数调用返回错误、而且还是权限错误呢。

我希望大家帮忙的就是,谁知道这方面的信息,能够提供一下,比如我的包不合适,比如DNS解析时正经的查询方(比如Java的查询程序或者c的gethostbyname函数)会验证应答方是不是自己请求的那个IP,比如Linux对特殊端口有特殊的规定等等。哪怕是跟我解决具体问题没啥关系的,我也想知道知道,普及下知识

但是如果是这个修改版的Linux自己的什么规定,我并不是说也得有人知道,我只是想知道在一般的Linux上,我这个流程一定能正常工作,我就心满意足了.... 因为当前条件所限,我自己没法测试。

[ 本帖最后由 ilei1e 于 2009-10-24 19:17 编辑 ]

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
10 [报告]
发表于 2009-10-24 19:30 |只看该作者
然后你就想把这对这2个假地址的DNS请求转发到本机的一个特殊程序上来处理对吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP