{"id":"IL-0266","org":"Wikimedia Foundation","date":"2021-11-23","docs":[],"title":{"en":"Eqiad routers looped traffic between each other after a BGP MED change and could not reach other sites' public IPs","ko":"eqiad 코어 라우터 두 대 사이에 라우팅 루프가 생겨 eqiad 가 다른 데이터센터의 공인 IP 주소에 닿지 못했다"},"domain":["networking"],"impact":{"scope":"eqiad could not reach hosts in other data centers, such as cache PoPs, via public IP addresses; no impact on end-user traffic","users":"no end-user impact","region":"eqiad"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":null,"related":[],"sources":[{"url":"https://wikitech.wikimedia.org/wiki/Incidents/2021-11-23_Core_Network_Routing","kind":"runbook","archived":"https://web.archive.org/web/20260719191920/https://wikitech.wikimedia.org/wiki/Incidents/2021-11-23_Core_Network_Routing"}],"summary":{"en":"At about 09:37 on 23 November 2021, as part of task T295672, a change on the eqiad core routers cr1-eqiad and cr2-eqiad removed the BGP setting that sets the \"MED\" attribute to the OSPF cost of reaching the next hop of a BGP route. Without it, the correct routes to remote BGP destinations learnt from outside suddenly looked less preferable than the reflections of those routes that the two eqiad routers were announcing to each other. Each router chose the other as the next hop for destinations such as eqsin, and a routing loop formed between them, so eqiad could not reach hosts in other data centers over public IP addresses for about 12 minutes.\n\nIcinga alerted at 09:39 when it could not reach the public text-lb address in eqsin. The change was reverted on both routers at 09:42, but because of how these routes update on a policy change that alone did not fix it; a forced reset of the BGP session between the eqiad routers at 09:51 did. There was no impact on end-user traffic. Task T295672 was updated with a proposal to adjust the BGP sessions so that both the \"second IXP port\" issue is addressed and this does not happen again.","ko":"2021년 11월 23일 화요일 09시 37분쯤, cr1-eqiad 와 cr2-eqiad 에서 BGP 설정 하나를 뺐다. BGP \"MED\" 속성 값을 BGP 경로의 다음 홉까지 가는 OSPF 비용으로 정하는 설정이었다. 그러자 두 코어 라우터가 일부 원격 사이트로 가는 경로를 평가하는 방식이 바뀌었다. 외부에서 학습한 올바른 경로보다, eqiad 의 장비끼리 서로 다시 알리던 같은 경로가 더 나아 보이게 됐다.\n\n예를 들어 cr2-eqiad 는 eqsin 의 BGP 경로로 가는 트래픽을 codfw 로 보내다가, 변경 뒤에는 로컬 피어인 cr1-eqiad 로 보내는 편이 낫다고 판단했다. cr1-eqiad 도 똑같이 cr2-eqiad 로 보내는 편을 골라서, 트래픽이 밖으로 나가지 못하고 두 라우터 사이를 오가는 라우팅 루프가 생겼다. 09시 39분에 eqiad 의 Icinga 가 eqsin 의 공인 text-lb 주소에 닿지 못해 알림이 울렸다. 09시 42분에 두 장비에서 설정 변경을 되돌렸지만, 정책 변경 때 경로가 갱신되는 방식 때문에 바로 풀리지 않았다. 더 조사한 뒤 09시 51분에 eqiad 라우터 사이의 BGP 세션을 강제로 재설정하자 문제가 풀렸다. 약 12분 동안 eqiad 는 다른 데이터센터에 공인 IP 주소로 닿지 못했고, 최종 사용자 트래픽에는 영향이 없었다."},"trigger":{"en":"At about 09:37 a change on cr1-eqiad and cr2-eqiad, made as part of task T295672 to influence BGP route selection, removed a BGP setting that sets the BGP \"MED\" attribute to the OSPF cost of reaching the BGP route's next hop.","ko":"09시 37분쯤 cr1-eqiad 와 cr2-eqiad 에서 BGP 경로 선택에 영향을 주려고 BGP 설정 하나를 뺐다. 이 설정은 BGP \"MED\" 속성 값을 BGP 경로의 다음 홉까지 가는 OSPF 비용으로 정했다. 설정을 뺀 것은 T295672 작업의 일부였다."},"severity":"unknown","symptoms":["network-unreachable"],"timeline":{"detected_after":"2m","resolved_after":"14m"},"date_kind":"incident","detection":{"en":"Icinga health checks against edge caching clusters alerted at 09:39; the first alert was Icinga in eqiad failing to reach the public text-lb address in eqsin.","ko":"09시 39분에 알림이 울렸다. eqiad 의 Icinga 가 eqsin 같은 엣지 캐시 클러스터를 상태 검사하다가 eqsin 의 공인 text-lb 주소에 닿지 못했다."},"components":["bgp"],"root_cause":"config-change","remediation":[{"text":{"en":"Reverted the configuration change on both eqiad routers","ko":"09시 42분 cr1-eqiad 와 cr2-eqiad 두 장비에서 설정 변경을 되돌렸다. 정책이 바뀔 때 경로가 갱신되는 방식 때문에 이것만으로는 바로 풀리지 않았다."}},{"text":{"en":"Forced a reset of the BGP session between the two eqiad routers","ko":"09시 51분 eqiad 라우터 사이의 BGP 세션을 강제로 재설정했고, 문제가 풀렸다."}}],"action_items":[{"text":{"en":"Updated T295672 with further detail on the incident and a proposal to adjust the BGP sessions to address the \"second IXP port\" issue and prevent this from happening again","ko":"T295672 티켓에 사고 내용을 더 자세히 적고, \"second IXP port\" 문제를 다루면서 같은 일이 다시 나지 않도록 BGP 세션을 조정하자는 제안을 올렸다."}}],"contributing":["revert-did-not-restore"],"recurrence_of":null,"symptoms_text":{"en":"On 23 November 2021 at 09:39, two minutes after a change on the eqiad core routers, alerts fired because Icinga in eqiad could not reach the public text-lb address in eqsin (Singapore). For about 12 minutes eqiad could not reach hosts in other data centers, such as the cache PoPs, through their public IP addresses.\n\nTraffic for those destinations never left eqiad. After the change, cr2-eqiad, which had been sending traffic for eqsin BGP routes via codfw, preferred its local peer cr1-eqiad, and cr1-eqiad made the mirror-image choice and sent the same traffic to cr2-eqiad, so the packets bounced between the two routers in a routing loop. End-user traffic was not affected, and internal traffic mostly uses local IP subnets routed with OSPF instead of BGP; the Icinga alert was probably the only impact.\n\nReverting the configuration change on both routers at 09:42 did not clear the loop straight away, because of the particular way these routes update when a policy changes. After more troubleshooting, a forced reset of the BGP session between the two eqiad routers at 09:51 resolved it.","ko":"09시 39분에 알림이 울렸다. 첫 알림은 eqiad 의 Icinga 가 싱가포르 eqsin 의 공인 text-lb 주소에 닿지 못해서 울렸다.\n\neqiad 는 약 12분 동안 캐시 거점 같은 다른 데이터센터의 호스트에 공인 IP 주소로 닿지 못했다. Icinga 는 eqsin 같은 엣지 캐시 클러스터를 상태 검사하다가 이를 알아챘다. 최종 사용자 트래픽에는 영향이 없었다. Wikimedia Foundation 은 Icinga 알림이 영향의 거의 전부였을 것으로 봤다. 내부 트래픽은 대개 BGP 가 아니라 OSPF 로 라우팅되는 로컬 IP 서브넷을 쓰고, 원격 데이터센터의 공인 IP 로 직접 가는 일이 드물기 때문이다.\n\neqsin 으로 가는 트래픽은 밖으로 나가지 못하고 cr1-eqiad 와 cr2-eqiad 사이를 오갔다. 09시 42분에 두 라우터의 설정 변경을 되돌렸지만, 정책이 바뀔 때 이 경로들이 갱신되는 방식 때문에 바로 풀리지 않았다."},"updated_at":"2026-11-14T12:33:51.756870Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0266","org_slug":"wikimedia-foundation"}