
IPv6 Stateless Address Auto-configuration (SLAAC) | NetworkAcademy.io
네트워크의 각 IPv6 노드는 로컬 세그먼트를 벗어나 통신하기 위해 고유한 글로벌 주소가 필요하다. 이런 주소를 얻기 위한 몇 가지 방법이 있다.
- Manual assignment
- 모든 노드는 관리자가 수동으로 IPv6 주소를 설정할 수 있다. 그러나 이는 확장성이 떨어지고 사람의 실수에 취약한 방법이다.
- DHCPv6 (The Dynamic Host Configuration Protocol version 6)
- 호스트에게 주소를 동적으로 할당하는 가장 널리 채택된 프로토콜이다. 이 프로토콜은 네트워크에 DHCP 서버가 필요하며, 추가적인 설정이 요구된다.
- SLAAC (Stateless Address Autoconfiguration)
- IPv6 자동 주소 지정에 있어 더 간단하고 직관적인 접근 방식을 제공하기 위해 설계되었다. 현재 RFC 4862에 정의된 구현에서는 SLAAC가 호스트에 DNS 서버 주소를 제공하지 않으며, 이 때문에 현재 널리 채택되지 않고 있다.
What is SLAAC?
SLAAC는 Stateless Address Autoconfiguration의 약자로, 네트워크의 각 호스트가 어떤 장치도 어떤 주소가 어떤 노드에 할당되었는지를 추적하지 않고 고유한 IPv6 주소를 자동으로 구성할 수 있게 해주는 메커니즘이다. 주소 할당에서 Stateless와 Stateful는 다음과 같은 의미를 갖는다.
- Stateful 주소 할당은 각 할당의 상태를 추적하는 서버나 다른 장치가 포함된다. 이 장치는 주소 풀의 가용성을 추적하고, 주소 중복 충돌을 해결한다. 또한, 모든 할당을 기록하고 만료 시간을 추적한다.
- Stateless 주소 할당은 어떤 서버도 할당된 주소와 아직 할당되지 않은 주소를 추적하지 않는다는 것을 의미한다. 또한, Stateless 주소 할당 시나리오에서는 노드가 주소 중복 충돌을 해결할 책임이 있다. 그 과정은 다음과 같다: IPv6 주소를 생성하고, 중복 주소 검출(Duplicate Address Detection, DAD)을 실행한다. 만약 해당 주소가 이미 사용 중이라면, 다른 주소를 생성하고 DAD를 다시 실행하는 방식이다.
How does SLAAC work?
IPv6 자동 주소 지정이 어떻게 작동하는지 완전히 이해하려면, IPv6 노드가 네트워크에 연결된 순간부터 고유한 글로벌 유니캐스트 주소를 가지게 되는 순간까지의 단계를 살펴본다.
Step 1: The node configures itself with a link-local address
IPv6 노드가 IPv6가 활성화된 네트워크에 연결되면, 가장 먼저 수행하는 작업은 link-local address를 자동으로 구성하는 것이다. 이 로컬 주소의 목적은 노드가 로컬 세그먼트 내의 다른 IPv6 장치들과 Layer 3(Network Layer, Router)에서 통신할 수 있도록 하는 것이다. 링크 로컬 주소를 자동으로 구성하는 가장 널리 채택된 방법은 link-local prefix FE80::/64와 인터페이스의 MAC 주소에서 생성된 EUI-64 interface identifier를 결합하는 것이다.
아래 그림은 MAC 주소 7007.1234.5678에서 어떻게 로컬 주소가 생성되는지 단계별로 보여준다.

위 단계들이 완료되면, 노드는 아래와 같이 완전한 EUI-64 형식의 링크 로컬 주소를 가지게 된다:
C:\\>ipconfig /all
Ethernet adapter Ethernet0:
Connection-specific DNS Suffix..:
Physical Address................: 7007.1234.5678
Link-local IPv6 Address.........: **FE80::7207:12FF:FE34:5678**
IP Address......................: 0.0.0.0
Subnet Mask.....................: 0.0.0.0
Default Gateway.................: 0.0.0.0
DNS Servers.....................: 0.0.0.0
DHCP Servers....................: 0.0.0.0
DHCPv6 Client DUID..............: 00-01-00-01-C4-35-08-8E-70-07-12-34-56-78
Step 2: The node performs Duplicate Address Detection (DAD)
IPv6 호스트가 링크 로컬 주소를 자동으로 구성한 후, 해당 주소가 실제로 로컬 세그먼트 내에서 고유한지 확인해야 한다. 다른 노드가 동일한 주소를 가질 확률은 매우 낮지만, 호스트는 주소 중복 검출(Duplicate Address Detection, DAD)이라는 과정을 수행해야 한다.
DAD는 solicited-node multicast라고 불리는 특별한 유형의 주소를 사용하는 메커니즘이다. IPv6 주소를 구성한 후, 모든 노드는 주소 FF02::1:FFxx:xxxx로 식별되는 멀티캐스트 그룹에 가입한다. 여기서 xx:xxxx는 IPv6 유니캐스트 주소의 마지막 6개의 16진수 값이다. 따라서 링크 로컬 주소든 글로벌 주소든 관계없이, 각 구성된 유니캐스트 주소에 대해 호스트는 자동 생성된 해당 solicited-node multicast 그룹에 가입한다.
예시에서 링크 로컬 주소의 마지막 6개의 16진수 값은 34:5678이므로, 노드는 멀티캐스트 그룹 FF02::1:FF34:5678에 가입한다. PC1이 Windows 10 운영 체제를 실행 중이라면, 다음 명령어를 통해 이를 확인할 수 있다:
C:\\>netsh interface ipv6 show joins
Interface 8: Ethernet0
Scope References Last Address
---------- ---------- ---- ---------------------------------
0 0 Yes ff01::1
0 0 Yes ff02::1
0 1 Yes ff02::c
0 2 Yes ff02::fb
0 1 Yes ff02::1:3
0 2 Yes ff02::1:ff34:5678
이 로직을 염두에 두고, 만약 다른 호스트가 동일한 링크 로컬 주소를 가지고 있다면, 해당 호스트도 이 주소에서 자동 생성된 solicited-node multicast 그룹인 FF02::1:FF34:5678에서 메시지를 수신하고 있을 것이다.
이를 확인하기 위해 PC1은 목적지 주소를 이 멀티캐스트 그룹으로 설정하고, 출발지 주소를 IPv6 미지정 주소로 설정한 ICMPv6 메시지를 전송한다. ICMPv6 패킷의 타겟 주소 필드에는 PC1이 전체 주소를 입력한다. 아래 그림이 이 과정을 설명한다.
그 후 PC1은 네트워크에 패킷을 전송한다. 이 멀티캐스트 그룹을 듣고 있는 노드만 패킷을 열고, 다른 모든 노드는 이를 폐기한다. 만약 어떤 노드가 IPv6 주소의 마지막 6개의 16진수 값이 동일한 주소를 가지고 있다면, ICMPv6 부분을 확인하여 타겟 주소가 자신의 주소와 일치하는지 검사한다. 일치하는 주소가 있으면, 해당 호스트는 이 IPv6 주소가 이미 사용 중이라고 응답한다. 만약 아무도 응답하지 않으면, PC1은 이 주소가 고유하고 사용할 수 있다는 결론을 내리고, 주소를 할당한다.

이 과정은 주소 중복 검출(Duplicate Address Detection, DAD)이라고 불리며, 새로운 주소 할당이 있을 때마다 수행된다. 예시에서 PC1은 Figure 2에 표시된 것처럼 ICMPv6 이웃 요청(Neighbor Solicitation, 0x85) 메시지를 전송하고, 아무도 응답하지 않는다. 그러면 PC1은 이 링크 로컬 주소가 이 로컬 세그먼트 내에서 고유하다는 것을 확신할 수 있다.
Step 3: The node sends a Router Solicitation message
이 예시에서 Step 1과 Step 2는 고유한 링크 로컬 주소를 생성하고 할당하는 과정을 나타낸다. 이 과정은 정확히 상태 비저장 자동 구성(Stateless Autoconfiguration, SLAAC) 기능의 일부는 아니지만, 링크 로컬 주소 없이는 PC1이 다른 IPv6 노드와 Layer 3에서 통신할 수 없기 때문에 SLAAC가 작동하기 위한 전제 조건이다.
PC1이 링크 로컬 주소를 가진 후, 이제 SLAAC를 사용하여 글로벌 유니캐스트 주소를 자동으로 구성하는 과정을 시작할 수 있다. 이 과정의 첫 번째 단계는 라우터 요청(Router Solicitation, RS)이라고 불리는 ICMPv6 메시지를 전송하는 것이다. 이 메시지의 목적은 이 세그먼트에 연결된 모든 IPv6 라우터에게 사용 중인 글로벌 유니캐스트 접두어에 대해 '요청'하는 것이다. 목적지 주소는 모든 라우터를 위한 멀티캐스트 주소 FF02::2이며, 출발지 주소는 PC1의 링크 로컬 주소를 사용한다. FF02::2 멀티캐스트 그룹에 가입된 노드는 라우터만 있기 때문에, 이 메시지는 오직 라우터 1만 처리하고, 로컬 세그먼트의 다른 모든 노드는 이를 폐기한다.
Router 1이 라우터 요청(Router Solicitation, RS) 메시지를 받은 후, 라우터 광고(Router Advertisement, RA)라는 ICMPv6 메시지로 응답한다. RA 메시지에는 링크에서 사용되는 글로벌 IPv6 prefix와 prefix length가 포함된다. 예시에서는 접두어 2001:1234:A:b::와 접두어 길이 /64가 해당된다. 이 RA 패킷의 출발지 주소로는 Router 1의 링크 로컬 주소가 사용되며, 목적지 주소는 모든 노드를 위한 멀티캐스트 주소 FF02::1이다. 이 과정은 Figure 3에 설명되어 있다.



Step 4: The node configures its global unicast address
PC1이 Router 1으로부터 라우터 광고(Router Advertisement, RA)를 받은 후, 접두어 2001:1234:A:B::/64와 자신의 EUI-64 인터페이스 식별자(7207:12FF:FE34:5678)를 결합하여 글로벌 유니캐스트 주소 2001:1234:A:B:7207:12FF:FE34:5678/64를 생성한다. 라우터 광고가 Router 1에서 왔기 때문에, PC1은 IPv6 기본 게이트웨이를 Router 1의 링크 로컬 주소로 설정한다.
이제 PC1은 글로벌 유니캐스트 주소와 기본 게이트웨이를 가지게 되었다. 그러나 SLAAC 과정은 아직 완료되지 않았다. PC1은 이 자동 생성된 주소가 로컬 세그먼트에서 고유한지 확실히 알아야 한다. 따라서 PC1은 주소 중복 검출(DAD) 과정을 수행한다.
Step 5: The node performs Duplicate Address Detection (DAD)
PC1이 글로벌 유니캐스트 주소를 자동 생성하면, 바로 자동 생성된 solicited-node multicast 그룹 FF02::1:FF34:5678에 가입한다. 이 주소를 다른 노드가 사용하고 있지 않다는 것을 확실히 하기 위해, PC1은 ICMPv6 메시지인 이웃 요청(Neighbor Solicitation)을 solicited-node 주소 FF02::1:FF34:5678로 보내고, 노드가 응답하는지 확인한다. 만약 응답이 없다면, PC1은 이 주소가 고유하다는 것을 알고, 로컬 세그먼트를 넘어 인터넷을 포함한 다른 통신에 사용할 수 있게 된다.


The problem with SLAAC
지금까지 노드가 어떻게 전역적으로 고유한 IPv6 주소와 기본 게이트웨이를 자동으로 구성할 수 있는지 살펴보았다. 하지만 SLAAC는 DNS 정보를 제공하지 않으며, DNS 없이는 인터넷 서핑과 같은 많은 서비스가 불가능하다. 라우터 광고(Router Advertisement) 헤더에는 이 문제를 해결하기 위해 설계된 필드가 있다.
Router Advertisement Flags
위에서 언급했듯이, 기본적으로 SLAAC는 DNS를 제공하지 않는다. DNS가 없으면 URL 주소에서 IP로의 해석이 필요한 많은 서비스가 작동하지 않는다. RA 메시지에는 노드가 IPv6 주소와 DNS 정보를 어디에서 가져와야 하는지 이해하는 데 도움이 되는 필드가 있다.

M-flag가 1로 설정되면, 이는 주소가 DHCPv6를 통해 제공된다는 것을 의미한다. 라우터는 기본적으로 노드에게 DHCP 서버에 주소와 DNS 정보를 요청하라고 알려주는 것이다. M-flag가 설정되면 O-flag는 무시할 수 있다. 왜냐하면 DHCPv6가 사용 가능한 모든 정보를 반환하기 때문이다.
O-flag가 1로 설정되면, 이는 DNS 정보가 DHCPv6를 통해 제공된다는 것을 의미한다. 라우터는 기본적으로 노드에게 SLAAC를 통해 주소를 자동 구성하고, DHCP 서버에 DNS 정보를 요청하라고 알려주는 것이다.
M 또는 O flag가 모두 설정되지 않으면, 이는 해당 세그먼트에 DHCPv6 서버가 없다는 것을 의미한다.
Prf-flag(Default Router Preference)는 Low(1), Medium(0), 또는 High(3)로 설정할 수 있다. 노드가 여러 라우터로부터 RA를 받을 때, 기본 라우터 선호도(Default Router Preference, DRP)는 기본 게이트웨이로 어떤 라우터를 선호할지 결정하는 데 사용된다.

'조민우' 카테고리의 다른 글
| CVE-2019-13288 (0) | 2025.01.31 |
|---|

stellarflare 님의 블로그 입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!