我安装了 pdnsd:它可以正常工作。
我的问题是,它忽略了我在 pdnsd.conf 中标记为“resolvconf”的“服务器”部分中提供的 opendns 服务器:而是使用 dhcp 提供的服务器。
另一方面,如果我将服务器部分的名称更改为其他名称,则 pdnsd 会正确使用 opendns 服务器,但 resolvconf 会将 dhcp 提供的 dns 放在 resolv.conf 中,因此 pdnsd 会被绕过。
所以,我的问题是:当请求未缓存时,如何让 resolvconf 将 resolv.conf 设置为 127.0.0.1 并且 pdnsd 使用 opendns 服务器?
我发现的一个解决方法是在网络管理器中为连接设置“DHCP(仅地址)”,但这样做的问题是必须为每个不同的连接设置它:这意味着如果您使用笔记本电脑,您必须为您连接的每个 wifi 更改它!
答案1
我想我已经找到了解决方案:添加
supersede domain-name-servers 127.0.0.1;
来/etc/dhcp/dhclient.conf
完成这项工作。
因此,如果我编写一个简短的指南,让 pdnsd 在具有固定(例如,opendns)域名服务器的 ubuntu 中工作,而不管使用什么连接,也许对其他人有用。
/etc/NetworkManager/NetworkManager.conf
通过编辑和注释掉来禁用 dnsmasq#dns=dnsmasq
通过添加以下代码强制网络管理器为每个连接设置 DNS 为 127.0.0.1
supersede domain-name-servers 127.0.0.1;
到
/etc/dhcp/dhclient.conf
- 安装 pdnsd
- 编辑
/etc/default/pdnsd
并设置START_DAEMON=yes
配置 pdnsd 以使用您喜欢的 DNS。例如,要使用 opendns,您的
/etc/pdnsd
操作应如下所示global { perm_cache=16536; cache_dir="/var/cache/pdnsd"; max_ttl=604800; run_as="pdnsd"; paranoid=on; status_ctl=on; neg_rrs_pol=on; par_queries=1; } server { label="opendns"; ip="208.67.222.222","208.67.220.220"; timeout=30; interval=30; uptest=ping; ping_timeout=50; purge_cache=off; proxy_only=on; } source { ttl=86400; owner="localhost."; file="/etc/hosts"; }
重新启动 pdnsd 和网络连接:
sudo service pdnsd restart sudo invoke-rc.d network-manager restart