AWS 4. DNS, route53
1. DNS
DNS는 도메인 주소와 ip를 연결한다. IP는 외우기 어렵고, 변경될 수 있다. 따라서 도메인 주소를 할당해서 접속을 편리하게 한다.
도메인 주소의 구조
- top Level Domain: 가장 뒤 의 'com' 부분. (us, com, kr ... )
- Second Level Domain: 뒤에서 두번째 도메인(co,ac,or ... )
- domain name: naver, daum 같은 것을 말한다. 고유한 이름을 가진다.
- sub-domain: www, m 등 도메인 이름 앞에 온다.
DNS의 동작
- 브라우저는 도메인 주소가 가리키는 ip 주소를 모른다.
- local DNS 서버(보통 SKT 같은 인터넷 서비스 제공자(ISP)의 DNS)에 도메인 주소에 해당하는 ip 주소를 질의한다.
- local DNS 서버에 없으면, 루트 DNS 서버에 질의를 보낸다.
- root DNS가 top level domain을 보고 해당 도메인의 주소를 가지고 있는 TLD DNS 서버를 알려준다.
- local DNS 서버가 TLD DNS 서버에 질의를 보내고 TLD DNS 서버는 해당 도메인 주소 정보를 가진 SLD DNS 서버를 알려주거나 바로 ip 주소를 알려준다.
- 브라우저는 ip 주소를 받거나 다시 SLD DNS 서버에 질의를 보내 ip를 받는다.
이러한 일련의 과정은 시간이 오래걸리고 비효율적이므로, local DNS와 브라우저가 caching을 통해 효율을 향상시킨다.
route 53 서비스는 TLD + SLD의 역할을 동시에 수행한다.
2. IPv4, IPv6, 레코드타입
IPv4는 우리가 익히 하는 32비트 짜리 길이의 식별자이다. 0.0.0.0 ~ 255.255.255.255까지의 숫자의 조합으로 이루어지며 약 46억개의 개별적인 주소를 제공할 수 있다. 그러나 네트워크가 거대해지면서 이조차 부족해졌고, 서브넷팅 등 IP 주소를 아끼기 위한 방법들이 나오다가 IPv6가 등장하였다.
IPv6는 128비트로 구성된 주소 체계로, 약 340경개의 IP 주소를 사용할 수 있다.
2001:0db8:85a3:0000:0000:8a2e:0370:7334
IPv6는 IPv4에 비해 주소 고갈 문제를 해결할 수 있을 뿐만 아니라, 보안성과 기능 면에서도 개선되었다.
이 두 주소 체계모두 도메인 주소 체계와 연결될 수 있다.
레코드 타입
DNS 레코드는 DNS 서버에 있는 명령으로서, 도메인에 연계된 IP 주소 및 해당 도메인에 대한 요청의 처리 방법에 대한 정보를 제공한다.
DNS의 레코드의 타입은 다음과 같다.
이름 | 설명 |
---|---|
A 레코드 | 호스트 네임과 IPv4 주소를 연결하는 경우를 말한다 |
AAAA 레코드 | 호스트네임과 IPv6 주소를 연결한다 |
CNAME 레코드 | 호스트네임을 다른 호스트네임과 연결한다(다른 호스트네임은 반드시 A 혹은 AAAA 레코드) |
NS 레코드 | 호스트존의 네임서버를 지정. 나를 포함한 이 영역을 가지고 있는 서버의 이름. |
* 호스트 존: 주소록과 비슷한 개념으로, zone은 한 DNS 서버가 담당하는 범위를 의미한다. public 호스트존은 도메인 네임의 IP 주소를 가리키며, private 호스트존은 사설망 내부에서 사용된다.
* SOA 레코드는 메타데이터를, NS 레코드는 네임 서버 정보를 담는다.
CNAME, Alias
CNAME과 Alias는 DNS 레코드의 유형으로, 호스트 이름을 다른 호스트 이름에 매핑하는 데 사용된다.
CNAME 레코드는 이전에 정의된 호스트 이름의 모든 레코드를 복사하여 새 호스트 이름에 할당 하는 식으로 호스트 이름을 다른 호스트 이름으로 매핑한다.
호스트 이름이 변경되었거나 호스트 이름이 서로 다른 IP 주소를 가리키도록 하려는 경우에 유용하다.
루트 도메인이 아닌경우에만 적용가능하다.(ex app.mydomain.com O, mydomain.com X)
Alias 레코드는 호스트 이름을 Amazon S3 버킷, ELB 또는 Amazon CloudFront 분산 된 웹 사이트와 같은 AWS 리소스에 매핑한다. 이를 통해 AWS 리소스에 대한 DNS 레코드를 만들 수 있다. Amazon Route 53에서만 지원된다. EC2는 지원이 불가능하다.
TTL
DNS 레코드가 캐싱될 수 있는 최대 시간을 나타내는 값이다. TTL이 높을수록 DNS 레코드가 캐싱될 수 있는 시간이 더 길어지므로, 캐시 효율성은 높아지지만 IP 주소가 바뀌는 경우에는 TTL을 너무 길게 주면 안된다.(갱신이 필요하기 때문이다) 일반적으로, TTL은 몇 분에서 몇 시간까지로 설정된다.
3. route 53 이용해 DNS 설정
route 53에서 할당받은 도메인 주소를 선택한다.
내용을 확인해보면 위에서 언급한 NS 레코드와 SOA 레코드가 보인다. NS 레코드에 value가 여러개인 이유는 가용성 때문이다.
테스트 레코드를 작성해보자. test 서브도메인을 만들고 임의의 ip를 할당해보자. IPv4이므로 A 레코드 타입을 선택한다.
nslookup으로 테스트 해보면 잘 작동함을 알 수 있다.
이전에 만든 ALB의 DNS와 연결해보자. 첫번째로 CNAME으로 연결할 수 있다. 단 CNAME은 루트 도메인에 바로 할당할 수 없으므로 서브도메인을 정해주어야 한다.
두번째로는 Alias로 연결할 수 있다. 루트도메인에 바로 연결할 수 있다.
4. SSL(TLS) 적용
도메인이 주어졌을 경우 SSL을 적용하여 HTTPS 를 이용할 수 있다.
먼저 ALB의 보안 규칙에 443번 포트를 개방한다.
이후 ALB에서 443번 포트를 listen 하는 listener를 생성한다.
default action foward를 선택하고 target group을 설정한다. 이때 프로토콜은 HTTP를 해도 된다.(내부 연결이므로)
이후 ACM에서 인증서 발급을 진행한다.
인증서 발급시 서브 도메인도 포함시키기 위해 위와같이 루트도메인과 *.루트도메인을 함께 입력한다.
입력한 뒤 인증서 발급을 기다릴 때, 식별을 위한 도메인 레코드를 route 53에 추가해 주어야한다.
인증서 발급이 완료되면 다시 리스너 설정으로 돌아가 SSL 인증서를 할당해준다.
Https 접속이 잘 되는지 확인해본다. 만약 잘 되지 않는다면, 위와같이 인증서를 확인해보자. 인증서 이름과 현재 도메인이 잘 일치하는지 확인해야한다.