Skip to main content

AWS 커스텀 DNS 서버 만들기

DHCP 옵션 세트

  • 생성된 DHCP 옵션 세트는 수정할 수 없지만 새로운 DHCP 옵션 세트를 생성하고 VPC와 연결할 수 있습니다.
  • VPC에는 하나의 DHCP 옵션 세트만 연결할 수 있습니다.
  • VPC는 DHCP 옵션 세트 없이 설정할 수도 있습니다.
  • DHCP 옵션 세트가 VPC와 연결되면 인스턴스는 자동으로 새로운 옵션 세트를 사용하지만, 이는 몇 시간이 걸릴 수 있습니다.
  • 또한 운영 체제 명령어를 사용하여 DHCP 옵션 매개변수를 새로 고칠 수도 있습니다.
  • ex) sudo dhclient -r eth0

핸즈온1: 커스텀 DNS with Route 53 프라이빗 호스팅 영역

  • VPC 생성 - 10.10.0.0/16

    • DNS 리졸버 프라이빗 IP - 10.10.0.2 (+2)
  • 도메인 이름이 corp.internal이고 DNS 서버로 AmazonProvidedDNS를 갖는 DHCP 옵션 세트 신규 생성

  • 위에서 생성한 VPC - VPC 설정 편집 - DHCP 옵션 세트 변경

  • corp.internal 프라이빗 호스팅 영역 생성

    • A 레코드 추가 - instance1.corp.internal: 10.0.0.11
    • A 레코드 추가 - instance2.corp.internal: 10.0.0.15
  • EC2 Instance 생성

    • 퍼블릭 서브넷
    • Amazon Linux 2 이미지
    • 10.0.0.11을 사설 IP로 갖는 instance1
    • 10.0.0.15을 사설 IP로 갖는 instance2

인스턴스1 접속 후 쿼리

[ec2-user@ip-10-0-0-15 ~]$ cat /etc/resolv.conf
...
nameserver 10.0.0.2
search corp.internal


[ec2-user@ip-10-0-0-15 ~]$ nslookup instance2.corp.internal
...
Server: 10.0.0.2
Address: 10.0.0.2#53

Non-authoritative answer:
Name: instance2.corp.internal
Address: 10.0.0.15

$ ping instance2.corp.internal
$ ping instance2
$ nslookup instance2.corp.internal

핸즈온2: EC2 인스턴스를 DNS 서버로 활용하기

  • 퍼블릭 서브넷과 프라이빗 서브넷을 갖는 VPC 생성 (10.0.0.0/16)

  • DNS 서버로 활용할 인스턴스와 앱 서버는 퍼블릭 서브넷에 존재

    DNS 서버 보안그룹 설정

    • VPC 대역에서 들어오는 UDP 53 트래픽 허용
    • 내 IP/32로 들어오는 SSH 트래픽 허용
  • DB 서버는 프라이빗 서브넷에 존재

    APP, DB 서버 보안그룹 설정

    • VPC 대역에서 들어오는 ICMP 트래픽 허용 (ping)
    • 내 IP/32로 들어오는 SSH 트래픽 허용

EC2 인스턴스 DNS 설정

# DNS 서버 접속
sudo su -
yum update -y
yum install bind bind-utils -y

vi /var/named/corp.internal.zone
...
$TTL 86400
@ IN SOA ns1.corp.internal. root.corp.internal. (
2013042201 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
; Specify our two nameservers
@ IN NS dnsA.corp.internal.
IN NS dnsB.corp.internal.
; Resolve nameserver hostnames to IP, replace with your two droplet IP addresses.
dnsA IN A 1.1.1.1
dnsB IN A 8.8.8.8
; Define hostname -> IP pairs which you wish to resolve
@ IN A 10.0.7.78
app IN A 10.0.7.78
db IN A 10.0.130.208

vi /etc/named.conf
...
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
allow-transfer { localhost; 10.0.6.210; };
recursion yes;
forward first;
forwarders {
10.0.0.2;
};
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
zone "corp.internal" IN {
type master;
file "/var/named/corp.internal.zone";
allow-update { none; };
};

service named restart
chkconfig named on
  • DHCP 옵션 세트 신규 생성
    • 도메인 이름: corp.internal
    • 네임 서버: DNS 서버로 사용할 EC2 인스턴스의 사설 아이피
  • VPC - VPC 설정 편집 - 위에서 생성한 DHCP로 변경
  • DHCP 업데이트를 위해 DNS 서버 인스턴스와 APP 서버 인스턴스 재부팅

AWS-DNS1 AWS-DNS2 AWS-DNS3

$ cat /etc/resolv.conf
...
nameserver 10.0.6.210
search corp.internal

# 변경된 nameserver 확인
$ nslookup app.corp.internal
...
Server: 10.0.6.210
Address: 10.0.6.210#53

Name: app.corp.internal
Address: 10.0.7.78

$ nslookup db.corp.internal
...
Server: 10.0.6.210
Address: 10.0.6.210#53

Name: db.corp.internal
Address: 10.0.130.208

$ nslookup db
...
Server: 10.0.6.210
Address: 10.0.6.210#53

Name: db.corp.internal
Address: 10.0.130.208

$ ping db