Вопрос или проблема
У моего провайдера проблемы с разрешением множества важных веб-сайтов, таких как 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-серверы.
-
Откройте файл конфигурации
dhclient
:sudo nano /etc/dhcp/dhclient.conf
-
Добавьте или измените строку, чтобы включить следующие 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
-
Сохраните изменения и выйдите из редактора.
Теперь, когда вы будете подключаться к сети, dhclient
будет использовать указанные вами DNS-серверы вместо тех, что предоставляет ваш провайдер.
2. Принудительное изменение файла /etc/resolv.conf
Если вы хотите просто автоматически переписывать файл resolv.conf
при изменении сети, можно использовать скрипт.
-
Создайте новый скрипт:
sudo nano /usr/local/bin/setdns.sh
-
Вставьте следующий код в скрипт:
#!/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
-
Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/setdns.sh
3. Запуск скрипта при изменении сети
Вы можете использовать systemd или cron для автоматической настройки DNS после перезагрузки системы или изменения сети.
С использованием systemd
-
Создайте сервис:
sudo nano /etc/systemd/system/setdns.service
-
Добавьте следующий код:
[Unit] Description=Set DNS servers [Service] Type=oneshot ExecStart=/usr/local/bin/setdns.sh [Install] WantedBy=multi-user.target
-
Включите сервис и добавьте его в автозагрузку:
sudo systemctl enable setdns.service
С использованием cron
Вы также можете настроить cron для периодического вызова вашего скрипта.
-
Откройте crontab для редактирования:
crontab -e
-
Добавьте строку, чтобы выполнять скрипт через каждые 5 минут:
*/5 * * * * /usr/local/bin/setdns.sh
Заключение
Используя предложенные выше методы, вы сможете настроить вашу систему на использование желаемых DNS-серверов автоматически, как только будет выполнено изменение сети. Это поможет избежать зависания при попытке устранения проблем с разрешением DNS. Убедитесь, что вы тщательно следуете всем шагам, и ваш опыт работы с Linux будет ещё более комфортным.