Как автоматически изменить DNS-сервер имен

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

У моего провайдера проблемы с разрешением множества важных веб-сайтов, таких как google, github, gmail и т.д. В качестве решения я вручную отредактировал файл /etc/resolv.conf на Google’s 8.8.8.8. Но измененный файл снова модифицируется на DNS-сервис моего провайдера при изменении сети. Как мне автоматически установить /etc/resolv.conf на DNS Google в случае изменения сети и при перезагрузке моего компьютера, используя bash-скрипт.

Я новичок в скриптовании на Linux. Мне нужны подсказки о том, как написать такой скрипт. Спасибо.

/etc/resolv.conf файл обычно управляется вашим сетевым менеджером.

Вы можете заставить ваш сетевой менеджер использовать конкретный DNS-сервер.

Например, если у вас Gnome, то в gnome-control-center вы можете сделать это:

введите описание изображения здесь

Процедура будет похожа для других сетевых менеджеров.

Nano /etc/dhcp/dhclient.conf

введите описание изображения здесь

затем измените его

sudo nano /etc/resolv.conf

ради всего святого, не используйте DNS-сервер Google. используйте сервер Cloudflare

nameserver 1.1.1.1
nameserver 1.0.0.1

затем

sudo chattr -a /etc/resolv.conf
sudo chattr -i /etc/resolv.conf

теперь проверьте статус:

mousepad /etc/resolv.conf // или используйте leafpad

введите описание изображения здесь

Теперь он только для чтения

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

Для автоматической замены DNS-серверов в системе Linux с использованием Bash-скриптов и учитывая, что файл /etc/resolv.conf может редактироваться сетевым менеджером, приведу несколько рекомендаций.

1. Использование dhclient

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

  1. Откройте файл конфигурации dhclient:

    sudo nano /etc/dhcp/dhclient.conf
  2. Добавьте или измените строку, чтобы включить следующие DNS-серверы:

    supersede domain-name-servers 8.8.8.8, 8.8.4.4;  # Google DNS 
    # или
    # supersede domain-name-servers 1.1.1.1, 1.0.0.1; # Cloudflare DNS
  3. Сохраните изменения и выйдите из редактора.

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

2. Принудительное изменение файла /etc/resolv.conf

Если вы хотите просто автоматически переписывать файл resolv.conf при изменении сети, можно использовать скрипт.

  1. Создайте новый скрипт:

    sudo nano /usr/local/bin/setdns.sh
  2. Вставьте следующий код в скрипт:

    #!/bin/bash
    
    # Установите спортивные DNS-серверы
    echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
    echo "nameserver 8.8.4.4" | sudo tee -a /etc/resolv.conf > /dev/null
  3. Сделайте скрипт исполняемым:

    sudo chmod +x /usr/local/bin/setdns.sh

3. Запуск скрипта при изменении сети

Вы можете использовать systemd или cron для автоматической настройки DNS после перезагрузки системы или изменения сети.

С использованием systemd

  1. Создайте сервис:

    sudo nano /etc/systemd/system/setdns.service
  2. Добавьте следующий код:

    [Unit]
    Description=Set DNS servers
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/setdns.sh
    
    [Install]
    WantedBy=multi-user.target
  3. Включите сервис и добавьте его в автозагрузку:

    sudo systemctl enable setdns.service

С использованием cron

Вы также можете настроить cron для периодического вызова вашего скрипта.

  1. Откройте crontab для редактирования:

    crontab -e
  2. Добавьте строку, чтобы выполнять скрипт через каждые 5 минут:

    */5 * * * * /usr/local/bin/setdns.sh

Заключение

Используя предложенные выше методы, вы сможете настроить вашу систему на использование желаемых DNS-серверов автоматически, как только будет выполнено изменение сети. Это поможет избежать зависания при попытке устранения проблем с разрешением DNS. Убедитесь, что вы тщательно следуете всем шагам, и ваш опыт работы с Linux будет ещё более комфортным.

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

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