Linux 에서 IPv6 주소 구성 및 확인하기

CompTIABeginner
지금 연습하기

소개

이 실습에서는 Linux 시스템에서 IPv6 주소를 구성하고 확인하는 기본 기술을 배우게 됩니다. 최신 명령줄 도구를 사용하여 검사부터 정적 구성 및 연결 테스트에 이르기까지 IPv6 네트워크 관리의 필수 작업에 대한 실습 경험을 쌓게 됩니다. 이 실습은 Ubuntu 22.04 와 같은 최신 Linux 배포판에서 표준인 iproute2 제품군의 ip 명령과 ping6 유틸리티 사용에 중점을 둡니다.

먼저 ip a 명령을 사용하여 네트워크 인터페이스에서 자동으로 구성된 IPv6 루프백 및 링크 - 로컬 주소를 확인합니다. 다음으로 인터페이스에 정적 글로벌 유니캐스트 주소를 수동으로 할당합니다. 마지막으로 ping6 명령을 사용하여 루프백, 링크 - 로컬 및 새로 구성된 글로벌 유니캐스트 주소에 대한 네트워크 연결을 확인하여 IPv6 설정이 올바르게 작동하는지 확인합니다.

ip a 명령으로 링크 - 로컬 및 루프백 주소 확인하기

이 단계에서는 시스템에 자동으로 구성된 IPv6 주소를 검색하는 방법을 배우게 됩니다. Ubuntu 22.04 를 포함한 최신 Linux 배포판은 기본적으로 IPv6 가 활성화되어 있습니다. Linux 에서 네트워크 구성 및 검사에 대한 최신 권장 도구인 ip 명령을 사용합니다.

먼저 네트워크 인터페이스와 할당된 주소를 검사해 보겠습니다. ip a 명령은 ip address의 약어입니다.

  1. 터미널을 엽니다. 기본 경로는 ~/project입니다.
  2. ip a 명령을 실행하여 모든 네트워크 인터페이스와 해당 주소를 나열합니다.
ip a

다음과 유사한 출력이 표시됩니다. 인터페이스 이름 (예: eth0) 과 주소는 다를 수 있지만 구조는 동일합니다.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:00:54:72 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.16.50.202/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
       valid_lft 1892159972sec preferred_lft 1892159972sec
    inet6 fe80::216:3eff:fe00:5472/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:89:01:6f:fc brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

이제 출력을 분석하여 주요 IPv6 주소를 식별해 보겠습니다.

  • 루프백 주소: lo라는 인터페이스를 확인합니다. 이것은 로컬 머신의 네트워크 스택을 테스트하는 데 사용되는 가상 루프백 인터페이스입니다. IPv4 의 127.0.0.1에 해당하는 IPv6 루프백 주소인 ::1/128을 볼 수 있습니다. scope host는 호스트 자체 내에서만 유효함을 나타냅니다.

  • 링크 - 로컬 주소: 기본 네트워크 인터페이스 (예: eth0, enp0s3) 를 확인합니다. fe80::로 시작하는 inet6 주소를 찾을 수 있습니다. 이것이 링크 - 로컬 주소입니다. IPv6 가 활성화된 모든 인터페이스에 자동으로 할당되며 로컬 네트워크 세그먼트 (예: 로컬 이더넷 LAN) 에서만 통신하는 데 사용됩니다. scope link는 이 주소가 로컬 링크에서만 유효하며 인터넷에서 라우팅되지 않음을 확인합니다.

이제 시스템에서 자동으로 구성된 두 가지 기본 유형의 IPv6 주소를 성공적으로 식별했습니다.

ip addr add 명령으로 정적 글로벌 유니캐스트 주소 추가하기

이 단계에서는 네트워크 인터페이스에 글로벌 유니캐스트 주소 (GUA) 를 수동으로 구성합니다. 링크 - 로컬 주소는 로컬 네트워크 세그먼트의 통신에 사용되는 반면, GUA 는 공개 IPv4 주소에 해당하는 IPv6 입니다. GUA 는 전역적으로 고유하며 인터넷에서 라우팅 가능합니다.

이 실습에서는 문서 및 예제를 위해 특별히 예약된 2001:db8::/32 블록의 주소를 사용합니다. 이를 통해 실제 사용 중인 인터넷 주소를 실수로 사용하는 것을 방지할 수 있습니다.

  1. eth0 인터페이스에 정적 GUA 2001:db8:acad::1/64를 추가합니다. /64는 대부분의 LAN 에 표준인 접두사 길이를 나타냅니다. 네트워크 인터페이스 수정에는 관리자 권한이 필요하므로 sudo가 필요합니다.

    sudo ip -6 addr add 2001:db8:acad::1/64 dev eth0
    
    • 참고: 이 변경 사항은 임시적이며 시스템을 재부팅하면 제거됩니다. Ubuntu 에서 영구 구성을 하려면 일반적으로 /etc/netplan/의 파일을 편집해야 하지만, 이는 이 실습의 범위를 벗어납니다.
  2. 이제 새 GUA 가 성공적으로 할당되었는지 확인합니다. 네트워크 인터페이스를 검사하기 위해 ip a 명령을 다시 실행합니다.

    ip a
    

    이제 eth0 인터페이스 아래에 새 주소가 나열된 것을 볼 수 있습니다. 라우팅 가능한 주소임을 나타내는 scope global에 주목하십시오.

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        ...
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:00:54:72 brd ff:ff:ff:ff:ff:ff
        altname enp0s5
        altname ens5
        inet 172.16.50.202/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
           valid_lft 1892159959sec preferred_lft 1892159959sec
        inet6 2001:db8:acad::1/64 scope global
           valid_lft forever preferred_lft forever
        inet6 fe80::216:3eff:fe00:5472/64 scope link
           valid_lft forever preferred_lft forever
    

네트워크 인터페이스에 정적 IPv6 GUA 를 성공적으로 할당했습니다. 다음 단계에서는 이 새 주소로의 연결을 테스트합니다.

ping6 명령으로 루프백 및 GUA 연결 테스트하기

이 단계에서는 ping6 유틸리티를 사용하여 IPv6 연결을 테스트합니다. 이 명령은 익숙한 ping 명령의 IPv6 버전이며 네트워크 진단에 필수적입니다. 로컬 IPv6 스택이 올바르게 작동하고 이전 단계에서 구성한 글로벌 유니캐스트 주소 (GUA) 가 응답하는지 확인할 것입니다.

먼저 루프백 주소를 ping 하여 로컬 IPv6 스택을 테스트해 보겠습니다.

  1. IPv6 루프백 주소 ::1을 ping 합니다. 무기한 ping 하는 대신 3 개의 패킷만 보내기 위해 -c 3 옵션을 사용합니다.

    ping6 -c 3 ::1
    

    성공적인 테스트는 패킷 손실 0% 로 패킷이 송수신되었음을 보여주며, 로컬 IPv6 스택이 작동 중임을 확인합니다.

    PING ::1(::1) 56 data bytes
    64 bytes from ::1: icmp_seq=1 ttl=64 time=0.026 ms
    64 bytes from ::1: icmp_seq=2 ttl=64 time=0.021 ms
    64 bytes from ::1: icmp_seq=3 ttl=64 time=0.035 ms
    
    --- ::1 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2030ms
    rtt min/avg/max/mdev = 0.021/0.027/0.035/0.005 ms
    

다음으로, 이전 단계에서 eth0 인터페이스에 수동으로 할당한 GUA 를 테스트해 보겠습니다. 이를 통해 인터페이스가 올바르게 구성되었고 해당 주소에서 수신 대기 중인지 확인할 수 있습니다.

  1. 이전 단계에서 추가한 GUA 2001:db8:acad::1을 ping 합니다.

    ping6 -c 3 2001:db8:acad::1
    

    루프백 테스트와 유사하게 성공적인 결과는 주소로부터의 응답을 보여주며, 해당 주소가 올바르게 할당되었고 호스트에서 도달 가능하다는 것을 확인합니다.

    PING 2001:db8:acad::1(2001:db8:acad::1) 56 data bytes
    64 bytes from 2001:db8:acad::1: icmp_seq=1 ttl=64 time=0.028 ms
    64 bytes from 2001:db8:acad::1: icmp_seq=2 ttl=64 time=0.037 ms
    64 bytes from 2001:db8:acad::1: icmp_seq=3 ttl=64 time=0.038 ms
    
    --- 2001:db8:acad::1 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2034ms
    rtt min/avg/max/mdev = 0.028/0.034/0.038/0.004 ms
    

이제 루프백과 수동으로 구성한 글로벌 유니캐스트 주소 모두에 대한 연결을 성공적으로 확인했습니다.

ping6 명령으로 링크 - 로컬 주소 연결 테스트하기

이 단계에서는 링크 - 로컬 주소에 대한 연결을 테스트하는 방법을 배웁니다. 이전에 확인했듯이 이러한 주소는 fe80::으로 시작하며 단일 네트워크 세그먼트 ("링크") 에서만 유효합니다. 전역적으로 고유하지 않기 때문에 ping 을 보낼 네트워크 인터페이스를 지정하기 위해 ping6 명령에 추가 정보를 제공해야 합니다. 이는 "존 인덱스 (zone index)" 또는 "스코프 ID(scope ID)"로 알려져 있습니다.

먼저 eth0 인터페이스의 링크 - 로컬 주소를 다시 찾아야 합니다.

  1. ip a 명령을 실행하고 eth0 인터페이스에 대한 fe80::으로 시작하는 inet6 주소를 식별합니다.

    ip a show eth0
    

    출력은 다음과 유사합니다. 주소 (예: fe80::xxxx:xxff:fexx:xxxx) 를 복사해야 합니다.

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:00:54:72 brd ff:ff:ff:ff:ff:ff
        altname enp0s5
        altname ens5
        inet 172.16.50.202/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
           valid_lft 1892159869sec preferred_lft 1892159869sec
        inet6 2001:db8:acad::1/64 scope global
           valid_lft forever preferred_lft forever
        inet6 fe80::216:3eff:fe00:5472/64 scope link
           valid_lft forever preferred_lft forever
    
  2. 이제 이 링크 - 로컬 주소를 ping 합니다. 존 인덱스를 지정하려면 주소에 % 뒤에 인터페이스 이름 (eth0) 을 추가합니다. YOUR_LINK_LOCAL_ADDRESS를 방금 찾은 실제 주소로 바꿉니다.

    ping6 -c 3 YOUR_LINK_LOCAL_ADDRESS%eth0
    

    예를 들어 주소가 fe80::216:3eff:fe00:5472였다면 명령은 다음과 같습니다. ping6 -c 3 fe80::216:3eff:fe00:5472%eth0

    성공적인 ping 은 인터페이스가 링크 - 로컬 주소에 응답하고 있음을 확인합니다.

    PING fe80::216:3eff:fe00:5472%eth0(fe80::216:3eff:fe00:5472%eth0) 56 data bytes
    64 bytes from fe80::216:3eff:fe00:5472%eth0: icmp_seq=1 ttl=64 time=0.031 ms
    64 bytes from fe80::216:3eff:fe00:5472%eth0: icmp_seq=2 ttl=64 time=0.030 ms
    64 bytes from fe80::216:3eff:fe00:5472%eth0: icmp_seq=3 ttl=64 time=0.030 ms
    
    --- fe80::216:3eff:fe00:5472%eth0 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2028ms
    rtt min/avg/max/mdev = 0.030/0.030/0.031/0.000 ms
    

    %eth0 부분을 생략하면 시스템이 링크 - 로컬 대상에 사용할 인터페이스를 알 수 없으므로 명령이 실패합니다. 이 특수 구문은 링크 - 로컬 IPv6 주소를 처리하는 핵심 개념입니다.

요약

이 실습에서는 ip 명령 제품군을 사용하여 Linux 시스템에서 기본적인 IPv6 구성 및 확인 작업을 수행하는 방법을 배웠습니다. ip a를 사용하여 네트워크 인터페이스를 검사하는 것으로 시작하여 lo 인터페이스의 자동으로 할당된 IPv6 루프백 주소 (::1) 와 기본 네트워크 인터페이스의 링크 - 로컬 주소 (fe80::로 시작) 를 성공적으로 식별했습니다. 그런 다음 ip addr add 명령을 사용하여 기본 인터페이스에 정적 글로벌 유니캐스트 주소 (GUA) 를 수동으로 구성했습니다.

구성을 검증하기 위해 ping6 유틸리티를 사용했습니다. 루프백 주소를 ping 하여 로컬 네트워크 스택이 작동 중임을 확인했으며 정적 GUA 가 올바르게 할당되고 도달 가능하다는 것을 검증했습니다. 마지막으로, 링크 - 로컬 주소를 테스트하기 위한 특정 요구 사항을 배웠는데, 이는 이러한 주소의 link 스코프 때문에 필요한 단계인 존 인덱스 (발신 인터페이스) 를 명시적으로 지정하기 위해 ping6와 함께 %interface 구문을 사용하는 것을 포함합니다.