TCP 方式查询解决 DNS 污染问题

本文适用于通常的UDP方式DNS查询不可用、不稳定或者无法正常解决DNS污染的情况,适用于但不限于以下情况:

1、你的ISP可能会封杀国外的大部分UDP通讯(如教育网)

2、UDP通讯不稳定,DNS解析经常卡住

3、代理服务器不支持代理UDP协议,又遇到长城宽带这种坑爹ISP时;

TCP方式查询,请搭配shadowsocks等代理效果更佳,使用shadowsocks代理路由器的TCP流量,使得TCP的DNS查询也能走shadowsocks代理,更加稳定安全。上面的第三条的情况可能必须这么做才能解决问题(没有长宽的网络环境无法测试)。

一. 使用dns-forwarder

dns-forwarder的安装可参考:《Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动科学上网》一文中的安装部分,到文中提到的地址,下载安装dnsforwarder_x.x.xx_xxxx.ipk,luciappdnsforwarder_x.x.xx_all.ipk即可。

配置也很简单,luci界面,“服务”→”DNS 转发”(英文界面是DNS Forwarder),如图配置:

dns-forwarder

然后将上级DNS请求转发至127.0.0.1:5311端口即可。同时请确保你的代理设置中,8.8.8.8是走代理的。


二. 使用unbound

首先安装unbound:

然后修改 /etc/unbound/unbound.conf 文件,把以下内容相关的条目的注释取消,并按如下形式修改:

启动unbound:

接着将DNS请求发送至unbound的端口即可。同时请确保你的代理设置中,8.8.8.8是走代理的。


三. 使用pdnsd

可以直接在Luci界面中,切至软件包配置页面,刷新列表后,键入pdnsd点击安装即可。(注:由于pdnsd软件早已停止更新,新版OpenWrt/LEDE的官方源中已经移除了pdnsd,OpenWrt CC及之前版本用户可以到BB版本的下载页面下载;LEDE用户需要自行编译。

配置/etc/pdnsd.conf,文件配置分为数个区域,主要修改global区域和server区域,其他区域保留默认值即可。具体的配置文件详情请查阅官方文档:pdnsd Documents

给pdnsd设置开机启动:

也可以在Luci的启动项配置页面找到pdnsd,将开机自动从禁用改成启用。接着,你需要将路由器的DNS请求转发至pdnsd上来,在上游DNS中填入:127.0.0.1:PORT,其中port是pdnsd监听端口,上面的配置文件中写的是25252。同时请确保你的代理设置中,8.8.8.8是走代理的。

最后,重启一下路由,应该就好了。

54 条评论

  1. zeke 回复

    我现在也是用的epdnsd来解析dns,不知如何检测楼主说的第三种情况呢,我用udp relay 一直不行。。。

    1. zeke 回复

      打错了,是pdnsd

  2. 那只猫 回复

    pdnsd是不是没有x86的编译版本啊

    1. cokebar 文章作者 回复

      x86的linux直接从软件源安装即可 或者从源代码编译

  3. 引用: Shadowsocks + GfwList 实现 OpenWRT 路由器自动翻墙 | 清风明月

  4. 引用: Shadowsocks + Redsocks 实现 OpenWRT 路由器自动翻墙 | 清风明月

  5. 引用: Shadowsocks + ChnRoute 实现 OpenWRT 路由器自动翻墙 | 清风明月

  6. 引用: h2byte:那些从墙上学会的知识 – 海浪家园

  7. tom 回复

    请问在vps上装的pdnsd/dnsmasq/bind 这些软件的机制是 转发dns请求,还是代理来自于dns client的请求。 我有个需求是需要“ 目标server 只知道/记住dns代理server。目标server以为vps上的dns代理是真正的dns请求的发起人。” 该怎么配?

  8. 引用: Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动翻墙 – abc123

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

请输入验证码 *