경로 리플렉터를 추가한 뒤 일부 L2VPN 경로가 사라진다
세션은 살아 있는데 일부 L2VPN 경로는 끝내 도착하지 않는다. 재사용된 클러스터 ID, 클라이언트 관계, 리플렉션 그래프가 그 선택적 손실을 설명한다.
세션은 살아 있고 IGP도 안정적이지만, 제공자 에지 네 개 가운데 두 곳에서 일부 L2VPN 경로가 나타나지 않는다. 이 패턴은 전송 문제가 아니라 리플렉션 문제에 속한다. 세션이 끊기면 전부 실패하지만, 재사용된 리플렉션 경계는 선택적으로 실패하기 때문이다. 물리적 링은 상관이 없고, 그 경로들이 멈춘 곳은 논리적 분배 그래프다. 그 지점을 찾는 데 컨트롤 플레인을 다시 만들 필요는 없다.
손실이 선택적이라는 점이 탐색 범위를 좁힌다
물리적 링 위의 제공자 에지 네 개가 풀 메시를 이루려면 논리 세션이 여섯 개 필요하다. 각 라우터가 나머지 세 대와 짝을 이루기 때문이다. 이 세션들은 라우팅된 전송 위를 지나므로, 케이블만 봐서는 인접이 몇 개인지, 어느 인접이 리플렉트하는지 알 수 없다. 두 에지만 특정 프리픽스 집합을 놓치고 나머지가 모두 수렴한다면 케이블은 용의자가 아니다.
선택적 손실은 루프 방지, 정책, 관계의 방향을 가리킨다. 어떤 경로는 경계를 넘고 다른 경로는 도중에 버려진다. 전체 손실은 세션이나 주소 패밀리를 가리킨다. 둘 중 무엇을 보고 있는지 판단하는 것이 첫 번째 유용한 단계이며, 명령 하나면 된다.
리플렉션이 실제로 바꾸는 것
경로 리플렉션은 iBGP 스피커가 다른 iBGP 스피커에게 배운 경로를 다시 광고해서는 안 된다는 규칙을 완화한다. RFC 4456은 스피커와 경로 출처의 관계를 통해 예외를 표현하며, 그 관계의 방향은 대부분의 요약이 시사하는 것보다 중요하다. 클라이언트에게 배운 경로는 다른 클라이언트와 비클라이언트에게 리플렉트할 수 있지만, 비클라이언트에게 배운 경로는 클라이언트에게만 리플렉트할 수 있다. 이 비대칭을 두 번 읽어야 한다. 클라이언트 관계를 추가하는 일이 설계 오류를 어떻게 감출 수 있는지 설명하기 때문이다. 토폴로지가 의도하지 않은 경로를 열어 버린다.
CLUSTER_LIST 속성은 리플렉션 이력을 기록하며, 그 목록에서 자신의 클러스터 ID를 발견한 리플렉터는 광고를 무시해야 한다. 이것이 루프 방지이고, 식별자가 우연히 재사용될 때 경로를 삭제하는 메커니즘도 바로 이것이다. ORIGINATOR_ID는 경로를 처음 광고한 라우터를 지목함으로써 관련된 역할을 한다.
재사용된 클러스터 ID가 경로를 사라지게 하는 방식이다
작은 네트워크는 지름길을 유혹한다. 각 라우터에 loopback과 같은 클러스터 ID를 주고, 나중에 리플렉터를 하나 더 추가하고, 손에 잡히기 쉽다는 이유로 기존 loopback을 재사용한다. 그 식별자가 이제 두 개의 독립적인 리플렉션 단계에 나타나면, 두 번째 단계는 CLUSTER_LIST에서 자신의 ID를 보고 경로를 버린다. 버리는 것이 루프에 대한 올바른 응답이므로 아무것도 오류를 기록하지 않는다.
하나의 클러스터를 담당하는 중복 리플렉터는 정당한 예외다. 같은 클라이언트를 어느 쪽이든 처리할 수 있도록 의도적으로 ID를 공유한다. 식별자는 섀시 이름을 구분하는 것이 아니라 리플렉션 설계에 맞아야 한다.
설정을 건드리기 전에 의도한 그래프를 그린다. 누가 프리픽스를 생성하는지, 어떤 클라이언트 관계가 첫 리플렉션을 허용하는지, 어떤 리플렉터가 다음 단계로 나르는지, 마지막 클라이언트가 어디에 있는지. 그 그래프의 모든 홉은 재사용된 식별자, 빠진 클라이언트 관계, 정책 필터가 경로를 멈출 수 있는 지점이다. 그래프를 그려 두면 빠진 경로에는 미스터리가 아니라 위치가 생긴다.
모든 이웃을 클라이언트로 만들고 싶은 충동을 참아라
빠진 경로에 대한 빠른 수리는 모든 이웃을 모든 리플렉터의 클라이언트로 만드는 것이다. 전파는 돌아오지만 설계는 아무것도 말해 주지 않는다. 각 스피커가 나르는 경로를 늘리는 동시에 어떤 관계가 그 일을 해야 했는지를 감춘다.
작은 네트워크는 보통 두 형태 중 하나가 필요하다. 풀 iBGP 메시는 라우터 네 대에 세션 여섯 개이고 리플렉션은 전혀 없다. 나머지 에지를 담당하는 지정된 리플렉터 한 쌍이 다른 형태다. 둘 다 모든 라우터가 조금씩 리플렉트하는 부분 메시보다 생각하기 쉽다. 형태는 케이블 도면이 아니라 규모와 장애 동작으로 고른다.
리플렉션을 탓하기 전에 주소 패밀리를 확인하라
포트 179의 TCP 세션은 두 스피커가 대화할 수 있음을 증명할 뿐, VPN 주소 패밀리가 경로를 하나라도 교환했는지는 말해 주지 않는다. 먼저 세션 상태, 다음 패밀리, 다음 개별 프리픽스를 확인한다.
vtysh -c "show bgp summary"
vtysh -c "show bgp l2vpn evpn summary"
vtysh -c "show bgp l2vpn evpn"
이 세 출력은 인접 문제, 교환 문제, 빠진 프리픽스 문제를 구분한다. 패밀리에 프리픽스가 전혀 없다면 리플렉션을 보기 전에 이웃의 활성화 상태와 익스포트 정책을 확인한다. 프리픽스가 한 에지에는 있고 다른 에지에는 없다면 수신 측에서 클러스터 목록과 오리지네이터를 비교하고, 앞 절의 그래프를 따라간다.
다음 홉 도달성과 포워딩 상태는 이 확인 밖에 둔다. 도달할 수 없는 다음 홉을 가진 리플렉트된 경로는 존재하지만 쓸 수 없으며, 다음 홉 열을 보기 전까지는 리플렉션 장애처럼 보인다. 다음 홉을 해결하고, 포워딩 항목을 확인하고, 그다음에야 분배 그래프에 리플렉터가 더 필요한지 결정한다.