全局 DNS 变更

全局 DNS 变更

如何全局更改我的 DNS 服务器,而不必通过网络管理器为每个连接手动执行此操作。

我想使用 OpenDNS,无论是在家里、大学、wifi 热点、手机网络共享……

我使用的是 Ubuntu 13.10,但我猜测新版本也会一样。

答案1

您可以添加此文件以便网络管理员更新resolv.conf 每次建立连接时

echo "echo 'nameserver 85.214.20.141'>/etc/resolv.conf"> /etc/NetworkManager/dispatcher.d/10-FoeBud-dns
chmod +x /etc/NetworkManager/dispatcher.d/10-FoeBud-dns

(我建议使用 DNS 85.214.20.141(敌芽))

评估:

watch cat /etc/resolv.conf

然后在另一个控制台中重新启动网络管理器

service network-manager restart

...观察resolv.conf文件的变化。

退税:

您机器上的本地 DNS 缓存dnsmasq将不再可用。


我也尝试过:

echo "nameserver 85.214.20.141">/etc/resolv.dnsmasq.conf
echo "resolv-file=/etc/resolv.dnsmasq.conf" > /etc/NetworkManager/dnsmasq.d/FoeBud-dns

看起来更简洁或者更简短的选项是:

echo "server=85.214.20.141" > /etc/NetworkManager/dnsmasq.d/FoeBud-dns

但这两个选项似乎都不起作用,因为 Network-Manager 确实启动了自己的实例,而该dnsmasq实例并不使用那些标准 dnsmasq conf 文件。

解决此问题的方法是将 dnsmasq 从 NetworkManager 中分离出来,然后单独安装 dnsmasq(请参阅https://superuser.com/a/809716/160420),但我个人不想在我的默认 Ubuntu 系统上进行太多更改。

答案2

你可以附加就像/etc/resolvconf/resolv.conf.d/head

nameserver 8.8.8.8

即使有“请勿手动编辑此文件”这句话,也不要害怕编辑它

该文件由解析配置手册页)生成 /etc/resolv.conf,供网络管理器

之后你需要运行,一次

sudo resolvconf -u

答案3

方法一:脚本

您可能知道,您可以使用nm-connection-editor(当您点击网络图标中的“编辑连接”时会打开)更改特定连接的 DNS。这是图形方式。

基于终端的方法是编辑/etc/NetworkManager/system-connections/文件夹中的每个连接,通过在dns=xxx.xx.xxx.xxx;ignore-auto-dns=true之后添加行[ipv4]method=auto。以下是来自的示例文件/etc/Network-Manager/system-connections/

[connection]
id=My College Connection
uuid=*******-******-****-a155-ca880ccf7ddb
type=802-11-wireless

[802-11-wireless]
ssid=My College Connection
mode=infrastructure
mac-address=00:0B:81:94:D3:08

[ipv6]
method=auto

[ipv4]
method=auto
dns=208.67.220.220;
ignore-auto-dns=true

现在,如果我们可以自动将这两行添加到每个连接配置文件中会怎么样?有了grepawk这是可能的!我的脚本就是这样做的。

#!/bin/bash
# Author: Serg Kolo
# Date: May 6, 2015
# Description: this script checks all settings for connections in 
# /etc/NetworkManager/system-connections/ , and if there's no custom
# dns set , this script sets it;
# NOTE: run sudo service network-manager restart after running this script

# set -x

for file in /etc/NetworkManager/system-connections/* ; do
        grep 'dns=208.67.220.220;' "$file"  || ( awk '{print;if ($1=="[ipv4]"){
getline; print "method=auto\ndns=208.67.220.220;\nignore-auto-dns=true"}}' "$fi
le" > .tmpfile && ( cat .tmpfile > "$file") )
done

以下是脚本运行时的截图:

在此处输入图片描述

笔记:对于 15.04,此脚本似乎不起作用,但事实证明nmcli已添加允许修改连接设置的功能。上述脚本的替代方案是以下脚本:

#!/bin/bash
set -x
for file in /etc/NetworkManager/system-connections/*; do
    file=$(echo $file | cut -d'/' -f5-)
    nmcli connection modify id "$file" +ipv4.dns "" +ipv4.dns 208.67.220.220 +ipv4.ignore-auto-dns yes
done

方法 2 我个人最喜欢的是使用/etc/dhcp/dhclient.conf, 取消注释supersede domain-name-servers行 并在那里添加您的 dns 服务器,以逗号分隔。下面的屏幕截图来自网络,属于 debian,但它同样适用于 ubuntu。我在 mint 17 和 ubuntu 14.04 中使用了同样的技巧。除其他事项外,我建议注释掉行,dns=dnsmasq但这/etc/NetworkManager/NetworkManager.conf不是必需的。

supersede选项基本上会替换您从接入点(又称路由器)收到的任何 DNS。对我来说,nm-tool对于任何 wifi 连接,都会报告我在该线路上放置的相同 DNS。prepend另一方面,除了路由器提供的 DNS 之外,只会添加您指定为辅助 DNS 的任何内容。因此,这可能是一个略微更好的选择。

在此处输入图片描述

答案4

您只需在调制解调器/路由器本身中配置 DNS 即可实现此目的,从此以后,您的所有连接都将默认使用该 DNS。在浏览器页面中输入 192.168.0.1 即可访问路由器/调制解调器页面。208.67.222.222 208.67.220.220 是两个 opendns 服务器。

相关内容