CS/네트워크

IPv6 유니캐스트 주소에 대하여

alpacadabra 2023. 11. 5. 14:37

IPv6 유니캐스트 주소는 세 종류로 구분할 수 있다.

 

- 글로벌 유니캐스트

- 유니크 로컬

- 링크 로컬

 

1.

글로벌 유니캐스트 주소는 IPv4의 공인 주소를 생각하면 된다.

각 호스트에 할당되고 인터넷에서 사용할 수 있다.

주소는 2000::/3으로 시작하며 회사와 같은 그룹은 /48, 개인은 /64를 사용하도록 표준화되어 있다.

즉 주소의 절반은 네트워크 부분이고 나머지 절반은 호스트 부분이다.

다만 실질적인 서브넷은 /48과 /64 사이의 16비트로만 구성할 수 있겠다.

그래도 2^16개이므로 충분하다 못해 넘칠 수준이다. 호스트도 물론이고!

 

Cisco 라우터는 기본적으로 유니캐스트 주소를 통한 라우팅이 비활성화되어 있으므로 명령어를 통해 활성화 시켜줘야 한다.

물론 '라우팅'이므로 활성화하지 않아도 IPv6 주소를 가질 수는 있고, 또 같은 네트워크 내에서는 패킷이 얼마든지 전달될 수 있다.

단지 다른 네트워크로 라우팅되지 않을 뿐이다.

 

2.

유니크 로컬은 IPv4의 사설 주소를 생각하면 된다.

10.x.x.x나 192.168.x.x와 같이 fc00::/7로 시작하고 호스트 부분은 마찬가지로 /64이다.

어려운 내용이 아니므로...^^

 

3.

링크 로컬은 같은 링크 내에서만 유효한 주소이다.

링크 로컬 주소는 라우팅 프로토콜과 같이 다른 링크로 전달되어서는 안되는 패킷에 사용된다.

주소는 FE80::/10부터 FEB0::/10까지 사용하는데, 링크 로컬 주소는 IPv6가 활성화된 Cisco 라우터 인터페이스라면 필수로 가져야 하므로 EUI-64 주소로 자동 설정된다.

물론 이는 수동 설정으로 덮어씌울 수 있다.

그리고 수동 설정할 경우 여러 인터페이스들이 같은 링크 로컬 주소를 가질 수도 있다.

 

IPv4와는 달리 IPv6 인터페이스는 주소를 여럿 가지는 경우가 흔하다.

라우팅 프로토콜을 위한 링크 로컬 하나는 필수이고, 인터넷을 위한 글로벌 유니캐스트 하나를 추가로 가지는 것이 일반적이다.

출처 : Flackbox.com

위의 토폴로지에서 글로벌 유니캐스트와 링크 로컬을 테스트해보겠다.

 

PC1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
PC1(config)#int f0/0
PC1(config-if)#ipv6 addr 2001:db8::/64 eui-64
PC1(config-if)#ex
PC1(config)#ipv6 route 2001:db8:0:1::/64 2001:db8::1

먼저 PC1은 EUI-64 주소로 설정하고 R1~R2로의 경로를 추가한다.

참고로 PC1은 Cisco IOS를 에뮬레이팅하고 있다.

 

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#int f0/1
R1(config-if)#ipv6 addr 2001:db8::1/64
R1(config-if)#int f0/0
R1(config-if)#ipv6 addr 2001:db8:0:1::1/64
----------------------------------------------------------------
R2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R2(config)#int f0/0
R2(config-if)#ipv6 addr 2001:db8:0:1::2/64
R2(config-if)#ex
R2(config)#ipv6 route 2001:db8::/64 2001:db8:0:1::1

R1과 R2는 지정된 주소로 설정하고 R2에 PC1~R1의 경로를 추가한다.

이후 PC1에서 R1과 R2로 핑을 시도하면 아래의 결과가 나온다.

 

***R1에게 Ping***
PC1(config)#do ping 2001:db8::1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:db8::1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/1 ms
---------------------------------------------------------------------
***R1의 다른 인터페이스에게 Ping***
PC1(config)#do ping 2001:db8:0:1::1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:db8:0:1::1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/1 ms
---------------------------------------------------------------------
***R2에게 Ping***
PC1(config)#do ping 2001:db8:0:1::2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:db8:0:1::2, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

다른 네트워크에 존재하는 R2로는 핑이 도달하지 못한 듯하다.

그렇다면 이를 가능케 하려면 어떻게 해야 할까?

 

R1(config)#ipv6 unicast-routing

위의 명령어를 입력해주면 무사히 핑이 완료된다.

글로벌 유니캐스트 주소로는 핑이 도달하는 것을 확인했으니 이제 로컬 링크 주소로 시도해보자.

 

R2#sh ipv6 int f0/0
FastEthernet0/0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::204:9AFF:FE96:A9A5
  No Virtual link-local address(es):
  Global unicast address(es):
    2001:DB8:0:1::2, subnet is 2001:DB8:0:1::/64
  Joined group address(es):
    FF02::1:FF00:2
    FF02::1:FF96:A9A5
  MTU is 1500 bytes
  ICMP error messages limited to one every 100 milliseconds
  ICMP redirects are enabled
  ICMP unreachables are sent
  ND DAD is enabled, number of DAD attempts: 1
  ND reachable time is 30000 milliseconds

링크 로컬 주소를 따로 설정한 적이 없는데도 FE80::204:9AFF:FE96:A9A5로 자동 생성되었음을 알 수 있는데, 여기서 FF:FE는 EUI-64 주소를 생성하기 위한 규칙이다.

48비트 MAC 주소의 중간에 FF:FE를 삽입하고 7번째 비트를 반전함으로써 64비트의 EUI-64 주소를 생성할 수 있는 것이다.

이제 확인된 주소로 핑을 시도해보면,

 

PC1#ping FE80::204:9AFF:FE96:A9A5
Output Interface: FastEthernet0/0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to FE80::204:9AFF:FE96:A9A5, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

수십 번을 시도해도 핑이 실패하는 모습을 볼 수 있다.

이는 링크 로컬 주소가 PC1~R1 세그먼트에서만 유효하여 R1~R2에서는 사용할 수 없기 때문이다.

또한 이러한 이유로 링크 로컬 주소는 중복될 수 있어 핑의 출력 인터페이스를 지정해 주어야 한다.

 

R1#ping FE80::204:9AFF:FE96:A9A5
Output Interface: FastEthernet0/0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to FE80::204:9AFF:FE96:A9A5, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/3/16 ms

R1에서는 당연하다는 듯이 핑이 완료된다.