ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
IP и ASN

BGP AS-Path Prepending отклоняется соседом: причины и решения с примерами BIRD и FRR

5 шагов 12 мин чтения 910 просмотров 84
Содержание

Препендинг AS-пути (AS-Path Prepending) — стандартный способ управлять входящим трафиком при подключении к нескольким апстримам: вы повторяете свою ASN в анонсах одному из них, путь становится длиннее и менее предпочтительным. Однако нередко BGP AS-Path Prepending отклоняется соседом: префикс пропадает у этого апстрима или препенд не работает. Разберём основные причины (ограничения длины пути, фильтры AS-path, проверки IRR/RPKI) и покажем правильные конфигурации BIRD 2 и FRRouting для Debian/Ubuntu и CentOS/Rocky/AlmaLinux. В примерах локальная ASN 64500, апстрим 203.0.113.1 (AS64496), префикс 198.51.100.0/24 — подставьте свои значения.

Шаг 1: Убедитесь, что AS-Path Prepending действительно отклоняется

Сначала проверьте, что ваш маршрутизатор отправляет путь с препендом, затем поищите в журналах сообщения NOTIFICATION или сбросы сессии и посмотрите в публичном looking glass, какие AS-пути видит мир. Если вы отдаёте всё правильно, а путь через этого апстрима снаружи не виден, его фильтрует апстрим или сети дальше.

# BIRD 2
birdc show route 198.51.100.0/24 export upstream1 all
journalctl -u bird --since "1 hour ago" --no-pager
# FRRouting
vtysh -c "show bgp ipv4 unicast neighbors 203.0.113.1 advertised-routes"
vtysh -c "show bgp ipv4 unicast neighbors 203.0.113.1" | grep -iE "state|prefix|notification"
curl -s "https://stat.ripe.net/data/looking-glass/data.json?resource=198.51.100.0/24" | grep -o '"as_path":"[^"]*"' | sort | uniq -c

Шаг 2: Добавляйте в препенд только свою ASN

Самая частая ошибка — препенд чужой ASN (апстрима или другой сети) или вставка её в конец пути, что меняет origin AS. Апстримы обычно проверяют, что первая ASN равна ASN соседа, и сверяют origin с вашим as-set; посторонние ASN выглядят как перехват маршрута и отбрасываются. Приватные ASN (64512–65534) тоже часто фильтруются. Корректная конфигурация BIRD 2 ниже; при eBGP-экспорте BIRD сам добавит локальную ASN ещё раз:

# /etc/bird/bird.conf (BIRD 2)
filter export_upstream1 {
  if net = 198.51.100.0/24 then {
    bgp_path.prepend(64500);   # own ASN only
    bgp_path.prepend(64500);
    accept;
  }
  reject;
}

protocol bgp upstream1 {
  local as 64500;
  neighbor 203.0.113.1 as 64496;
  ipv4 {
    import none;
    export filter export_upstream1;
  };
}

birdc configure

Шаг 3: Настройка AS-Path Prepending во FRRouting

В FRR препенд задаётся исходящим route-map. После изменения выполните soft out, чтобы переотправить анонсы без разрыва сессии.

vtysh
configure terminal
ip prefix-list MY-NETS seq 10 permit 198.51.100.0/24
route-map UPSTREAM-OUT permit 10
 match ip address prefix-list MY-NETS
 set as-path prepend 64500 64500
exit
route-map UPSTREAM-OUT deny 100
exit
router bgp 64500
 address-family ipv4 unicast
  neighbor 203.0.113.1 route-map UPSTREAM-OUT out
 exit-address-family
end
write memory
clear bgp ipv4 unicast 203.0.113.1 soft out

Шаг 4: Ограничьте длину AS-пути, чтобы не попасть под фильтры

Многие сети отбрасывают маршруты со слишком длинным AS-путём, а некоторые ограничивают число повторов одной ASN. Для влияния на выбор пути достаточно 1–3 препендов; больше пяти почти ничего не даёт и лишь повышает риск фильтрации. Ещё одна частая причина — слишком строгий фильтр AS-path у апстрима, например ^64500$, который отвергает «64500 64500 64500». Попросите апстрим использовать правило вроде ^(64500_)+$.

Проверить фактически отправляемый AS-путь можно так:

birdc show route 198.51.100.0/24 export upstream1 all | grep BGP.as_path
vtysh -c "show bgp ipv4 unicast 198.51.100.0/24"
Многие апстримы поддерживают BGP-community, по которым они сами делают препенд в сторону определённых пиров. Это точнее и реже фильтруется, чем собственный препенд. Значения community смотрите в публичной документации апстрима.

Шаг 5: Проверьте route-объекты IRR и RPKI/ROA

Препенд не меняет origin AS, но апстрим всё равно отклонит префикс, если нет route-объекта в IRR, префикс не входит в зарегистрированный у него as-set или в ROA не совпадает ASN-источник либо max length. Проверка:

whois -h whois.radb.net -- '-i origin AS64500'
whois -h whois.ripe.net -- '-T route 198.51.100.0/24'
curl -s "https://stat.ripe.net/data/rpki-validation/data.json?resource=AS64500&prefix=198.51.100.0/24"

Статус RPKI должен быть valid; если invalid — сначала исправьте ROA. Фильтры апстрима обычно обновляются автоматически через некоторое время, также можно попросить обновить их вручную.

Частые вопросы

Сделал препенд, но трафик не перераспределился

Удалённые сети могут выбирать маршрут по Local Preference, который важнее длины AS-пути, поэтому препенд на них не влияет. Попробуйте community апстрима или измените гранулярность анонсируемых префиксов.

Можно ли добавить в препенд ASN апстрима?

Нет. Повторять можно только свою ASN. Чужие ASN нарушают достоверность пути, и большинство сетей отбросит маршрут.

Поможет ли IMIDC с настройкой препенда?

Если вы анонсируете собственные или арендованные IP с серверов IMIDC, опишите задачу в тикете — инженеры проверят сессию, фильтры и состояние IRR/ROA.

Если проблема не решена, создайте тикет в поддержку IMIDC, работающую 24/7.

Помог ли вам данный ответ?

Похожие руководства