Aug 12

iptables -N dnsfilter -t mangle
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x042442b2,0x0807c62d,0x253d369e,0x2e52ae44,0x3b1803ad,0x402158a1,0x4021632f,0x4042a3fb,0x4168cafc,0x41a0db71" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x422dfced,0x480ecd63,0x480ecd68,0x4e10310f,0x5d2e0859,0x80797e8b,0x9f6a794b,0xa9840d67,0xc043c606,0xca6a0102" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0xcab50755,0xcb620741,0xcba1e6ab,0xcf0c5862,0xd0381f2b,0xd1244921,0xd1913632,0xd1dc1eae,0xd35e4293,0xd5a9fb23" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0xd8ddbcb6,0xd8eab30d,0xf3b9bb27,0x4a7d7f66,0x4a7d9b66,0x4a7d2771,0x4a7d2766,0xd155e58a" -j DROP
iptables -t mangle -I PREROUTING -m udp -p udp --sport 53 -j dnsfilter

适用于基于 Linux 系统的路由器,Tomato,DD-WRT,OpenWRT 等,把脚本丢到路由器启动脚本里面即可。 :evil:


Apr 10

Tomato 内置的 DNS 服务器 DNSMASQ 默认缓存条目是 150 条,默认设置不能抵挡 127.0.0.1 段的 DNS-rebind attacks 。

Tomato_DNSMASQ_Setting

如上图设置 Tomato 的 DNS,并且添加如下自定义参数:


## Some Tweak
cache-size=8192
stop-dns-rebind
log-async=5
## Additional DNS servers
# Hong Kong BroadBand Network DNS servers
server=203.80.96.10
server=203.80.96.9
# Huchison Whampoa DNS servers
server=202.45.84.58
server=202.45.84.59

这样设置后用 DNS Benchmark 测试可以得到一个完全安全的本地 DNS 服务器,并且增加 DNS 缓存数量到 8192 条;添加的 DNS 服务器位于香港,适用于广州深圳用户,其他地方的用户可以修改这些服务器地址。

DNS Benchmark

在 Telnet 控制台输入 killall -USR1 dnsmasq ,然后去 Tomato 的日志目录可以查看全部 DNS 服务器查询命中情况。

以上适用于 TomatoUSB 或者原版,如果要用在 Tomato Duelwan 上面,要去掉 cache-size=8192 这条,因为 TD 已经内置了 cache-size=512 ,另行设置会出错导致 DNSMASQ 不能启动。

Tomato Duelwan 修改 cache-size 的方法,telnet 登录路由器:


nvram set dnsmasq_cachesize=1024
nvram commit
reboot