SWE/네트워크

SIP SRV 레코드 처리를 위한 로컬 DNS 서버 구축 | dnsmasq 설치 및 설정 방법

S나라라2 2025. 5. 12. 17:11
반응형

sip dns-srv를 위한 사설 dns 서버 구축하는 방법 공유드립니다.

 

먼저 시스템 구조는 아래와 같습니다.

                      PBX Server
                           ^
VoIP Client   <--->        |       <--->     VoIP Client
                           ↓
                   DNS Server (현재 구축할 것)

 

여기서 DNS Server를 로컬에 구축해볼 것입니다.

PBX Server와 DNS Server는 다른 시스템입니다.

 

참고로 PBX Server는 다른 ubuntu 리눅스에 Asterisk 를 설치하여 구축하였습니다.


Ubuntu 리눅스에 dnsmasq를 설치하여 로컬 DNS 서버 구축 방법

 

환경: Ubuntu 22.04.5 LTS

 

1.dnsmasq 설치

$ sudo apt install dnsmasq

 

2.dnsmasq 설정

dnsmasq.conf를 열어서 내용 수정합니다.

$sudo vi /etc/dnsmasq.conf

 

 

pbx server의 ip 주소와 도메임 이름을 매핑합니다.

address=/<dns server domain>/<pbx server ip>
address=/domain.com/192.123.123.123

 

sip 통화에 필요한 srv레코드를 추가합니다

dns-srv레코드 설정

<예시>
srv-host=_sip._udp.pbx.yourdomain.com,pbx.yourdomain.com,<PBXServer_SIP_포트>,0,0
srv-host=_sip._tcp.pbx.yourdomain.com,pbx.yourdomain.com,<PBXServer_SIP_포트>,0,0

<실제>
srv-host=_sip._udp.domain.com,domain.com,5060,0,0
srv-host=_sip._tcp.domain.com,domain.com,5060,0,0

 

 

3.dnsmasq status 에러 해결

에러 로그

user@DNSServer:~$ sudo systemctl status dnsmasq
× dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
        Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
        Active: failed (Result: exit-code) since Fri 2025-05-09 13:59:12 KST; 3 days ago
        Process: 421491 ExecStartPre=/etc/init.d/dnsmasq checkconfig (code=exited, status=0/SUCCESS)
        Process: 421501 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=2)
                CPU: 61ms

5월 09 13:59:12 DNSServer systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
5월 09 13:59:12 DNSServer dnsmasq[421501]: dnsmasq: failed to create listening socket for port 53: Address already in use
5월 09 13:59:12 DNSServer dnsmasq[421501]: failed to create listening socket for port 53: Address already in use
5월 09 13:59:12 DNSServer systemd[1]: dnsmasq.service: Control process exited, code=exited, status=2/INVALIDARGUMENT
5월 09 13:59:12 DNSServer dnsmasq[421501]: FAILED to start up
5월 09 13:59:12 DNSServer systemd[1]: dnsmasq.service: Failed with result 'exit-code'.
5월 09 13:59:12 DNSServer systemd[1]: Failed to start dnsmasq - A lightweight DHCP and caching DNS server

 

에러 내용: 포트 53번 listening socket 생성 실패

원인:

포트 53은 DNS 서버가 DNS 쿼리를 수신하는데 사용하는 표준 포트입니다.

dnsmasq가 DNS 서버 역할을 하려면 이 포트를 사용할 수 있어야 합니다.

 

Ubuntu 18.04이후 버전에서는 systemd-resolved 서비스가 기본 DNS 관리자로 실행되며, 포트 53을 점유하고 있는 경우가 많습니다.

 

포트 53 사용하고 있는 프로세스를 확인해봅니다.

user@DNSServer:~$ sudo netstat -tulnp | grep :53
tcp        0      0 127.0.0.53:53           0.0.0.0:* LISTEN      416150/systemd-reso
udp        0      0 127.0.0.53:53           0.0.0.0:* 416150/systemd-reso
udp        0      0 0.0.0.0:53936           0.0.0.0:* 570/avahi-daemon: r
udp        0      0 0.0.0.0:5353            0.0.0.0:* 570/avahi-daemon: r
udp6       0      0 :::5353                 :::* 570/avahi-daemon: r

첫번째 줄을 확인하면, systemd-reso에서 53번 포트를 사용하고 있는게 확인됩니다.

 

해결방법:

systemd-resolved 사용 중지

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

 

dnsmasq 서비스 상태 확인

user@DNSServer:~$ sudo systemctl status dnsmasq.service
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
     Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2025-05-09 14:14:59 KST; 7s ago
    Process: 421600 ExecStartPre=/etc/init.d/dnsmasq checkconfig (code=exited, status=0/SUCCESS)
    Process: 421610 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=0/SUCCESS)
    Process: 421621 ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf (code=exited, status=0/SUCCESS)
   Main PID: 421620 (dnsmasq)
      Tasks: 1 (limit: 13027)
     Memory: 620.0K
        CPU: 171ms
     CGroup: /system.slice/dnsmasq.service
             └─421620 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -r /run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg>

 5월 09 14:14:58 DNSServer dnsmasq[421620]: started, version 2.90 cachesize 150
 5월 09 14:14:58 DNSServer dnsmasq[421620]: DNS service limited to local subnets
 5월 09 14:14:58 DNSServer dnsmasq[421620]: compile time options: IPv6 GNU-getopt DBus no-UBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP conntr>
 5월 09 14:14:58 DNSServer dnsmasq[421620]: warning: using interface enp0s8 instead
 5월 09 14:14:58 DNSServer dnsmasq[421620]: no servers found in /run/dnsmasq/resolv.conf, will retry
 5월 09 14:14:58 DNSServer dnsmasq[421620]: read /etc/hosts - 8 names
 5월 09 14:14:58 DNSServer dnsmasq[421620]: reading /run/dnsmasq/resolv.conf
 5월 09 14:14:58 DNSServer dnsmasq[421620]: using nameserver 127.0.0.53#53
 5월 09 14:14:58 DNSServer dnsmasq[421649]: /etc/resolvconf/update.d/libc: Warning: /etc/resolv.conf is not a symbolic link to /run/res>
 5월 09 14:14:59 DNSServer systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.

 

dnsmasq가 성공적으로 running상태인 것이 확인됩니다.

 

private dns 서버 구축은 완료하였습니다.

이제 테스트를 위해 전화기 설정을 해봅니다.


SIP DNS SRV 통화 테스트를 위한 설정 방법

 

4.VoIP 전화기에 DNS 서버 IP 주소 등록

VoIP Client 전화기에서 DNS 서버 IP 주소 등록이 필요합니다.

 

제 시스템 환경은 PC의 microSIP를 사용하기 때문에, PC에서 DNS 서버 IP 주소를 등록해줬습니다.

Windows DNS 서버 IP 주소 등록 방법:

Windows: 제어판 > 네트워크 및 인터넷 > 네트워크 및 공유 센터 > 어댑터 설정 변경 > 해당 네트워크 어댑터 우클릭 > 속성 > Internet Protocol Version 4 (TCP/IPv4) 선택 > 속성 > 고급 > (팝업창 '고급 TCP/IP  설정' 열림) DNS 탭 > 다음 DNS 서버 주소 (사용순으로) 에서 추가 후 DNS Server IP (192.123.123.123) 주소 입력.

 

 

5. VoIP 전화기에서 DNS SRV 설정

전화기에서 DNS SRV 설정을 해줍니다.

 

제 환경은 microSIP를 사용하고 있습니다.

microSIP 설정 방법

- microSIP 설정 > DNS SRV on 체크 >'네임서버' 항목에 DNS Server IP 주소 입력 (192.123.123.123)
- 계정 편집: 'SIP 서버'와 '도메인' 항목에 dns주소 입력 (domain.com)

 

끝!!

 

dns 서버로부터 domain.com 서버 이름과 매핑되는 서버 주소를 찾아, 정상 통화 되는것을 확인할 수 있습니다.

반응형