2. 주소, 서브넷, 네트워크 인터페이스
지원 버전: Ubuntu Server 24.04 LTS(기본), Rocky Linux 9(대안) 마지막 업데이트: 2026년 9월 15일
이전: Linux 터미널 | 과정 준비 | 퀴즈 | 다음: 영구 네트워크 설정
네트워크 인터페이스에 케이블이 연결되고 주소까지 있어도 서비스에 접근하지 못할 수 있습니다. 이들은 서로 다른 계층의 문제입니다. 먼저 메시지가 계층을 지나는 과정을 이해하고, 작은 로컬 IPv4 네트워크를 직접 만들어 차이를 관찰해 봅니다.
사전 준비와 학습 목표
1장을 마치고 일반 계정, sudo, 변수, 고유한 임시 디렉터리, VM 콘솔을 사용할 수 있어야 합니다. 버려도 되는 로컬 VM 두 대를 준비합니다. 둘 다 Ubuntu Server 24.04 LTS를 사용해도 되며 Rocky Linux 9는 대안 관리 경로입니다. 명령에는 iproute2(Rocky 패키지 이름은 iproute)와 iputils의 ping이 필요하므로 미리 준비하세요. 이번 장에서는 패키지를 설치하지 않습니다.
과정 준비의 설명에 따라 하이퍼바이저에서 다음 환경을 준비합니다. **내부 전용(internal-only)**은 두 가상 NIC가 DHCP 서버, 라우터, 외부 업링크가 없는 동일한 격리 가상 네트워크에 연결된다는 뜻입니다. 호스트 전용(host-only) 네트워크는 자동으로 같은 조건이 되지 않습니다. 하이퍼바이저가 호스트 접근이나 DHCP를 제공할 수 있기 때문입니다.
| 게스트 역할 | 기존 관리 NIC | 별도 내부 실습 NIC |
|---|---|---|
| 클라이언트 | 기존 NAT/DHCP 연결 유지 | 192.0.2.10/24, 게이트웨이·DNS 없음 |
| 서버 | 기존 NAT/DHCP 연결 유지 | 192.0.2.20/24, 게이트웨이·DNS 없음 |
하이퍼바이저 설정에서 각 게스트의 두 NIC 모두의 MAC 주소와 연결된 가상 네트워크를 기록합니다. 두 게스트의 MAC 주소는 달라야 합니다. 콘솔도 계속 열어 두세요. 192.0.2.0/24는 문서용 예약 대역(RFC 5737)이므로 이 격리 실습에서만 사용하며 실제 인터넷 목적지로 사용하지 않습니다. 실습 NIC를 집·회사·클라우드 네트워크에 브리지로 연결하지 마세요.
이 장을 마치면 다음을 할 수 있습니다.
- Ethernet 프레임, IP 패킷, 전송 계층 포트, 애플리케이션 서비스를 구분합니다.
- 서브넷 경계를 계산하고 목적지가 로컬인지 라우터가 필요한지 판단합니다.
- 게이트웨이, DHCP, DNS, ARP, IPv6 이웃 탐색의 역할을 설명합니다.
- 인터페이스 이름을 추측하지 않고 게스트 인터페이스와 하이퍼바이저 NIC를 연결합니다.
- 링크·주소·경로·이웃을 조회하고, 각 실습 NIC에 임시 IPv4 주소 하나를 추가한 뒤 정확히 되돌립니다.
실행 규칙: 명령은 지정한 실습 VM 안에서만 실행하며 sudo가 붙지 않으면 일반 사용자로 실행합니다. 물리 호스트나 문서 저장소 호스트를 설정하지 않습니다. “각 VM”은 각자의 콘솔에서 따로 반복하라는 뜻이며 변수도 그 셸에만 있습니다. 출력은 설명용 예시로 실제 VM 실행 검증 결과가 아닙니다. 예상하지 못한 오류가 있으면 다음 단계 전에 멈춥니다.
애플리케이션부터 케이블까지 메시지 따라가기
이후 실습에서 클라이언트가 서버의 TCP 8080 포트로 웹 페이지를 요청한다고 생각해 봅시다. 그곳에는 실제로 요청을 기다리는 웹 서버가 있어야 합니다. IP 주소를 부여한다고 웹 서버가 만들어지지는 않습니다.
| 계층 | 전달하거나 식별하는 것 | 로컬 실습 예시 |
|---|---|---|
| 애플리케이션 | 요청·응답의 의미 | 페이지를 요청하는 HTTP 메시지 |
| 전송 | 포트 번호를 사용하는 TCP·UDP 통신 끝점 | 클라이언트의 임시 TCP 출발지 포트에서 서버 TCP 8080으로 |
| 인터넷 | 라우팅에 필요한 출발지·목적지 주소를 가진 IP 패킷 | 192.0.2.10에서 192.0.2.20으로 |
| 로컬 링크 | 출발지·목적지 MAC 주소를 가진 Ethernet 프레임 | 클라이언트 실습 NIC MAC에서 서버 실습 NIC MAC으로 |
송신자는 애플리케이션 데이터에 전송 정보를 붙이고, IP 패킷으로 감싼 다음 현재 링크용 프레임에 담습니다. 수신자는 바깥 정보를 차례로 해석합니다. 프레임은 한 링크에서 트래픽을 운반하고, 라우터는 네트워크 사이에서 IP 패킷을 전달합니다. 라우터를 지나면 다음 링크용 프레임으로 바뀝니다. 이번 단순한 실습은 두 게스트 사이에 라우터가 필요하지 않습니다.
MAC 주소는 링크에서 Ethernet 인터페이스를 식별하며 가상 NIC에도 있습니다. IP 주소와 접두사는 IP 네트워크에서 인터페이스의 위치를 판단하는 데 사용합니다. NIC 하나가 여러 주소를 가질 수도 있습니다. 어느 주소도 사람의 신원을 증명하지는 않습니다.
포트는 TCP·UDP의 16비트 번호로, VM의 물리 커넥터가 아닙니다. TCP 8080과 UDP 8080은 다른 끝점입니다. 프로토콜, 출발지 IP·포트, 목적지 IP·포트로 대화를 구분합니다. IP에 도달한다고 원하는 포트에 서비스가 대기하거나 방화벽이 허용한다는 뜻은 아닙니다. ping이 사용하는 ICMP에는 TCP·UDP 포트 번호가 없습니다. 애플리케이션 서비스 시험은 이후 장에서 진행합니다.
IPv4와 CIDR 직접 계산하기
IPv4 주소는 32비트이며 보통 각각 0–255 범위인 십진수 옥텟 네 개로 씁니다. / 뒤의 **접두사 길이(prefix length)**는 앞에서 몇 비트가 네트워크 부분인지 나타냅니다. 나머지 비트로 그 안의 주소를 구분합니다. 이렇게 슬래시로 쓰는 방식을 CIDR 표기라고 합니다.
192.0.2.10/24에서는 앞 24비트가 네트워크이고 8비트가 남습니다.
| 계산 | 결과 |
|---|---|
| 마스크: 1이 24개, 이어서 0이 8개 | 255.255.255.0 |
| 호스트 비트를 모두 0으로 | 네트워크 주소 192.0.2.0 |
| 호스트 비트를 모두 1로 | 브로드캐스트 주소 192.0.2.255 |
| 전체 주소 수 | 2^(32-24) = 256 |
| 이 서브넷의 일반 호스트 범위 | 192.0.2.1–192.0.2.254 |
여기서는 양 끝 주소를 일반 호스트에 할당하지 않으므로 호스트용으로 254개가 남습니다. /31 지점 간 연결과 /32 같은 특수 사례는 규칙이 다르며 이번 첫 실습의 범위 밖입니다. .10/24와 .20/24는 모두 192.0.2.0/24 안에 있습니다. 192.0.3.20은 첫 두 옥텟이 같아도 이 서브넷 밖입니다.
조금 더 계산이 필요한 **192.0.2.70/26**을 보겠습니다.
/26은 호스트 비트 6개를 남기므로 한 블록에2^6 = 64개 주소가 있습니다.- 마스크는
255.255.255.192이며 마지막 옥텟의 이진수는11000000입니다. .70의 마지막 옥텟은 이진수01000110입니다. 앞 두 비트만 남기고 나머지를 0으로 만들면01000000, 즉.64입니다.- 블록 시작점은
.0,.64,.128,.192입니다..70은.64블록에 들어갑니다. - 네트워크는
192.0.2.64/26, 브로드캐스트는.127, 일반 호스트 범위는.65–.126으로 62개입니다.
따라서 .100/26은 .70/26과 같은 서브넷이고 .130/26은 아닙니다. /24가 아니라면 첫 세 옥텟만 비교해서는 안 됩니다. 접두사 숫자가 커질수록 주소 블록은 작아집니다. 실제 실습에는 계산 예시의 /26이 아니라 /24를 사용하세요.
게이트웨이, DHCP, DNS, 이웃은 다른 질문에 답합니다
**경로(route)**는 커널에 패킷을 어디로 보낼지 알려 줍니다. 직접 연결된 경로는 “이 목적지는 저 인터페이스의 링크에 있다”는 뜻입니다. via가 있는 경로는 다음 홉 라우터, 흔히 게이트웨이를 지정합니다. 여러 경로가 맞으면 우선 가장 긴 접두사가 일치하는 경로를 선택합니다. 기본 경로는 0.0.0.0/0이며 default로 표시됩니다. 더 구체적인 경로가 없을 때 사용합니다.
이번 /24에서 .10이 .20으로 보낼 때는 연결 경로가 관리 기본 경로보다 구체적입니다. 클라이언트는 실습 링크로 직접 보냅니다. 입력할 실습 게이트웨이는 없으며, .1이 자동으로 라우터가 되는 것도 아닙니다. 기존 관리 기본 경로를 그대로 둡니다.
| 기능 | 답하는 질문 | 이것만으로 증명할 수 없는 것 |
|---|---|---|
| DHCP | “설정 서버가 주소를 임대하고 경로·DNS 같은 옵션을 줄 수 있는가?” | 웹 서비스가 실행 중인지 |
| DNS | “이 이름에 해당하는 주소나 다른 레코드는 무엇인가?” | 경로나 대기 중인 서비스가 존재하는지 |
| IPv4 ARP | “내 링크의 이 IPv4 이웃은 현재 어느 MAC 주소인가?” | 이웃이 TCP 연결을 받아들이는지 |
DHCP는 설정을 교환하는 방식이며 모든 패킷을 대신 전달하는 기능이 아닙니다. DNS는 이름을 해석하며 클라이언트 자신의 IP를 할당하지 않습니다. IPv4에서 다른 서브넷으로 갈 때 ARP로 보통 찾는 대상은 인터넷 건너편 서버의 MAC이 아니라 다음 홉 게이트웨이의 MAC입니다.
실습 NIC에는 DHCP 서버가 없으며 숫자 IP끼리 통신할 때 게이트웨이와 DNS가 필요하지 않습니다. 별도 관리 NIC는 기존 DHCP 설정을 계속 사용합니다. 그 주소나 이름 해석 설정은 바꾸지 않습니다.
IPv6 주소는 128비트이며 콜론으로 구분한 16진수 묶음으로 씁니다. 각 묶음 앞의 0을 생략할 수 있고, ::로 연속된 0 묶음 한 구간을 압축할 수 있습니다. ::1은 루프백입니다. fe80:으로 시작하는 주소는 흔히 링크 로컬 주소로 해당 링크 안에서만 사용합니다. 여러 인터페이스가 링크 로컬 주소를 가질 수 있으므로 %인터페이스이름 같은 영역 식별자가 필요한 경우가 있습니다. 실제 인터페이스 이름은 예시를 복사하지 말고 게스트에서 확인합니다.
2001:db8::/32는 IPv6 문서용 대역(RFC 3849)이며 여기서 설정할 주소가 아닙니다. 일반적인 IPv6 LAN 접두사에는 /64가 흔히 사용됩니다. IPv6는 ARP 대신 ICMPv6 Neighbor Discovery(이웃 탐색)를 사용하며 IPv4식 브로드캐스트가 없습니다. 라우터 광고, SLAAC, DHCPv6는 별도의 설정 주제입니다. 링크 로컬 IPv6 주소만 있다고 인터넷 접근이 되는 것은 아닙니다. 이번 IPv4 실습 중 기존 IPv6 설정을 비활성화하거나 바꾸지 마세요.
인터페이스를 고르기 전에 조회하기
현대적인 ip 명령은 관련 대상을 묶어 다룹니다. link는 장치, address(addr, a로 줄일 수 있음)는 주소, route는 경로, neigh는 이웃 테이블입니다. 조회에는 보통 sudo가 필요하지 않습니다.
각 VM, 일반 사용자. 조회만 수행합니다.
hostname
ip -br link
ip -br address
ip a
ip -4 route
ip neigh-br는 간단한 출력, -4는 IPv4로 제한하라는 뜻입니다. 제한하지 않은 ip a는 IPv6도 보여 줍니다. ip a는 ip address의 줄임말이며 주소를 추가하는 명령이 아닙니다.
다음은 실제 인터페이스 이름 대신 설명용 이름을 넣은 간단한 출력 예시입니다.
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
<management> UP 02:00:00:00:01:10 <BROADCAST,MULTICAST,UP,LOWER_UP>
<lab> DOWN 02:00:00:00:02:10 <BROADCAST,MULTICAST>각 행은 인터페이스 이름, 동작 상태, MAC 주소, 플래그 순서입니다. 각 게스트에서 MAC 전체를 하이퍼바이저 기록과 대조합니다. NIC 순서, PCI 연결, 이미지 설정, OS 이름 규칙에 따라 이름은 달라질 수 있습니다. “두 번째 행”이나 추측한 eth1·ens19를 기준으로 삼지 마세요. lo는 게스트 내부의 루프백이며 가상 Ethernet NIC가 아닙니다.
UP 플래그는 관리상 활성화 상태입니다. LOWER_UP은 하위 계층의 캐리어 연결을 나타냅니다. 관리상 up이어도 캐리어가 없을 수 있으며 이때는 가상 케이블과 내부 네트워크 연결을 확인합니다. 동작 상태 UNKNOWN은 특히 루프백에서 자동으로 오류를 의미하지 않습니다. 변경 전에 원래 관리상 상태를 기록하세요.
각 VM에서 경계와 기준 상태 기록하기
각 VM, 일반 사용자. 질문이 나오면 실제 이름을 입력합니다.
read -r -p 'Lab NIC name matched by MAC: ' LAB_IF
read -r -p 'Management NIC name matched by MAC: ' MGMT_IF
ip -br link show dev "$LAB_IF"
ip -br link show dev "$MGMT_IF"
ip -4 address show dev "$LAB_IF"
ip -4 route show table mainread는 입력을 셸 변수에 저장할 뿐 인터페이스를 변경하지 않습니다. 이름이 비어 있거나, 장치를 찾지 못하거나, 두 이름이 같거나, 어느 MAC이든 기록과 다르면 멈추고 다시 식별합니다. 명령이 이름을 받아들였다는 이유만으로 진행하지 마세요.
변경 전 조건: 실습 NIC에는 이미 할당된 IPv4 주소가 없어야 합니다. 게스트에 192.0.2.0/24와 겹치는 기존 IPv4 경로도 없어야 합니다. 단, 관리 기본 경로(default)는 예상한 것이므로 예외입니다. 기존 IPv6 링크 로컬 주소는 있어도 됩니다. 실습 NIC에 IPv4가 있거나 예상 밖의 경로가 보이면 멈추고 과정 준비 상태를 확인하세요. 모르는 설정을 삭제하거나 네트워크 관리자가 소유한 주소를 재사용하지 않습니다. 게스트의 네트워크 관리 프로그램이 나중에 수동 상태를 바꿀 수 있으므로 이번 설정은 임시입니다.
기준 상태를 저장할 공간을 각 게스트에서 따로 만듭니다.
각 VM, 일반 사용자:
NET_NOTE_DIR=$(mktemp -d "$HOME/network-beginner-ip.XXXXXX")
printf '%s\n' "$NET_NOTE_DIR"이 정확한 경로를 기록합니다. 생성이 실패하거나 값이 비어 있으면 멈춥니다. 이어서 기준 상태를 저장합니다.
ip -details link show dev "$LAB_IF" > "$NET_NOTE_DIR/lab-link.before"
ip -4 -br address show dev "$MGMT_IF" > "$NET_NOTE_DIR/management-addresses.before"
ip -4 route show table main > "$NET_NOTE_DIR/routes.before"
cat "$NET_NOTE_DIR/lab-link.before">는 명령 출력을 파일에 쓰며 같은 이름의 기존 파일이 있으면 교체합니다. 여기서는 새 디렉터리를 사용합니다. 링크 플래그에 독립된 UP 항목이 있는지 읽으세요. LOWER_UP에 들어 있는 글자만 보고 판단하지 않습니다. 해당 VM의 셸에서 다음 중 하나만 실행해 기록합니다.
# 독립된 UP 플래그가 있었을 때만:
LAB_LINK_WAS=up# 그렇지 않았으면:
LAB_LINK_WAS=down원래 상태, MAC, 인터페이스 이름, 기준 상태 디렉터리를 셸 밖에도 기록하세요. 세션을 잃었을 때 정리에 필요합니다.
두 임시 주소 추가하기
VM마다 역할 블록 하나를 선택합니다. 아래 대입은 텍스트를 저장할 뿐입니다. 클라이언트·서버 주소를 바꾸거나 두 게스트에 같은 주소를 넣지 마세요.
클라이언트 VM에서만, 일반 사용자:
LAB_IP=192.0.2.10
LAB_CIDR=192.0.2.10/24
LAB_PEER=192.0.2.20서버 VM에서만, 일반 사용자:
LAB_IP=192.0.2.20
LAB_CIDR=192.0.2.20/24
LAB_PEER=192.0.2.10권한을 높이기 전에 대상을 다시 확인합니다.
각 VM, 일반 사용자:
printf 'guest=%s lab=%s management=%s address=%s original-link=%s\n' \
"$(hostname)" "$LAB_IF" "$MGMT_IF" "$LAB_CIDR" "$LAB_LINK_WAS"
ip -br link show dev "$LAB_IF"역할과 기록한 MAC을 대조합니다. 이어서 각 VM에서 일반 사용자가 sudo를 호출하여 그 VM의 실습 주소만 추가합니다.
sudo ip link set dev "$LAB_IF" up
sudo ip address add "$LAB_CIDR" dev "$LAB_IF"link set ... up은 식별한 실습 NIC를 관리상 활성화하며 관리 NIC는 바꾸지 않습니다. address add는 게스트의 두 번째 NIC에 주소를 더합니다. “관리 NIC에 두 번째 IPv4 주소 추가”라는 뜻도 아니고, Linux 출력에 반드시 secondary 플래그가 붙어야 한다는 뜻도 아닙니다.
추가 성공 시 보통 아무것도 출력하지 않습니다. File exists가 나오면 주소를 조회하고 멈추세요. replace로 바꾸거나 인터페이스 주소를 모두 지우지 않습니다. 원래 down인 실습 NIC를 켰으나 주소 추가가 실패했다면 아래 정리의 링크 상태 복원은 여전히 필요합니다. 주소는 자신이 추가에 성공한 경우에만 삭제합니다.
이 ip 변경은 커널의 현재 상태를 바꾸며 Netplan·NetworkManager 설정에 저장하지 않습니다. 재부팅하면 수동 추가 상태가 사라지고 네트워크 관리자가 더 일찍 주소를 제거하거나 재생성할 수도 있습니다. 수명이 forever로 표시되어도 런타임 주소에 만료 타이머가 없다는 뜻이지, 재부팅 후에도 유지된다는 뜻은 아닙니다. 영구 설정은 다음 장에서 배웁니다.
계층별로 결과 해석하기
각 VM, 일반 사용자. 조회만 수행합니다.
ip -br link show dev "$LAB_IF"
ip -4 address show dev "$LAB_IF"
ip -4 route show dev "$LAB_IF"
ip -4 route get "$LAB_PEER"클라이언트에서 볼 수 있는 관련 행의 예시는 다음과 같습니다.
inet 192.0.2.10/24 scope global <lab-name>
valid_lft forever preferred_lft forever
192.0.2.0/24 dev <lab-name> proto kernel scope link src 192.0.2.10
192.0.2.20 dev <lab-name> src 192.0.2.10 uid 1000주소 행은 “이 NIC가 .10/24를 가진다”는 뜻입니다. scope global은 Linux의 주소 범위 표시이며 문서용 주소를 전 세계에서 접근 가능한 주소로 바꾸지 않습니다. 기본적으로 주소를 추가하면 연결된 접두사의 경로도 생성됩니다. proto kernel은 자동 생성 경로, scope link는 다음 홉 라우터가 필요 없음, src는 우선 출발지 주소를 뜻합니다. 서버는 마찬가지로 .20/24를 소유하고 출발지로 .20을 선택해야 합니다.
ip route get은 특정 목적지로 어떻게 보낼지 커널에 물으며 시험 패킷을 보내지 않습니다. 상대 게스트에 대해 실습 NIC, 맞는 로컬 출발지, via 게이트웨이 없는 결과가 나와야 합니다. 관리 NIC를 통하는 결과는 다른 통신이 되더라도 실습 준비 오류입니다. 연결 경로가 없거나 주소가 사라지면 링크 상태와 관리 주체를 확인하세요. 경쟁하는 기본 경로를 추가하지 않습니다.
두 게스트 모두 설정한 다음 소량의 트래픽을 발생시켜 ARP가 상대를 찾도록 합니다.
각 VM, 일반 사용자:
ping -4 -c 3 -W 2 -I "$LAB_IF" "$LAB_PEER"
ip -4 neigh show dev "$LAB_IF"ping -4는 IPv4 ICMP echo, -c 3은 요청 세 번 제한, -W 2는 초 단위 응답 대기 시간, -I는 실습 인터페이스 선택입니다. 일반적인 iputils 패키지 구성에서는 일반 사용자로 이 echo 시험을 수행할 수 있습니다. 권한 오류는 도구·capability 구성 문제이며 네트워크 장애의 증거가 아닙니다.
올바르게 구성되고 ICMP가 허용된 경로에서는 응답과 송수신 패킷 수 요약을 기대할 수 있습니다. 지연 시간은 환경마다 다르므로 예시 숫자를 실제 측정값처럼 사용하지 않습니다. 이웃 항목 예시는 다음과 같습니다.
192.0.2.20 dev <lab-name> lladdr 02:00:00:00:02:20 REACHABLElladdr를 하이퍼바이저에서 기록한 상대 게스트의 실습 NIC MAC과 비교합니다. REACHABLE은 최근 확인한 상태입니다. STALE은 캐시 매핑이 있지만 사용 시 재확인이 필요하다는 뜻이지 곧바로 장애가 아닙니다. 트래픽 전 테이블이 비어 있는 것도 정상입니다. INCOMPLETE는 해석 진행 중, FAILED는 해석 실패입니다. 동적 항목이므로 읽는 동안 상태가 바뀔 수 있습니다.
| 관찰 | 이번 장에서 이어서 확인할 것 |
|---|---|
캐리어 없음 / LOWER_UP 없음 | 하이퍼바이저 가상 케이블, 올바른 내부 네트워크 연결 |
| IPv4 주소가 잘못되거나 없음 | 역할 변수, 추가 결과, 관리자가 NIC를 변경했는지 |
| 상대 경로가 관리 NIC를 사용 | 접두사, 실습 주소, 경로 조회 |
이웃이 INCOMPLETE/FAILED에 머묾 | 두 VM 실행 여부, 동일 내부망, 상대 주소, MAC·IP 중복 여부 |
| 이웃 MAC은 확인되나 ping 응답 없음 | 상대 상태와 ICMP 필터링. ARP 성공은 ICMP·서비스 성공이 아님 |
첫 시험을 통과하려고 방화벽이나 IPv6를 끄지 않습니다. 증거를 기록하고 필요하면 4장의 진단 절차와 6장의 방화벽 정책으로 이어갑니다.
성공 확인과 정확한 정리
되돌리기 전에 두 게스트에서 모두 다음을 확인합니다.
- MAC 대조로 서로 다른 관리·실습 인터페이스를 식별했습니다.
- 실습 NIC에 역할에 맞는 정확한
/24주소와192.0.2.0/24연결 경로가 있습니다. - 상대 경로가 실습 NIC와 맞는 출발지 주소를 선택하고 게이트웨이를 사용하지 않습니다.
- 이웃 증거를 해석할 수 있습니다. ICMP 응답 성공은 제한된 IP 시험의 성공이지 TCP 서비스 개방의 증거가 아닙니다.
- 관리 주소, 기본 경로, 기존 관리 접근이 기록한 기준 상태와 같습니다.
각 VM, 일반 사용자. 기록과 현재 관리 정보를 비교합니다.
cat "$NET_NOTE_DIR/management-addresses.before"
ip -4 -br address show dev "$MGMT_IF"
cat "$NET_NOTE_DIR/routes.before"
ip -4 route show table main새 실습 연결 경로는 예상한 결과이며 새 실습 기본 경로는 아닙니다. 관리 DHCP 임대는 독립적으로 갱신될 수 있으므로 모든 동적 세부 변화가 실습 때문에 생겼다고 보지 말고 인터페이스, 주소, 게이트웨이, 경로 목적을 비교합니다.
이제 각 VM에서 독립적으로 복원을 연습합니다. 셸을 잃었다면 먼저 기록한 MAC으로 NIC를 다시 식별하고, 그 게스트의 기록에서 LAB_IF, MGMT_IF, LAB_IP, LAB_CIDR, LAB_LINK_WAS, NET_NOTE_DIR를 복구합니다. 변수는 자동으로 살아남지 않으므로 현재 상태도 조회하세요. 삭제할 주소를 추측하지 않습니다.
각 VM, 일반 사용자. 자신이 추가에 성공한 주소가 아직 있는지 확인합니다.
ip -4 address show dev "$LAB_IF"각 VM, 일반 사용자가 sudo 호출. 자신이 추가한 주소만 삭제합니다.
sudo ip address del "$LAB_CIDR" dev "$LAB_IF"추가에 성공했고 해당 주소가 아직 있을 때만 삭제를 실행합니다. 이미 재부팅했거나 관리자가 제거했다면 없음을 확인한 뒤 삭제를 건너뜁니다. IP, 접두사, 인터페이스를 모두 지정하는 정확한 역작업입니다. 주소나 경로를 한꺼번에 비우지 않습니다. 처음에 IPv4가 없다는 조건을 만족했다면 유일한 실습 IPv4 주소를 지울 때 자동 연결 경로도 제거됩니다.
각 VM, 같은 셸. 필요한 경우에만 일반 사용자가 sudo 호출:
if [ "$LAB_LINK_WAS" = down ]; then
sudo ip link set dev "$LAB_IF" down
fi이 조건문은 자신이 down에서 켠 링크만 원래대로 돌립니다. 원래 up이었다면 그대로 둡니다. [는 기록한 값을 검사하며 down일 때만 권한 상승 명령을 실행합니다. 값이 없다면 원래 상태를 지어내지 말고 기록을 되찾으세요.
각 VM, 일반 사용자. 복구를 확인합니다.
ip -br link show dev "$LAB_IF"
ip -4 address show dev "$LAB_IF"
ip -4 route show dev "$LAB_IF"
ip -4 -br address show dev "$MGMT_IF"
ip -4 route show default실습 IPv4 주소와 연결 경로가 없고, 관리상 링크 상태가 원래대로이며, 관리 설정과 접근이 유지되어야 합니다. 동적으로 학습한 이웃 항목은 시간이 지나면 정리될 수 있습니다. 화면을 비우려고 테이블을 flush하지 마세요. 주소가 다시 나타나면 관리자가 소유할 수 있으므로 반복 삭제하지 말고 영구 설정을 조사합니다.
기준 상태 기록이 더 이상 필요하지 않으면 파일 세 개와 빈 디렉터리만 지웁니다.
각 VM, 일반 사용자:
rm -i -- "$NET_NOTE_DIR/lab-link.before" \
"$NET_NOTE_DIR/management-addresses.before" "$NET_NOTE_DIR/routes.before"
rmdir -- "$NET_NOTE_DIR"
test ! -e "$NET_NOTE_DIR"
echo $?
unset LAB_IF MGMT_IF LAB_IP LAB_CIDR LAB_PEER LAB_LINK_WAS NET_NOTE_DIR자신의 상태 기록 텍스트 파일 세 개만 승인합니다. 존재 확인의 종료 상태가 0이면 정리 성공입니다. rmdir가 실패하면 남은 파일의 정확한 이름을 확인하세요. 영구 네트워크 설정 파일은 수정하지 않았습니다. 3장에서는 실제 네트워크 관리자로 같은 주소를 다시 설정하며, 이 셸에 남은 변수나 임시 상태에 의존하지 않습니다.
참고 문서와 더 읽기
2026년 9월 14–15일에 확인한 1차 문서입니다.
- Ubuntu 24.04
ip-address매뉴얼,ip-link,ip-route,ip-neighbour— 명령 문법, 연결 경로, 주소 수명, 이웃 상태. - Ubuntu 24.04
ping매뉴얼 — 제한된 echo 시험과 인터페이스 선택. - IETF RFC 1122, RFC 4632, RFC 826 — 인터넷 계층, CIDR, IPv4 주소 해석.
- IETF RFC 2131, RFC 1034 — DHCP와 DNS의 서로 다른 책임.
- IETF RFC 5737, RFC 3849 — 문서용 예약 주소 대역.
- IETF RFC 4291, RFC 4861 — IPv6 주소와 이웃 탐색.
퀴즈를 풀고 영구 네트워크 설정으로 이어갑니다.