Linux 호스트 이름은 어떻게 결정되나요?

Linux 호스트 이름은 어떻게 결정되나요?

몇 년 동안 저는 Linux를 주요 시스템, 특히 Fedora로 사용해 왔습니다. 일부 네트워크에 연결하여 IP가 되는 경우를 제외하고는 항상 호스트 이름이 "localhost"로 설정되어 있었습니다. 오늘 나는 이해하는 데 어려움을 겪고 있는 다음과 같은 동작을 경험했습니다.

내 노트북의 다른 파티션에 Ubuntu 설치를 설정하고 Ubuntu 설치 중에 컴퓨터 이름/호스트 이름을 설정했습니다. 하지만 Fedora로 다시 재부팅했을 때 Fedora는 호스트 이름을 Ubuntu 설치 시 설정한 이름으로 업데이트했습니다.

나는 항상 호스트 이름이 배포판 설치 파티션에 구성되고 저장되어 있다고 생각했으며 실제로 Fedora의 /etc/hostname 내용은 여전히 ​​"localhost.localdomain"을 읽지만 명령을 실행하면 hostname새 호스트 이름이 표시됩니다. 두 설치 모두 efi 부팅 파티션을 공유하지만 그 외에는 별개입니다. Fedora 설치가 새 호스트 이름을 읽는 위치와 이유가 무엇인지 궁금합니다.

답변1

프로그램 hostname은 다음 실행에서 볼 수 있듯이 uname syscall을 수행합니다.

strace hostname
...

e="Linux", nodename="my.hostname.com", ...}) = 0 ... uname syscall 매뉴얼 페이지에는 syscall이 커널에서 다음 구조체를 검색한다고 나와 있습니다.

  struct utsname {
               char sysname[];    /* Operating system name (e. */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[ystem 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
           };

따라서 주석을 믿는다면 도메인 이름은 NISystem에서 나옵니다. 따라서 아마도 귀하의 Nhat에 YP 서비스가 우분투 OS에서 설정한 이름을 귀하에게 다시 전송하고 있을 수 있습니다.

답변2

Linux 시스템에는 호스트 이름에 대해 두 가지 독립적(!) 개념이 있습니다.

네트워크 연결과 관계없이 커널이 로컬 호스트 이름(gethostname/uname 및 sethostname 시스템 호출에 의해 처리됨)을 고려하는 모든 것이 있습니다. 이러한 메커니즘은 TCP/IP 네트워킹 기능이 없는 커널을 구축한 경우에도 여전히 존재합니다.

실제로 호스트가 가지고 있는 TCP/IP(또는 다른 네트워크 스택 - 전 세계의 모든 네트워킹이 IP는 아닙니다!) 주소에 연결된 하나 이상의 호스트 이름이 있으며, 이는 확인자 라이브러리 기능(의 일부)에 의해 사용자 공간에서 처리됩니다. libc)는 적절한 구성 파일(/etc/nsswitch.conf, /etc)에 제공한 규칙에 따라 소스(로컬 /etc/hosts 파일, DNS, NIS....)를 해석하여 이러한 이름을 결정합니다. /host.conf 등...).

답변3

아마도 Ubuntu는 설치 중에 홈 라우터를 통해 인터넷에 연결되었을 것입니다. 이를 위해 호스트 이름을 라우터에 보고하고 임시 로컬 IP를 얻었습니다.

이제 Fedora로 재부팅하면 동일한 라우터에 연결하여 IP 주소를 얻지만 Ubuntu용으로 생성된 이전 임대는 여전히 유효합니다. 동일한 네트워크 카드와 동일한 하드웨어 MAC 주소를 가진 동일한 시스템이므로 동일한 임대를 재사용합니다.

내 생각엔 라우터가 IP 임대가 등록된 호스트 이름을 보내고 Fedora가 이를 선택하는 것 같습니다.

불행히도 내 대답을 뒷받침할 증거나 인용이 없습니다. Windows를 사용한 이중 부팅으로 Ubuntu를 설치한 개인적인 경험을 이야기할 수 있습니다. 당시 Ubuntu는 설치 중에 Windows에서 사용한 것과 동일한 호스트 이름 설정을 거부했습니다. 이름이 이미 네트워크에 존재한다고 주장했기 때문입니다. 아마도 여기서도 비슷한 일이 일어나고 있을 것입니다.

제가 추측한 내용이 귀하의 상황에도 적용되는지 확인하려면 라우터의 구성 인터페이스에서 IP 임대를 취소한 다음 Fedora를 재부팅해 보십시오. 더 이상 Ubuntu의 호스트 이름을 사용하지 않는다면 제가 옳을 것입니다.

관련 정보