IP 경로 추적 과정
- Authors
- Chaea Kim

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, OSPF | VLAN, 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:3e | OpenStack(Neutron) 가상 NIC → VM |
52:54:00 | QEMU/KVM 기본 가상 NIC → VM |
00:50:56 | VMware 가상 NIC → VM |
00:09:0f / 90:6c:ac | Fortinet(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 명령어 비교표
| 목적 | Junos | NX-OS |
|---|---|---|
| 라우팅 조회 | show route 10.0.0.1 | show ip route 10.0.0.1 [vrf NAME] |
| 전체 VRF 조회 | (인스턴스별 inet.0) | show ip route 10.0.0.1 vrf all |
| 인터페이스 상세 | show interfaces ae21.0 detail | show run interface Eth1/5 |
| 인터페이스 설정(set 형식) | show configuration interfaces | display set | show running-config interface Eth1/5 [all] |
| IP 요약 | show interfaces terse | show ip interface brief |
| 이웃 | show lldp neighbors [interface X] | show cdp neighbors / show lldp neighbors interface X detail |
| MAC 테이블 | show ethernet-switching table | show mac address-table |
| ARP | show arp | show ip arp [vrf NAME] |
| LAG 멤버 | show lacp interfaces ae21 / show interfaces ae21 | show port-channel summary |
| 출력 필터 | | match, | count | | include, | grep -i -A N, | egrep "a|b", | begin |
| FIB 확인 | show route forwarding-table destination X | show forwarding route X |