
CentOS7. С сетью все в порядке.
# cat /etc/resolv.conf
nameserver 192.168.1.1
Затем я решаю изменить имя хоста.
# hostnamectl set-hostname host.domain
# reboot
# cat /etc/resolv.conf
# Generated by NetworkManager
search domain
# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
#
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com
Почему hostnamectl set-hostname
у меня все портится /etc/resolv.conf
?
решение1
Просто повторю в качестве официального ответа то, что MikeA говорит в комментариях к вопросу:
Это не обязательно dhcpclient, но может быть NetworkManager. Если вы укажете DNS1, DNS2 и DOMAIN в одном файле, он должен создать для вас правильный /etc/resolv/conf.
Если в этом файле нет DNS1, DNS2 и DOMAIN, вам необходимо вручную добавить правильные строки в ваш /etc/resolv.conf (т.е. search и nameserver) - MikeA
Я последовал его комментариям и добился успеха (подробнее см. ниже).
NetworkManager (CentOS 7 - текущий способ)
- Добавьте следующие строки в
/etc/sysconfig/network-scripts/ifcfg-<inf>
:DNS1=8.8.8.8 DNS2=8.8.4.4 DOMAIN=mydomain.com
- Перезагрузить
"статический" resolv.conf (старый способ)
PEERDNS=no
в/etc/sysconfig/network-scripts/ifcfg-<inf>
- Вручную добавьте правильные строки
/etc/resolv.conf
(например, поиск, сервер имен) (Это по сути то, как
Дополнительная информация и подробности
Я пришел к этому вопросу в результате сетевой ошибки.
Сервер — это виртуальная машина CentOS 7, работающая в среде KVM.
Установка ОС производилась через шаблон панели управления SolusVM.
После установки CentOS 7 я использовал один из двух способов изменить имя хоста, но не помню какой:
hostname myserver.mydomain.com
; или- Использована вкладка Hostname панели управления SolusVM
Я почти уверен, что я сделал только последнее, так как у меня есть init GIT-коммит, который показывает hostname
и resolv.conf
использует старое имя хоста, но hosts
имеет одну запись со статическим IP и новым именем хоста/доменом. Смотрите ниже различия.
Похоже, это изменение не сохранилось по той или иной причине: когда виртуальная машина была приостановлена через SolusVM (или менеджер KVM), что привело к перезагрузке, имя хоста было возвращено к исходному с помощью systemd
.
Затем я обнаружил, что в CentOS 7 имя хоста должно быть установлено с помощью hostnamectl set-hostname myserver.mydomain.com
. [1]
После этого и перезагрузки я обнаружил, что у меня нет разрешения DNS, что nslookup google.com
привело ping google.com
к ошибкам DNS / отсутствия разрешения.
Похоже, что любая конфигурация DNS, которая могла быть установлена через шаблон установки SolusVM CentOS 7, была стерта NetworkManager, хотя я не могу точно сказать, кто/что вызвало изменения, но из GIT определенно ясно, что изменения были внесены в /etc/hostname
, /etc/resolv.conf
и /etc/machine-info
сразу после запуска hostnamectl ...
команды (опять же, см. различия ниже).
Вот точные шаги, которые я выполнил для тех, кто оказался в похожей ситуации, для устранения неполадок или в качестве наглядного примера:
Цель: обновить hostname.domainname (fqdn)
(явно: myOLDhostname.myOLDdomain.com -> myNEWhostname.myNEWdomain.com)
Начальное состояние:
hostname
:myOLDhostname.myOLDdomain.com
resolv.conf
:
# Generated by NetworkManager search myOLDdomain.com nameserver 8.8.8.8 nameserver 8.8.4.4
machine-info
:/dev/null
(т.е. не существующий)
Выполнена команда
hostnamectl set-hostname myNEWhostname.myNEWdomain
- Перезагрузка. После перезагрузки я снова подключаюсь по ssh к виртуальной машине.
- Попробуйте
nslookup google.com
,ping google.com
, получите ошибки типа:ping: unknown host google.com
cat /etc/resolv.conf
теперь показывает:
# Generated by NetworkManager
search myNEWdomain.com
# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com
- После поиска я обнаружил,
/etc/sysconfig/network-scripts/ifcfg-eth0
что не имеет записейDNS1
,DNS1
, иDOMAIN
, это приводит к отсутствиюnameserver
записей в/etc/resolv.conf
. - Я добавляю следующее через
sudoedit /etc/sysconfig/network-scripts/ifcfg-eth0
:
DNS1=8.8.8.8
DNS2=8.8.4.4
DOMAIN=myNEWdomain.com
- Я снова запускаю команду
hostnamectl set-hostname myNEWhostname.myNEWdomain
- Однако у меня по-прежнему нет DNS,
nslookup
иping
я по-прежнему терплю неудачу. - Я пытаюсь перезапустить NetworkManager, как рекомендуется.
systemctl restart NetworkManager.service
- DNS все еще отсутствует, поэтому я запускаю команду
reboot
- После перезагрузки я снова вхожу через ssh и ВСЕ РАБОТАЕТ.
ping
Обаnslookp
раза все прошло успешно. - Теперь я проверяю
cat /etc/resolv.conf
и вижу включенныеnameserver
записи:
# Generated by NetworkManager
search myNEWdomain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
Для GIT я использую etckeeper
(по сути, управляет репозиторием GIT в ), и он показывает начальную конфигурацию, а также то, что никаких других изменений в файлах, связанных с сетью, до запуска команды /etc
не было ./etc/{hostname,resolv.conf,hosts}
hostnamectl
решение2
Вы можете указать Networkmanager не вносить изменения, resolv.conf
добавив nodns
фрагмент в основной раздел /etc/NetworkManager/conf.d/nodns.conf
:
[main]
dns=none
(не забудьте systemctl restart NetworkManager
)