1. 목표
•
AWS 퍼블릭 IPv4 과금 정책(’24.02)에 따라 IPv6 워크로드가 가능한 인스턴스에 대한 IPv6 환경 검토 중가 필요합니다.
•
IPv6 전용 서브넷에 IPv6 전용 인스턴스를 구성하며 NAT64와 DNS64를 통해 IPv6에서 IPv4까지 통신 가능한 환경을 구성합니다.
•
2. 기본 환경 구성
구성 요소
VPC
Subnet - Dualstack Subnet
Subnet - IPv6 Only Subnet
IGW
NAT GW
Routing Table - Dualstack Routing Table
Routing Table - IPv6 Routing Table
EC2 - Bastion Host
EC2 - IPv6 Only Host
약식 구성도
[Caption] 테스트 구성도
3. 통신 확인 (IPv6 ⇒ IPv6, IPv6 ⇒ IPv4)
BastionHost SSH 접근 후 IPv6Host로 SSH 접근
ping6 2406:da12:41a:1e20:39ae:5094:895d:4173
Shell
복사
# IPv6Host의 IPv6 주소 확인 후 ping 테스트
ssh 2406:da12:41a:1e20:39ae:5094:895d:4173
Bash
복사
# 암호 기반으로 SSH 접근 수행
=========================================
INPUT:
password: qwe123
:END
Bash
복사
IPv6 Host SSH 접근 - IPv6 to IPv6 통신 확인
ifconfig
Shell
복사
# 인터페이스 IPv6 주소 확인
=========================================
OUTPUT:
ens5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 169.254.25.196 netmask 255.255.255.255 broadcast 0.0.0.0
inet6 2406:da12:41a:1e20:39ae:5094:895d:4173 prefixlen 128 scopeid 0x0<global>
inet6 fe80::c5c:6bff:fe49:cedc prefixlen 64 scopeid 0x20<link>
ether 0e:5c:6b:49:ce:dc txqueuelen 1000 (Ethernet)
RX packets 18946 bytes 24728419 (23.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3201 bytes 334692 (326.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
:END
Bash
복사
curl google.com
Bash
복사
# google.com 접근 (성공 - redirect)
=========================================
OUTPUT:
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
:END
Bash
복사
nslookup google.com
Bash
복사
# google.com 도메인 정보 확인
=========================================
OUTPUT:
Server: fd00:ec2::253
Address: fd00:ec2::253#53
Non-authoritative answer:
Name: google.com
Address: 142.250.206.206
Name: google.com
Address: 2404:6800:400a:813::200e
:END
Bash
복사
•
google.com 서버는 Dualstack으로 IPv4와 IPv6 모두 지원합니다.
•
IPv6Host는 IPv6 주소로 통신 가능합니다. (IPv6Host ⇒ ::/0 ⇒ IGW)
IPv6 Host SSH 접근 - IPv6 to IPv4 통신 확인
curl ipinfo.io
Shell
복사
# ipinfo.io 접근 (실패)
=========================================
OUTPUT:
curl: (7) Failed to connect to ipinfo.io port 80 after 3145 ms: Couldn't connect to server
:END
Bash
복사
nslookup ipinfo.io
Bash
복사
# ipinfo.io 도메인 정보 확인
=========================================
OUTPUT:
Server: fd00:ec2::253
Address: fd00:ec2::253#53
Non-authoritative answer:
Name: ipinfo.io
Address: 34.117.186.192
:END
Bash
복사
•
ipinfo.io에 접근이 실패되는 것은 해당 서버는 IPv4만 지원하여 IPv6Host는 IPv6 only로 IPv4를 사용할 수 없으니 접근이 불가합니다.
IPv6SN에 DNS64 비활성화 => 활성화
•
현재 DNS64 기능이 비활성화 상태
[Caption] DNS64 비활성화 상태
•
IPv6SN 선택 ⇒ 작업 ⇒ 서브넷 설정 편집 ⇒ DNS64 활성화 [Check]
[Caption] DNS64 활성화 상태로 전환
curl ipinfo.io
Shell
복사
# ipinfo.io 접근 (성공)
=========================================
OUTPUT:
{
"ip": "43.201.122.37",
"hostname": "ec2-43-201-122-37.ap-northeast-2.compute.amazonaws.com",
"city": "Incheon",
"region": "Incheon",
"country": "KR",
"loc": "37.4565,126.7052",
"org": "AS16509 Amazon.com, Inc.",
"postal": "21505",
"timezone": "Asia/Seoul",
"readme": "https://ipinfo.io/missingauth"
...
:END
Bash
복사
nslookup ipinfo.io
Bash
복사
# ipinfo.io 도메인 정보 확인
=========================================
OUTPUT:
Server: fd00:ec2::253
Address: fd00:ec2::253#53
Non-authoritative answer:
Name: ipinfo.io
Address: 34.117.186.192
Name: ipinfo.io
Address: 64:ff9b::2275:bac0
:END
Bash
복사
•
DNS64를 활성화하면 Amazon Route53 Resolver를 통해 64:ff9b::/96으로 AAAA 레코드 응답해 줍니다.
•
64:ff9b::/96은 Well-Known Prefix로 IPv4 주소를 16진수로 전환해서 주소를 정의합니다.
◦
34.117.186.192
▪
34 ⇒ 0x22
▪
117 ⇒ 0x75
▪
186 ⇒ 0xba
▪
192 ⇒ 0xc0
◦
즉, 64:ff9b::2275:bac0
•
또한 통신을 위해 IPv6를 IPv4로 변환하는 NAT64 동작이 필요하며, NAT Gateway를 생성하면 별도의 설정 없이 동작 가능합니다.
•
결론적으로 IPv6 only 환경에서 IPv4로 통신할 때 DNS64에 의해 Well-Known Prefix IPv6 주소를 응답받고 NAT64로 라우팅하여 통신합니다. (IPv6Host ⇒ 64:ff9b::/96 ⇒ NAT64 ⇒ IGW)
[Caption] 라우팅 테이블 확인
•
IPv6Host가 속한 서브넷의 라우팅 테이블을 확인하면 미리 Well-Known Prefix(64:ff9b::/96)에 대해 NAT GW로 향하는 경로로 설정니다.
4. 자원 삭제
•
NAT Gateway 삭제
•
EC2 인스턴스 삭제
•
탄력적 IP 주소 릴리스
•
Route53 레코드 삭제
•
VPC 삭제