네트워크 BGP 진단(Network BGP Diagnostics)
이 스킬은 BGP 세션이 다운되었거나, 플래핑 중이거나, Established 상태이지만 경로가 누락되었거나, 예상치 못한 프리픽스를 광고하는 경우에 사용합니다. 기본 워크플로우는 읽기 전용 증거 수집이며, 정책 변경 및 리셋 작업은 승인된 변경 창(Change Window)에서 수행해야 합니다.
사용 시기
- BGP 이웃이 Idle, Connect, Active, OpenSent 또는 OpenConfirm 상태에 멈춰 있는 경우
- 세션이 Established 상태이지만 예상 프리픽스가 누락된 경우
- route-map, prefix-list, max-prefix 제한, 또는 AS 경로 정책이 경로를 필터링하고 있을 수 있는 경우
- BGP 변경 전후 증거가 필요한 경우
- BGP 요약 출력을 파싱하는 자동화를 검토하는 경우
읽기 전용 분류 워크플로우
- 정확한 이웃, 주소 계열, VRF, 로컬/원격 ASN을 식별합니다.
- 요약 상태와 마지막 리셋 이유를 확인합니다.
- 피어 소스 주소에 대한 연결성을 확인합니다.
- 전송 장애로 가정하기 전에 경로 정책 참조를 확인합니다.
- 플랫폼이 지원하는 명령어를 사용하여 광고된 경로, 수신된 경로, 설치된 경로를 비교합니다.
show bgp summary
show bgp neighbors <peer>
show ip route <peer>
show tcp brief | include <peer>|:179
show logging | include BGP|<peer>
show running-config | section router bgp
show ip prefix-list
show route-map
디바이스가 VRF, IPv6, VPNv4, 또는 EVPN을 사용하는 경우 플랫폼별 주소 계열 명령어를 사용하세요. 전역 IPv4 유니캐스트를 가정하지 마십시오.
상태 해석
| 상태 | 첫 번째 확인 사항 |
|---|---|
| Established (프리픽스 수 있음) | 경로 교환 정상; 정책 및 테이블 선택 검사 |
| Established (프리픽스 0개) | 인바운드 정책, max-prefix, 광고된 경로, AFI/SAFI 확인 |
| Active | TCP 세션이 완료되지 않음; 라우팅, 소스, ACL, 피어 연결성 확인 |
| Connect | TCP 연결 진행 중; 경로 및 원격 리스너 확인 |
| OpenSent/OpenConfirm | TCP 정상; ASN, 인증, 타이머, 기능, 로그 확인 |
| Idle | 이웃 비활성화, 설정 누락, 정책 차단 또는 백오프 타이머 가능 |
전송 연결 확인
ping <peer> source <local-source>
traceroute <peer> source <local-source>
show ip route <peer>
show bgp neighbors <peer> | include BGP state|Last reset|Local host|Foreign host
피어가 루프백에서 소싱된 경우, 양방향 모두 루프백 주소로 라우팅되는지 확인하고 이웃 설정이 예상 업데이트 소스를 사용하는지 확인하십시오.
진단 단축으로 ACL 또는 방화벽 정책을 비활성화하지 마십시오. 먼저 히트 카운터, 로그 및 경로 상태를 읽으십시오.
경로 정책 확인
show bgp neighbors <peer> advertised-routes
show bgp neighbors <peer> routes
show ip prefix-list <name>
show route-map <name>
show bgp <prefix>
일부 플랫폼에서는 received-routes를 사용 가능하게 하기 위해 추가 설정이 필요합니다. 장애 조치 중에는 운영자가 변경을 승인하지 않는 한 해당 설정을 추가하지 마십시오.
AS 경로 및 프리픽스 검토
show bgp regexp _65001_
show bgp regexp ^65001$
show bgp <prefix>
show bgp neighbors <peer> advertised-routes | include Network|Path|<prefix>
AS-path 정규식을 주의해서 사용하십시오. _65001_은 토큰으로서의 AS 65001과 일치합니다. 일반 65001은 더 긴 ASN이나 관련 없는 텍스트와 일치할 수 있습니다.
파서 패턴
import re
from typing import Any
BGP_SUMMARY_RE = re.compile(
r"^(?P<neighbor>\d{1,3}(?:\.\d{1,3}){3})\s+"
r"(?P<version>\d+)\s+"
r"(?P<remote_as>\d+)\s+"
r"(?P<msg_rcvd>\d+)\s+"
r"(?P<msg_sent>\d+)\s+"
r"(?P<table_version>\d+)\s+"
r"(?P<input_queue>\d+)\s+"
r"(?P<output_queue>\d+)\s+"
r"(?P<uptime>\S+)\s+"
r"(?P<state_or_prefixes>\S+)$",
re.M,
)
def parse_bgp_summary(raw: str) -> list[dict[str, Any]]:
rows = []
for match in BGP_SUMMARY_RE.finditer(raw):
state_or_prefixes = match.group("state_or_prefixes")
if state_or_prefixes.isdigit():
state = "Established"
prefixes_received = int(state_or_prefixes)
else:
state = state_or_prefixes
prefixes_received = None
rows.append({
"neighbor": match.group("neighbor"),
"remote_as": int(match.group("remote_as")),
"state": state,
"prefixes_received": prefixes_received,
"uptime": match.group("uptime"),
})
return rows
가능한 경우 구조화된 파서 출력을 선호하지만, BGP 요약 형식은 플랫폼과 주소 계열에 따라 다르므로 원시 출력을 인시던트 레코드와 함께 저장하십시오.
변경 창 전용 작업
다음 작업은 라우팅에 영향을 줄 수 있으므로 자동 진단으로 제안해서는 안 됩니다:
- BGP 세션 클리어
- 이웃 인증, 타이머, 업데이트 소스, route-map 또는 prefix-list 변경
- 추가 수신 경로 저장소 활성화
- 방화벽, ACL 또는 컨트롤 플레인 정책 완화
리셋이 승인된 경우, 플랫폼에서 지원하는 최소 침해적인 소프트 또는 경로 새로 고침 옵션을 선호하고 왜 안전한지 정확히 문서화하십시오.
안티 패턴
- 'Active'가 항상 원격 측이 다운된 것을 의미한다고 가정
- VRF, 주소 계열 또는 업데이트 소스 차이 무시
- 토큰 경계 없이 광범위한 AS-path 정규식 사용
- 마지막 리셋 이유와 로그를 읽기 전에 피어 하드 리셋
received-routes출력이 없다는 것을 경로가 도착하지 않았다는 증거로 간주
참고
- 스킬:
cisco-ios-patterns - 스킬:
network-config-validation - 스킬:
network-interface-health