2019
11-22

openwrt通过pdnsd和dnsmasq解决DNS污染 pdnsd实现DNS解析加速Dnsmasq部署DNS服务

免费支持本站

openwrt通过pdnsd和dnsmasq解决DNS污染 pdnsd实现DNS解析加速

你是不是一直受到DNS服务器查询速度太慢的困扰?本文推荐Linux下一款名叫pdnsd的软件,解决这个问题。相比bind和dnsmasq,pdnsd有一个优点:重启后仍然能记得之前缓存的条目。这对家庭用的计算机来说非常重要,因为不像服务器那样7×24小时开机,所以一旦关机重开后还需要重新创建缓存的话,加速效果会非常有限。

pdnsd

主要用来解决污染问题, 在 openwrt 上直接找到 pdnsd 包安装就可以了.

opkg update

opkg install pdnsd

安装好以后还需要修改/etc/pdnsd.conf其主要配置如下:

global {

# debug = on;          # 调试模式, 日志会写入 /var/pdnsd/pdnsd.debug

perm_cache=1024;

cache_dir=“/var/pdnsd”;

run_as=“nobody”;

server_port = 1053;# 使用 1053 作为 dns 端口, 默认是 53

server_ip = any;

status_ctl = on;

query_method=tcp_only; # 最重要的配置, 只使用 tcp 查询上级 dns

min_ttl=15m;

max_ttl=1w;

timeout=10;

}

server {

label= “wido”;# 这个随便写

ip = ${UPSTREAM_DNS_IP}; # 这里为上级 dns 的 ip 地址

root_server = on;# 设置为 on 后, 就代替系统默认的 dns 了.

uptest = none;# 不去检测 dns 是否无效.

}

source {

owner=localhost;

# serve_aliases=on;

file=“/etc/hosts”;

}

rr {

name=localhost;

reverse=on;

a=127.0.0.1;

owner=localhost;

soa=localhost,root.localhost,42,86400,900,86400,86400;

}

其中的${UPSTREAM_DNS_IP}需要设置成, 支持 TCP dns 查询的服务器.

可以用 8.8.8.8 这个 google 的 dns 但不是很推荐, 主要是他返回的 ip 虽然没污染, 但这个 ip 很可能也是被封的. 最好是那些 台湾, 日本, 或者美国东部的 dns. 目前大陆默认走的就是香港的 google 服务器, 所以香港的 dns 也不予考虑.

当然最好的方案还是, 如果你自己在海外有 VPS 那就在服务器上装个 pdnsd 来做 dns 服务器吧.

可以用命令

dig @8.8.8.8 +tcp www.google.com

来做测试, 不过也遇到过 +tcp 可以访问但实际无法用 pdnsd 连接的情况具体原因未知. 我这是自己服务器搭了 pdnsd 解决的.

在找到可用的 dns 后, 接着修改回 pdnsd.conf 文件后输入

/etc/init.d/pdnsd enable

/etc/init.d/pdnsd start

启动路由器上的 pdnsd 服务之后就可以通过命令 (@192.168.2.1 根据自己家的网络情况改)

dig @192.168.2.1 –p 1053 www.google.com

来检测是否已配置好, 还是不行的话, 可以尝试开启 pdnsd.conf 的 dubug 模式看详细的日志, 配合pdnsd-ctl help来做进一步处理.

dnsmasq

本来指望 pdnsd 把 dnsmasq 的任务也一并解决的, 不过研究后发现他并不能将特殊的域名交给特殊的 dns 处理, 所以这部分功能还需要交给 dnsmasq.

对于 openwrt 来说默认就安装好了 dnsmasq, 所以这里只需要简单的编辑 /etc/dnsmasq.conf, 再最后加入

conf–dir=/etc/dnsmasq.d

让 dnsmasq 会去加载 /etc/dnsmasq.d 目录下所有的配置.

然后在建一个 /etc/dnsmasq.d/gfw.conf 这样的文件, 把需要进化的域名代理给 pdnsd 就可以了, 例如:

# google

server=/.google.com/127.0.0.1#1053

server=/.gstatic.com/127.0.0.1#1053

server=/.googleusercontent.com/127.0.0.1#1053

server=/.appspot.com/127.0.0.1#1053

server=/.googlecode.com/127.0.0.1#1053

server=/.googleapis.com/127.0.0.1#1053

server=/.gmail.com/127.0.0.1#1053

server=/.google–analytics.com/127.0.0.1#1053

server=/.youtube.com/127.0.0.1#1053

server=/.blogspot.com/127.0.0.1#1053

server=/.blogger.com/127.0.0.1#1053

之后重启 dnsmasq 服务

/etc/init.d/dnsmasq restart

一般来说这样折腾以后 google 系列的服务应该就可以访问了, 当然也可以按这个写法自己加其他的域名. 比如 .facebook.com, 具体的还得是满足 ip 没被封且关键字不被过滤(https) 的网站才行。

官方QQ群号码:922069959
点击链接加入群聊【路由器交流】:https://jq.qq.com/?_wv=1027&k=5AKdmZP

您可能感兴趣的文章

路由器交流群

支付宝打赏支付宝打赏微信打赏微信打赏

本站》评论功能已永久关闭

官方QQ群号码:922069959
点击链接加入群聊【路由器交流】:
https://jq.qq.com/?_wv=1027&k=5AKdmZP
官方QQ群号码:922069959