프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

 

 

DNS 서버 란?

 

DNS는 IP 주소 및 기타 데이터를 저장하고 이름별로 쿼리 할 수 있게 해주는 계층형 분산 데이터베이스입니다.
 즉, DNS는 컴퓨터가 서로 통신하는 데 사용하는 숫자 IP 주소로 변환되는, 쉽게 읽을 수 있는 도메인 이름의 디렉터리입니다. 예를 들어 브라우저에 URL을 입력하면 DNS는 URL을 해당 이름과 연결된 웹 서버의 IP 주소로 변환합니다. DNS 디렉터리는 정기적으로 업데이트되는 전 세계의 도메인 네임서버에 저장되고 배포됩니다. -Google Cloud-

 

 

 

우리가 항상 사용하는 google.com 를 웹 주소로 쿼리 하면 매칭되는 IP로 바꿔주는 것이 DNS 서버의 역할이다.

 

여기서 google.com. 에 마지막 .은 생략되어 있지만, 최상위 루트 도메인을 의미한다.

따라서 . -> com -> google 식으로 순서대로 쿼리가 진행된다.

DNS 예시

 

 

만약 회사 내부에서만 사용하는 내부망이라면, 당연히 외부의 DNS 서버를 사용해서 접근할 수 없다.

따라서 내부망의 DNS 서버를 구현하여, 회사 PC들은 일단 이 DNS 서버에 먼저 쿼리를 진행하도록 만들어 주어야 한다.

 

Ubuntu server에서 DNS 서버 구축을 위해 사용되는 것이 Bind9 이므로 이를 설치해서, 해당 DNS 서버로 ip를 얻어보자.

 

 

 

 

 

 

실습 환경

 

 

외부로 웹서비스를 하진 않고, 내부에서 만 진행하기 위해 Virtual box에서 동작하는 server와 client를 같은 subnet의 ip로 세팅해 주었다.

 

단순히 같은 호스트 전용 어댑터를 사용하는 방법도 있지만, 패킷의 이동을 확인해 보기 위해 다른 어댑터를 끼우고 GNS3를 통해 논리적 switch로 연결해 주는 세팅을 진행했다.

 

virtual box subnet 세팅 관련글

 

VirtualBox 다른 host-only adapter 끼리 통신하기

일단 Window10에서 Ubuntu Desktop과 연결을 해보자. 호스트 전용 네트워크를 만들면 Window10 -> Ubuntu Desktop로는 되지만 반대는 안 된다. Window10은 기본적으로 방화벽이 켜져 있기 때문에, 설정을 살펴보

everenew.tistory.com

 

DNS server를 설치할 ubuntu-server(100.100.100.5)는 Nginx가 동작중이고,

client인 Ubuntu-Desk(100.100.100.4)는 Apache가 동작중이다.

 

DNS server가 정상적으로 세팅되면 웹브라우저에 주소를 입력해서 웹 서버로부터 응답이 오게 될 것이다.

 

 

 

FQDN 변경

 

일단 FQDN을 바꾸어주자.

FQDN은 "Fully Qualified Domain Name"의 약자로, "전체 주소 도메인 네임"이다.

FQDN은 호스트 이름과 도메인 이름을 포함한 전체 도메인 이름을 일컫는 용어로, 절대 도메인 네임(absolute domain name)이라고도 합니다.

 

 

예를 들어 www.example.com에서 

example.com는 도메인

www 는 호스트 이름을 의미한다.

 

Full 경로가 아닌 하위 경로만 사용하는 것은 PQDN(Partially Qualified Domain Name)이다.

이러한 하위 경로는 내부의 같은 네임 스페이스에서만 사용하고 

외부에서 접속하기 위해서는 모든 경로인 FQDN가 필요하게 된다.

 

 

 

이번 실습에서는 아래의 세팅으로 해보자.

도메인: babo1.com 

호스트: ns1

 

 

sudo hostnamectl set-hostname ns1.babo1.com   //FQDN 설정

sudo nano /etc/hosts    //서버 구성 추가

 

 

 

DNS server 설치

 

sudo apt update

sudo apt install bind9 bind9utils bind9-doc dnsutils  //bind9 및 유틸 설치

 

 

 

우리는 IPv4만을 사용할 것이므로 -4를 아래처럼 추가하여 명시해 주자.

 

sudo nano /etc/default/named

 

 

 

재시작 후 상태 정상 동작함을 확인하자.

 

sudo systemctl restart named    # 재시작

sudo systemctl status named    #  상태 확인

 

 

 

 

DNS server 설정

 

우리는 100.100.100.0/24 인 사설망에서만 접속시킬 것이므로  이를

Access Control List의 trust option에 server ip 100.100.100.5와 함께 넣어주자.

 

sudo nano /etc/bind/named.conf.options

 

 

 

 

이번에는 config option을 수정해 주자.

        //listen-on-v6 { any; };        # disable bind on IPv6
        recursion yes;                 # enables resursive queries
        allow-recursion { trusted; };  # allows recursive queries from "trusted" - referred to ACL
        listen-on { 100.100.100.5; };   # ns1 IP address
        allow-transfer { none; };      # disable zone transfers by default
        forwarders {
                8.8.8.8;
                1.1.1.1;
        };

 

 

 

이후 아래 명령어가 에러메시지를 출력하지 않는다면 구문이 정상이다.

sudo named-checkconf /etc/bind/named.conf.options

 

 

에러가 출력되면  세미콜론이나 괄호를 잘 확인하자.

 

 

 

 

Zone 설정

 

이제 DNS의 Zone을 설정해야 한다.

Zone이란 관리되는 DNS의 정보 영역이다.

 

DNS는 다양한 영역으로 나뉩니다. 이 영역은 DNS 네임스페이스에서 명확하게 관리되는 영역을 구분합니다.
DNS 영역은 DNS 네임스페이스의 일부로, 특정 조직이나 관리자가 관리하는 부분입니다. 
 -Cloudflare-

 

 

 

sudo nano /etc/bind/named.conf.local

 

zone "babo1.com" {
    type master;
    file "/etc/bind/zones/db.babo1.com"; # zone file path 명시
};

# 역으로 ip로 dn를 얻기 위한 역방향 세팅
zone "100.100.100.in-addr.arpa" {	#역순 주소 (A.B.C.D라면 D.C.B.A로 기입)
    type master;
    file "/etc/bind/zones/db.100.100.100";  # subnet 
};

 

 

세팅에 명시한 db.babo1.com과 db.100.100.100은 변환할 레코드를 담고 있는 데이터베이스이다.

 

 

Zone 데이터 베이스를 만들어 주자.

 

sudo mkdir -p /etc/bind/zones/

sudo cp /etc/bind/db.local /etc/bind/zones/db.babo1.com     # default 파일 복사해서 사용하자.

sudo nano /etc/bind/zones/db.babo1.com

 

 

 

ns1.babo1.com 은  DNS server인 ubuntu-server의 ip로

babo1.com은 ubuntu-desk의 ip로 변환되도록 세팅하였다.

 

 

 

역방향 Zone의 데이터베이스도 만들어 주자.

sudo cp /etc/bind/db.127 /etc/bind/zones/db.100.100.100   # default 파일 복사해서 사용

sudo nano /etc/bind/zones/db.100.100.100

 

 

 

 

아래의 명령어들이 구문 오류 출력하지 않거나 ok를 출력하는지 확인한다.

sudo named-checkconf

sudo named-checkzone babo1.com /etc/bind/zones/db.babo1.com       # ok 표시

sudo named-checkzone 100.100.100.in-addr.arpa /etc/bind/zones/db.100.100.100        # ok 표시

 

 

세팅이 끝났으면 재시작해주자.

sudo systemctl restart named

 

 

 

 

 

DNS Client에서 확인하기(ubuntu desk)

 

수동으로 DNS를 설정하기 위해 편집해 주자.

sudo unlink /etc/resolv.conf    # 제거

sudo nano /etc/resolv.conf     #재설정

 

 

nameserver에 우리의 DNS server ip를 넣어준다.

 

 

dig 명령어를 사용하기 위해 유틸을 설치해 주자.

sudo apt install dnsutils bind9-utils

 

이제 diglookup 명령어로 주소를 받아오는 것을 확인할 수 있다.

 

 

 

파이어 폭스로 웹 주소에 접근하면 정상적으로 접속이 되는 것도 확인할 수 있다.

 

(apache 100.100.100.4 = babo1.com)

 

(nginx 100.100.100.5 = ns1.babo1.com)

 

 

 

 

윈도우10에서 DNS 사용

 

윈도우도 내부 DNS 연결을 위해 IP를 같은 대역대로 맞춰주자.

윈도우는 GUI로 직접 DNS 서버를 세팅을 할 수 있다.

 

 

만약 로컬 DNS 서버에서 내용이 없다면, 외부의 DNS에 질의를 해서 알려주어야 한다.

이를 위해 DNS 서버에는 외부 인터넷을 연결하면,

정상적으로 babo1.comgoogle.comip를 받아온다.

 

 

 

 

패킷 트레이서로 DNS 프로토콜도 확인해 볼 수 있다.

 

 

 

 

 

참조: https://ko.linux-console.net/?p=3444

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함