![호스트 이름을 알아두세요](https://linux55.com/image/58719/%ED%98%B8%EC%8A%A4%ED%8A%B8%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EC%95%8C%EC%95%84%EB%91%90%EC%84%B8%EC%9A%94.png)
나는 최근 VPS에 MTA를 설정했고 그것을 구성하는 동안 Unix의 호스트 이름 개념과 구현에 대해 매우 혼란스럽다는 것을 깨달았습니다.
저는 DNS에 대한 심층적인 지식을 갖고 있으며 이전 파일에 대해 잘 알고 있습니다 hosts
. 그러나 저는 항상 인터넷에 직접 연결된 서버를 사용했기 때문에 전통적인 내부 네트워킹에 대한 경험이 없습니다.
이 주제로 검색해 보면 상충되는 설명이 많아서 우선 CPU와 완전히 독립된 호스트 이름(단순한 이름이 아닌 복잡하고 다층적인 호스트 이름)에 대한 철저한 소개를 요청하고 싶습니다. 이름. DNS와 인터넷,그리고 그 다음에DNS와 어떤 관련이 있는지 설명하고 "정규화된 도메인 이름"(DNS 등에서와 동일)이라는 혼란스러운 용어를 설명하십시오.
또한 일반적인 Unix 시스템(또는 적어도 Debian/Ubuntu)에서 호스트 이름 관리에 어떤 파일과 명령이 역할을 하는지 알고 싶습니다. 구체적으로 다음과 같습니다.
/etc/hostname
(간단한 이름인가요, 복잡한 이름인가요? A 레코드에 있는 이름인가요?) 및 올바른 설정- 호스트 이름을 설정하고 올바르게 설정하는 역할에 대해
/etc/hosts
(단순히 해결용이 아닌? 이름과 가리킬 위치는 무엇입니까?) - 다른 파일
- 재부팅하지 않고 호스트 이름에 변경 사항을 적용하려면 어떻게 해야 합니까?
주제를 단순화하려는 답변보다 더 자세한 답변이 선호됩니다. 왜냐하면 후자 유형의 답변이 많고 여기서 혼란이 오기 때문입니다.
답변1
slm의 의견에 따르면 시스템 호스트 이름은 커널에 의해 메모리에 유지되며 사용자 공간 소프트웨어가 이를 얻는 올바른 방법은 gethostname()
시스템 호출을 이용하는 것입니다.
기본 호스트 이름은 실제로 (리눅스) 커널로 컴파일되므로 직접 사용하는 경우 그렇게 설정할 수 있습니다. 배포 커널은 일반적으로 사용하는 것 같습니다 localhost
(비어 있을 수도 있음).
대부분의 사람들은 단지 호스트 이름을 설정하기 위해 커널을 컴파일하고 싶지 않기 때문에 이를 설정하는 시스템 호출도 있습니다. sethostname()
이는 다음과 같은 명령에 사용됩니다 hostname
. 일반적으로 시작하는 동안 init 서비스는 이 작업을 수행하기 위해 from 값을 사용합니다 /etc/hostname
. 그러나 이는 필수 사항은 아닙니다.
호스트 이름 설정에는 제한이 없지만 호스트 이름과 동일하지는 않습니다.정규화된 도메인 이름(정규화된 도메인 이름). FQDN은 호스트 이름과 도메인 이름을 더한 것입니다. 다음 방법을 사용하여 도메인 이름을 설정하는 경우 호스트 이름에 점이 없어야 합니다.
호스트 이름을 설정하고 올바르게 설정하는 데 /etc/hosts의 역할은 무엇입니까? (단순히 확인하는 것이 아니라 이름은 무엇이며 어디를 가리킵니까?)
이는 DNS 확인에 사용되지만 Patrick은 이를 사용하여 도메인 이름 작동 방식을 설정하는 방법을 설명합니다.여기. 이는 호스트 이름을 조회한 다음 IP 주소를 사용하여 역방향 조회를 수행하는 것입니다. 단지 설정하는 것보다 약간 복잡하고 혼란스러울 수 있지만 hostname --fqdn
더 일반적입니다.
domainname
이렇게 해도 return 이 방지되지는 않지만 (none)
어쩌면 중요하지 않을 수도 있습니다.
답변2
먼저, 시스템이 부팅될 때 시스템의 호스트 이름이 초기화됩니다. 호스트 이름은 커널과 함께 컴파일되지 않습니다.
Debian에서 /etc/init.d/hostname.sh
시작 스크립트의 일부로 실행됩니다 . 스크립트는 호스트 이름을 읽고 명령을 /etc/hostname
사용하여 hostname
설정합니다.
시스템의 호스트 이름은 자신을 식별하는 데에만 사용됩니다. 시스템이 네트워크에 연결되어 있지 않더라도 주로 로깅 및 기타 목적을 위해 시스템 자체에 이름을 지정해야 합니다. 예를 들어 모든 로그 메시지에는 호스트 이름이 있습니다. 이것은 단지 자신을 식별하기 위한 것입니다.
/etc/hosts
호스트 이름은 그것과 전혀 관련이 없습니다 /etc/hostname
.
/etc/hostname
만 포함 해야합니다CPU 이름FQDN 대신 부분.
다음을 통해 차이점을 알 수 있습니다.
$ hostname
kannan
$ hostname -d
oongil.com
$ hostname -f
kannan.oongil.com
이제 FQDN 부분이 나옵니다.
FQDN은 시스템이 대규모 네트워크의 일부이고 자체를 고유하게 식별해야 하는 경우 주로 필요합니다.
/etc/hosts
파일에는 여기에 매핑된 시스템 호스트 이름 및 FQDN의 조회 테이블이 포함되어 있습니다.
127.0.1.1 kannan.oongil.com kannan
Debian 기반 시스템에서 127.0.1.1은 시스템 FQDN에 매핑됩니다. 따라서 hostname -fqdn
호출되면 시스템은 /etc/hosts
이 정보를 얻기 위해 쿼리합니다.
내용의 순서는 /etc/hosts
매우 중요합니다.
FQDN을 쿼리 하지 않으려면 /etc/hosts
에서 순서를 변경할 수 있습니다 /etc/nsswitch.conf
.
내 구성은 다음과 같습니다. 여기서 /etc/hosts
먼저 쿼리한 다음 DNS를 쿼리합니다.
호스트: 파일 mdns4_minimal [NOTFOUND=return] dns mdns4
더 알고 싶으시면CPU 이름그리고정규화된 도메인 이름이것을 참조하세요데비안 메일 스레드.