# Анонсирование первых префиксов

![Схема сети](/files/-MV7zj8wSrXus77waDcM)

По умолчанию, static и direct routes в BGP не экспортируются. Для того, чтобы добавить эти маршруты в BGP необходимо применить policy-options к протоколу, группе или соседу. Например, у нас уже есть AS 8000, в которой есть Lo0 с адресом 100.0.0.1. Даллее мы хотим анонсировать наш /24 префикс 100.0.0.0/24 к AS9000:

```
root@AS8000# run show configuration interfaces lo0 
unit 0 {
    family inet {
        address 100.0.0.1/32;
    }
}
```

Обычно, такие префиксы меньше /24 не принимаются из-за возможных ошибок. Как пример, мы будем анонсировать 2 маршрута: 100.0.0.0/24, который будет приниматься, и 101.0.0.0/25, который не будет приниматься соседями в соответствии с политикой маршрутизации.

Для начала необходимо настроить статические маршруты с маской /24 и /25, которые мы собираемся анонсировать (предположим, что весь пул у нас 100.0.0.0/8):

```
root@AS8000# set routing-options static route 100.0.0.0/24 discard   
root@AS8000# set routing-options static route 100.0.1.0/25 discard    
```

{% hint style="warning" %}
Почему вместо next-hop мы указываем discard? Потому что ко всей этой подсети у нас нет одного-единственного nex-hop´а. Если Destination IP будет подходить под More Specific Route, то пакет не будет отбрасываться.
{% endhint %}

Далее настраиваем политику экспорта маршрутов (предположим, что мы допустили ошибку и будем анонсировать преиксы длиннее /24):

```
root@AS8000# edit policy-options policy-statement exportBGP

[edit policy-options policy-statement exportBGP]
root@AS8000# set from protocol static route-filter 100.0.0.0/8 upto /25

[edit policy-options policy-statement exportBGP]
root@AS8000# set then accept 
root@AS8000# top
root@AS8000# set protocols bgp export exportBGP
```

Теперь можно убедиться, что мы анонсируем соответствующие префиксы всем соседям:

```
root@AS8000# run show route advertising-protocol bgp 8.0.0.1    

inet.0: 9 destinations, 9 routes (9 active, 0 holddown, 0 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
* 100.0.0.0/24            Self                                    I
* 100.0.1.0/25            Self                                    I

[edit]
root@AS8000# run show route advertising-protocol bgp 8.0.0.3    

inet.0: 9 destinations, 9 routes (9 active, 0 holddown, 0 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
* 100.0.0.0/24            Self                                    I
* 100.0.1.0/25            Self                                    I

[edit]
root@AS8000# run show route advertising-protocol bgp 8.1.1.0    

inet.0: 9 destinations, 9 routes (9 active, 0 holddown, 0 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
* 100.0.0.0/24            Self                                    I
* 100.0.1.0/25            Self                                    I
```

Теперь посмотрим что происходит в AS9000:

```
root@RT.MSK.M34# run show route receive-protocol bgp 8.0.0.2 extensive 

inet.0: 14 destinations, 14 routes (14 active, 0 holddown, 0 hidden)
* 100.0.0.0/24 (1 entry, 1 announced)
     Accepted
     Nexthop: 8.0.0.2
     AS path: 8000 I

* 100.0.1.0/25 (1 entry, 1 announced)
     Accepted
     Nexthop: 8.0.0.2
     AS path: 8000 I
     
root@RT.MSK.M34# run show route protocol bgp 

inet.0: 14 destinations, 14 routes (14 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

100.0.0.0/24       *[BGP/170] 00:05:35, localpref 100
                      AS path: 8000 I, validation-state: unverified
                    > to 8.0.0.2 via ge-0/0/1.0
100.0.1.0/25       *[BGP/170] 00:05:35, localpref 100
                      AS path: 8000 I, validation-state: unverified
                    > to 8.0.0.2 via ge-0/0/1.0
```

Видно, что мы принимаем по-умолчанию все маршруты, в том числе и /25. Для того, чтобы принимать только /24 префиксы и не принимать приватные сети настроим Import Policy. Для начала определим приватные префиксы:

```
root@RT.MSK.M34# edit policy-options prefix-list private_and_short 

[edit policy-options prefix-list private]
root@RT.MSK.M34# set 10.0.0.0/8    

[edit policy-options prefix-list private]
root@RT.MSK.M34# set 172.16.0.0/12 

[edit policy-options prefix-list private]
root@RT.MSK.M34# set 192.168.0.0/16   

[edit policy-options prefix-list private]
root@RT.MSK.M34# top 
```

Далее настроим соответствующую политику отклоняющую приватные и любые короткие префиксы:

```
root@RT.MSK.M34# edit policy-options policy-statement BGPimport 

[edit policy-options policy-statement BGPimport]
root@RT.MSK.M34# set from protocol bgp prefix-list-filter private orlonger    

[edit policy-options policy-statement BGPimport]
root@RT.MSK.M34# set from protocol bgp route-filter 0.0.0.0/0 prefix-length-range /25-/32

[edit policy-options policy-statement BGPimport]
root@RT.MSK.M34# set then reject 

[edit policy-options policy-statement BGPimport]
root@RT.MSK.M34# top

root@RT.MSK.M34# set protocols bgp import BGPimport 
root@RT.MSK.M34# commit 
```

Теперь посмотрим на результат:

```
root@RT.MSK.M34# run show route receive-protocol bgp 8.0.0.2 detail all 

inet.0: 14 destinations, 14 routes (13 active, 0 holddown, 1 hidden)
* 100.0.0.0/24 (1 entry, 1 announced)
     Accepted
     Nexthop: 8.0.0.2
     AS path: 8000 I

  100.0.1.0/25 (1 entry, 0 announced)
     Nexthop: 8.0.0.2
     AS path: 8000 I
     Hidden reason: rejected by import policy
```

Как видно, маршрут 100.0.1.0/25 теперь не принимается из-за policy-statement. Далее редактирум политики соответствующим образом и применяем их на каждом eBGP-пире. На AS9000  политики экспорта не требуются, так как пока что экспортировать нечего.

Также можно на всех AS, кроме AS9000 добавить анонсирование внешних подсетей, например:

```
root@AS8000# set routing-options static route 8.0.0.0/16 discard 
root@AS8000# set policy-options policy-statement exportBGP from route-filter route-filter 8.0.0.0/16 exact
```

На текущем этапе можно использовать следующий шаблон для пиров AS\*\*\*\*, изменяя статические маршруты и экспортируемые сети:

```
routing-options {
    static {
        route 102.0.0.0/24 discard;
        route 9.1.0.0/16 discard;
    }
}
protocols {
    bgp {
        import BGPimport;
        export exportBGP;
    }
}
policy-options {
    prefix-list private {
        10.0.0.0/8;
        172.16.0.0/12;
        192.168.0.0/16;
    }
    policy-statement BGPimport {
        from {
            protocol bgp;
            route-filter 0.0.0.0/0 prefix-length-range /25-/32;
            prefix-list-filter private orlonger;
        }
        then reject;
    }
    policy-statement exportBGP {
        from {
            protocol static;
            route-filter 102.0.0.0/8 upto /24;
            route-filter 9.1.0.0/16 exact;
        }
        then accept;
    }
}
```

Для роутеров внутри AS9000 можно оставить шаблон без изменений:

```
protocols {
    bgp {
        import BGPimport;
    }
}
policy-options {
    prefix-list private {               
        10.0.0.0/8;
        172.16.0.0/12;
        192.168.0.0/16;
    }
    policy-statement BGPimport {
        from {
            protocol bgp;
            route-filter 0.0.0.0/0 prefix-length-range /25-/32;
            prefix-list-filter private orlonger;
        }
        then reject;
    }
}
```

Чтобы не перезаписать, но дополнить конфигурацию нужно использовать команду:

```
load merge terminal
```


---

# Agent Instructions: 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://netlabs.gitbook.io/juniper/5-bgp/anonsirovanie-pervogo-prefiksa-ot-as8000-k-as9000.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.
