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

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

저는 몇 년 동안 Linux, 특히 Fedora를 기본 시스템으로 사용해 왔으며 특정 네트워크에 연결하여 IP가 되는 경우를 제외하고는 항상 호스트 이름이 "localhost"로 설정되어 있습니다. 오늘 나는 다음과 같은 행동을 경험했지만 이해할 수 없습니다.

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

나는 항상 호스트 이름이 배포판이 설치된 파티션에 구성되고 저장되어 있다고 생각했습니다. 실제로 Fedora의 /etc/hostname 내용은 여전히 ​​"localhost.localdomain"이지만 명령을 실행하면 hostname새 호스트 이름이 표시됩니다. 두 설치는 efi 부팅 파티션을 공유하지만 그 외에는 독립적입니다. Fedora 설치가 새 호스트 이름을 읽는 위치와 이유를 알고 싶습니다.

답변1

프로그램은 hostnameuname 시스템 호출을 실행했는데, 이는 작업에서 볼 수 있습니다.

strace hostname
...

e="Linux", nodename="my.hostname.com", ...}) = 0 ... uname 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/host.conf 등...)에서 구성한 내용을 기반으로 합니다.

답변3

Ubuntu는 설치 중에 홈 라우터를 통해 인터넷에 연결될 수 있습니다. 이를 위해 호스트 이름을 라우터에 보고하고 임시 로컬 IP를 얻습니다.

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

내 생각엔 라우터가 IP 임대를 등록하기 위해 호스트 이름을 보내고 Fedora는 해당 호스트 이름을 받는 것 같습니다.

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

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

관련 정보