前情提要:
参考这个帖子的内容:
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缓存应该如何过滤?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/120288
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.