Jump to content
Калькуляторы

4-х значные номера ASN Влияние номера AS на выбор маршрута BGP

Недавно в соседней ветке - http://forum.nag.ru/forum/index.php?showtopic=128474&st=0 было обсуждение на тему 4-х значных ASN.

А именно дает ли какие-либо преимущества использование 4-х значных номеров AS перед 5-ти и более значными?

 

В rfc конечно все расписано - https://tools.ietf.org/html/rfc4271#section-9.1 и даже перевод есть - https://rfc2.ru/4271.rfc/print#p9.1

 

Но RFC есть RFC, а конкретная реализация BGP может вести себя немного иначе.

Если честно, ну совсем не верил я в то что размер номера AS может как-то влиять на решение о выборе маршрута. Поэтому на досуге поднял несколько виртуалок из того что было под рукой и поэкспериментировал немного.

Из этого эксперимента мы должны понять, влияет ли размер номера AS на выбор маршрута в BGP.

А под рукой в этот раз оказался OpenBGPd из состава OpenBSD 6.1

 

Наша тестовая сеть представлена на рисунке.

 

R1(AS10001) и R4(AS10002) - наши воображаемые клиенты подключенные к двум аплинкам R2 (AS1234) и R3 (AS49999)

Сеть за R1 - 123.123.0.0/16

Сеть за R4 - 244.244.0.0/16

За маршрутами к этим двум сетям мы и будем наблюдать.

 

R2 - Аплинк с коротким номером AS1234

R3 - Аплинк с длинным номером AS49999

 

Сценарий первый, когда у R2 номер ASN и router-id меньше чем у R3.

 

Тут мы видим, что на R1 маршрут к сети 244.244/16 пролегает как и положено через R2

 

R1

# bgpctl sh rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced, S = Stale
origin: i = IGP, e = EGP, ? = Incomplete

flags destination          gateway          lpref   med aspath origin
AI*>  123.123.0.0/16       0.0.0.0            100     0 i
*>    222.222.0.0/16       1.1.1.2            100     0 1234 i
*>    233.233.0.0/16       2.2.2.2            100     0 49999 i
*>    244.244.0.0/16       1.1.1.2            100     0 1234 10002 i
*     244.244.0.0/16       2.2.2.2            100     0 49999 10002 i

# netstat -rn | grep 244
244.244/16         1.1.1.2            UG         0        0     -    48 em0

 

Так же и на R4 маршрут в сеть 123.123/16 лежит через R2

 

R4

# bgpctl sh rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced, S = Stale
origin: i = IGP, e = EGP, ? = Incomplete

flags destination          gateway          lpref   med aspath origin
*>    123.123.0.0/16       4.4.4.2            100     0 1234 10001 i
*     123.123.0.0/16       3.3.3.1            100     0 49999 10001 i
*>    222.222.0.0/16       4.4.4.2            100     0 1234 i
*     222.222.0.0/16       3.3.3.1            100     0 49999 10001 1234 i
*>    233.233.0.0/16       3.3.3.1            100     0 49999 i
*     233.233.0.0/16       4.4.4.2            100     0 1234 10001 49999 i
AI*>  244.244.0.0/16       0.0.0.0            100     0 i

# netstat -rn | grep 123
123.123/16         4.4.4.2            UG         0        0     -    48 em1

 

Сценарий второй, когда у R2 номер ASN меньше, а router-id больше чем у R3.

 

На R1 картина изменилась:

 

# bgpctl sh rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced, S = Stale
origin: i = IGP, e = EGP, ? = Incomplete

flags destination          gateway          lpref   med aspath origin
AI*>  123.123.0.0/16       0.0.0.0            100     0 i
*>    222.222.0.0/16       1.1.1.2            100     0 1234 i
*>    233.233.0.0/16       2.2.2.2            100     0 49999 i
*>    244.244.0.0/16       2.2.2.2            100     0 49999 10002 i
*     244.244.0.0/16       1.1.1.2            100     0 1234 10002 i

# netstat -rn | grep 244
244.244/16         2.2.2.2            UG         0        0     -    48 em1

 

Так че как и на R4:

 

# bgpctl sh rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced, S = Stale
origin: i = IGP, e = EGP, ? = Incomplete

flags destination          gateway          lpref   med aspath origin
*>    123.123.0.0/16       3.3.3.1            100     0 49999 10001 i
*     123.123.0.0/16       4.4.4.2            100     0 1234 10001 i
*>    222.222.0.0/16       4.4.4.2            100     0 1234 i
*     222.222.0.0/16       3.3.3.1            100     0 49999 10001 1234 i
*>    233.233.0.0/16       3.3.3.1            100     0 49999 i
*     233.233.0.0/16       4.4.4.2            100     0 1234 10001 49999 i
AI*>  244.244.0.0/16       0.0.0.0            100     0 i

# netstat -rn | grep 123
123.123/16         3.3.3.1            UG         0        0     -    48 em0

 

Теперь весь трафик между R1 и R4 бежит через R3, так как router-id меньше у R3.

 

 

Сценарий третий, аномальный и в природе не встречается, когда router-id у двух пиров одинаковый.

Большинство реализаций BGP в этом случае ругнутся примерно как cisco:

%BGP-3-NOTIFICATION: sent to neighbor 10.0.0.1 2/3 (BGP identifier wrong)

и BGP сессия не установится.

 

Но, к примеру последний OpenBGPd, спокойно относится к этому, устанавливает сессию и прекрасно работает.

 

Немного про router-id:

 

В общем то нормальной практикой является назначение router-id руками, поэтому все нижеописанное актуально для небольшого процента конфигураций в которых админ не озаботился этим и оставил настройки RID дефолтными. Если RID = 0.0.0.0 то bgp-сессия не установится.

 

Что у нас по дефолту в router-id (RID) для разных распространенных девайсов?

 

Cisco:

Если RID не был назначен административно, то он выбирается автоматически, в зависимости от настроек маршрутизатора, по таким правилам:

Наибольший IP присвоенный активному loopback-у или наибольший IP из всех других активных интерфейсов. Если никакой из этих вариантов недоступен, и router-id не сконфигурирован вручную то будет 0.0.0.0.

 

Juniper:

Если RID не был назначен административно, то это будет IP первого поднявшегося интерфейса, как правило это loopback. Если никакой из этих вариантов недоступен, и router-id не сконфигурирован вручную то будет так же как в цыске 0.0.0.0

 

Mikrotik:

По дефолту, если не назначен вручную стоит 0.0.0.0, или IP первого поднявшегося интерфейса.

 

HP Procurve:

Тут HP немного схитрили, и назначают наименьший IP присвоенный loopback-ам или VLAN-ам, но само собой можно и руками задать.

 

OpenBGPd:

Если не задан вручную, то берется наибольший IP на роутере.

 

Bird:

Наименьший адрес на не-loopback интерфейсе.

 

Quagga:

Толком не знаю, но подозреваю что также как на цыске.

 

Что стало с нашими подопытным?

Напомню что router-id на машинах R2 и R3 мы установили руками в одинаковые значения 255.255.0.1

 

На R1, выбран маршрут через R2 .

 

R1

# bgpctl sh rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced, S = Stale
origin: i = IGP, e = EGP, ? = Incomplete

flags destination          gateway          lpref   med aspath origin
AI*>  123.123.0.0/16       0.0.0.0            100     0 i
*>    222.222.0.0/16       1.1.1.2            100     0 1234 i
*>    233.233.0.0/16       2.2.2.2            100     0 49999 i
*>    244.244.0.0/16       1.1.1.2            100     0 1234 10002 i
*     244.244.0.0/16       2.2.2.2            100     0 49999 10002 i

# netstat -rn | grep 244
244.244/16         1.1.1.2            UG         0        0     -    48 em0

 

Но вот R4 все равно выбирает путь через R3

 

R4

# bgpctl sh rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced, S = Stale
origin: i = IGP, e = EGP, ? = Incomplete

flags destination          gateway          lpref   med aspath origin
*>    123.123.0.0/16       3.3.3.1            100     0 49999 10001 i
*     123.123.0.0/16       4.4.4.2            100     0 1234 10001 i
*>    222.222.0.0/16       4.4.4.2            100     0 1234 i
*     222.222.0.0/16       3.3.3.1            100     0 49999 10001 1234 i
*>    233.233.0.0/16       3.3.3.1            100     0 49999 i
*     233.233.0.0/16       4.4.4.2            100     0 1234 10001 49999 i
AI*>  244.244.0.0/16       0.0.0.0            100     0 i

# netstat -rn | grep 123
123.123/16         3.3.3.1            UG         0        0     -    48 em0

 

Почему так происходит?

Думаю что в данном случае BGP смотрит на IP адреса пиров, со стороны R1 выбирается пир с наименьшим IP - 1.1.1.2 - меньше чем 2.2.2.2, также как со стороны R4 выбирается пир с IP - 3.3.3.1 - меньше чем 4.4.4.2.

Длина номера AS в данном случае никак не влияет на выбор маршрута. Проверим? Меняем местами только номера AS, теперь у нас R2 (AS49999) а R3 (AS1234)

Напомню, что router-id у них по прежнему одинаковые - 255.255.0.1

 

Смотрим на R1

Маршрут проходит через R2 несмотря на то что номер AS у него теперь больше чем у R3

 

R1

# bgpctl sh rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced, S = Stale
origin: i = IGP, e = EGP, ? = Incomplete

flags destination          gateway          lpref   med aspath origin
AI*>  123.123.0.0/16       0.0.0.0            100     0 i
*>    222.222.0.0/16       1.1.1.2            100     0 49999 i
*>    233.233.0.0/16       2.2.2.2            100     0 1234 i
*>    244.244.0.0/16       1.1.1.2            100     0 49999 10002 i
*     244.244.0.0/16       2.2.2.2            100     0 1234 10002 i
# netstat -rn | grep 244
244.244/16         1.1.1.2            UG         0        0     -    48 em0

 

А на R4 маршрут проходит через R3 и это не из-за меньшего номера ASN, а из-за меньшего IP-адреса пира 3.3.3.1 меньше чем 4.4.4.2

 

R4

# bgpctl sh rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced, S = Stale
origin: i = IGP, e = EGP, ? = Incomplete

flags destination          gateway          lpref   med aspath origin
*>    123.123.0.0/16       3.3.3.1            100     0 1234 10001 i
*     123.123.0.0/16       4.4.4.2            100     0 49999 10001 i
*>    222.222.0.0/16       4.4.4.2            100     0 49999 i
*     222.222.0.0/16       3.3.3.1            100     0 1234 10001 49999 i
*>    233.233.0.0/16       3.3.3.1            100     0 1234 i
*     233.233.0.0/16       4.4.4.2            100     0 49999 10001 1234 i
AI*>  244.244.0.0/16       0.0.0.0            100     0 i
# netstat -rn | grep 123
123.123/16         3.3.3.1            UG         0        0     -    48 em0

 

 

 

Данный эксперимент показывает, что до выбора маршрута по номеру AS дело никогда не доходит, так что можно считать, что размер номера AS не влияет на выбор маршрута.

Возможно другие реализации BGP ведут себя иначе, но мне не на чем сейчас проверить. Если у кого-то есть опыт, давайте обсудим.

 

Всем спасибо.

post-100273-090871000 1492762105_thumb.jpeg

Share this post


Link to post
Share on other sites

Просто у вас нет 4ех знака для продажи, вот вы и злитесь!

 

ps: а если по делу отличная доказательная база.

Share this post


Link to post
Share on other sites

Просто у вас нет 4ех знака для продажи, вот вы и злитесь!

 

ps: а если по делу отличная доказательная база.

ггг ;))

 

Да я и не злюсь вовсе :)

Если кто-то покупает, значит нужно, ради бога.

Просто интересно узнать о практической пользе, может тоже купить захочется когда-нибудь.

Share this post


Link to post
Share on other sites

Просто интересно узнать о практической пользе, может тоже купить захочется когда-нибудь.

Думаю, при прочих равных (цена,...) клиент выберет того аплинка, у которого номер поменьше.

Типа больше лет на рынке, опыта, экспертизы,....

Как то не вяжутся мастодонты-тиарваны с 32 битными асками.

Share this post


Link to post
Share on other sites

Да, согласен, это понятно….

Просто хотел удостовериться в том, что чисто технических преимуществ меньший номер AS не дает.

Share this post


Link to post
Share on other sites

У Cisco 10й пункт при выборе пути - сравнение времени получения префикса (для eBGP): When both paths are external, prefer the path that was received first (the oldest one). Router-id сравнивается позже, на 11 шаге.

У OpenBGP такой же пункт. Вероятно в ваших тестах срабатывает этот фактор.

Share this post


Link to post
Share on other sites

Включите на OpenBGPD дебаг (если он там есть), процесс BGP должен писать почему префикс выбран лучшим.

Share this post


Link to post
Share on other sites

Возраст сессии в данном случае не влияет, пробовал дергать сессию на R2 и R3 для того чтобы возраст у них стал разный, это не меняет поведения.

 

В OpenBGPd по умолчанию игнорируется возраст сессии:

 

из man bgpd.conf

rde route-age (ignore|evaluate)
            If set to evaluate, the best path selection will not only be
            based on the path attributes but also on the age of the route,
            giving preference to the older, typically more stable, route.  In
            this case the decision process is no longer deterministic.  The
            default is ignore.

 

В циске как я понял, по дефолту возраст учитывается, если не установлен bgp best path compare-routerid

?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this