Рассмотрим две фичи BGP: Ebgp-multihop и TTL Security check.
В идеологии BGP ebgp соседи должны быть подключены непосредственно линком напрямую, то есть иметь 1 hop.
Но нам может понадобиться построить пиринг через loopback интерфейсы, и тогда уже не 1 хоп получается а более, что делать в этом случае?
Если мы пиримся по loopback, то нам нужно каким-то образом разнести эти лупбаки между роутерами, будет это статические маршруты, или через протокол IGP, не важно.
Я сделал через OSPF.
Я привел сразу вывод нескольких команд. Все настроено правильно, но почему состояние Idle, а не Established?
Idle нам говорит о том, что нет пиринга между соседями, TCP сессия не может быть установлена. Почему?
Вот тут как раз и есть то, о чем я говорил, хоп в EBGP должен быть один, а у нас по лупбекам, а это уже по одному на каждом из роутеров.
Давайте изменим значение hop, которое по умолчанию между EBGP пирами равно 1. Делаем это с помощью ebgp-multihop {1-254}. Нам нужно значение 2.
Прописываем на нейбора: neighbor 200.200.200.200 ebgp-multihop 2, соответственно с двух сторон, друг на друга.
Теперь все заработало.
Значение мултихопа следует всегда выставлять правильно, а не просто максимальное значение, чтоб у злоумышленника не было возможности подключиться «издалека» и не сделать dos. Поэтому будьте внимательны.
В нашем случае, можно было вместо ebgp-multihop использовать neighbor 200.200.200.200 disable-connected-check, так мы не будем уменьшать TTL если хопы у нас внутри устройства (с физического интерфейса прыгаем на лупбек), TTL остается 1, но если пакет прыгает между разными устройствами, то тут все как обычно, TTL уменьшается.
ebgp-multihop работает только между EBGP пирами, но в BGP так же имеется возможность делать такую проверку и между iBGP.
Делается это по аналогии, но используется фича TTL Security Check.
Пример использования:
neighbor 200.200.200.200 ttl-security hops 2
Работаем абсолютно точно так же.
С hop’ами разобрались. Теперь давайте разберемся с next-hop-self, что это и для чего нужно, и когда собственно применять.
Представим такую топологию:
У нас все линки EBGP, за исключением одного, в AS2 у нас два роутера, соответственно между ними у нас линк IBGP.
Настраиваем по типовому плану, пиринги, анонсируем сети, и нам нужно чтоб с любого роутера были доступны все возможные сети.
Нас интересует AS2.1, AS2, AS1, приведу конфигурацию BGP каждого из них:
AS1:
router bgp 1
no synchronization
bgp router-id 100.100.100.100
bgp log-neighbor-changes
network 1.1.2.0 mask 255.255.255.0
network 1.1.3.0 mask 255.255.255.0
network 1.1.100.0 mask 255.255.255.0
network 111.111.111.111 mask 255.255.255.255
neighbor 1.1.3.3 remote-as 3
neighbor 1.1.3.3 description AS3
neighbor 1.1.100.100 remote-as 100
neighbor 1.1.100.100 description AS100
neighbor 200.200.200.200 remote-as 2
neighbor 200.200.200.200 description toR2
neighbor 200.200.200.200 ebgp-multihop 2
neighbor 200.200.200.200 update-source Loopback1
no auto-summary
AS2:
router bgp 2
no synchronization
bgp router-id 200.200.200.200
bgp log-neighbor-changes
network 1.1.2.0 mask 255.255.255.0
network 1.1.5.0 mask 255.255.255.0
network 222.222.222.222 mask 255.255.255.255
neighbor 1.1.5.2 remote-as 2
neighbor 100.100.100.100 remote-as 1
neighbor 100.100.100.100 description toR1
neighbor 100.100.100.100 ebgp-multihop 2
neighbor 100.100.100.100 update-source Loopback1
no auto-summary
AS2.1:
router bgp 2
no synchronization
bgp log-neighbor-changes
network 1.1.5.0 mask 255.255.255.0
network 192.168.0.0
neighbor 1.1.5.1 remote-as 2
neighbor 1.1.5.1 description toR2
no auto-summary
Пиринги везде установились. Попробуем с AS2.1 запустить пинг на лупбек AS1:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 111.111.111.111, timeout is 2 seconds:
…..
Success rate is 0 percent (0/5)
Попробуем тоже самое но с AS2:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 111.111.111.111, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/28/56 ms
Здесь все хорошо.
Давайте посмотрим таблицу роутинга на AS2.1:
AS2.1(config-router)#do sh ip route
Codes: C — connected, S — static, R — RIP, M — mobile, B — BGP
D — EIGRP, EX — EIGRP external, O — OSPF, IA — OSPF inter area
N1 — OSPF NSSA external type 1, N2 — OSPF NSSA external type 2
E1 — OSPF external type 1, E2 — OSPF external type 2
i — IS-IS, su — IS-IS summary, L1 — IS-IS level-1, L2 — IS-IS level-2
ia — IS-IS inter area, * — candidate default, U — per-user static route
o — ODR, P — periodic downloaded static routeGateway of last resort is not set
222.222.222.0/32 is subnetted, 1 subnets
B 222.222.222.222 [200/0] via 1.1.5.1, 00:07:12
1.0.0.0/24 is subnetted, 2 subnets
B 1.1.2.0 [200/0] via 1.1.5.1, 00:07:12
C 1.1.5.0 is directly connected, FastEthernet1/0
C 192.168.0.0/24 is directly connected, Loopback0
мы не видим чтоб что-то приходило из EBGP к нам, а посмотрим-ка мы BGP table:
AS2.1(config-router)#do sh ip bgp
BGP table version is 29, local router ID is 1.1.5.2
Status codes: s suppressed, d damped, h history, * valid, > best, i — internal,
r RIB-failure, S Stale
Origin codes: i — IGP, e — EGP, ? — incompleteNetwork Next Hop Metric LocPrf Weight Path
*>i1.1.2.0/24 1.1.5.1 0 100 0 i
* i1.1.3.0/24 100.100.100.100 0 100 0 1 i
* i1.1.5.0/24 1.1.5.1 0 100 0 i
*> 0.0.0.0 0 32768 i
* i1.1.100.0/24 100.100.100.100 0 100 0 1 i
* i10.0.3.0/24 100.100.100.100 0 100 0 1 3 i
* i111.111.111.111/32
100.100.100.100 0 100 0 1 i
*> 192.168.0.0 0.0.0.0 0 32768 i
*>i222.222.222.222/32
1.1.5.1 0 100 0 i
AS2.1(config-router)#
И что мы видим? Все то, что приходит к нам по EBGP, имеет NEXT_HOP того EBGP пира, который нам отдаем маршруты, мы как IBGP пир к AS1 ничего не знаем об этом NEXT_HOP, соответственно для нас он недостижим, и в таблицу роутинга ничего не попадает.
Чтоб все это починить, нам нужно менять NEXT_HOP при попадании маршрута на адрес AS2, делается это с помощью переписывания атрибута next-hop-self, который вешается на соседа, таким образом:
AS2(config-router)#neighbor 1.1.5.2 next-hop-self
Теперь давайте посмотрим, что изменилось у нас.
AS2.1(config-router)#do sh ip bgp
BGP table version is 33, local router ID is 1.1.5.2
Status codes: s suppressed, d damped, h history, * valid, > best, i — internal,
r RIB-failure, S Stale
Origin codes: i — IGP, e — EGP, ? — incomplete
Network Next Hop Metric LocPrf Weight Path
*>i1.1.2.0/24 1.1.5.1 0 100 0 i
*>i1.1.3.0/24 1.1.5.1 0 100 0 1 i
* i1.1.5.0/24 1.1.5.1 0 100 0 i
*> 0.0.0.0 0 32768 i
*>i1.1.100.0/24 1.1.5.1 0 100 0 1 i
*>i10.0.3.0/24 1.1.5.1 0 100 0 1 3 i
*>i111.111.111.111/32
1.1.5.1 0 100 0 1 i
*> 192.168.0.0 0.0.0.0 0 32768 i
*>i222.222.222.222/32
1.1.5.1 0 100 0 i
AS2.1(config-router)#
Все необходимые next_hop изменились на внутренние.
Попробуем ping:
AS2.1(config-router)#do ping 111.111.111.111
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 111.111.111.111, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 36/41/48 ms
AS2.1(config-router)#
Все работает. Наша топология полностью рабочая.
Не забываем о таком важном параметре как NEXT_HOP когда у нас есть ibgp пиры, и нужен доступ к сетям, которые приходят по EBGP.
На этом эту тему мы закончили.