Как изменить настройки DNS на Ubuntu 22.04 с использованием SSH

Вопрос или проблема

Я пытаюсь задать серверы DNS явно, так как мне интересно, не связаны ли мои медленные скорости на медиа-сервере с плохими DNS от Verizon. Однако я искал везде, и ничего из найденного не работает. Проверка моего DNS показывает следующее:

❯ resolvectl dns
Global: 1.1.1.1 1.0.0.1
Link 2 (eno2): 192.168.1.1

или

❯ nmcli device show eno2 | grep IP4.DNS
IP4.DNS[1]:                             192.168.1.1

Как я понимаю, мой DNS устанавливается через DHCP, но попытка изменить его с помощью resolvetl dns eno2 1.1.1.1 не сохраняется, также не помогает добавление этого в /etc/systemd/resolved.conf.d/dns_servers.conf:

[Resolve]
DNS=1.1.1.1 1.0.0.1

Также пробовал установить этот файл /etc/systemd/network/eno2.network:

[Match]
Name=eno2

[DHCPv4]
UseHostname=no
UseDNS=no
UseNTP=no
UseDomains=no

[DHCPv6]
UseHostname=no
UseDNS=no
UseNTP=no

[Network]
DNS=1.1.1.1 1.0.0.1
Domains=cloudflare-dns.com

но это тоже не сработало.

Думаю, это моя проблема:

❯ cat /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager

Однако я не имею представления, как переопределить Network Manager. nmcli, кажется, ничего не делает, или, возможно, я выполняю неправильную команду:

❯ nmcli con
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  b28835af-2164-37f9-b4df-e185f17a54c4  ethernet  eno2
br-bfaa0d30981b     afe1cb8b-3d6e-454a-97f6-947f546e7114  bridge    br-bfaa0d30981b
docker0             5f24f23d-e6d9-4743-9f7e-2fc81dda21ff  bridge    docker0
Verizon_4M3LTJ      d40366ad-bdb0-49fe-9aa3-168aea6300a5  wifi      --
❯ sudo nmcli con mod "Wired connection 1" ipv4.dns "1.1.1.1 1.0.0.1"
❯ nmcli device show eno2 | grep IP4.DNS
IP4.DNS[1]:                             192.168.1.1
❯ sudo nmcli con mod "Wired connection 1" IP4.DNS "1.1.1.1 1.0.0.1"
Error: invalid or not allowed setting 'IP4': 'IP4' not among [connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, hostname, tc, proxy].
❯ resolvectl dns
Global: 1.1.1.1 1.0.0.1
Link 2 (eno2): 192.168.1.1

У меня нет физического доступа к этой машине в данный момент, поэтому я не могу использовать интерфейс пользователя для настройки DNS и у меня не открыт порт для RDP. Но уж наверняка должен быть какой-то способ настроить это исключительно через CLI?

Копируя соответствующие части из этого ответа: https://askubuntu.com/a/1536841/285001 (поделился @mpboden в комментариях к оригинальному посту).

Эти команды смогли решить мою проблему с DNS:

❯ nmcli con
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  b28835af-2164-37f9-b4df-e185f17a54c4  ethernet  eno2
br-bfaa0d30981b     afe1cb8b-3d6e-454a-97f6-947f546e7114  bridge    br-bfaa0d30981b
docker0             5f24f23d-e6d9-4743-9f7e-2fc81dda21ff  bridge    docker0
Verizon_4M3LTJ      d40366ad-bdb0-49fe-9aa3-168aea6300a5  wifi      --
❯ sudo nmcli con mod "Wired connection 1" ipv4.dns "1.1.1.1 1.0.0.1"
❯ sudo nmcli con mod "Wired connection 1" ipv4.dns-search "cloudflare-dns.com"
❯ sudo nmcli con mod "Wired connection 1" ipv4.ignore-auto-dns yes
❯ sudo systemctl restart NetworkManager
❯ resolvectl
Global
           Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
    resolv.conf mode: stub
  Current DNS Server: 1.1.1.1
         DNS Servers: 1.1.1.1 1.0.0.1
Fallback DNS Servers: 8.8.8.8 8.8.4.4
          DNS Domain: cloudflare-dns.com

Link 2 (eno2)
    Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 1.1.1.1
       DNS Servers: 1.1.1.1 1.0.0.1
        DNS Domain: cloudflare-dns.com

К сожалению, это не решает проблему скорости, но, по крайней мере, исключает DNS как причину.

С netplan и если вам не нужен NetworkManager на этом интерфейсе, тогда в netplan YAML сделайте это:

network:
  version: 2
  renderer: networkd
  ethernets:
    eno2:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses: [1.1.1.1, 1.0.0.1]
      dhcp4: no

затем примените

sudo netplan apply

Вы можете проверить все это с помощью

ip addr show eno2
ip route
resolvectl status eno2

заметьте, что у вас будет статический IP-адрес, в нашем примере 192.168.1.100/24), шлюз (192.168.1.1) и DNS-серверы (1.1.1.1 и 1.0.0.1).

.

Ответ или решение

Настройка DNS на Ubuntu 22.04 через SSH является важной задачей, особенно если вы хотите оптимизировать скорость и надежность вашего интернет-соединения, например, из-за несовершенств DNS-провайдера. В этой статье я расскажу, как это сделать с учетом всех необходимых шагов и нюансов.

Теория

Ubuntu 22.04 использует несколько компонентов, связанных с сетями: Netplan, NetworkManager и systemd-resolved. По умолчанию Netplan используется для конфигурирования сети через YAML-файлы, а NetworkManager управляет подключениями на большинстве десктопных систем. Однако, если речь идет о серверных или специфических конфигурациях, можно также использовать networkd.

systemd-resolved — это сервис, отвечающий за резолвинг DNS, который предоставляет такую информацию как IP-адреса DNS-серверов. Изменения, внесенные через команду resolvectl, могут быть временными и пропадать после перезагрузки. Поэтому правильной практикой будет внесение постоянных изменений через NetworkManager или Netplan.

Пример

Раскроем задачу на разных уровнях:

  1. Изменения через NetworkManager:

    • Для изменения DNS-серверов используйте команду nmcli, которая модифицирует конфигурацию соединения, управляемую NetworkManager.
    • Например, чтобы установить публичные DNS-серверы Cloudflare, выполните следующие команды:
      sudo nmcli con mod "Wired connection 1" ipv4.dns "1.1.1.1 1.0.0.1"
      sudo nmcli con mod "Wired connection 1" ipv4.dns-search "cloudflare-dns.com"
      sudo nmcli con mod "Wired connection 1" ipv4.ignore-auto-dns yes
      sudo systemctl restart NetworkManager
    • После этого вы можете проверить настройки DNS:
      resolvectl status
  2. Изменения через Netplan:

    • Если вы не используете NetworkManager или хотите установить статическую конфигурацию через Netplan, отредактируйте соответствующий YAML-файл, например /etc/netplan/01-netcfg.yaml.
    • Пример изменения файла конфигурации:
      network:
      version: 2
      renderer: networkd
      ethernets:
       eno2:
         addresses:
           - 192.168.1.100/24
         gateway4: 192.168.1.1
         nameservers:
           addresses: [1.1.1.1, 1.0.0.1]
         dhcp4: no
    • После изменения документа примените конфигурации:
      sudo netplan apply

Применение

После настройки убедитесь в корректности работы вашей сети. Вы можете использовать команды ip addr show eno2, ip route и resolvectl status для проверки настроек IP-адресации, маршрутизации и DNS.

При некорректных настройках DNS ваша система может не иметь доступ к нужным ресурсам, из-за чего производительность сети может существенно снижаться. Поэтому после настройки желательно протестировать соединение с важными для вас ресурсами и убедиться, что все работает корректно.

Если у вас возникают проблемы с производительностью даже после изменения DNS, причины могут быть более глубокими и включать в себя проблемы с самим интернет-каналом, конфигурацию маршрутизации или неисправности конкретных серверов.

Чтобы изолировать проблему, можно использовать такие утилиты как ping, traceroute и iperf, чтобы разобраться, где именно возникают пробуксовки.

Заключение

Настройка DNS может существенно повлиять на общую производительность вашей сети. Правильная конфигурация и выбор DNS-серверов помогут обеспечить надежность и скорость интернет-соединения. Однако помните, что DNS — это лишь часть сложного механизма сети, и в случае сложностей следует рассматривать все возможные аспекты инфраструктуры сети.

Оцените материал
Добавить комментарий

Капча загружается...