Pdnsd 是用来缓存本地DNS信息的 DNS 服务器。和 BIND 和 dnsmasq 相比,Pdnsd 在重启之后依然可以保存 DNS 缓存,名字中的 p 表示 persistent。
Installation
Ubuntu/Debian 系下使用如下命名安装:
sudo apt install pdnsd
Ubuntu 18.04 中 pdnsd 似乎并没有在仓库中。
Configuration
默认配置地址 /etc/pdnsd.conf
。
下面配置示例,后面的分号不可缺少。
配置示例:
global {
perm_cache=1024; # 要缓存多少DNS信息
cache_dir="/var/pdnsd";
# pid_file = /var/run/pdnsd.pid;
run_as="nobody";
server_port = 1053;
server_ip = 127.0.0.1; # Use eth0 here if you want to allow other
# machines on your network to query pdnsd.
status_ctl = on;
# paranoid=on; # This option reduces the chance of cache poisoning
# but may make pdnsd less efficient, unfortunately.
# query_method=udp_tcp;
query_method=tcp_only; # 使用 TCP 方式去查询 DNS 服务器
min_ttl=15m; # Retain cached entries at least 15 minutes. 缓存 DNS 最短有效期
max_ttl=1w; # One week. 缓存 DNS 信息最长有效期
timeout=10; # Global timeout option (10 seconds).
neg_domain_pol=on;
udpbufsize=1024; # Upper limit on the size of UDP messages.
}
server {
label= "googledns";
ip = 8.8.8.8, 8.8.4.4;
timeout=30;
interval=30;
root_server = on;
uptest = ping;
ping_timeout=50;
purge_cache=off;
exclude=.cn, .douban.com, .taobao.com
}
Pdnsd 读取配置时,优先级从上到下,上面的 DNS 服务器配置优先于下一层。
DNS servers
pdnsd 需要至少知道一个上游 DNS 服务器用来收集信息
- label,用来标示服务器,随意,但最好写上服务器名字
- ip,DNS 服务器地址,可以分多行,也可以使用逗号分割
/etc/resolve.conf
中指定了一些DNS服务器地址,在配置 pdnsd 的时候,修改为
nameserver 127.0.0.1
测试
启动 pdnsd 服务
/etc/init.d/pdnsd start
nslookup www.douban.com 127.0.0.1
或者
dig @localhost -p port www.douban.com
如果返回正常,和 webdnstools 比照,则说明配置成功
清空本地缓存
sudo pdnsd-ctl dump # Print information stored in the cache about name.
sudo pdnsd-ctl empty-cache
查看端口占用
sudo netstat -anp | more
pdnsd 只能优化 DNS 解析,并不能避免 DNS 污染。