~/blog/2026/path-tracing

IP 경로 추적 과정

–––Views
Authors

Juniper(Junos)와 Cisco(NX-OS)가 섞인 멀티벤더 환경에서 코어 스위치 또는 라우터에서 시작해 특정 목적지 IP(서버/VM)까지 어떤 장비와 인터페이스, VLAN을 거치는지 추적하는 과정을 정리해보았다.

0. 경로는 두 층으로 나뉜다

경로 추적의 핵심은 L3(라우팅)와 L2(스위칭)를 분리해서 보는 것이다.

구분L3 라우팅 경로L2 스위칭 경로
무엇라우터 → 라우터 hop같은 VLAN(브로드캐스트 도메인) 내부
추적 도구라우팅 테이블 (show route / show ip route)MAC 테이블 (show mac address-table)
끝나는 지점목적지 VLAN의 게이트웨이(SVI) 를 가진 장비목적지가 물린 엣지(서버) 포트
키워드next-hop, metric, ECMP, VRF, OSPFVLAN, trunk, switchport, MAC OUI

L3/L2 경계 = 목적지 VLAN의 SVI(게이트웨이)를 가진 장비. 그 장비가 "마지막 라우터"이며, 그 아래부터는 같은 VLAN 안에서의 L2 스위칭이다. "directly attached"는 케이블로 직접 연결됐다는 뜻이 아니라, 같은 서브넷(VLAN) 안에 있다는 L3상의 의미일 뿐임에 주의

flowchart TD
    Start([목적지 IP]) --> A["Phase A · L3 추적<br/>show route / show ip route"]
    A --> Q1{"출력 IF가 SVI(VlanXXX)<br/>+ attached?"}
    Q1 -- "아니오 (next-hop = 다른 라우터)" --> A2["인터페이스 detail + LLDP로<br/>다음 라우터 확인 → 접속"] --> A
    Q1 -- "예 (게이트웨이 도달)" --> B["Phase B · L2 추적<br/>ARP → MAC 테이블"]
    B --> Q2{"MAC이 학습된 포트가<br/>트렁크(스위치)? 엣지(서버)?"}
    Q2 -- "트렁크 → 다음 스위치" --> B2["LLDP로 다음 스위치 확인 → 접속"] --> B
    Q2 -- "엣지(서버) 포트" --> C["Phase C · 종단 식별<br/>interface config + LLDP + MAC OUI"]
    C --> End([서버/VM 확정 🎯])

1. [Phase A] L3 라우팅 경로 추적

라우터에서 시작해, 목적지 VLAN의 게이트웨이(SVI) 를 만날 때까지 라우터를 한 대씩 따라간다.

1~4 과정 반복

1) 목적지로 가는 경로 조회

# Junos
show route [목적지 IP]

# NX-OS (VRF 주의 — 아래 2-1 참고)
show ip route [목적지 IP]
show ip route [목적지 IP] vrf <VRF이름>

확인할 것: 활성 경로(Junos */>, NX-OS *), 출력 인터페이스, next-hop IP, ECMP 여부

2) next-hop 인터페이스 상세 — 본인 IP/VLAN 확인

# Junos
show interfaces ae21.0 detail        # 본인 IP, VLAN-Tag, LAG 멤버, 입력 필터
show route [next-hop IP]             # next-hop이 Direct면 옆 장비

# NX-OS
show run interface Ethernet1/5.3055  # ip address, encapsulation dot1q, vrf member

3) 다음 장비(이웃) 식별

# Junos
show lldp neighbors                            # 전체
show lldp neighbors interface xe-0/0/34:3      # 특정 물리포트

# NX-OS
show cdp neighbors interface ethernet 1/5 detail   # 시스코끼리는 CDP가 깔끔
show lldp neighbors interface ethernet 1/5 detail  # Management address 포함

확인할 것: 이웃 hostname, 연결 포트, Management(OOB) IP.

4) 다음 장비에 접속해서 1)부터 반복

ssh <user>@<다음 장비 OOB IP>

종료 조건 (게이트웨이 도달)

라우팅 출력의 출력 인터페이스가 SVI(VlanXXX) 이고 경로가 attached/am(NX-OS) 또는 목적지 자신을 next-hop으로 가리키면 → 그 장비가 게이트웨이. L3 종료, Phase B로 전환

# 라우터 hop (계속 진행)
*via [next-hop IP], Ethernet1/5.3055    ← 라우티드 IF, next-hop = 다른 라우터

# 게이트웨이 (L3 끝)
*via [목적지 IP], Vlan505, [250/0], am   ← SVI, attached → 여기가 경계

L3/L2 경계 장비 판별

게이트웨이 장비는 "위는 라우팅, 아래는 스위칭"을 동시에 한다. 인터페이스 종류로 구분:

show ip interface brief     # IP 달린 IF(L3) vs switchport(L2) 한눈에
show run interface <IF>     # 'ip address' = L3 라우티드 / 'switchport' = L2
  • 업링크(상위 라우터 방향): ip address + OSPF → L3
  • 다운링크(호스트 방향): switchport mode trunk (IP 없음) → L2

2. [Phase B] L2 스위칭 경로 추적

게이트웨이부터는 같은 VLAN 안에서 MAC을 따라 엣지 포트까지 내려간다.

반복 루프

1) 목적지 IP의 MAC 확인 (게이트웨이에서 1회)

# NX-OS
show ip arp [목적지 IP] vrf <VRF이름>
# Junos
show arp | match [목적지 IP]

2) 그 MAC이 학습된 포트 찾기

# NX-OS
show mac address-table address fa16.3e35.8ae3
# Junos
show ethernet-switching table | match fa16

→ 나온 포트가 Po###(포트채널) 또는 Eth x/y(물리)

3) 포트 정체 확인 (트렁크 vs 엣지)

show run interface port-channel 48
show port-channel summary | include 48     # 포트채널 멤버 물리포트
show cdp neighbors interface ethernet 1/49 detail
show lldp neighbors interface ethernet 1/49 detail

분기 규칙

  • 트렁크 + 다른 스위치(ds/ag/as 등)로 감 (switchport mode trunk, LLDP에 스위치 OS) → 그 스위치 OOB IP 따서 접속, 1)부터 반복 (단, MAC 조회는 매 스위치마다)
  • 엣지(서버) 포트 → Phase C로

엣지(서버) 포트 표식 (NX-OS)

spanning-tree port type edge [trunk]   ← 호스트 직결(PortFast)
spanning-tree bpduguard enable         ← 스위치가 물리면 차단 = 호스트 전용

반대로 스위치 업링크는 spanning-tree guard root 또는 network 포트 + 포트채널


3. [Phase C] 종단(서버/VM) 식별

엣지 포트 너머가 무엇인지 확정한다.

1) 인터페이스 description + LLDP로 서버 확인

show run interface ethernet 1/10                  # description에 서버 호스트명
show lldp neighbors interface ethernet 1/10 detail

서버 판별 단서: LLDP System Description = 서버 OS(예: CentOS/RHEL/Windows), Port Description = 리눅스 NIC 표기(예: bond1 / p2p1), Management Address.

2) VM 여부 — MAC OUI로 판별

ARP에서 얻은 목적지 MAC의 앞 3바이트(OUI) 를 본다.

OUI / 비트의미
fa:16:3eOpenStack(Neutron) 가상 NIC → VM
52:54:00QEMU/KVM 기본 가상 NIC → VM
00:50:56VMware 가상 NIC → VM
00:09:0f / 90:6c:acFortinet(FortiGate) → 방화벽(fw)
첫 옥텟 U/L 비트=1 (예: fa,52)로컬 관리 = 소프트웨어 할당(가상)
첫 옥텟 U/L 비트=0 (예: d4,00)벤더가 구운 진짜 하드웨어 MAC

한 물리 서버 포트에서 (호스트 자신의 하드웨어 MAC) + (가상 MAC) 이 같이 보이면 그 서버는 하이퍼바이저이고, 가상 MAC은 그 위의 게스트 VM이다.

3) 100% 확정 (선택)

# 하이퍼바이저(KVM)에 접속
virsh list --all
virsh domiflist <도메인명>     # 목적지 MAC을 가진 VM 매칭
# 또는 OpenStack 대시보드/CLI에서 IP·MAC으로 인스턴스 조회

4. Junos ↔ NX-OS 명령어 비교표

목적JunosNX-OS
라우팅 조회show route 10.0.0.1show ip route 10.0.0.1 [vrf NAME]
전체 VRF 조회(인스턴스별 inet.0)show ip route 10.0.0.1 vrf all
인터페이스 상세show interfaces ae21.0 detailshow run interface Eth1/5
인터페이스 설정(set 형식)show configuration interfaces | display setshow running-config interface Eth1/5 [all]
IP 요약show interfaces terseshow ip interface brief
이웃show lldp neighbors [interface X]show cdp neighbors / show lldp neighbors interface X detail
MAC 테이블show ethernet-switching tableshow mac address-table
ARPshow arpshow ip arp [vrf NAME]
LAG 멤버show lacp interfaces ae21 / show interfaces ae21show port-channel summary
출력 필터| match, | count| include, | grep -i -A N, | egrep "a|b", | begin
FIB 확인show route forwarding-table destination Xshow forwarding route X