Co decyduje o nazwie hosta Linux?

13

W ciągu kilku lat korzystałem z Linuksa jako mojego głównego systemu, zwłaszcza Fedory, zawsze widziałem, że moja nazwa hosta jest ustawiona na „localhost”, z wyjątkiem przypadków, gdy łączę się z niektórymi sieciami i staje się moim adresem IP. Dzisiaj jednak doświadczyłem następującego zachowania, z którym trudno mi zrozumieć.

Instaluję instalację Ubuntu na innej partycji mojego laptopa, ustawiając nazwę komputera / nazwę hosta podczas instalacji Ubuntu. Jednak po ponownym uruchomieniu w Fedorze Fedora zaktualizowała moją nazwę hosta do nazwy, którą ustawiłem w instalacji Ubuntu.

Zawsze myślałem, że nazwa hosta została skonfigurowana i zapisana na partycji instalacji dystrybucji i rzeczywiście zawartość pliku / etc / hostname w Fedorze nadal brzmi „localhost.localdomain”, ale uruchomienie hostnamepolecenia pokazuje nową nazwę hosta. Obie instalacje współużytkują partycję rozruchową efi, ale poza tym są dyskretne. Zastanawiam się, skąd i dlaczego instalacja Fedory czyta nową nazwę hosta?

fedora
źródło
Jaki jest twój wpis hosts:w /etc/nsswitch.conf?
cutrightjm
@cutrightjmhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
fedora
1
Duplikat krzyżowy: security.stackexchange.com/questions/158517/…
Dmitrij Grigoriew

Odpowiedzi:

12

hostnameProgram wykonuje uname syscall, jak widać z systemem:

strace hostname
...
uname({sysname="Linux", nodename="my.hostname.com", ...}) = 0
...

Ze strony man uname syscall mówi, że syscall pobiera z jądra następującą strukturę:

  struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[];    /* Operating system release (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */
           #endif
           };

Więc nazwa domeny pochodzi od systemu NIS / YP, jeśli uważamy ten komentarz. Jest więc bardziej niż prawdopodobne, że w Twojej sieci może znajdować się usługa NIS / YP, która pobiera ci nazwę ustawioną przez system operacyjny Ubuntu.

einonm
źródło
5
To nie jest prawda, zobacz hostname(1)stronę podręcznika, która wyjaśnia, w jaki sposób nazwa hosta jest ustawiana i zwracana. Pomimo podobieństwa nazwy, nazwa domeny NIS / YP nie ma nic wspólnego z nazwą domeny FQDN / DNS zwracaną przez przelicznik. Jeśli nie skonfigurowałeś NIS / YP, nazwa domeny NIS / YP zostanie rozbrojona.
bodgit
Czy „nazwa węzła” to pole, na którym Ci zależy? Byłoby zgodne z nostalgią za Unixem, aby nadal uważać sieci IP za opcjonalne i zdefiniowane pod względem implementacji :)
rackandboneman
5

Istnieją dwie niezależne (!) Koncepcje nazwy hosta w systemie Linux.

Jest to, co jądro uważa za nazwę lokalnego hosta (obsługiwaną przez wywołania systemowe gethostname / uname i sethostname) niezależnie od łączności sieciowej - mechanizmy te nadal istniałyby, gdybyś zbudował jądro bez możliwości sieci TCP / IP.

Istnieje co najmniej jedna nazwa hosta, która jest faktycznie podłączona do TCP / IP (lub innego stosu sieciowego - nie wszystkie sieci na świecie to adresy IP!), Które host ma, i są one obsługiwane w przestrzeni użytkownika przez funkcje biblioteki tłumaczącej (część libc), który określi taką nazwę, interpretując źródła (lokalny plik / etc / hosts, DNS, NIS ....) zgodnie z regułami podanymi w odpowiednich plikach konfiguracyjnych (/etc/nsswitch.conf, / etc /host.conf itp ...).

rackandboneman
źródło
3

Prawdopodobnie podczas instalacji Ubuntu łączył się z Internetem przez router domowy. W tym celu zgłosił routerowi nazwę hosta i uzyskał tymczasowy lokalny adres IP.

Kiedy teraz uruchomisz ponownie Fedorę, połączy się ona z tym samym routerem, aby uzyskać adres IP, ale stara dzierżawa utworzona dla Ubuntu jest nadal ważna. Ponieważ jest to ta sama maszyna z tą samą kartą sieciową i tym samym sprzętowym adresem MAC, ponownie wykorzysta tę samą dzierżawę.

Domyślam się, że router wysyła nazwę hosta, na którym zarejestrowano dzierżawę adresu IP, i Fedora to odbiera.

Niestety nie mam dowodów ani cytatów na poparcie mojej odpowiedzi, mogę po prostu porozmawiać z osobistym doświadczeniem instalowania Ubuntu w trybie podwójnego rozruchu w systemie Windows. W tym czasie Ubuntu odmówił ustawienia tej samej nazwy hosta podczas instalacji, której użyłem w systemie Windows, ponieważ twierdził, że nazwa była już obecna w sieci. Prawdopodobnie dzieje się tutaj coś podobnego.

Aby sprawdzić, czy to, co myślę, dotyczy również twojej sytuacji, spróbuj odwołać dzierżawę adresu IP w interfejsie konfiguracyjnym routera, a następnie zrestartuj Fedorę. Jeśli nie wymaga już nazwy hosta Ubuntu, powinienem mieć rację.

Bajt Dowódca
źródło
Klient DHCP może rzeczywiście wysłać nazwę hosta na serwer lub odczytać nazwę hosta z serwera. Prawie wszystko robi pierwsze (chociaż kiedy nazwa hosta jest ustawiona na „localhost”, raczej nie będzie to miało większego efektu :). Odczytywanie nazwy hosta z serwera DHCP jest możliwe w przypadku klientów DHCP z systemem Linux, ale rozumiem, że ta obsługa nie zawsze była włączona ( np .). Ciekawe, że wydaje się, że robi to nowsza Fedora.
sourcejedi