본문 바로가기

Linux/systemd

systemd-resolved로 LLMNR 사용하기

앞으로 티스토리 대신 blog.stackframe.dev에서 블로깅을 합니다. 이 블로그는 남겨 둘 예정입니다.

로컬 네트워크 내에서 일일히 IP를 적어서 연결하는 것은 귀찮은 일입니다. 거기다 IPv6 Link-local 주소를 사용한다면 더더욱 기억하기 어렵습니다. 그렇다고 네트워크에 DNS 서버를 설치하는 것도 배보다 배꼽이 큰 것 같습니다. 이럴 때 LLMNR이 좋은 해결책이 될 수 있습니다.

 

LLMNR을 통해 동일한 네트워크 내에서 호스트네임으로 그 이름을 가진 호스트의 IP를 알아낼 수 있습니다. DNS 서버와 다른 점은 멀티캐스트를 사용한 기술이기 때문에 서버가 필요없고, 단지 호스트가 LLMNR 서비스를 실행해두고 있으면 됩니다. 거기다 Microsoft에서 만들었기 때문에 Windows에도 적용되어 있으므로 리눅스와 함께 사용할 수 있습니다.

 

systemd-resolved는 기본적으로 LLMNR이 활성화되어 있습니다. /etc/systemd/resolved.conf 파일의 LLMNR 옵션은 시스템 전체에, /etc/systemd/network/ 디렉토리의 .network 파일의 LLMNR 옵션은 해당 network 설정이 적용되는 인터페이스에만 영향을 미칩니다. 이전에 LLMNR을 끄거나 하지 않았다면 손 댈 필요없습니다.

 

현재 시스템과 인터페이스 별 상태를 보고싶다면 resolvectl 명령으로 확인할 수 있습니다.

systemd-resolved가 켜져있는 것만으로 설정은 끝입니다. 이제 그냥 연결하고 싶은 호스트의 IP 대신 호스트명을 사용하면 됩니다.

중요한 점은 호스트명에 . 이 들어가면 안됩니다. LLMNR은 기본적으로 계층없는 호스트명을 사용하기 때문에 . 이 들어가면 FQDN으로 인식하여 LLMNR이 아닌 DNS로 쿼리하게 됩니다.

 

호스트명을 변경하려면 hostnamectl를 사용하면 됩니다.

 

hostnamectl로 리눅스 호스트명 변경하기

옛날 init 시절에 호스트명을 변경하려면 상당히 귀찮았습니다. 거기다 파일 하나만 바꿨다간 갑자기 에러가 뜨거나 하는 경우도 빈번했습니다. 하지만 systemd가 도입되면서 hostnamectl 이란 명령이 새로 생겼고..

stackframe.tistory.com