Как сменить DNS-серверы на VPS: Linux и Windows
Чтобы сменить DNS на сервере, нужно понять, кто управляет резолвингом: прямое редактирование /etc/resolv.conf, systemd-resolved, netplan или NetworkManager в Linux, либо Set-DnsClientServerAddress в Windows. Правка не того файла часто откатывается автоматически — ниже разберём каждый случай.
Кто управляет DNS в вашей системе
Сначала проверьте, куда указывает resolv.conf:
ls -l /etc/resolv.conf
- Если это симлинк на
../run/systemd/resolve/stub-resolv.conf— DNS управляет systemd-resolved. - Если обычный файл — можно править напрямую (но его может перезаписывать netplan/NetworkManager/cloud-init).
Способ 1. Прямое редактирование resolv.conf
Подходит, когда файл не управляется службами. Откройте его:
sudo nano /etc/resolv.conf
Укажите нужные серверы:
nameserver 1.1.1.1
nameserver 8.8.8.8
Минус: файл могут перезаписать при перезагрузке. Для постоянства используйте способ, соответствующий вашему сетевому менеджеру.
Способ 2. systemd-resolved
Отредактируйте конфиг службы:
sudo nano /etc/systemd/resolved.conf
В секции [Resolve] задайте:
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9
Перезапустите службу и проверьте:
sudo systemctl restart systemd-resolved
resolvectl status
Способ 3. netplan (Ubuntu)
Если сеть настроена через netplan, DNS задаётся там:
network:
version: 2
ethernets:
ens3:
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
Примените:
sudo netplan apply
Способ 4. Windows Server
В PowerShell от администратора узнайте индекс интерфейса и задайте DNS:
Get-NetAdapter | Format-Table Name, ifIndex
Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses ("1.1.1.1","8.8.8.8")
Проверка:
Get-DnsClientServerAddress -InterfaceIndex 12
Популярные публичные DNS
| Провайдер | Первичный | Вторичный |
|---|---|---|
| Cloudflare | 1.1.1.1 | 1.0.0.1 |
| 8.8.8.8 | 8.8.4.4 | |
| Quad9 | 9.9.9.9 | 149.112.112.112 |
Способ 5. NetworkManager (nmcli)
На CentOS, RHEL, Fedora и некоторых десктопных Ubuntu сетью управляет NetworkManager. Меняйте DNS через nmcli, иначе правки resolv.conf откатятся.
Посмотрите активные подключения:
nmcli connection show
Задайте DNS для нужного подключения (например System eth0):
sudo nmcli connection modify "System eth0" ipv4.dns "1.1.1.1 8.8.8.8"
sudo nmcli connection modify "System eth0" ipv4.ignore-auto-dns yes
sudo nmcli connection up "System eth0"
Параметр ignore-auto-dns yes запрещает перезаписывать ваши серверы значениями от DHCP.
Очистка кэша DNS
После смены серверов старые ответы могут оставаться в кэше. Очистите его:
sudo resolvectl flush-caches
В Windows:
Clear-DnsClientCache
Как проверить, что DNS сменился
resolvectl status
dig example.com
nslookup example.com
В выводе dig строка SERVER: покажет, какой резолвер реально использовался.
Частые вопросы
Почему resolv.conf возвращается к старому после перезагрузки? Его перезаписывает systemd-resolved, netplan или cloud-init. Меняйте DNS в источнике, который управляет файлом, а не в самом resolv.conf.
Изменения DNS применяются мгновенно?
Новые запросы — да. Но уже закэшированные ответы живут до истечения TTL. Очистить кэш: sudo resolvectl flush-caches.
Как выбрать DNS-сервер? Ориентируйтесь на близость и надёжность: Cloudflare (1.1.1.1) и Google (8.8.8.8) стабильны и быстры для большинства регионов.
Можно ли задать свой локальный DNS?
Да, укажите IP своего резолвера (например unbound или dnsmasq) как nameserver/DNS=.
Как узнать, какой DNS используется сейчас?
resolvectl status в Linux или Get-DnsClientServerAddress в Windows покажут активные серверы.
Разворачиваете и настраиваете собственный сервер? Возьмите VPS на Linux в разделе аренда VPS или закажите Администрирование серверов.
