> For the complete documentation index, see [llms.txt](https://netlabs.gitbook.io/juniper/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://netlabs.gitbook.io/juniper/5-bgp/ibgp/atribut-next-hop-i-ibgp.md).

# Атрибут Next-Hop и iBGP

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

Когда мы попытаемся пропинговать маршрут, который мы получили по iBGP, то это не получится. Всё дело в том, что BGP не меняет атрибут Nex-Hop при передачи маршрута iBGP-соседу. Т.е. выходит так, что роутеру, который не является бордером AS передаётся маршрут с Next-Hop IP-адресом, о котором этот роутер никак не может узнать. Что с этим можно мделать? Для этого есть несколько путей, но, по факту, самые адекватные - это либо на eBGP пире прописать атрибут Next-Hop Self, который позволит при передаче маршрута iBGP-соседу менять атрибут Next-Hop, либо добавить маршрут до p2p eBGP-сети в IGP (например, через OSPF, указав линк как passive).&#x20;

Указывается Next-Hop Self довольно просто:

```
root@RT.MSK.M34# edit policy-options policy-statement next-hop-self   

[edit policy-options policy-statement next-hop-self]
root@RT.MSK.M34# set from protocol bgp route-type external 

[edit policy-options policy-statement next-hop-self]
root@RT.MSK.M34# set then next-hop self                       

[edit policy-options policy-statement next-hop-self]
root@RT.MSK.M34# top                                          

root@RT.MSK.M34# set protocols bgp group intra-Sub-AS export next-hop-self    
```

Тут видно, что мы экспортируем маршруты полученные только от external BGP к iBGP-пирам с параметром next-hop-self.

Посмотрим что происходило до коммита вышеуказанной конфигурации на M9:

```
root@RT.MSK.M9# run show route receive-protocol bgp 10.1.1.200 table inet.0       

inet.0: 43 destinations, 58 routes (43 active, 0 holddown, 4 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
  8.1.0.0/16              8.0.0.2                      100        8000 8001 I
* 100.0.0.0/24            8.0.0.2                      100        8000 I
  101.0.0.0/24            8.0.0.2                      100        8000 8001 I

root@RT.MSK.M9# run show route receive-protocol bgp 10.1.1.200 table inet.0 all                

inet.0: 43 destinations, 58 routes (43 active, 0 holddown, 4 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
  8.0.0.0/16              8.0.0.2                      100        8000 I
  8.1.0.0/16              8.0.0.2                      100        8000 8001 I
  9.1.0.0/16              8.0.0.2                      100        8000 8001 9001 I
* 100.0.0.0/24            8.0.0.2                      100        8000 I
  101.0.0.0/24            8.0.0.2                      100        8000 8001 I
  
root@RT.MSK.M9# run show route protocol bgp 8.0.0.0 all 

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

8.0.0.0/16         *[BGP/170] 01:36:23, localpref 100, from 10.0.0.1
                      AS path: (65002) 9001 8001 8000 I, validation-state: unverified
                    > to 10.0.0.3 via ae3.0
                    [BGP/170] 01:36:23, localpref 100
                      AS path: (65002) 9001 8001 8000 I, validation-state: unverified
                    > to 10.0.0.3 via ae3.0
                    [BGP/170] 01:36:23, localpref 100, from 10.1.1.200
                      AS path: 8000 I, validation-state: unverified
                      Unusable
                    [BGP/170] 04:23:05, localpref 100, from 10.1.1.201
                      AS path: 8000 I, validation-state: unverified
                      Unusable

```

Т.е. тут видно, что мы хоть и принимаем маршруты от RT.MSK.M34, но они скрываются и не используются. Почему? Потому что для IP-адреса, указанного в атрибуте Next-Hop происходит Recursive Lookup в таблице маршрутизации. Соответственно, для 8.0.0.2 в таблице IGP-маршрутов ничего не найдено, поэтому эти маршруты не используются и попадают в спрятанные. Более подробная информация [тут](https://www.juniper.net/documentation/en_US/junos/topics/topic-map/bgp-overview.html#id-bgp-route-resolution-overview).

После применения изменений выбирается маршрут с кратчайшим AS-Path, а атрибут next-hop меняется на LoopBack бордера:

```
root@RT.MSK.M9# run show route 8.0.0.0                                 

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

8.0.0.0/16         *[BGP/170] 00:00:21, localpref 100, from 10.1.1.200
                      AS path: 8000 I, validation-state: unverified
                    > to 10.1.1.2 via ae0.0
                    
root@RT.MSK.M9# run show route receive-protocol bgp 10.1.1.200 

inet.0: 43 destinations, 56 routes (43 active, 0 holddown, 1 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
* 8.0.0.0/16              10.1.1.200                   100        8000 I
  8.1.0.0/16              10.1.1.200                   100        8000 8001 I
  9.1.0.0/16              10.1.1.200                   100        8000 8001 9001 I
* 100.0.0.0/24            10.1.1.200                   100        8000 I
  101.0.0.0/24            10.1.1.200                   100        8000 8001 I
```

Соответственно далее указываем и применяем эту политику для всех eBGP-пиров:

```
protocols {
    bgp {
        group intra-Sub-AS {
            export next-hop-self;
        }
    }
}
policy-options {
    policy-statement next-hop-self {
        from {
            protocol bgp;               
            route-type external;
        }
        then {
            next-hop self;
        }
    }
}
```
