免费注册 查看新帖 |

Chinaunix

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

本机伪装为自己当前的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\r\niptables -t nat -A POSTROUTING -p tcp --sport 27961 -j SNAT --to 221.130.33.52:53\r\niptables -t nat -A OUTPUT -p udp -d 221.130.33.52 -j DNAT --to-destination 127.0.0.1:27961\r\niptables -t nat -A OUTPUT -p tcp -d 221.130.33.52 -j DNAT --to-destination 127.0.0.1:27961\r\n\r\n此时,27961端口可以正常得到UDP包,但是在27961上的DNS服务回应客户端时,socket函数sendto返回-1,错误代码EPERM。这个在Linux下应该是不允许,被防火墙拒绝的含义。\r\n\r\n但若SNAT修改的源地址不是221.130.33.52或者,不是53端口,回应时能发送成功,不过当然客户端不会接收DNS回答的包。\r\n\r\n客户端除了不理从221.130.33.52:53上来的包(应该的吧?),一切正常。仅仅是DNS服务如果伪装成221.130.33.52:53,就无法发出回应。\r\n\r\n大家能不能帮忙实验一下在你们那里有没有这个问题? 要是有详细了解这个问题的更好....\n\n[ 本帖最后由 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 |只看该作者
没看懂楼主的规则要实现什么.\r\n包转给lo,还会返回?

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

回复 #3 chenyx 的帖子

这个规则用于,把本机发出到外网的DNS请求转回本机27961端口,由本机的一个程序解析,并伪装成这个外网DNS,再返回给本机的请求者。\r\n\r\n这是由于这个Linux(实际上就是google给手机出的那个啦)有自己的DNS设置方式(就是那个外网的DNS地址),但是实际上那个DNS根本不存在,导致DNS请求出问题~\r\n\r\n我身边现在暂时没有其它Linux机器,所以想看看正经的Linux是不是也有类似的问题:就是伪装成本机当前设置的外网DNS的那个程序(它使用27961端口发送和接受,由IpTables做SNAT伪装成外网IP和53端口)不能发出udp包,报错说不允许。\r\n\r\n但是,如果不SNAT成这个DNS的IP和端口,就能成功发出udp包了,但是返回给本机的请求者时因为不是请求者请求的地址,请求者就不理这个包了。\n\n[ 本帖最后由 ilei1e 于 2009-10-24 17:02 编辑 ]

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

回复 #5 hyagami 的帖子

谢啦,不过这里我有一个问题,不用伪装成客户软件原来请求的IP地址,回复就能被请求方接受吗?\r\n\r\n先试试用这两条替换我在OUTPUT上的两条去。

论坛徽章:
0
6 [报告]
发表于 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
7 [报告]
发表于 2009-10-24 18:32 |只看该作者
LZ你详细说说你的需求。\r\n\r\n你的方法我没弄明白。

论坛徽章:
0
8 [报告]
发表于 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)。\r\n\r\n当我的移动设备上的一些软件请求域名解析时,系统根据它记录的这两个DNS地址发送请求,但实际上根本发送不到,因为移动给的网关就是假的,或者至少不做响应。\r\n\r\n这时,我使用Iptables在OUTPUT上截获所有对53端口的请求,并且DNAT到127.0.0.1:27961上。我在27961上则起了一个UDP监听,并成功收到DNS查询请求。\r\n\r\n我通过一个自己的列表查找到域名对应的IP地址,并作一个应答包,通过27961端口发送出去(我试验了发送到以下两个目标地址:一个是本机在移动内网内的IP地址10.x.x.x,一个是127.0.0.1。接受端口就是对方、也就是本机软件发出请求时所用的那个端口)。\r\n\r\n现在的情况是,发出请求的软件仍然报不能解析域名,我唯一能知道的是,那是个Java程序,报的错是Java的UnknowHost Excption。因为环境所限,我也没法使用其它工具分析具体的情况。那么我估计有两种可能性:\r\n\r\n1. 我发出的响应包格式有问题。 如果是这个问题,我想知道的是,一般标准的域名解析客户端对包有什么要求?我发的包中填充了如下信息:\r\n\r\nHEADER\r\nopcode: QUERY, status: NOERROR, id: 25444\r\nflags: qr aa ; qd: 1 an: 1 au: 0 ad: 0 \r\n\r\nQUESTIONS:\r\nwww.foobarfoobarhahahah.com., type = A, class = IN\r\n\r\nANSWERS:\r\nwww.foobarfoobarhahahah.com.        60        IN        A        72.14.203.187\r\n\r\nAUTHORITY RECORDS:\r\n空\r\nADDITIONAL RECORDS:\r\n空\r\n\r\n总体格式应该错不了,但是是不是缺少什么内容我不敢确定,有对这方面比较熟的兄弟么?\r\n\r\n2. 我怀疑是不是比如Java的网络库验证对方的IP地址,但是这是我瞎想的,一般来说会这么做么?\r\n\r\n在这种怀疑下,我就用Iptables在POSTROUTING上做了SNAT,但是一旦我伪装成移动告诉我的那两个DNS地址+53端口号(如果我伪装成其它地址+53端口号,或者DNS地址加其它端口号,则全都没问题),我的响应发包程序就会报错,说没有权限(我查了一下说基本就是防火墙拒绝,而我的Iptables没有任何其它规则)。这就让我很挠头:Linux或者这个系统不允许我装成当前网络设置的DNS? \r\n\r\n另外实际上我上面说了,我的响应发包程序是在27961端口发包的,而伪装是IpTables做的(不伪装就畅通无阻,当然客户端发起查询的软件还是不能正确解析,见上面说的)啊...,就算无声无息给我吞了,我都能接受:因为我的响应发包程序没有干任何反人类的事情嘛!!凭什么是我的这个程序内发包的函数调用返回错误、而且还是权限错误呢。\r\n\r\n我希望大家帮忙的就是,谁知道这方面的信息,能够提供一下,比如我的包不合适,比如DNS解析时正经的查询方(比如Java的查询程序或者c的gethostbyname函数)会验证应答方是不是自己请求的那个IP,比如Linux对特殊端口有特殊的规定等等。哪怕是跟我解决具体问题没啥关系的,我也想知道知道,普及下知识 \r\n\r\n但是如果是这个修改版的Linux自己的什么规定,我并不是说也得有人知道,我只是想知道在一般的Linux上,我这个流程一定能正常工作,我就心满意足了.... 因为当前条件所限,我自己没法测试。\n\n[ 本帖最后由 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
9 [报告]
发表于 2009-10-24 19:30 |只看该作者
然后你就想把这对这2个假地址的DNS请求转发到本机的一个特殊程序上来处理对吗?

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

回复 #8 ssffzz1 的帖子

上面的叙述比较乱,这就是为啥我一开始没有详细描述情况的原因。其实我的问题有好几个,总结如下:\r\n\r\n1. 标准实现的DNS查询方,一般会不会验证DNS地址,比如发到213.213.213.213的,就必须是这个IP的53端口回复。\r\n\r\n2. DNS的应答报文,是不是像我上面这样简单填写一下就OK?\r\n\r\n3. 一般情况下,正经的Linux系统,是不是不允许本机上程序通过上述方法,伪装成本机当前使用的DNS呢?或者说有没有其它跟权限错误有关的规矩导致本机上的程序发送数据出错?\n\n[ 本帖最后由 ilei1e 于 2009-10-24 19:35 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP