如何屏蔽 DNS Local Cache 的返回结果?

2014-06-30 20:27:50 +08:00
 leavic
前情提要:
参考这个帖子的内容:
http://www.v2ex.com/t/118885#reply22

我的做法是利用路由器上的iptables FILTER表,配合m32模块,自动丢弃DNS查询结果中返回的污染IP,保证DNS的干净.
命令:
iptables -t mangle -A PREROUTING -m set --match-set vpn dst -j MARK --set-mark 1
iptables -I INPUT -p udp -m udp --sport 53 -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x4A7D7F66,0x4A7D9B66,0x4A7D2766,0x4A7D2771,0xBDA31105,0xD155E58A,0xF9812E30,0x80797E8B,0x9F6A794B,0xA9840D67" -j DROP
iptables -I INPUT -p udp -m udp --sport 53 -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0xC043C606,0xCA6A0102,0xCAB50755,0xCBA1E6AB,0xCB620741,0xCF0C5862,0xD0381F2B,0xD1913632,0xD1DC1EAE,0xD1244921" -j DROP
iptables -I INPUT -p udp -m udp --sport 53 -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0xD35E4293,0xD5A9FB23,0xD8DDBCB6,0xD8EAB30D,0xF3B9BB27,0x253D369E,0x042442B2,0x2E52AE44,0x3B1803AD,0x402158A1" -j DROP
iptables -I INPUT -p udp -m udp --sport 53 -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x4021632F,0x4042A3FB,0x4168CAFC,0x41A0DB71,0x422DFCED,0x480ECD68,0x480ECD63,0x4E10310F,0x0807C62D,0x5D2E0859" -j DROP

问题:
在使用114,阿里云这些DNS的时候都很正常,污染结果会被丢弃,但下面这种情况好像就挡不住.
A(一级路由,假定默认的通告DNS是123.123.123.123)==>B(我的路由)==>C(我的设备)

在B或者C上用A上的默认DNS查询,则所有污染的结果都可以无障碍的进来.但是本地抓包看起来和用114这些DNS查询的结果是一样的,实在搞不清楚为什么这个污染的解析结果没有被丢弃.

我只能猜测是:
当用A上的默认DNS查询时,其实没有真正的访问DNS,而是直接从A路由的缓存上读取了数据,而这个数据回传过程可能不是走的UDP 53端口,所以防火墙规则无效.

那么,要如何解决这个问题呢?是否可以绕过本地的DNS缓存,或者针对上级路由返回的DNS缓存应该如何过滤?
4637 次点击
所在节点    DNS
7 条回复
LazyZhu
2014-06-30 21:05:17 +08:00
主要是浏览器和系统的DNS缓存吧,很麻烦哦
leavic
2014-06-30 21:43:45 +08:00
@LazyZhu 我是在路由器上查询的啊....
RainFlying
2014-06-30 21:48:09 +08:00
直接查询非 53 端口不就没污染了?
leavic
2014-07-01 09:01:35 +08:00
@RainFlying 你怎么控制路由的查询命令?
RainFlying
2014-07-02 07:43:51 +08:00
@leavic 1. 如果 resolver 支持可以直接用 [208.67.222.222]:5353 形式,比如 OpenBSD,还可以指定使用 TCP 当时查询。
2. iptables 把发出的 DNS 查询的端口改成非 53 端口
3. 使用 DNSMasq. server=/#/208.67.222.222#5353
KCheshireCat
2014-07-03 15:55:40 +08:00
在input链上的规则只对路由器自己有效

你需要在FORWARD链上也写上规则
leavic
2014-07-03 16:52:33 +08:00
@KCheshireCat 我就是在路由上查询的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/120288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX