> For the complete documentation index, see [llms.txt](https://adavyshin.gitbook.io/networks/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://adavyshin.gitbook.io/networks/network/laboratornaya-rabota-bgp.md).

# Лабораторная работа: BGP

## Ч. Настройка AS10

🔧Настраиваем маршрутизатор <kbd>R1</kbd>:

```
configure terminal
!
router bgp 10
 bgp router-id 1.1.1.1
 neighbor 192.0.14.4 remote-as 45679
 neighbor 192.0.15.5 remote-as 45679
 neighbor 203.1.113.100 remote-as 100
 redistribute connected
```

## Ч. Настройка AS20

🔧Настраиваем маршрутизатор <kbd>R2</kbd>:

```
configure terminal
!
router bgp 20
 bgp router-id 2.2.2.2
 neighbor 192.0.25.5 remote-as 45679
 neighbor 192.0.28.8 remote-as 80
 neighbor 203.2.113.100 remote-as 100
 redistribute connected
```

## Ч. Настройка AS30

🔧Настраиваем маршрутизатор <kbd>R3</kbd>:

```
configure terminal
!
router bgp 30
 bgp router-id 3.3.3.3
 neighbor 192.0.38.8 remote-as 80
 neighbor 203.3.113.100 remote-as 100
 redistribute connected
```

## Ч. Настройка конфедерации AS45679

🔧Настраиваем маршрутизатор <kbd>R4</kbd>:

```
configure terminal
!
router bgp 45
 bgp router-id 4.4.4.4
 neighbor 192.0.14.1 remote-as 10
 neighbor 192.0.45.5 remote-as 45
 neighbor 192.0.46.6 remote-as 679
 bgp confederation identifier 45679
 bgp confederation peer 679
 redistribute connected
```

🔧Настраиваем маршрутизатор <kbd>R5</kbd>:

```
configure terminal
!
router bgp 45
 bgp router-id 5.5.5.5
 neighbor 192.0.15.1 remote-as 10
 neighbor 192.0.25.2 remote-as 20
 neighbor 192.0.45.4 remote-as 45
 neighbor 192.0.57.7 remote-as 679
 bgp confederation identifier 45679
 bgp confederation peer 679
 redistribute connected
```

🔧Настраиваем маршрутизатор <kbd>R6</kbd>:

```
configure terminal
!
router bgp 679
 bgp router-id 6.6.6.6
 neighbor 192.0.46.4 remote-as 45
 neighbor 192.0.69.9 remote-as 679
 bgp confederation identifier 45679
 bgp confederation peer 45
 redistribute connected
```

Маршрутизатор <kbd>RR9</kbd> с точки зрения топологии является `Route-Reflector` для <kbd>R6</kbd> и <kbd>R7</kbd>, его задача передавать маршруты друг от друга.

🔧Настраиваем маршрутизатор <kbd>RR9</kbd>:

```
configure terminal
!
router bgp 679
 bgp router-id 9.9.9.9
 neighbor 192.0.69.6 remote-as 679
 neighbor 192.0.69.6 route-reflector-client
 neighbor 192.0.79.7 remote-as 679
 neighbor 192.0.79.7 route-reflector-client
 bgp confederation identifier 45679
 redistribute connected
```

🔧Настраиваем маршрутизатор <kbd>R7</kbd>:

```
configure terminal
!
router bgp 679
 bgp router-id 7.7.7.7
 neighbor 192.0.79.9 remote-as 679
 neighbor 192.0.57.5 remote-as 45
 neighbor 192.0.78.8 remote-as 80
 bgp confederation identifier 45679
 bgp confederation peer 45
 redistribute connected
```

## Ч. Настройка AS80

🔧Настраиваем маршрутизатор <kbd>R8</kbd>:

```
configure terminal
!
router bgp 80
 bgp router-id 8.8.8.8
 neighbor 192.0.78.7 remote-as 45679
 neighbor 192.0.28.2 remote-as 20
 neighbor 192.0.38.3 remote-as 30
 neighbor 203.80.113.100 remote-as 200
 redistribute connected
```

## Ч. Настройка AS200 и взаимодействие с AS80

`Компания B` купила пул "белых" адресов `5.29.134.0/23` и хочет объявить их в Интернет. Для того приземлить эту сеть, создадим `Loopback200` c IP-адресом `5.29.134.1`.

&#x20;🔧Настраиваем маршрутизатор <kbd>B-CE1</kbd>:

```
configure terminal
!
interface Loopback200
  ip address 5.29.134.1 255.255.254.0
!
router bgp 200
 bgp router-id 5.29.134.1
 neighbor 203.80.113.1 remote-as 80
 network 5.29.134.0 mask 255.255.254.0
```

Для проверки корректности объявления префикса, давайте спустя минуту проверим таблицу маршрутов на <kbd>R8</kbd>:

<figure><img src="/files/Y1fRaus2w5s9XsAn2sfh" alt=""><figcaption></figcaption></figure>

Но клиент попросил от провайдера отдать маршрут по умолчанию

🔧Настраиваем маршрутизатор <kbd>R8</kbd>:

```
configure terminal
!
router bgp 80
 neighbor 203.80.113.100 default-originate
```

🔭 Проверяем дефолт на маршрутизаторе <kbd>B-CE1</kbd>:

<figure><img src="/files/3pN2EXnXwNfkg58J1vDP" alt=""><figcaption></figcaption></figure>

## Ч. Настройка AS300 и multi-home

Компания С также приобрела пул белых адресов `2.30.204.0/23` и хостит у себя веб-приложение. Для приземления также будем использовать `Loopback300` с IP-адресом `2.30.204.1`, но есть "но". Для пиринга с провайдерами мы будем использовать созданный Loopback300. &#x20;

🔧Настраиваем маршрутизатор <kbd>C-CE1</kbd>:

```
configure terminal
!
interface Loopback300
  ip address 2.30.204.1 255.255.254.0
!
router bgp 300
 bgp router-id 2.30.204.1
 neighbor 203.7.113.1 remote-as 45679
 neighbor 203.7.113.1 update-source Loopback300
 neighbor 203.7.113.1 ebgp-multihop 3
 neighbor 203.84.113.1 remote-as 80
 neighbor 203.84.113.1 update-source Loopback300
 neighbor 203.84.113.1 ebgp-multihop 3
 network 2.30.204.0 mask 255.255.254.0
```

На PE-маршрутизаторах нам необходимо добавить `neighbor`, указывающий на `Loopback300` на <kbd>C-CE1</kbd>. Но маршрутизаторы не знают как добрать до `2.30.204.1`, поэтому добавим статический маршрут, указывающий на <kbd>С-СE1</kbd>.

🔧Правим маршрутизатор <kbd>R7</kbd> со стороны провайдера:

```
configure terminal
!
router bgp 679
 neighbor 2.30.204.1 remote-as 300
 neighbor 2.30.204.1 ebgp-multihop 3
exit
!
ip route 2.30.204.1 255.255.255.255 203.7.113.100 name {C-COMPANY-PEER}
```

🔧Правим маршрутизатор <kbd>R8</kbd> со стороны провайдера:

```
configure terminal
!
router bgp 80
 neighbor 2.30.204.1 remote-as 300
 neighbor 2.30.204.1 ebgp-multihop 3
exit
!
ip route 2.30.204.1 255.255.255.255 203.84.113.100 name {C-COMPANY-PEER}

```

А давайте проверим таблицу маршрутизации RR9 на наличие маршрута до сети 2.30.204.0/23, а там его не будет... Для того, чтобы разобраться, давайте глянем на BGP RIB-таблицу с помощью основной команды show bgp ipv4 unicast

<figure><img src="/files/euHsfBCWtBZbl2qPvst8" alt=""><figcaption></figcaption></figure>

Вроде как префикс есть, но отметки best нет. А давайте посмотрим на `Hext Hop`, это особенность iBGP-соседства с <kbd>R7</kbd> маршрутизатором. Когда он отдаёт префикс iBGP-соседу, то он не подменяет атрибут `Next Hop`, <kbd>RR9</kbd> просто не знает как добраться до IP `2.30.204.1` и соответственно не добавляет маршрут в FIB. Из этой ситуации можно выйти разными способами, но предлагаю для полноты картины на обоих маршрутизаторах <kbd>R7</kbd> и <kbd>R8</kbd> сделать редистрибьюцию статического маршрута, чтобы все узнали о том, как добраться до IP-адреса `2.30.204.1`.

🔧 Правим маршрутизатор <kbd>R7</kbd> :

```
configure terminal
!
router bgp 679
  redistribute static
```

🔧 Правим маршрутизатор <kbd>R8</kbd> :

```
configure terminal
!
router bgp 80
 redistribute static
```

## Ч. Настройка iBGP внутри AS100 и внешний стык

🔧Настраиваем маршрутизатор <kbd>A-CE1</kbd> для iBGP:

```
configure terminal
!
interface Loopback100
  description {BGP Update Source}
  ip address 10.100.1.1 255.255.255.255
  ip ospf 1 area 0
!
router bgp 100
 bgp router-id 203.112.113.100
 neighbor 10.100.2.2 remote-as 100
 neighbor 10.100.2.2 update-source Lo100
```

🔧Настраиваем маршрутизатор <kbd>A-CE2</kbd> для iBGP:

```
configure terminal
!
interface Loopback100
  description {BGP Update Source}
  ip address 10.100.2.2 255.255.255.255
  ip ospf 1 area 0
!
router bgp 100
 bgp router-id 203.121.113.100
 neighbor 10.100.1.1 remote-as 100
 neighbor 10.100.1.1 update-source Lo100
```

После того, как настроили <kbd>A-CE1</kbd> и <kbd>A-CE2</kbd> мы должны увидеть следующее syslog-сообщения:

> <kbd>A-CE1</kbd>: \*Oct 14 23:42:46.549: %BGP-5-ADJCHANGE: neighbor 10.100.2.2 Up
>
> <kbd>A-CE2</kbd>: \*Oct 14 23:42:49.598: %BGP-5-ADJCHANGE: neighbor 10.100.1.1 Up

`Компания A`  также владеет белой подсетью `95.114.63.0/24`. Реализуем это по аналогии с предыдущими примерами на Loopback-ах.

🔧 Продолжаем настраивать маршрутизатор <kbd>A-CE1</kbd> :

```
configure terminal
!
interface Loopback101
  ip address 95.114.63.1 255.255.255.0
!
router bgp 100
  network 95.114.63.0 mask 255.255.255.0
  neighbor 203.1.113.1 remote-as 10
  neighbor 203.2.113.1 remote-as 20
```

🔧 Продолжаем настраивать маршрутизатор <kbd>A-CE2</kbd> :

```
configure terminal
!
interface Loopback102
  ip address 95.114.63.2 255.255.255.0
!
router bgp 100
  network 95.114.63.0 mask 255.255.255.0
  neighbor 203.3.113.1 remote-as 30
```

## Ч. Выбор маршрута

Давайте на маршрутизаторе <kbd>R5</kbd> поднимем Loopback8888 с псевдо GoogleDNS IP.&#x20;

🔧 На маршрутизаторе <kbd>R5</kbd>:

```
configure terminal
!
interface Loopback8888
  ip address 8.8.8.8 255.255.255.255
!
router bgp 45
  network 8.8.8.8 mask 255.255.255.255
```

Давайте проверим BGP RIB-маршруты на маршрутизаторе <kbd>A-CE1</kbd>:&#x20;

<figure><img src="/files/LYrcJ62ZODlhYskGTwnv" alt=""><figcaption></figcaption></figure>

Мы видим, что лучший маршрут сейчас ведёт через провайдера <kbd>R2</kbd>.

Давайте вспомним,  как BGP выбирает лучший маршрут:&#x20;

<table><thead><tr><th width="61.800048828125">#</th><th width="209.4000244140625">Attribute</th><th>Описание</th></tr></thead><tbody><tr><td>1</td><td>Weight</td><td>Данный атрибут изначально был только на Cisco-устройствах</td></tr><tr><td>2</td><td>Local Preference</td><td>Префикс с наибольшим Local Prefence считается наилучшим, по умолчанию это значение равно 100</td></tr><tr><td>3</td><td>Locally Originated</td><td>Маршрутизаторы обычно предпочитают префиксы сформированные локально (с помощью команды network или redistribution) по сравнению с префиксами, полученными от соседей.</td></tr><tr><td>4</td><td>AS Path Length</td><td>Количество и последовательность AS, которые префикс прошёл. Чем меньше автономных систем, тем лучше.</td></tr><tr><td>5</td><td>Origin Type</td><td>Тип создания, то есть как был сформирован префикс,<br> <code>IGP</code> > <code>EGP</code> > <code>Incomplete</code></td></tr><tr><td>6</td><td>MED</td><td>Атрибут , который используется в тех случаях, когда ваша AS пирится c соседней AS в нескольких точках, то на основе этого атрибута вы говорите соседней AS, через какую точку лучше отправлять вам. </td></tr><tr><td>7</td><td>Neighbor Type</td><td>Предпочтительней будет eBGP-сосед (AD=20) по сравнению с iBGP-соседом (AD=200).</td></tr><tr><td>8</td><td>IGP Metric</td><td>IGP метрика как добраться до Next-hop, либо соседа</td></tr><tr><td>9</td><td>Oldest Path</td><td>Если оба маршруты схожи по всем атрибутам до Oldest Path, то предпочтение отдаётся более зрелым (старшим)</td></tr><tr><td>10</td><td>Route ID</td><td>Путь предпочтительней от маршрутизатора с наименьшим Router ID</td></tr><tr><td>11</td><td>Neighbor Address</td><td>Сравнение IP-адресов соседей</td></tr></tbody></table>

Данный выбор пал скорей всего на Oldest Path, но мы хотим явно сделать путь через <kbd>R1</kbd>, сделать это можем на основе Route-map с модификацией `Local Preference`.&#x20;

🔧 На маршрутизаторе `A-CE1`:

```
configure terminal
!
route-map RM-PREF-IN permit 10
  set local-preference 200
!
router bgp 100
  neighbor 203.1.113.1 route-map RM-PREF-IN in
```

После того, как мы модифицировали соседство, чтобы оно явно обновилось используем команду `clear bgp ipv4 unicast *` , если вы в configure terminal, то добавить `do`.

<figure><img src="/files/DcXFDU2k4w89goc48Ryn" alt=""><figcaption></figcaption></figure>

Теперь видим, что префикс до `8.8.8.8/32` выбран лучшим через 203.1.113.1 c LocPrf равным 200.

## Ч. Защита от того, чтобы не стать провайдером.

Когда у вас подключение к двум провайдерам по BGP, теоретически есть стать третьим провайдером. Когда клиенты первого провайдера находят лучший маршрут до целевого ресурса, через вашу AS он попадают в сеть второго провайдера. Это происходит согласно стандартному поведению BGP, чтобы защититься от таких ситуаций - best practise использование фильтрации исходящих префиксов в сторону провайдеров.

Давайте рассморим компанию C, у которой сразу два подключения.

```
configure terminal
!
ip prefix-list PL_BGP_ADVERTISE seq 10 permit 2.30.204.0/23
!
route-map RM-BGP-ADVERTISE-OUT permit 10
 match ip address prefix-list PL_BGP_ADVERTISE
!
router bgp 300
  neighbor 203.7.113.1 route-map RM-BGP-ADVERTISE-OUT out
  neighbor 203.84.113.1 route-map RM-BGP-ADVERTISE-OUT out
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://adavyshin.gitbook.io/networks/network/laboratornaya-rabota-bgp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
