독까의 이야기

DNS 란? 

네트워크에서 도메인이나 호스트 이름을 숫자로 된 IP 주소로 해석해주는 TCP/IP 네트워크 서비스이다.

TCP/IP 네트워크에서 사용되는 네임 서비스의 구조이다. TCP/IP 네트워크에서는 도메인이라고 하는 논리적 그룹을 계층적으로 설정할 수 있고, 그 논리적 그룹 명칭인 도메인명을 컴퓨터의 명칭(호스트명)의 일부에 포함시켜 이용하는 방법을 찾고 있다. 도메인 혹은 호스트 이름을 숫자로 된 IP 주소로 해석해 주는 TCP/IP 네트워크 서비스로서, 계층적 이름 구조를 갖는 분산형 데이터 베이스로 구성되고 클라이언트·서버 모델을 사용한다. 


각 컴퓨터의 이름은 마침표에 의해 구분되고 알파벳과 숫자로 구성된 세그먼트의 문자열로 구성되어 있다. 예를 들어 기관별로는 com이면 기업체, edu인 경우는 교육기관, go 또는 gov인 경우는 정부기관 등으로 나누어져 있다. 국가도메인은 au는 호주, ca는 캐나다, jp는 일본, kr는 한국, tw는 대만, uk는 영국 등이다.

[네이버 지식백과] DNS [domain name system] (두산백과)

라고 한다. 

뭐 간단히 말해서 PC 사용자가 특정 웹사이트 접속을 위해, 웹브라우저에 url 을 입력하면 DNS 에서 해당 웹사이트가 구축되어 있는 웹서버의 아이피를 확인하여 연결해주는 것이다. 라고 하면 될 걸 길게도 썼네. 그냥 교환국 입니다. 가 끝이지뭐. 

리눅스 서버에서 DNS 서버를 구축하기로 한다. 



1.  도메인 구입

테스를 위해서 무료 도메인 검색을 해봤는데, 마땅히 나오는 것도 없고 해서 .xyz 도메인을 구입했다. 

가비아에서는 1900 원에 구입이 가능했는데, 고대디에서는 1260 원이라길래 고대디에서 구매를 진행했다. 

 visa 카드로 결제 하는데, 자동 갱신이 기본 설정이므로 까먹고 있으면 돈만 쭉쭉 나가게 생겼다. 내 정보에서 자동 갱신을 취소 해야 한다. 

외국 사이트들은 왜 카드정보를 입력해 놓으면, 자동 갱신을 Default로 설정 하는지 모르겠다. 

예전에 4shared 사용할 때도 자동 결제 해지하느라 영문 메일 보내고 개빡침! 


저장 된 카드 정보도 삭제를 하려고 했는데, 사용 중인 상품에 결제 방법이 연동되어 있어서 안 된다고 한다. 

도메인 만료시에 삭제를 해야겠다. 

이제 도메인도 구입을 했으니, 서버에 설치를 진행 한다. 



2.  bind 패키지 설치 및 방화벽 오픈

# yum install bind* -y

자동으로 쭉쭉 설치가 되기 때문에 따로 할 것은 없다. 


DNS 서비스 실행 및 자동 실행 설정

# service named start

# chkconfig named on

# chkconfig --list named

named           0:해제  1:해제  2:활성  3:활성  4:활성  5:활성  6:해제


# vi /etc/sysconfig/iptables 에 정책 추가

-A INPUT -p udp -m udp --dport 53 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT

# service iptables restart



3.  설정 파일 수정

# vi /etc/named.conf

listen-on port 53 { 127.0.0.1; }; -> listen-on port 53 { any; };

allow-query     { localhost; }; -> allow-query     { any; };

최하단에 도메인 및 zone 파일 정보를 입력한다. 

다른 게시글들을 읽어보면, named.rfc1912.zones 의 하단에 도메인 정보를 입력하라고 하는데, 그냥 named.conf 에 입력해도 무관하다. 

named.rfc1912.zones 에 도메인 및 zone 파일 정보를 입력하라는 얘기는 named.conf 에서 include 를 통해서 named.rfc1912.zones 에 기재 된 내용을 갖고 오기 때문인데, 본인이 알아서 사용하면 될 것 같다. 

include "/etc/named.rfc1912.zones";


결론은 named.conf 에 입력하거나 named.rfc1912.zones 입력하거나 똑같다는 얘기다. 단, 중복이 되서는 안 된다. 

정방향과 역방향 둘 다 입력해준다. 

단순 도메인 정보 입력이면 역방향까지는 생성 안 해줘도 된다. 

내 서버에 네임서버를 구축하여 연동을 시켜야 하기 때문에 역방향까지 등록을 한다. 


// 정방향

zone "gunnm.xyz"             IN {type master;file "gunnm.xyz.zone";allow-update {none;}; };

// 역방향

zone "77.175.254.121.in-addr.arpa"             IN {type master;file "77.175.254.121.rev";allow-update {none;}; };



4.  zone 파일 생성

/var/named 폴더에 등록되어 있는 named.localhost 를 복사하여 zone 파일을 생성한다. 

zone 파일에 등록되는 세부 항목에 대해서는 아래의 표를 참고 하면 될 것 같다. 

형식

설명

;

주석

TTL

Time to Live. 캐시 활성 시간으로, 서버 정보를 자주 변경하는 경우는 보다 짧게 입력하자.

@

Origin을 뜻하는 특수문자이다.

IN

Internet. 네트워킹 주소 클래스

SOA

Start Of Authority. 네임 서버 관리자 메일 주소. 해당 도메인의 모든 리소스에 대한 권리를 알려 주는 레코드이다.

NS

Name Server. 네임 서버를 알린다.

MX

Mail Exchanger. 지정하는 메일 서버가 2개 이상일 때 우선순위를 지정한다.

A

Address. 도메인을 IP로 매핑하는 가장 중요한 레코드이다.

[네이버 지식백과] (유닉스 리눅스 명령어 사전, 2010. 11. 30., 한빛미디어)


# cp /var/named/named.localhost /var/named/gunnm.xyz.zone

$TTL 1D

@       IN SOA  ns1.gunnm.xyz. webmaster.gunnm.xyz. (

                                        3       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        IN      NS      ns1.gunnm.xyz.

        IN      NS      ns2.gunnm.xyz.

        IN      A       121.254.175.77

ns1      IN      A       121.254.175.77

ns2      IN      A       121.254.175.77

www     IN      A       121.254.175.77


# cp /var/named/named.localhost /var/named/77.175.254.121.rev

$TTL 1D

@       IN SOA  ns1.gunnm.xyz. webmaster.gunnm.xyz. (

                                        3       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        IN      NS      ns1.gunnm.xyz.

        IN      NS      ns2.gunnm.xyz.

77      IN      PTR     gunnm.xyz.

77      IN      PTR     www.gunnm.xyz. 



5.  설정 파일 점검

수정 된 named.conf 및 생성 된 zone 파일에 대한 점검을 진행해야 한다. 이 작업을 통해 오류를 확인하고 수정을 할 수 있다. 

# named-checkconf -z /etc/named.conf

# named-checkzone gunnm.xyz /var/named/gunnm.xyz.zone

# named-checkzone 121.254.175.77 /var/named/77.175.254.121.rev

오류가 났을 경우에는, 줄 번호와 함께 오류 원인이 나오니깐 수정을 하면 된다. 



6.  파일 권한 변경

게시글마다 권한 설정에 대한 의견이 분분하다.

ex) chown named:root zone 파일명    또는     chown root:named zone 파일명


나는 아래와 같이 진행을 했다. 

root(소유자):named(소유 그룹) zone 파일명

# chown root:named gunnm.xyz.zone

# chown root:named 77.175.254.121.rev

# chmod 660 gunnm.xyz.zone

# chmod 660 77.175.254.121.rev

구동 서비스에 권한을 어느 정도 할당하냐에 따라서 설정이 달라 질 수 있을 것 같다. named:named 로 권한 할당해도 구동이 가능한 걸 보면...



7.  DNS 서비스 재시작

# service named restart 

named 정지 중:                                             [  OK  ]

named 시작 중:                                             [  OK  ]

정상적으로 구동이 완료되면 설정에 이상은 없다는 뜻이다. 



8.  도메인 구입처에서 네임서버 정보 변경

내 서버에 네임서버를 구축했으니, 고대디에서 기본으로 제공해주는 네임서버 정보를 내가 구축한 네임서버로 변경을 해야 한다. 

고대디에 로그인 후 내 도메인 선택 - DNS 관리 - 네임서버 에서 "변경" 을 클릭 후 내가 구축 한 네임서버 정보를 입력한다.

ns1.gunnm.xyz

ns2.gunnm.xyz

해서 완료는 개뿔, 메일이 온다. 실패 메일이. 

여기서 시간 다 소비했다. 

만들었던 도메인 설정 및 zone 파일 삭제하고 다시 만들고 네임서버명 변경해보고 권한도 다시 할당하고 다 해봤다. 

그래도 계속 똑같은 실패 메일만 수신이 되어서 고객센터에 전화를 했다. 

대기 시간이 10분 이상 걸릴 것 같다드만, 20분 걸림. 영어로 대화하고 싶으면 1번 누르라는데 회화 불가로 포기. 

결국 상담원과 통화 됐는데, 한국사람이 아닌것 같다. 발음하고 억양이 다르다. 옆에서 들려오는 음성들을 들어보니 한국이 아닌 것 같다. 

아마도 전화를 포워딩해서 다른 지역에 있는 CS 센터에서 총괄을 하는 것 같다. 한국 담당은 1명이라서 대기 시간이 길었던 걸지도. 

상담원에게 내가 처해있는 상황에 대해 설명을 하니 정말 간단하게 해결을 해주었다. 


DNS 관리 - 최하단 - 호스트 이름 선택

여기에서 내가 구축한 네임서버 등록을 해야 한단다. 

관리페이지의 기능 버튼들을 다 눌러보았으면 금방 해결 되었을 텐데. 뻘짓했다. 

여기에 내 네임서버의 정보를 입력을 한 후, 

DNS 관리 - 네임서버 에서 "변경" 선택 후 내 네임서버 url 을 입력하면 정상적으로 반영이 된다. 

후이즈 조회시 변경 된 네임서버가 확인 된다. 

Name Server: NS1.GUNNM.XYZ

Name Server: NS2.GUNNM.XYZ


서브 도메인 추가 테스트 정상적으로 완료가 되었다. 


문제는 DNS 서비스가 구동되면 취약점 공격이 너무 많이 들어와버려서 관리를 잘 해야 한다. 

예전에도 bind 패키지가 구 버전인 리눅스 서버들에 대한 무작위 DDOS 공격이 들어와서 DNS 서비스를 구동하지 않는 서버들에 대해서는 삭제 조치 및 버전 업그레이드를 진행 했었다. 

그 때 확인 된거는 공격 당한 서버를 경유지로 이용해서 미국의 록히드 마틴 홈페이지를 공격했었는데, 별 희안한 해커들도 많은 것 같다. 

다음에는 리눅스 DNS 를 마스터, 윈도우 DNS 를 슬레이브로 구축하는 방법을 진행 해야겠다.