내부망에서 자체 DNS 서버 구성해보기 (with dnsmasq)
DNS 서버는 사실 그렇게 대단한 것까지는 아니다.
일정 프로토콜에 맞춰서 도메인 날리면 IP을 반환해주는 매우 단순한 동작만을 해주는데, 그 중앙화된 서버 몇개가 시스템마다 디폴트로 설정되어있을 뿐이다.
그래서 프로토콜만 맞춰서 DNS 서버를 구현하고, 그 DNS 서버를 클라이언트마다 사용하게 설정한다면, 자체적인 도메인 환경을 만들어 쓰는 것도 어려운 일이 아니다.
서비스를 만들다보면 내부망에서 내부망용 서버를 올려서 쓸 일이 잦은데, 그러면 보통 내부망 IP를 통해서 직접 사용하게 된다.
근데 아무래도 매번 IP로 접속해서 쓰는 것도 하다보면 좀 피곤하고 헷갈리는 일이고, DNS 서버를 활용한다면 접근시의 사용 편의성을 보다 늘릴 수도 있다.
이 nginx 서버를 내부 DNS를 통해 내부 도메인으로 접속할 수 있게 해보자.
DNS 서버 구성하기 (Linux)
먼저 서버부터 구성해보자.
내 경우에는 dnsmasq라는 도구를 사용했다. 가볍게 쓰기엔 이만한 것이 없다.
sudo apt-get install -y dnsmasq # debian
sudo pacman -Sy dnsmasq

그리고, 사전에 설정하거나 확인할 것이 몇개 있다.
우선 네트워크 인터페이스부터 확인해야 한다.
무슨 이름으로 연결되는지 조사한다.
내 경우에는 이름이 enp5s0였다. 저걸 설정에 넣어야 한다.
설정 파일을 열어서, 다음과 같이 파일을 수정한다.
sudo vim /etc/dnsmasq.conf# 로컬 도메인 설정
address=/myapp.local/192.168.1.5
# DNS 포워딩 (외부 도메인용)
server=8.8.8.8 # Google DNS
server=1.1.1.1 # Cloudflare DNS
# 리스닝 인터페이스
interface=enp5s0 # 인터페이스 확인해서 넣기
bind-interfaces
로컬 커스텀 도메인으로는 myapp.local을 설정했다.
저기로 DNS lookup을 하면 아까의 nginx 서버 IP를 주게 되는 것이다.
기존 DNS도 쓸 수 있게 포워딩도 해놓고, 방금 확인한 인터페이스 이름도 넣어준다.
그리고 이 DNS 서버는 53포트를 사용하는데, 기존에 있던 시스템이 그 포트를 쓰고 있어서 그대로는 안될 수도 있다. 보통 systemd-resolved라는 녀석이 기본적으로 53포트를 점유하고 있다.

우리는 저걸 끄고 dnsmasq로 대체해야 한다.
sudo vim /etc/systemd/resolved.conf
sudo systemctl restart systemd-resolved
이렇게 수정해서 재시작하면
이렇게 사라져있을 것이다.
그럼 이제 dnsmasq를 시작하면 된다.
sudo systemctl enable dnsmasq
sudo systemctl restart dnsmasq
sudo systemctl status dnsmasq
오류 없이 시작되면 설정은 잘 된 것이다.
방금 만든 커스텀 도메인으로 접속이 되는지 먼저 확인해보자.
설정한대로 잘 나왔다.
그리고 다른 도메인도 조회가 여전히 잘 되면, 설정에는 이상이 없는 것이다.
클라이언트에 DNS 설정하기
저걸 이제 쓰려먼, 클라이언트마다 DNS 서버 설정을 추가해줘야 한다.
번거롭지만 어쩔 수 없다.
DNS 서버가 뭔지 모르니까 당연히 찾을 수도 없기 때문이다.
DNS 서버를 추가하는 방법은 OS마다 다르다.
Windows의 경우에는 파워쉘 관리자권한으로 열어서 다음 코드를 실행하면 된다.
# 인터페이스 확인
Get-NetAdapter
# DNS 설정
Set-DnsClientServerAddress -InterfaceAlias "이더넷" -ServerAddresses "192.168.1.5","8.8.8.8"
MacOS는 다음 스크립트를 실행하면 된다.
# Wi-Fi
networksetup -setdnsservers Wi-Fi 192.168.1.5 8.8.8.8
# 이더넷
networksetup -setdnsservers Ethernet 192.168.1.5 8.8.8.8
Linux는 배포판마다 좀 다를 수는 있는데, systemd-resolved 설정을 수정하면 적용할 수 있다.
sudo vim /etc/systemd/resolved.conf
저걸 방금 만든 DNS 서버로 바꿔보자.
그러면 DNS 지정 없이도 lookup이 될 것이다.
