본문 바로가기
네트워크

MPLS 초보탈출 4차

by Lauren X Ming 2022. 2. 14.

MPLS의 Label 교환

Label을 어떻게 교환할 것인가?

1. 존재하는 ip routing 프로토콜의 파라미터 추가
- 존재하는 ip 라우팅 프로토콜을 수정해야 하면, 현재 존재하는 rip, ospf 등등 다 수정을 해야 함(risk 높음)
- mpls vpn일 때는 bgp 가 라벨을 교환함.
- mpls te일 때는 rsvp가 라벨을 교환함
--> 즉, 이미 존재하는 라우팅 프로토콜을 사용함.
2. 레이블을 교환하는 새로운 프로토콜을 만들자

복습
라우팅 프로토콜 동작 -> RIB -> bgp로 받은 정보를 제외한 모든 정보를 LIB -> exchange 프로토콜(LDP)를 사용하여 네이버에게 정보 전달받음 -> LDP로 받은 정보를 LIB에 저장하고, 그 중 best path라면 FIB에 저장 -> LIB를 통해 LFIB 저장

mpls 가 설정된 인터페이스이지만, mpls만 처리하는 것은 아니고, ip packet이 들어오면 그냥 정통적인 방식으로 처리됨.

LSP(labeled switched path)
- 라벨이 달린 패킷을 들어오는 순간, 라벨을 바꿔서 어느 인터페이스로 내보내는 과정을 LSP라고 함.
--> 즉, mpls 망에서 출발부터 도착까지 경로를 찾아가는 그 과정을 LSP라고 함.
--> best path를 찾아야 하니까, unicast 라우팅 테이블에 의해서 포워딩되는 그 경로로 LSP로 만들어짐.
- LFIB != LSP임..
- LSP는 단방향
--> 갈때, 올때 방향이 다를 수 있음.

PHP(penultimate hop popping)
- 맨 마지막 장비가 LFIB를 보고 untagged 된다음에 FIB로 넘겨주는 게 싫음
- 그래서 php 기능을 만들어서, 자신과 direct되어있는 장비들의 정보를 pop으로 광고해서, 자신에게 들어오기 전 장비가 pop을 해서 보냄
- 바로 앞 단의 라우터가 pop을 대신함으로써 기능 향상
- pop 종류 : 0 / 3
- 0 : explicit null - mpls qos일때 사용(ip precedence,,같은말 모르겠...)
- 3 : implicit null - label을 떼고 보내라(Default)
- 최초로 광고하는 것 : summary 한 네트웤, connect 네트웤 --> 그래서 summary한 네트웤도 pop이 되버리니까 중간에 label 정보가 사라져버릴 수 있음. -> LSP가 두 개의 segment로 나뉨

정리
- ip 라우팅 프로토콜에 의해 라우팅 테이블 생성
- bgp로 받은 정보를 제외한 모든 dest ip에 대해 각각의 LSR이 동작하면서 Label을 생성함
- 모든 LSR들끼리 Label 정보를 교환을 함.

untagged
- ex.
- B라는 라우터에서 D에서 광고 받은 X라는 네트워크를 Label 25로 올림 -> LFIB테이블을 25번 라벨을 옆의 라우터 C에게 전달할때는 untagged 해라
- A라는 라우터에서 D에서 광고 받은 X라는 네트워크를 Label 16로 올림 -> LFIB테이블을 16번 라벨을 옆의 라우터 B에게 전달할때는 untagged 해라
--> 즉, LDP로 라벨을 교환하게 되면 A 라우터는 X라는 같은 네트워크를 두 개를 가지고 있음(LIB). local과 B에서 받은 정보
--> 그 때 FIB테이블을 보고 B가 best path라는 것을 알면, LIB는 FIB(X라는 네트워크를 B한테 보낼때, 라벨 25를 달고 가라), LFIB
(label 16을 달고 들어오면, B한테 보낼 때, 라벨 25를 달고 가라)둘 다 정보를 저장함.
--> A로 X 네트워크 패킷이 들어오면 FIB를 보고 B로 가는데 라벨 25를 달고 나감
--> B는 해당 패킷을 받으면 untagged를 해서 fib 테이블을 참조한 후 IP packet으로 X네트워크로 감
- 이제 C가 mpls를 올림. C라는 라우터에서 D에서 광고 받은 X라는 네트워크를 Label 47로 올림. -> LFIB테이블을 47번 라벨을 옆의 라우터 D에게 전달할때는 untagged 해라(D 라우터는 mpls를 안올림. 그렇기 때문에 D에 연결된 X네트워크와 통신하기 위해 앞으로도 계속 untagged상태로 통신을 해야 됨. )

TTL propagation
- LDP는 IGP에서 loop이 발생하면, mpls망도 loop이 발생함
- 그래서 loop을 방지 하기 위해, TTL field를 label header에 넣음
- 그때, ip header의 TTL 값 == Label header의 TTL값을 맞춰주는것을 TTL propagation이라고 함.

traceroute, tracert를 할 때, 중간에 장비를 숨기고 싶을 때, TTL propagion기능을 disable 시킬 수 있음.
- IP TTL값을 Label TTL 값으로 copy하지 않고, Label TTL 값 을 IP TTL 값으로 copy하지 않음
- 그래서 Core router를 숨길 수 있음.

TraceRT : ICMP 사용
- 처음에 TTL을 1로 보냄. 첫번째 장비가 응답이 옴(TTL이 0으로 설정되서 TTL exceed message를 던짐)
- 그 다음 TTL을 2로 보냄. 두번째 장비가 응담이 옴(TTL이 0으로 설정되서 TTL exceed message를 던짐)
- ... 이걸 반복
Traceroute : UDP 사용( 현재까지 사용되지 않는 포트를 사용함)
- 중간 장비들은 똑같이 ICMP로 TTL exceed를 던짐. 마지막은 해당 UDP 포트를 보고, 포트를 열어두지 않았기 때문에 port unreachable message를 던짐. 만약 마지막 장비가 같은 packet을 한번 더 받으면 공격이라고 생각하고 3초 동안 응답하지 않음.

중간 장비를 숨기고 싶을 때
1. untagged
- traceroute에서 TTL 값을 1, 2, 3으로 한 장비씩 보냄.
- example. ttl = 2 : O - X - X - X - O ( X만 mpls 망)
- ttl이 2이면 mpls의 pe장비를 처음 만나면, ip ttl 값을 -1 시킨 후(즉, 첫번째 X 장비에서 ip ttl = 1), label ttl 값을 255로 설정 -> 다른 mpls 장비로 갈때는 ip ttl 값을 변형시키지 않고, label ttl 값만 변형 시킴 -> 마지막 pe 장비를 만나면 label ttl 값을 -1 하고 untagged한 후 fib를 보고 ip ttl 값을 -1(즉, 마지막 X 장비에서 ip ttl = 0) 을 하고 이 장비가 traceroute에 응답함. 즉 중간 장비 정보를 볼 수 없음. (PE 장비만 응답을 하는 꼴)
2. pop
- example. ttl = 2 : O - X - X - X - O ( X만 mpls 망)
- ttl이 2이면 mpls의 pe장비를 처음 만나면, ip ttl 값을 -1 시킨 후(즉, 첫번째 X 장비에서 ip ttl = 1), label ttl 값을 255로 설정 -> 다른 mpls 장비로 갈때는 ip ttl 값을 변형시키지 않고, label ttl 값만 변형 시킴 라벨을 때고 보냄-> 마지막 pe 장비를 만나면 fib만 보고 ip ttl 값을 -1(즉, 마지막 X 장비에서 ip ttl = 0) 을 하고 이 장비가 traceroute에 응답함. 즉 중간 장비 정보를 볼 수 없음. (PE 장비만 응답을 하는 꼴)

'네트워크' 카테고리의 다른 글

MPLS 초보탈출 6차  (0) 2022.02.16
MPLS 초보탈출 5차  (0) 2022.02.14
MPLS 초보탈출 3차  (0) 2022.02.13
MPLS 초보탈출 2차  (0) 2022.02.13
MPLS 초보 탈출 1차  (0) 2022.02.13