[Linux Network] Avahi를 활용하여 간단하게 Host, IP 알아내기

blog post 

 

리눅스를 기반으로 네트워크를 구성할 때 상대 장치의 호스트, IP를 알아야 합니다. 대부분 리눅스를 기반으로 네트워크를 구성할 때 관련 장치 정보를 /etc/hosts에 저장하여 사용하곤 하죠.

 

하지만 avahi 라는 도구를 사용하면 상대의 정보를 사전에 미리 시스템에 셋팅해 두지 않아도 자동으로 호스트와 ip를 리졸브(resolve) 할 수 있습니다. 뿐만 아니라 같은 도메인에 있는 다른 장치 정보까지 스캔할 수 있습니다.

 

이번 포스트에서는 간단하게 avahi에 대해 알아보고 호스트와 ip 정보를 리졸브 하는 방법에 대해 알아보도록 하겠습니다.

 

 

Avahi란?

 

 

Avahi는 흔히 zeroconf 라 불리는 Zero-Configuration Networking 기술을 기반으로 개발된 네임 서비스 디스커버리 도구입니다. mDNS(멀티캐스트 DNS)/DNS-SD 기술을 기반으로 개발된 리눅스 버전 zeroconf 도구이며, 우리가 잘 알고 있는 애플의 Bonjour 역시 zeroconf 기반 디스커버리 도구입니다.

 

리눅스에서 대표적으로 NFS, SMB, Vsftpd 같은 도구들이 avahi 를 활용하여 동작하는 것으로 잘 알려져 있습니다.

 

 

Avahi 활용

 

 

우선 리눅스에서 avahi 를 사용하기 위해서는 avahi-daemon과 도구를 설치해야 합니다. CentOS 기준으로 아래와 같이 관련 패키지를 설치해 줍니다.

 

[root@Compute0 ~]# yum install avahi avahi-tools

 

avahi 데몬을 실행해 줍니다

 

[root@localhost ~]# systemctl start avahi-daemon

 


 

 

 

호스트 명 혹은 ip 정보로 상대 장치 정보 얻기 

 

 

현재 통신하고자 하는 상대방과 ip가 아닌 호스트 명으로 통신하고자 하는 경우, 보통 /etc/hosts에 사전에 해당 호스트의 ip 주소를 사전에 셋팅하고 통신합니다 (물론 아닌 경우도 있지만). 주로 상대방의 호스트명을 통해 ip 주소를 얻고자 하는 경우에 많이 씁니다. 하지만 avahi-resolve 명령을 사용하면 이러한 사전 작업 없이 필요할 때 마다 해당 호스트의 ip 주소를 리졸브하여 ip를 얻을 수 있습니다.

 

다만 조건은, 상대 장치도 zeroconf를 지원하는 상황이어야 합니다. 따라서 상대 장치에서도 avahi 데몬이 실행 중에 있어야 합니다. (리눅스 기반 장치가 서로 통신한다는 가정하에 설명합니다) 

 

"Compute0" 라는 장치가 "testlinux" 라는 장치의 ip 명을 얻고자 하는 경우를 예로 들어보겠습니다. 물론 사전에 서로에 대한 호스트 정보는 설정되어 있지 않은 상태입니다.

 

우선 Compute0, testlinux 모두 avahi-daemon을 실행해 줍니다.

 

# Compute0 장치에서
[root@Compute0 ~]# systemctl start avahi-daemon

# testlinux 장치에서
[root@testlinux ~]# systemctl start avahi-daemon

 

 

 아래와 같이 avahi-resolve 명령을 통해 compute 노드에서 testlinux 탐색을 시도해 봅니다. 시도 결과, ip 주소를 리졸브 하는 것을 확인할 수 있습니다. 같은 도메인 영역임을 표시하기 위해 뒤에 .local 을 붙여야 합니다.

 

  • -4, -6: ipv4, ipv6.  
  • -n 혹은 --name: 도메인 명 

 

[root@Compute0 ~]# avahi-resolve -4 -n testlinux.local
testlinux.local 192.168.0.5
[root@Compute0 ~]# avahi-resolve -6 -n testlinux.local
testlinux.local fe80::20c:29ff:fe3b:4e9e

 

 반대로 ip를 가지고 상대방 장치의 호스트 명을 알아낼 수도 있습니다.

  • -a 혹은 --address: ip주소 
[root@Compute0 ~]# avahi-resolve -4 -a 192.168.0.5
192.168.0.5     testlinux.local
[root@Compute0 ~]# avahi-resolve -6 -a fe80::20c:29ff:fe3b:4e9e
fe80::20c:29ff:fe3b:4e9e        testlinux.local

 

 

 

TAGS.

Comments