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 서버를 구현하여, 회사 PC들은 일단 이 DNS 서버에 먼저 쿼리를 진행하도록 만들어 주어야 한다.
Ubuntu server에서 DNS 서버 구축을 위해 사용되는 것이 Bind9 이므로 이를 설치해서, 해당 DNS 서버로 ip를 얻어보자.
실습 환경
외부로 웹서비스를 하진 않고, 내부에서 만 진행하기 위해 Virtual box에서 동작하는 server와 client를 같은 subnet의 ip로 세팅해 주었다.
단순히 같은 호스트 전용 어댑터를 사용하는 방법도 있지만, 패킷의 이동을 확인해 보기 위해 다른 어댑터를 끼우고 GNS3를 통해 논리적 switch로 연결해 주는 세팅을 진행했다.
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
이제 dig와 lookup 명령어로 주소를 받아오는 것을 확인할 수 있다.
파이어 폭스로 웹 주소에 접근하면 정상적으로 접속이 되는 것도 확인할 수 있다.
윈도우10에서 DNS 사용
윈도우도 내부 DNS 연결을 위해 IP를 같은 대역대로 맞춰주자.
윈도우는 GUI로 직접 DNS 서버를 세팅을 할 수 있다.
만약 로컬 DNS 서버에서 내용이 없다면, 외부의 DNS에 질의를 해서 알려주어야 한다.
이를 위해 DNS 서버에는 외부 인터넷을 연결하면,
정상적으로 babo1.com과 google.com의 ip를 받아온다.
패킷 트레이서로 DNS 프로토콜도 확인해 볼 수 있다.
참조: https://ko.linux-console.net/?p=3444
'개발 > 네트워크 & Ubuntu' 카테고리의 다른 글
[Virtual Box] Ubuntu server FTP 서버 설치 및 구성 (0) | 2024.01.18 |
---|---|
브라우저 Parallel connection 확인하기 (0) | 2024.01.09 |
Ubuntu server - Nginx 설명 및 설치 (1) | 2024.01.07 |
[Virtual Box] 포트 포워딩으로 SSH 접속하기 (0) | 2024.01.02 |
[Virtual Box] Ubuntu server - DHCP server 설치 및 IP할당 (0) | 2024.01.02 |