[리눅스] DNS 서버

최동혁·2023년 2월 9일
0

리눅스

목록 보기
15/16
  • 서버란?
    • 클라이언트에게 서비스를 제공하는 프로그램

DNS 서버

  • 도메인 주소를 ip 주소로 바꿔주는 서비스를 제공하는 서버 프로그램.

  • 클라이언트가 로컬 DNS 서버에 도메인을 알려줌.
  • 로컬 DNS가 루트, 최상위, 책임 DNS 로부터 도메인에 맞는 ip 주소를 불러옴.

실습1 (책임 DNS 만들기)

기본 설정

named.conf

  • yum install bind
    • 리눅스 DNS 서버(bind) 설치

    • 서버의 설정 파일

      - 도메인 설정 파일
  • named.conf 파일에 들어가서 전부 지우고
options {
        directory "/var/named";
};

zone "sjb.com" in {
        type master;
        file "cdh.com.zone";
};
  • 위의 코드를 복사해서 넣어준다.

  • 영역파일의 위치를 나타내주는 것을 options에 넣어준다.

  • zone은 하나의 도메인을 만들어준다.

  • cdh.com 이라는 애의 도메인 주소를 다 저장해놓은 파일인 cdh.com.zone 을 적어준다.

  • type은 master에게 ip 주소를 업데이트 하면 slave에게 전달해줌.

    • hint 타입은 로컬 DNS에서 루트 DNS에게 물어보는데 그걸 hint라고 한다.
  • named.conf 파일도 문법에 의해 동작하기 때문에 이 문법을 체크해주는 파일이 따로 있다.

  • named-checkconf 라는 파일이다.

  • 그래서 만약 문법이 틀린 상태에서 named-checkconf 파일을 실행하면 어느 부분의 문법이 틀렸는지 체크해준다.

cdh.com.zone

  • 이제는 위에서 작성한 cdh.com.zone 파일을 작성해야 한다.
    • 경로는 /var/named/cdh.com.zone이다.
    • 문법은 ;이 주석처리다.
;(name)         (ttl)   CLASS   TYPE    Origin          DNSMaster
;-------------------------------------------------------------------------------
$TTL 1D
@                       IN      SOA     ns.cdh.com.     root.sjb.com. (
                                        2023020901      ;serial number
                                        3600            ;Refresh
                                        1800            ;Retry
                                        36000           ;Expire
                                        86400           );TTL

;(name)         (ttl)   CLASS   TYPE    Value
;-------------------------------------------------------------------------------
                        IN      NS      ns.cdh.com.
ns                      IN      A       192.168.163.100
www	                	IN      A       192.168.163.200
server					IN		CNAME	www
    

  • CNAME은 별명이다.
    • server.sjb.com에 들어가면 server 쪽을 보는데, 위에서 CNAME이라고 되어있어서 www로 바뀌고, www를 다시 본다.
    • 그렇다면 server.sjb.com이 www.sjb.com으로 바뀌고, www를 보면 ip주소가 나와있는데 www.sjb.com이 해당 ip 주소로 바꾸어준다.
  • 이것도 문법이 만만하지가 않기 때문에 문법을 체크해주는 파일이 있다.

  • named-checkzone sjb.com /var/named/sjb.com.zone 명령어를 입력한다면 문법 체크를 해준다.

서버 실행

  • 이렇게 설정을 다 하면 서버를 실행한다.
  • systemctl start named
  • 항상 서버를 실행하면 상태를 확인한다.

  • systemctl status named

  • 그리고 netstat -anlp | grep :53 명령어로 DNS 서버의 포트 53번이 잘 열려있는지 확인한다.

결과 확인 (nslookup)

  • nslookup 명령어를 사용하면 도메인을 통해 ip 주소를 물어볼 수 있다.
  • server를 우리가 설정한 ip 주소로 바꾼다.
    • server [ip] 를 입력하면 바뀐다.

  • 우리는 cdh.com을 설정했기 때문에 물어본다면 우리가 설정한 ip 주소를 띄워준다.

실습 2

  • DNS 서버 1대
  • Web 서버 1대
  • 같은 공유기를 쓰고 있는 다른 컴퓨터에서 www.cdh.com으로 접속을 했을 때, 접속이 되게끔 하자.

설정 변경

  • 일단 /etc/named.conf 파일의 내용을 변경한다.

  • 이렇게 설정을 해준다.

  • /var/named/cdh.com.zone 파일에 들어가서 위의 사진처럼 변경해준다.
  • www.cdh.com으로 접속했을때 192.168.0.6:53 으로 매핑해준다는 것이다.
  • 53은 dns의 포트이다.
  • 그런데 우리는 192.168.0.6 ip에서 웹을 여는 것이 아니다.
  • 이 사설 ip를 사용하는 컴퓨터의 가상 머신에서 여는 것이다.
  • 그 가상 머신의 사설 ip는 192.168.163.200이다.
  • 그렇다면 virtual network editor를 열어서 포트포워딩 설정을 해주어야 한다.

포트포워딩

첫 번째

  • dns 서버를 192.168.0.6으로 등록하게 할 것이다.
    - 하지만 우리는 ns(name server)를 192.168.163.100으로 설정했다.
    • 그렇기 때문에 먼저 dns 포트포워딩을 해야한다.

    • 192.168.0.6으로 dns를 설정하면 192.168.0.6:53으로 DNS 서버에 연결을 하는 것이다.

    • 그러면 위의 그림처럼 포트포워딩으로 192.168.163.100:53으로 바꿔줘야 한다.

    • 그렇다면 같은 공유기를 쓰는 다른 컴퓨터가 DNS 서버를 내 사설 ip인 192.168.0.6으로 등록한다면 192.168.163.100:53으로 통신을 하게 되는 것이다!

    • 그리고 Type은 UDP로 해야한다!!

    • 왜??

UDP의 특징
  • UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 동작

  • 즉, 다중화/역다중화 기능과 간단한 오류 검사 기능을 제외하면 IP에 아무것도 추가하지 않는다.

  • 그래서 애플리케이션 개발자가 TCP대신에 UDP를 선택한다면 애플리케이션은 거의 IP와 직접 통신하는 것

  • tcp에 비해 다음과 같은 특징을 갖고 있기에 DNS서비스가 사용하기 적합하다.

  • 연결의 시작 과 끝 설정이 없다는 점만약 dns가 tcp위에서 동작한다면 많이 느려질 것.

  • 반면 http문서로 된 웹페이지는 신뢰성이 중요하기 때문에 udp보다 tcp를 사용한다.

  • dns: 신뢰성<속도

  • 웹페이지: 신뢰성>속도

  • tcp 는 데이터 전송을 시작하기 전에 3-way-handshake를 사용하는 반면에 udp는 형식적인 예비동작이 없다. 따라서 연결 설정에 드는 비용이 없다.

  • 연결 상태를 유지 할 필요가 없다.반면 udp는 어떠한 정보도 기록하지 않고 유지할 필요가 없다.도메인네임을 ip로 변경함으로 항상 많은 클라이언트를 수용하는 dns 서버에게는 연결상태를 유지 하지 않아 정보 기록을 최소화 하는 udp가 알맞다.

  • 따라서 특정 애플리케이션에 할당된 서버는 애플리케이션이 tcp보다 udp에서 동작할 때 더 많은 클라이언트를 수용할 수 있다.
    tpc는 end point에서 연결 상태를 유지하며 다음과 같은 파라미터들이 포함된다. ->(수신버퍼, 송신버퍼, congestion control 파라미터, sequence number, ACK number)

두 번째

  • dns에 통신을 해서 ip주소를 받는데, 우리는 192.168.163.200:80으로 가게 하고 싶다. 왜냐면 저 가상 공유기의 사설 ip주소를 쓰는 vm에 웹을 열었기 때문이다.
    - 하지만, 설정에서 www에 163.200 ip를 쓰면 안된다!
    • 저 주소를 직접 쓰면, dns에서 ip 주소로 잘 바뀌지만, 192.168.163.200 ip는 내 가상 머신의 사설 ip이기 때문에, 외부 컴퓨터에서 접근이 되지 않는다.

    • 그렇기 때문에 www에 192.168.0.6을 입력해준 후, 다시 포트포워딩을 해야 한다.


      - 그리고 위의 그림처럼 포트포워딩을 해준다.

    • 이렇게 설정을 한다면?

    • 같은 공유기를 쓰는 다른 컴퓨터에서 DNS server를 192.168.0.6으로 등록했을 때, 192.168.163.100:53으로 통신을 해서 www.cdh.com의 ip 주소를 얻어온다.

    • 그 ip 주소가 192.168.0.6:80인데, 위에서 포트포워딩을 해서 192.168.163.200:80으로 변경시켜준다.

    • 그렇다면 192.168.163.200의 가상 공유기 사설 ip 주소를 가진 가상 컴퓨터가 구동한 웹 서버로 이동하게 된다.

웹 서버 구동

  • 위의 포트포워딩을 한 결과를 보면 192.168.163.200의 가상 공유기 사설 ip를 가진 vm에서 웹 서버를 구동해야 한다.
  • httpd 웹 서버 구동 방법 <- 해당 포스트에 httpd 구동 시키는 법에 대해서 작성해놓았다.
  • /var/www/html/ 에 test.html 파일을 아무거나 만들어서 같은 공유기를 쓰는 외부 컴퓨터가 DNS 서버를 나의 사설 ip(192.168.0.6)로 등록하고, www.cdh.com/test.html에 접근했을 때 잘 동작하면 완료된 것이다.

로직

  • 같은 공유기를 쓰는 다른 컴퓨터에서 테스트
  • 192.168.0.6 ip를 쓰는 컴퓨터의 가상 머신의 사설 ip 192.168.163.100이 DNS 서버
  • 마찬가지로 0.6 ip를 쓰는 컴퓨터의 가상 머신의 사설 ip 192.168.163.200이 웹 서버
  • 외부 컴퓨터에서 192.168.0.6 DNS 등록을 하면 도메인 입력했을 때, 192.168.0.6:53 으로 통신
  • 그렇다면 포트포워딩으로 192.168.163.100:53으로 통신
  • 입력한 도메인이 설정 파일의 내용에 맞게 192.168.0.6으로 변경해줌.
  • 그렇다면 우리는 주소창에 www.cdh.com 으로 입력한 것인데, DNS 서버가 192.168.0.6 으로 변경해줌.
  • 뒤에 포트 번호를 안썻기 때문에 자동으로 80번 포트 할당
  • 192.168.0.6:80 은 포트포워딩으로 192.168.163.200:80으로 변경.
  • 즉, www.cdh.com:80->192.168.0.6:80->192.168.163.200:80
    • www.cdh.com이 ip로 바뀌는 과정은

      • 192.168.0.6:53->192.169.163.100:53 바꾸어서 DNS 서버와 통신

아키텍쳐 설계

실습 3

  • nslookup을 이용해 다른 dns 서버에 접속해보자.
  • nslookup 명령어를 치고, 관심있는 웹 사이트를 작성, www는 빼고 작성

  • 위의 그림처럼 nameserver가 나오는데, 두개가 있다면 하나만 기억해두면 된다.

  • 그 후, server (nameserver주소) 를 작성한다.

  • 마지막으로 ls -d (www를 제외한 도메인주소)

  • 만약 보안이 취약한 사이트라면 많은 정보가 나오게 된다.

  • 이름과 type 그리고 ip나 도메인이 나오게 된다.

  • 보안이 취약한 사이트는 저런 것을 타입에 따라 잘 작성하면 들어가진다....ㅋㅋㅋㅋㅋㅋㅋㅋ

  • 이걸 막기 위해 /etc/named.conf에 있는 파일을 고쳐야 한다.

  • 위의 그림처럼 허용할 네트워크 대역을 설정해주면, 저 대역이 아닌 ip는 접속이 되지 않는다.
  • any는 내 DNS 서버에게 물어볼 수 있는 컴퓨터
  • transfer에 적혀있는 건 내 DNS 서버에게 zone 영역 파일을 받아갈 수 있는 컴퓨터이다.
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글