리눅스 host 명령어 사용법 - 가장 빠른 DNS 확인과 역방향 조회
이 명령어를 언제 쓰는가
"이 도메인 IP가 뭐였지" 정도의 확인에 dig의 20줄짜리 출력은 과하다. host는 같은 질문에 사람이 읽는 한 문장으로 답한다. 서버에 들어가 도메인 하나 확인하고 나올 때, 로그에 찍힌 IP의 정체를 볼 때 가장 손이 빨리 가는 도구다.
dig와 같은 BIND 도구 모음에 들어 있어서 설치 조건도 같다. Ubuntu/Debian은 dnsutils, RHEL/Rocky는 bind-utils다. dig가 있으면 host도 있다고 보면 된다.
중요한 차이 하나. host는 조회에 실패하면 0이 아닌 종료 코드를 반환한다. nslookup과 달리 셸 스크립트의 조건문에 그대로 쓸 수 있다.
기본 형식
host [-옵션] 이름 [네임서버]
- 이름 — 도메인이거나 IP 주소다. IP를 주면 알아서 역방향(PTR) 조회를 한다.
- 네임서버 — 물어볼 서버를 마지막에 붙인다. 생략하면
/etc/resolv.conf의 설정을 따른다.
자주 쓰는 옵션
| 옵션 | 의미 | 예시 |
|---|---|---|
-t | 레코드 타입 지정 | host -t MX google.com |
-a | 모든 레코드를 dig 형식에 가깝게 자세히 표시 | host -a devin.kr |
-v | 자세한 출력. 응답 섹션 구조를 보여준다 | host -v devin.kr |
-4 / -6 | IPv4 / IPv6 전송만 사용 | host -4 devin.kr |
-W | 응답 대기 시간(초) | host -W 2 devin.kr |
-R | 재시도 횟수 | host -W 2 -R 1 devin.kr |
-T | UDP 대신 TCP로 질의 | host -T devin.kr |
실전 예제
1. 도메인의 기본 정보를 한 번에 본다. 옵션 없이 치면 A, AAAA, MX를 묶어서 보여준다.
host devin.kr
devin.kr has address 182.222.121.235
devin.kr mail is handled by 10 aspmx.daum.net.
devin.kr mail is handled by 20 alt.aspmx.daum.net.
IP와 메일 경로를 동시에 확인할 수 있어서 초기 점검에 효율이 좋다.
2. 로그에 찍힌 IP가 누구인지 확인한다. 인자에 IP만 넣으면 된다.
host 8.8.8.8
8.8.8.8.in-addr.arpa domain name pointer dns.google.
3. 스크립트에서 DNS 정상 여부를 판정한다. 종료 코드가 정직하다는 점을 이용한다.
if host -W 2 -R 1 devin.kr > /dev/null 2>&1; then
echo "DNS OK"
else
echo "DNS FAIL" >&2
exit 1
fi
감시 스크립트에서 -W와 -R을 반드시 붙인다. 안 붙이면 DNS가 죽었을 때 기본 재시도 때문에 수십 초를 붙잡힌다.
4. 특정 네임서버가 어떤 답을 주는지 비교한다. 레코드 변경 후 전파 상태를 볼 때 쓴다.
host devin.kr 8.8.8.8
host devin.kr 1.1.1.1
두 결과가 다르면 아직 캐시가 남은 것이고, 둘 다 옛 값이면 권한 서버 설정을 다시 봐야 한다.
5. 서버 목록의 이름을 한꺼번에 IP로 바꾼다. 인벤토리 정리나 방화벽 정책 작성에 쓴다.
while read -r h; do
ip=$(host -t A "$h" 2>/dev/null | awk '/has address/ {print $NF; exit}')
echo "$h ${ip:-NXDOMAIN}"
done < hosts.txt
함정과 주의점
host도 /etc/hosts를 보지 않는다. DNS에만 묻는다. 그래서 hosts 파일로 강제 매핑해둔 서버에서는 host의 결과와 애플리케이션의 실제 접속 대상이 다를 수 있다. 애플리케이션 관점의 이름 해석을 보려면 getent hosts 도메인을 쓴다. 이쪽은 nsswitch 순서를 그대로 따른다.
CNAME이 걸려 있으면 출력이 두 줄이 된다. a.example.com is an alias for b.example.com. 다음에 실제 주소가 나온다. 스크립트에서 첫 줄만 잘라 쓰면 IP 대신 별칭 이름을 집는 사고가 난다. 위 예제처럼 has address 줄을 골라 잡아야 한다.
-a는 이제 기대만큼 안 나온다. 내부적으로 ANY 질의를 보내는데, DNS 증폭 공격 대응으로 대부분의 권한 서버가 축약 응답만 준다. 레코드를 훑어야 하면 -t로 타입별로 조회한다.
검색 도메인이 자동으로 붙는다. /etc/resolv.conf에 search가 설정돼 있으면 host web01이 web01.사내도메인으로 확장돼 조회된다. 의도한 이름 그대로 조회하려면 끝에 점을 찍어 host devin.kr. 처럼 FQDN으로 준다.
함께 보면 좋은 명령어
- dig — TTL, 상태 코드, 위임 추적이 필요한 순간에 쓴다.
- nslookup — bind-utils가 없는 환경에서의 대안.
- ping — 이름이 풀린 다음 그 IP까지 실제로 닿는지 본다.