how to change DNS server permanently on Ubuntu 20.04?
I know there are other posts here asking this, but those suggestions do not help, the configuration keeps changing and I simply cannot get my own changes to persist. I have the Google 8.8.8.8 and 8.8.4.4 servers in my Network Manager configuration in the GUI, and systemd-resolv —status returns
Link 2 (enp38s0f1) Current Scopes: DNS DefaultRoute setting: yes LLMNR setting: yes MulticastDNS setting: no DNSOverTLS setting: no DNSSEC setting: no DNSSEC supported: no Current DNS Server: 8.8.8.8 DNS Servers: 8.8.8.8 8.8.4.4 DNS Domain: ~.
;; Query time: 0 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Mon Oct 05 11:08:26 EDT 2020 ;; MSG SIZE rcvd: 83
so my default route 192.168.1.1 as DNS . Furthermore, /etc/resolv.conf is a symlink to /run/systemd/resolve/resolv.conf , which in turn reads
# Generated by dhcpcd from enp38s0f1.dhcp, wlp0s20f3.dhcp # /etc/resolv.conf.head can replace this line domain fios-router.home nameserver 192.168.1.1 # /etc/resolv.conf.tail can replace this line
The only enp38s0f1.dhcp file on this system (I’ve searched / ) is /run/dhcpcd/resolv.conf/enp38s0f1.dhcp , which reads
# Generated by dhcpcd from enp38s0f1.dhcp domain fios-router.home search fios-router.home nameserver 192.168.1.1
I have tried to write in other nameservers there, but they do not persist. In the past I’ve made the changes persistent by making the file immutable with chattr +i , but
lsattr /run/dhcpcd/resolv.conf/enp38s0f1.dhcp
lsattr: Inappropriate ioctl for device While reading flags on /run/dhcpcd/resolv.conf/enp38s0f1.dhcp
so that attribute is not available here. And besides, I shouldn’t have to make the file immutable anyway: there should presumably be some way I can control the DNS server.. Edit: In response to comments below:
$ dpkg -l *dnsmasq* --- Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-================-===============-============-============================================ un dnsmasq (no description available) ii dnsmasq-base 2.80-1.1ubuntu1 amd64 Small caching DNS proxy and DHCP/TFTP server un dnsmasq-base-lua (no description available)
Настройка DNS в Ubuntu
Сервера DNS используются системой для преобразования сложных для запоминания IP адресов в простые доменные имена. Это делается потому что людям сложно запоминать несколько никак не связанных цифр, но очень просто запомнить слово.
Когда компьютеру нужно узнать IP адрес какого-либо домена, он отправляет запрос известному ему DNS серверу. Эти сервера могут быть получены автоматически от роутера по DHCP или же заданы в ручную. В этой статье мы рассмотрим как выполняется настройка DNS Ubuntu 16.04 и более старых версиях.
Настройка DNS в Ubuntu через GUI
Раньше, для настройки DNS серверов, которые будут использоваться системой было достаточно внести адреса нужных серверов в файл /etc/resolv.conf. Но сейчас всей конфигурацией сети в Ubuntu управляет NetworkManager, а этот файл теперь представляет собой только ссылку на файл NetworkManager.
Этот способ до сих пор работает, но в нем вы можете настроить DNS на LiveCD, или до перезагрузки. После перезагрузки все настройки собьются и придется все делать заново. Поэтому, чтобы все сохранилось нужно выполнять все действия через интерфейс NetworkManager. Сначала откройте контекстное меню для значка сети на панели и выберите «Изменить подключения»:
Выберите ваше подключение и нажмите «Изменить»:
В открывшемся окне перейдите на вкладку «Параметры IPv4»:
Затем, в поле «Способ настройки» выберите «Автоматически (DHCP, только адрес)»:
Теперь немного ниже появиться поле «Серверы DNS», где вам нужно прописать нужные серверы, можно несколько адресов через запятую. Например, можно указать сервера от Google:
Поле этого нажмите «Сохранить» и «Закрыть». Теперь можете переподключитесь к этому соединению и можете проверять текущий DNS сервер:
Собственно, это все, но есть еще один способ настройки через консоль, если этот не сработал или вы предпочитаете работать из консоли.
Настройка DNS через терминал Ubuntu
В Ubuntu есть унифицированный интерфейс настройки сети, который настраивается через конфигурационный файл /etc/network/interfaces. Сначала смотрим список сетевых интерфейсов:
Откройте файл для редактирования и найдите в нем имя своего сетевого интерфейса, например, auto enp0s3, если такой секции нет, ее нужно добавить:
sudo vi /etc/network/interfaces
auto enp0s3
iface enp0s3 inet dhcp
Затем, добавьте в эту секцию строчку:
Здесь адрес 8.8.8.8 — это адрес вашего DNS сервера. Но эта настройка сработает, только если ваш DHCP клиент не пытается назначить адрес самостоятельно. Чтобы указать DNS адрес на уровне DHCP сервера нужно добавить такую строчку в конфигурационный файл /etc/dhcp/dhclient.conf:
sudo vi /etc/dhcp/dhclient.conf
supersede domain-name-servers 8.8.8.8
Здесь тоже адрес 8.8.8.8 означает адрес DNS сервера. Для верности, вы можете добавить свои адреса DNS серверов в файл /etc/resolvconf/resolv.conf.d/base:
sudo vi /etc/resolvconf/resolv.conf.d/base
Чтобы настройки вступили в силу необходимо перезапустить сеть:
sudo systemctl restart networking
Возможно, даже лучше будет если вы полностью перезагрузите компьютер. Теперь вы можете открыть /etc/resolv.conf и посмотреть применялся ли новый адрес DNS:
Как видите, в моем примере все заработало. Подобно этому выполняется настройка dns linux для любого дистрибутива.
Выводы
В этой небольшой статье мы рассмотрели как выполняется настройка DNS Ubuntu 16.04 через графический интерфейс или терминал. В Ubuntu автоматической настройкой DNS могут заниматься множество утилит и это создает некоторые проблемы при настройке, но со всем можно разобраться. Надеюсь, эта информация была полезной для вас.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Как изменить настройки DNS-серверов
В статье мы расскажем, как изменить настройки DNS-серверов на популярных ОС: Ubuntu, Debian, Centos и Windows Server.
Самые распространённые причины смены DNS-серверов:
- увеличение скорости загрузки сайта в браузере,
- настройка родительского контроля (чтобы дети не просматривали нежелательный контент),
- защита от фишинга и другие.
Ubuntu 18.04
Изменить DNS-серверы поможет служба netplan. С её помощью нужно отредактировать её конфигурационный файл 01-netcfg.yaml.
sudo nano /etc/netplan/01-netcfg.yaml
network: ethernets: eth0: addresses: - 123.123.123.123/24 - 2002:7b7b:7b7b:0:0:0:0:0/64 gateway4: 123.123.123.123 gateway6: 2002:7b7b:7b7b:0:0:0:0:0 nameservers: addresses: - 1.1.1.1 - 1.0.0.1 renderer: networkd version: 2
nameservers: addresses: - 8.8.8.8 - 8.8.4.4
systemd-resolve --status | grep 'DNS Servers' -A2
Ubuntu 20.04/Debian
sudo nano /etc/systemd/resolved.conf
sudo systemctl restart systemd-resolved
systemd-resolve --status | grep 'DNS Servers' -A2
CentOS
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 2002:7b7b:7b7b:0:0:0:0:0 inet 123.123.123.123/24 brd 123.123.123.255 scope global eth0 valid_lft forever preferred_lft forever inet6 2002:7b7b:7b7b:0:0:0:0:0/64 scope global valid_lft forever preferred_lft forever inet6 2002:7b7b:7b7b:0:0:0:0:0/64 scope link valid_lft forever preferred_lft forever 3: eth1: mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 52:54:00:e4:b4:cc brd ff:ff:ff:ff:ff:ff
Слева от значения
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
Вместо eth0 укажите название вашего конфигурационного файла. На экране отобразится содержимое файла:
NAME="eno1" ONBOOT=yes BOOTPROTO=static HWADDR="2002:7b7b:7b7b:0:0:0:0:0" IPADDR="123.123.123.123" NETMASK="255.255.255.0" GATEWAY="123.123.123.123" TYPE=Ethernet DEVICE=eth0 BOOTPROTO=none ONBOOT=yes IPADDR=123.123.123.123 PREFIX=24 GATEWAY=123.123.123.123 DNS1=1.1.1.1 DNS2=1.0.0.1 IPV6INIT=yes IPV6ADDR=2002:7b7b:7b7b:0:0:0:0:0::3f9d/64 IPV6_DEFAULTGW=2002:7b7b:7b7b:0:0:0:0:0
Вместо 8.8.8.8 и 8.8.4.4 будут указаны ваши IP-адреса. Если вам нужно добавить дополнительные DNS-серверы, добавьте их на следующих строках как DNS3 и DNS4.
systemctl restart network