Jak ustawić w pełni kwalifikowaną nazwę hosta w CentOS 7.0?


19

Jak ustawić w pełni kwalifikowaną nazwę hosta w CentOS 7.0?

Widziałem kilka postów online, na przykład używając:

$ sudo hostnamectl set-hostname nodename.domainname

Jednak uruchomienie nazwy domeny nic nie zwraca:

$ domainname
(none)

Również:

$ hostname
nodename.domainname

Jednak,

$ hostname -f
hostname: Name or service not known
$ hostname -d
hostname: Name or service not known

Niektóre dane wyjściowe debugowania:

$ cat /etc/hostname
nodename.domainname

$ grep ^hosts /etc/nsswitch.conf
hosts:      files dns

Odpowiedzi:


30

Aby ustawić nazwę hosta , używaj hostnamectl, ale tylko z nazwą hosta, tak jak poniżej:

hostnamectl set-hostname nodename


Aby ustawić plik edycji nazwy domeny (DNS)/etc/hosts i upewnić się, że:

  1. Jest to linia <machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>tam
  2. NIE ma innych linii z <some IP> <hostname>, i obejmuje to linie z adresami 127.0.0.1i ::1(IPv6).

Zauważ, że jeśli nie używasz NIS, (none)jest to poprawne wyjście podczas uruchamiania domainnamepolecenia.

Aby sprawdzić, czy nazwa domeny DNS jest ustawiona poprawnie, użyj dnsdomainnamepolecenia i sprawdź dane wyjściowe hostnamevs hostname -f(FQDN).


NIS vs. domena DNS

Ten problem wprawił mnie w zakłopotanie, kiedy po raz pierwszy go spotkałem. Wygląda na to, że domainnamepolecenie wyprzedza popularność Internetu. Zamiast nazwy domeny DNS wyświetla lub ustawia systemową nazwę NIS (Network Information Service), czyli YP (Yellow Pages) (grupę komputerów, które mają usługi świadczone przez główny serwer NIS). To polecenie po prostu wyświetla nazwę zwróconą przez getdomainname(2)standardową funkcję biblioteki. ( nisdomainnamei ypdomainnamesą alternatywnymi nazwami dla tego polecenia).

Wyświetl nazwę domeny FQDN lub DNS

Aby sprawdzić nazwę domeny DNS (Internet), należy uruchomić dnsdomainnamepolecenie lub hostnamez -d, --domainopcjami. (Pamiętaj, że dnsdomainnamepolecenia nie można użyć do ustawienia nazwy domeny DNS - służy tylko do jej wyświetlenia).

Aby wyświetlić FQDN (w pełni kwalifikowaną nazwę domeny) systemu, uruchom hostnamez -f, --fqdn, --longopcjami (podobnie, tego polecenia nie można użyć do ustawienia części nazwy domeny).

Powyższe polecenia używają systemu rozpoznawania nazw (zaimplementowanego przez gethostbyname(3)funkcję ze standardowej biblioteki, określonej przez POSIX) do określenia nazwy domeny DNS i nazwy FQDN.

Rozdzielczość nazw

W nowoczesnych systemach operacyjnych, takich jak RHEL 7, hostswpis /etc/nsswitch.confsłuży do rozpoznawania nazw hostów. W komputerze CentOS 7 ta linia jest skonfigurowana jako (domyślnie dla CentOS 7):

hosts:      files dns

Oznacza to, że gdy funkcje resolvera wyszukują nazwy hostów lub adresy IP, najpierw sprawdzają wpis w /etc/hosts pliku, a następnie próbują serwerów DNS wymienionych w /etc/resolv.conf.

Podczas uruchamiania w hostname -fcelu uzyskania nazwy FQDN hosta funkcje rozpoznawania nazw próbują uzyskać nazwę FQDN dla nazwy hosta systemu. Jeśli hosta nie ma na liście w /etc/hostspliku lub przez odpowiedni serwer DNS, próba kończy się niepowodzeniem i hostnamezgłasza to Name or service not known.

Po hostname -duruchomieniu w celu uzyskania nazwy domeny wykonuje się te same operacje, a część nazwy domeny określa się, usuwając część nazwy hosta i pierwszą kropkę z nazwy FQDN.

Skonfiguruj nazwę domeny

1. Zaktualizuj odpowiedni serwer nazw DNS

W moim przypadku dodałem już wpis dla mojej nowej maszyny CentOS 7 na serwerze DNS dla mojej lokalnej sieci LAN, więc gdy nazwa FQDN nie została znaleziona w /etc/hostspliku, gdy działałem hostnamez opcją -dlub -f, lokalne usługi DNS były w stanie w pełni rozwiąż nazwę FQDN mojej nowej nazwy hosta.

2. Użyj /etc/hostspliku

Jeśli serwer DNS nie został skonfigurowany, w /etc/hostspliku można podać w pełni kwalifikowaną nazwę domeny . Najczęstszym sposobem na to jest określenie podstawowego adresu IP systemu, a następnie jego FQDN i krótkiej nazwy hosta. Na przykład,

172.22.0.9  nodename.domainname nodename

Fragment hostnamestrony podręcznika man

Nie możesz zmienić nazwy FQDN za pomocą hostnamelub dnsdomainname.

Zalecaną metodą ustawiania nazwy FQDN jest ustawienie nazwy hosta jako aliasu dla w pełni kwalifikowanej nazwy za pomocą /etc/hosts,DNS lub NIS. Na przykład, jeśli nazwa hosta to „ursula”, może istnieć wiersz, w /etc/hostsktórym brzmi:

27.0.1.1    ursula.example.com ursula

Technicznie: FQDN to nazwa zwracana przez getaddrinfo (3) dla nazwy hosta zwróconej przez gethostname (2). Nazwa domeny DNS to część po pierwszej kropce.

Dlatego zależy od konfiguracji resolwera (zwykle w /etc/host.conf), w jaki sposób można go zmienić. Zwykle plik hosts jest analizowany przed DNS lub NIS, więc najczęściej zmienia się nazwę FQDN /etc/hosts.


Dziękuję za odpowiedź. Zaktualizowałem pytanie - niestety hostname -fpolecenie nie działa w moim CentOS vm.
Chris Snow

@SHC Czy możesz edytować swoje pytanie, aby zawierało także treść /etc/hostnamei wynik grep ^hosts: /etc/nsswitch.conf? Nie wiem zbyt wiele o Network Manager ale zauważyłem również, że mój /etc/NetworkManager/NetworkManager.confzawiera linię w swoim [keyfile]dziale: hostname=<nodename>.
Anthony G - sprawiedliwość dla Moniki

1
@ SHC Od tego czasu badam ten problem i radykalnie poprawiłem moją odpowiedź; powinien teraz bardziej kompleksowo odpowiedzieć na twoje pytanie.
Anthony G - sprawiedliwość dla Moniki

Doprowadzenie do tej odpowiedzi jest niezgodne z ciałem. hostnamectl set-hostname nodename.domainnameczy nie ustawić nazwę domeny DNS (i nie jest to, że ustawia nazwę domeny NIS albo).
sourcejedi

@sourcejedi W tej chwili nie mam czasu, ale postaram się wyjaśnić moją odpowiedź, kiedy będę miał okazję.
Anthony G - sprawiedliwość dla Moniki

1

Na Centos7 użycie nmtui do ustawienia nazwy hosta i podanie formatu nodename.domainname / FQDN daje spójne wyniki. nazwa hosta [d / f / s] zapewnia prawidłowe oczekiwane wyniki. Nie jest przechowywany w /etc/resolv.conf OR / etc / hosts. Ale nazwa FQDN jest zapisywana w / etc / hostname jako pojedyncza pozycja.


0

Dla mnie plik / etc / hostname zawierał FQDN zamiast nazwy hosta (np. Nazwa hosta zamiast nazwa hosta.przyklad.com). Po usunięciu domeny z nazwy hosta w / etc / hostname polecenie „hostname -f” działało normalnie.

Myślę, że zostało to wprowadzone podczas instalacji maszyny Wirtualnej CentOS 7. Powinienem był wpisać tylko nazwę hosta, a nie pełną nazwę domeny.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.