Вы хотите быть максимально независимым участником сетевого обмена в Интернет. У вас есть номер автономной системы и блок IP-адресов. Это прекрасно. До самой настройки первой сессии по протоколу BGP вам нужно создать набор записей в БД RIPE, которые вам обеспечат успешную работу.
- Зачем это нужно?
- Объекты в БД RIPE
- Как строятся BGP фильтры
- Итог: набор необходимых объектов и данных
- Что будет если не все объекты есть в БД RIPE?
Здесь и далее пойдёт речь про базу данных RIPE. Но это же верно и для других RIR: ARIN, APNIC, AFRINIC, LACNIC.
Зачем это нужно?
При внешнем сетевом взаимодействии нужно учитывать некоторые особенности:
- Принято, что операторы принимают друг от друга блоки адресов с маской /24 и короче (короче маска – больше размер сети).
- Операторы строят фильтры принимаемых сетей от других операторов.
- Фильтры строятся автоматически – скриптами, поэтому данные о сетях всегда должны быть актуальны.
- Скрипты берут информацию из общедоступных баз данных (в России – БД RIPE).
Другими словами, ДО начала настройки BGP-сессии с другим оператором связи у вас должны быть:
- Номер автономной системы
- Блок IP-адресов
- Блок должен быть /24 (256 адресов) или крупнее.
- В БД RIPE должны быть созданы необходимые объекты.
Объекты в БД RIPE
inetnum
Этот объект описывает ваш диапазон адресов. Например:
inetnum: 195.209.32.0 - 195.209.63.255
netname: RU-RCN-19960719
country: RU
org: ORG-RL441-RIPE
admin-c: RA10008-RIPE
tech-c: REC-RIPE
status: ALLOCATED PA
mnt-by: RECONN-MNT
mnt-by: RIPE-NCC-HM-MNT
created: 2020-03-11T10:37:10Z
last-modified: 2020-05-04T09:06:03Z
source: RIPE
Объект описывает диапазон адресов 195.209.32.0 – 195.209.63.255, принадлежащий компании ORG-RL441-RIPE.
Это полный диапазон адресов, сеть /19. Эта сеть может быть анонсирована как единым блоком, так и разделена на несколько более мелких блоков, вплоть до /24.
aut-num
Номер автономной системы. Этот объект не только показывает какой именно номер вам выделен, но описывает взаимодействие этой ASn с другими операторами. Кстати, RIPE при выделении номера автономной системы сразу просит указать номера AS не менее чем двух других операторов (ведь при подключении только к одному оператору фактически не требуется отдельный ASn – можно использовать номер вашего единственного апстрима).
aut-num: AS12722
as-name: RECONN
org: ORG-RL441-RIPE
import: from AS31500 accept ANY
export: to AS31500 announce AS12722
import: from AS210359 accept ANY
export: to AS210359 announce AS12722
admin-c: RA10008-RIPE
tech-c: REC-RIPE
status: ASSIGNED
mnt-by: RIPE-NCC-END-MNT
mnt-by: RECONN-MNT
created: 2011-02-14T11:14:43Z
last-modified: 2022-11-01T08:16:57Z
source: RIPE# Filtered
Этот объект описывает номер автономной системы 12722 и двух апстримов – 31500 и 210359, от которых принимается полная таблица маршрутизации и анонсируются только маршруты AS12722.
route
Объект route, который связывает диапазон IP-адресов и номер автономной системы.
route: 195.209.32.0/19
descr: RECONN network
origin: AS12722
mnt-by: RECONN-MNT
created: 2015-05-11T13:18:34Z
last-modified: 2015-05-11T13:18:34Z
source: RIPE
В данном случае – весь диапазон IP-адресов будет анонсироваться одним блоком /19 от автономной системы 12722.
Пожалуй, это ключевой объект – именно он показывает какой именно маршрут будет анонсироваться автономной системой.
as-set
Не всегда нужны, но важный объект.
Используется в тех случаях, когда к вам подключены другие операторы связи со своими автономными системами. В этом случае все номера анонсируемых вами автономных систем объединяются в одну группу – AS-SET. В неё включается номер вашей AS и номера автономных систем ваших клиентов либо их группы AS-SET:
as-set: AS-RECONN
descr: RECONN Group Network
members: AS6870 # номера AS ваших клиентов
members: AS8441
members: AS12722 # свой номер AS
members: AS29634
members: AS35594
members: AS39678
members: AS49598
members: AS51916
members: AS56425
members: AS59459
members: AS61269
members: AS61293
members: AS198770
members: AS199278
members: AS202764
members: AS203806
members: AS205824
members: AS208274
members: AS210359
members: AS212667
members: AS-FENIX #группы AS других операторов
members: AS-ATSCOM
tech-c: REC-RIPE
admin-c: REC-RIPE
mnt-by: RECONN-MNT
created: 2015-04-16T14:46:15Z
last-modified: 2022-11-01T08:04:36Z
source: RIPE
В случае использования AS-SET-ов необходимо несколько иначе описывать объект as-num:
aut-num: AS12722
as-name: RECONN
org: ORG-RL441-RIPE
import: from AS31500 accept ANY
export: to AS31500 announce AS-RECONN
import: from AS210359 accept ANY
export: to AS210359 announce AS-RECONN
admin-c: RA10008-RIPE
tech-c: REC-RIPE
status: ASSIGNED
mnt-by: RIPE-NCC-END-MNT
mnt-by: RECONN-MNT
created: 2011-02-14T11:14:43Z
last-modified: 2022-11-01T08:16:57Z
source: RIPE# Filtered
В этом случае, при взаимодействии с аплинками мы анонсируем все маршруты, включенные в группу AS-RECONN (as-set).
Как строятся BGP фильтры
При настройке BGP-сессии с другим оператором связи ваш аплинк, скорее всего, будет выполнять настройку фильтров маршрутов, которые от вас принимает. Построение фильтров – процесс автоматический, он может выполняться различными скриптами (bgpq, ratoolset, rtconfig…). В любом случае, эти скрипты откуда-то должны взять исходную информацию. Именно эта информация описывается перечисленными объектами.
Фильтры могут быть как по AS-номерам, так и по списку префиксов.
Пример фильтра по AS-номерам:
ip as-path access-list LISTNAME permit ^12722(_12722)*$
ip as-path access-list LISTNAME permit ^12722(_[0-9]+)*_(6870|8441|23456|29634)$
ip as-path access-list LISTNAME permit ^12722(_[0-9]+)*_(35594|39678|49598|51538)$
ip as-path access-list LISTNAME permit ^12722(_[0-9]+)*_(51916|56425|58095|59459)$
ip as-path access-list LISTNAME permit ^12722(_[0-9]+)*_(60904|61269|61293)$
Пример фильтра по префиксам:
ip prefix-list LISTNAME permit 2.59.48.0/24
ip prefix-list LISTNAME permit 5.45.80.0/22
ip prefix-list LISTNAME permit 5.182.116.0/24
ip prefix-list LISTNAME permit 5.183.153.0/24
...
ip prefix-list LISTNAME permit 195.209.32.0/19
...
Или даже каким-то комбинированным вариантом.
Как именно будет строиться фильтр – определяет владелец AS.
В качестве исходных данных для построения фильтра задаётся номер автономной системы ASn, as-set и формат фильтра.
Итог: набор необходимых объектов и данных
Итого, перечислим необходимый набор объектов в БД RIPE для описания межпровайдероского взаимодействия:
- inetnum – блок ваших IP-адресов (не менее /24 или 256 адресов одним блоком)
- aut-num – объект, описывающий номер вашей автономной системы ASn и её взаимодействия с вашими аплинками (обязательно указать номера AS ваших аплинков)
- route – объект, описывающий каким / какими блоками вы будете анонсировать ваши адреса. Блок должен быть привязан к номеру вашей AS.
- (опционально) as-set – если вы анонсируете не только свою автономку, но и ещё кого-то транзитом.
Что будет если не все объекты есть в БД RIPE?
В случае отсутствия информации, отсутствия объектов, неактуальной информации и тд – построение фильтров вашими аплинками будет некорректным.
Учитывая то, что каждый оператор строит фильтры такие, которые считает нужными и этот процесс не стандартизирован, можно сказать, что у всех фильтры разные.
Мало того, есть операторы, которые вообще не выполняют фильтрацию. Обычно это весьма смелые, крупные транзитные операторы.
Получается, что несмотря на то, что вы честно анонсируете все необходимые маршруты и диагностика BGP-сессии на маршрутизаторе показывает, что всё хорошо, вы получаете потенциальную возможность непрохождения анонсов в произвольном месте сети – как на прямой сессии с вашим аплинком, так и где-то дальше, при взаимодействии с другими операторами.
Настроили бордер, подняли BGP-сессии с двумя разными операторами. По обеим сессиям анонсируем одинаковый набор префиксов. Интернет работает, Looking Glass-ы показывают, что маршрут есть, всё хорошо.
При проведении технических работ отключаем одного из операторов, считая что второй оператор возьмёт на себя всю нагрузку и проблем не возникнет.
Однако, сеть тут же встаёт полностью – нет вообще никакой связи!
Разобрались. Оказалось, что из-за некорректного описания взаимодействия в aut-num-объекте второй оператор построил фильтр, который просто запрещал приём всех префиксов. Нам полную таблицу анонсировал, а от нас префиксы не принимал.
Случай из жизни.