Search

IP 주소말고 이름을 쓰자 - mDNS

요약
IP 주소를 외우는 건 귀찮은 일이다
게시일
2020/11/25
태그
Linux
1 more property
남의 컴퓨터, 서버, 프린터에 연결할 때 IP 주소를 알아야 하는 건 정말정말 귀찮고 까먹기도 쉽다. 이럴 때 쓰라고 있는게 mDNS... (이 기술이 뭐다... 하는 것은 귀찮으니 설명 생략)
mDNS는 Zeroconf, 사람이 일일이 설정하지 않아도 알아서 동작하는 기술의 하나다. 기술적인 내용이 궁금하면 다음 글을 읽어보자. • Zero-configuration networking, WikipediaMulticast DNS, WikipediaAvahi, WikipediaBonjour, Wikipedia
mDNS가 유용한 상황을 꼽자면 이런 것이다.
네트워크에 연결하면 프린터가 자동으로 연결된다.
DHCP 환경에서 서버에 접근할 때 서버의 이름만으로 접근할 수 있다.
macOS는 Bonjour라는 이름으로 mDNS 서비스가 동작한다. Linux는 Avahi가 mDNS 기능을 제공한다.

Linux에 Avahi 설치하기

RHEL, CentOS 계열이라면
# Red Hat 계열에서 rpm 패키지와 데몬 이름이 다르다. # RPM 패키지: avahi, 데몬: avahi-daemon sudo dnf -y install avahi sudo systemctl enable avahi-daemon.socket sudo systemctl enable avahi-daemon.service sudo systemctl start avahi-daemon.service sudo firewall-cmd --permanent --add-service=mdns sudo firewall-cmd --reload
Bash
복사
Debian, Ubuntu 계열이라면
sudo apt -y install avahi-daemon sudo systemctl enable avahi-daemon.socket sudo systemctl enable avahi-daemon.service sudo systemctl start avahi-daemon.service # Ubuntu는 방화벽이 기본적으로 꺼져 있다. # 방화벽이 활성화되어 있으면 다음 명령으로 mdns 통신을 허용한다. sudo ufw allow mdns
Bash
복사

연결해보기

이제 Avahi가 실행 중인 호스트에 연결하려면 호스트 이름을 이용할 수 있다.
# ssh로 이름이 isengard인 서버에 연결 ssh joshua@isengard.local # 로컬 웹 서버 shire에 연결 http://shire.local https://shire.local
Bash
복사
나는 주로 VM들에 mDNS를 구성하고 사용한다. 정적 IP 주소를 세팅하고 외우는게 더 귀찮다.

어떻게 동작하길래

간단히 설명하면 mDNS가 활성화된 네트워크 노드(호스트)는 이렇게 동작한다.
1.
로컬 네트워크에서 멀티캐스트하는 방식으로 자신의 이름을 알린다.
2.
mDNS를 이용할 수 있는 다른 노드는 멀티캐스트 주소로 들어오는 메시지를 듣고 호스트 이름과 IP 주소를 맵핑한다.
3.
mDNS에서 사용하는 호스트 이름은 hostname.local 형식으로 구성된다. Windows에서 연결할 때에는 .local을 생략해도 연결이 가능하지만, macOS에서는 반드시 .local을 붙여줘야 한다.
이더넷 프레임에서 사용하는 고유 MAC 주소는 01:00:5e:00:00:fb(IPv4), 33:33:00:00:00:fb(IPv6)이다. 네트워크 계층 멀티캐스트 주소로는 224.0.0.251(IPv4), ff02::fb(IPv6)를 사용한다(16진수 fb를 10진수로 변환하면 251. 통신 포트는 5353/udp.

주의할 것

아래와 같은 이유로 운영 환경에서는 쓰지 않아야 한다. 개인/가정용 네트워크, 개발 환경에나 적합하다.
1.
하나의 WiFi 무선망, 이더넷 유선망 안에서만 쓸 수 있다.
2.
같은 이름을 갖는 호스트가 있다면 멀티캐스트를 많이 뿌리는 쪽이 이긴다. 그러니까, 스푸핑 공격에 취약하다.
믿을 수 있는 안전한 네트워크에서만 쓰자.
이름이 같은 호스트가 있으면 호스트 이름을 변경해서 써야한다.
3.
자신의 정보를 네트워크에 뿌리므로 네트워크 안에 해커가 발을 들여놓았다면 정보를 수집하기 쉽다.

기타

systemd-resolved를 이용해도 mDNS를 이용할 수 있다. 이건 아직 익숙하지 않으니 나중에 알아봐야겠다.