Linux 호스트 이름은 어떻게 결정됩니까?


13

몇 년 동안 나는 리눅스를 메인 시스템, 특히 페도라로 사용해 왔으며, 일부 네트워크에 연결하고 IP가 될 때를 제외하고는 항상 호스트 이름이 "localhost"로 설정되어있는 것을 보았습니다. 오늘 나는 이해하기 어려운 다음과 같은 행동을 경험했습니다.

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

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


hosts:/etc/nsswitch.conf에 입력 한 내용은 무엇입니까 ?
cutrightjm

@cutrightjmhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
페도라

답변:


12

hostname실행에서 볼 수 있듯이 프로그램은 UNAME 콜을 수행합니다 :

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

로부터 UNAME 콜 맨 페이지 ,이 시스템 콜은 커널에서 다음 구조체를 검색 말한다 :

  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
           };

따라서 도메인 이름은 NIS / YP 시스템에서 나옵니다. 따라서 네트워크에 NIS / YP 서비스가있을 수 있습니다.이 서비스는 우분투 OS에서 설정 한 이름을 취소합니다.


5
사실이 아닙니다 hostname(1). 호스트 이름 설정 및 반환 방법을 설명하는 매뉴얼 페이지를 참조하십시오 . 이름의 유사성에도 불구하고 NIS / YP 도메인 이름은 리졸버가 반환 한 FQDN / DNS 도메인 이름과 관련이 없습니다. NIS / YP를 구성하지 않은 경우 NIS / YP 도메인 이름이 설정 해제됩니다.
bodgit

"nodename"이 관심있는 분야입니까? 유닉스 노스 탤지와 일치하여 IP 네트워크를 선택적이고 구현 된 것으로 간주합니다 :)
rackandboneman

5

리눅스 시스템에는 두 개의 독립적 (!) 개념의 호스트 이름이 있습니다.

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

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


3

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

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

라우터가 IP 임대가 등록 된 호스트 이름을 보내면 Fedora가 그 이름을 선택합니다.

불행히도 나는 대답을 뒷받침 할 증거 나 인용이 없으며, Windows와 함께 듀얼 부팅으로 Ubuntu를 설치하는 개인적인 경험으로 말할 수 있습니다. 당시 우분투는 설치 중에 Windows에서 사용한 호스트 이름과 동일한 호스트 이름을 설정하지 않았습니다. 네트워크에 이름이 이미 있다고 주장했기 때문입니다. 여기에 비슷한 일이있을 것 같습니다.

추측 한 사항이 현재 상황에도 적용되는지 확인하려면 라우터의 구성 인터페이스에서 IP 임대를 취소 한 다음 Fedora를 재부팅하십시오. 더 이상 Ubuntu의 호스트 이름을 사용하지 않으면 맞습니다.


실제로 DHCP 클라이언트가 서버에 호스트 이름을 보내거나 서버에서 호스트 이름을 읽을 수 있습니다. 호스트 이름이 "localhost"로 설정되어 있어도 많은 영향을 미치지는 않습니다. Linux DHCP 클라이언트 를 사용 하면 DHCP 서버 에서 호스트 이름 읽을 있지만이 지원이 항상 활성화 된 것은 아닙니다 ( 예 :) . 더 최근의 페도라가 이것을하는 것처럼 들린다.
sourcejedi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.