새로운 CentOS 7을 설치했습니다. 설치 중에 centa.home.local을 호스트 이름으로 제공했습니다.
이제 소프트웨어 중 하나는 "host -v centa" 출력을 확인하여 서버에서 서버 IP 주소를 찾아야 합니다. 불행히도 IP 주소를 찾을 수 없습니다.
[user1@centa ~]$ ifconfig | grep inet
inet 192.168.101.128 netmask 255.255.255.0 broadcast 192.168.101.255
inet6 fe80::20c:29ff:fe00:f049 prefixlen 64 scopeid 0x20<link>
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
[user1@centa ~]$ hostname
centa.home.local
[user1@centa ~]$ hostname -d
home.local
[user1@centa ~]$ hostnamectl status
Static hostname: centa.home.local
Icon name: computer-vm
Chassis: vm
Machine ID: b2d53d8cc49e486f980d0f8461c415e2
Boot ID: e2dbffd536434cc4ba530a17e8b186d6
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
[user1@centa ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain
::1 localhost localhost.localdomain
192.168.101.128 centa.home.local centa
[user1@centa ~]$ cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain home.local
nameserver 192.168.101.2
[user1@centa ~]$ host -v centa
Trying "centa.localdomain"
Trying "centa.home.local"
Trying "centa"
Host centa not found: 3(NXDOMAIN)
Received 98 bytes from 192.168.101.2#53 in 136 ms
[user1@centa ~]$
답변1
유틸리티 host
는 DNS 조회를 수행하므로 를 사용하지 않습니다 /etc/hosts
. 이는 성공하려면 호스트가 일부 DNS 서버에 있어야 함을 의미합니다.
질문이 여기에 있으므로 이 DNS 레코드를 DNS 서버(192.168.101.2에 있는 레코드)에 추가하는 것은 선택 사항이 아니라고 가정합니다. 다행히도 NetworkManager를 사용하고 있기 때문에 실제로 이 문제를 꽤 쉽게 해결할 수 있습니다( 의 주석 처리된 줄에 표시됨 /etc/resolv.conf
).
해결책은 dnsmasq를 활성화하고 구성하는 것입니다. dnsmasq는 localhost에서 실행되는 DNS 전달자입니다. 재귀적 조회 및 캐시 결과와 같은 간단한 작업을 수행할 수 있습니다. NetworkManager 에는 /etc/hosts
dnsmasq 관리 기능이 내장되어 있습니다. 그래서 사용이 매우 간단합니다.
구성
/etc/hosts
dnsmasq에 대한 NetworkManager의 기본 구성이 이 기능을 활성화하지 않기 때문에 구성 부분에서는 dnsmasq에게 레코드를 제공하도록 지시하고 있습니다 .
/etc/NetworkManager/dnsmasq.d/hosts.conf
다음 내용으로 파일을 만듭니다.
addn-hosts=/etc/hosts
~할 수 있게 하다
섹션에 매개변수를 추가하면 활성화됩니다 dns = dnsmasq
. 예를 들어:[main]
/etc/NetworkManager/NetworkManager.conf
[main]
dns = dnsmasq
이 작업을 수행한 후 NetworkManager를 다시 시작합니다( 를 통해 systemctl restart NetworkManager.service
).
용법
이제 를 가리키는 항목이 /etc/resolv.conf
하나만 있음 을 알 수 있습니다 . 네임서버를 조회하는 데 사용되는 모든 도구는 이제 결국 dnsmasq를 누르고 에서 레코드를 수신해야 합니다 . 에 레코드가 없으면 조회가 업스트림 DNS 서버로 전달됩니다 . (192.168.101.2).nameserver
127.0.0.1
/etc/resolv.conf
/etc/hosts
/etc/hosts