Как я изменяю свой сервер DNS глобально, не имея необходимость делать это вручную через администратора сети для каждого соединения, которое я имею.
Я хочу использовать OpenDNS, звонит ли дома, университет, точка доступа Wi-Fi, привязи...
Я использую Ubuntu 13.10, но я предполагаю, что это будет то же на более новых версиях.
МЕТОД № 1: сценарии
Как можно знать, можно изменить DNS для конкретного использования соединения nm-connection-editor
(который является тем, что открывается, когда Вы поражаете Соединения Редактирования в значке сети). Это - графический путь.
На терминальном основанный путь состоял бы в том, чтобы отредактировать каждое соединение в /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
Теперь, что, если мы могли бы автоматизировать добавление этих двух строк в каждый файл конфигурирования соединений? С grep
и awk
это возможно! Мой рев сценария делает точно это.
#!/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, однако это одинаково используется в человечности. Я использую этот точно тот же прием и в монетном дворе 17 и в человечности 14.04. Среди прочего я предложил бы комментировать строку dns=dnsmasq
в /etc/NetworkManager/NetworkManager.conf
но это не требуется.
supersede
опция в основном заменяет любой DNS, который Вы получаете от своей точки доступа (иначе маршрутизатор). Для меня, nm-tool
отчеты тот же dsn, который я поместил в ту строку для любого соединения Wi-Fi. prepend
с другой стороны, только добавляет, что Вы указываете как вторичный DNS в дополнение к тому, что обеспечивает маршрутизатор. Таким образом, это может быть немного более оптимальным вариантом.
Вы можете добавлять , строка в /etc/resolvconf/resolv.conf.d/head
как
nameserver 8.8.8.8
не боится редактировать его даже при том, что существует строка, 'НЕ РЕДАКТИРУЮТ ЭТОТ ФАЙЛ рукой'
, Этот файл используется resolvconf ( страница справочника ) для генерации/etc/resolv.conf, который используется NetworkManager
После этого, необходимо работать, однажды
sudo resolvconf -u
Можно добавить этот файл, таким образом, администратор сети обновит 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 (FoeBud)),
watch cat /etc/resolv.conf
Затем перезапустите networkmanager в другой консоли с
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
Но обе опции, кажется, не работают, потому что Администратор сети действительно запускает свой собственный экземпляр dnsmasq
который не использует их стандартный dnsmasq conf файлы.
Решение этого состояло бы в том, чтобы отсоединить dnsmasq от NetworkManager и установить dnsmasq самостоятельно (см. https://superuser.com/a/809716/160420), но я лично не хочу изменяться так в моей системе Ubuntu по умолчанию.
Можно сделать это путем простого конфигурирования dns в модеме/маршрутизаторе самом впредь, все соединения будут использовать это dns по умолчанию. Тип 192.168.0.1 в Вашей странице браузера для доступа к странице маршрутизатора/модема. 208.67.222.222 208.67.220.220 два opendns сервера.