Bgp два роутера в одной as

Categories:

  • Компьютеры
  • IT
  • Cancel

товарищи ученые
вот у нас есть цыско 7206
там 3 гиговых интерфейса
у нас интернета уже почти гиг прибегает
и мы хотим взять еще один гиг у другого провайдера
у нас есть еще такая цыска в запасе (только послабже, не G2)
можно ли воткнуть 2ой гиг в нее и поднять там BGP с той же AS?!
пока я понимаю только что видимо не будут видеть друг-друга 2 этих провайдера, но может еще какие-то подводные грабли есть?
(как вариант думаю еще про купить длинк с бгп и многими гиговыми портами но он дорогой)
спасибо!
(а за цыской машины с mpd (pppoe) и там бегает ospf)

BGP Support for Dual AS Configuration for Network AS Migrations

The BGP Support for Dual AS Configuration for Network AS Migrations feature extended the functionality of the BGP Local-AS
feature by providing additional autonomous system path customization configuration options. The configuration of this feature
is transparent to customer peering sessions, allowing the provider to merge two autonomous systems without interrupting customer
peering arrangements. Customer peering sessions can later be updated during a maintenance window or during other scheduled
downtime.

Finding Feature Information

Your software release may not support all the features documented in this module. For the latest caveats and feature information,
see
Bug Search Tool and the release notes for your platform and software release. To find information about the features documented in this module,
and to see a list of the releases in which each feature is supported, see the feature information table at the end of this
module.

Use Cisco Feature Navigator to find information about platform support and Cisco software image support. To access Cisco Feature
Navigator, go to
www.cisco.com/go/cfn. An account on Cisco.com is not required.

Information About BGP Support for Dual AS Configuration for Network AS Migrations

Autonomous System Migration for BGP Networks

Autonomous system migration can be necessary when a telecommunications or Internet service provider purchases another network.
It is desirable for the provider to be able to integrate the second autonomous system without disrupting existing customer
peering arrangements. The amount of configuration required in the customer networks can make this a cumbersome task that is
difficult to complete without disrupting service.

Dual Autonomous System Support for BGP Network Autonomous System Migration

In Cisco IOS Release 12.0(29)S, 12.3(14)T, 12.2(33)SXH, and later releases, support was added for dual BGP autonomous system
configuration to allow a secondary autonomous system to merge under a primary autonomous system, without disrupting customer
peering sessions. The configuration of this feature is transparent to customer networks. Dual BGP autonomous system configuration
allows a router to appear, to external peers, as a member of secondary autonomous system during the autonomous system migration.
This feature allows the network operator to merge the autonomous systems and then later migrate customers to new configurations
during normal service windows without disrupting existing peering arrangements.

The
neighbor
local-as
command is used to customize the AS_PATH attribute by adding and removing autonomous system numbers for routes received from
eBGP neighbors. This feature allows a router to appear to external peers as a member of another autonomous system for the
purpose of autonomous system number migration. This feature simplifies this process of changing the autonomous system number
in a BGP network by allowing the network operator to merge a secondary autonomous system into a primary autonomous system
and then later update the customer configurations during normal service windows without disrupting existing peering arrangements.

BGP Autonomous System Migration Support for Confederations, Individual Peering Sessions, and Peer Groupings

This feature supports confederations, individual peering sessions, and configurations applied through peer groups and peer
templates. If this feature is applied to group peers, the individual peers cannot be customized.

Ingress Filtering During BGP Autonomous System Migration

Autonomous system path customization increases the possibility that routing loops can be created if such customization is
misconfigured. The larger the number of customer peerings, the greater the risk. You can minimize this possibility by applying
policies on the ingress interfaces to block the autonomous system number that is in transition or routes that have no
local-as configuration.


Caution

BGP prepends the autonomous system number from each BGP network that a route traverses to maintain network reachability information
and to prevent routing loops. This feature should be configured only for autonomous system migration and should be deconfigured
after the transition has been completed. This procedure should be attempted only by an experienced network operator, as routing
loops can be created with improper configuration.


BGP Network Migration to 4-Byte Autonomous System Numbers

The BGP Support for 4-Byte ASN feature introduced support for 4-byte autonomous system numbers. Because of increased demand
for autonomous system numbers, in January 2009 the IANA started to allocate 4-byte autonomous system numbers in the range
from 65536 to 4294967295.

The Cisco implementation of 4-byte autonomous system numbers supports RFC 4893. RFC 4893 was developed to allow BGP to support
a gradual transition from 2-byte autonomous system numbers to 4-byte autonomous system numbers. A new reserved (private) autonomous
system number, 23456, was created by RFC 4893 and this number cannot be configured as an autonomous system number in the Cisco
IOS CLI.

Migrating your BGP network to 4-byte autonomous system numbers requires some planning. If you are upgrading to an image that
supports 4-byte autonomous system numbers, you can still use 2-byte autonomous system numbers. The
show command output and regular expression match are not changed and remain in asplain (decimal value) format for 2-byte autonomous
system numbers regardless of the format configured for 4-byte autonomous system numbers.

To ensure a smooth transition, we recommend that all BGP speakers within an autonomous system that is identified using a
4-byte autonomous system number be upgraded to support 4-byte autonomous system numbers.

For details about steps to perform to upgrade a BGP network to full 4-byte autonomous system support, see the
Migration Guide for Explaining 4-Byte Autonomous System white paper.

How to Configure BGP Support for Dual AS Configuration for Network AS Migrations

Configuring Dual AS Peering for Network Migration

Perform this task to configure a BGP peer router to appear to external peers as a member of another autonomous system for
the purpose of autonomous system number migration. When the BGP peer is configured with dual autonomous system numbers then
the network operator can merge a secondary autonomous system into a primary autonomous system and update the customer configuration
during a future service window without disrupting existing peering arrangements.

The
show
ip
bgp
and
show
ip
bgp
neighbors
commands can be used to verify autonomous system number for entries in the routing table and the status of this feature.


Note

  • The BGP Support for Dual AS Configuration for Network AS Migrations feature can be configured for only true eBGP peering
    sessions. This feature cannot be configured for two peers in different subautonomous systems of a confederation.

  • The BGP Support for Dual AS Configuration for Network AS Migrations feature can be configured for individual peering sessions
    and configurations applied through peer groups and peer templates. If this command is applied to a peer group, the peers cannot
    be individually customized.


SUMMARY STEPS


  1. enable


  2. configure


    terminal


  3. router
    bgp


    autonomous-system-number


  4. neighbor


    ip-address




    remote-as


    autonomous-system-number


  5. neighbor


    ip-address


    local-as
    [autonomous-system-number [no-prepend [replace-as [dual-as ]]]]


  6. neighbor


    ip-address




    remove-private-as


  7. end


  8. show
    ip
    bgp
    [network ] [network-mask ] [longer-prefixes ] [prefix-list
    prefix-list-name |
    route-map
    route-map-name ] [shorter-prefixes
    mask-length ]


  9. show
    ip
    bgp
    neighbors
    [neighbor-address ] [received-routes |
    routes |
    advertised-routes |
    paths
    regexp |
    dampened-routes |
    received
    prefix-filter ]

DETAILED STEPS

  Command or Action Purpose
Step 1


enable

Example:


Router> enable

Enables privileged EXEC mode.

  • Enter your password if prompted.

Step 2


configure


terminal

Example:


Router# configure terminal

Enters global configuration mode.

Step 3


router
bgp


autonomous-system-number

Example:


Router(config)# router bgp 40000 

Enters router configuration mode, and creates a BGP routing process.

Step 4


neighbor


ip-address




remote-as


autonomous-system-number

Example:


Router(config-router)# neighbor 10.0.0.1 remote-as 45000 

Establishes a peering session with a BGP neighbor.

Step 5


neighbor


ip-address


local-as
[autonomous-system-number [no-prepend [replace-as [dual-as ]]]]

Example:


Router(config-router)# neighbor 10.0.0.1 local-as 50000 no-prepend replace-as dual-as 

Customizes the AS_PATH attribute for routes received from an eBGP neighbor.

  • The
    replace-as keyword is used to prepend only the local autonomous system number (as configured with the
    ip-address argument) to the AS_PATH attribute. The autonomous system number from the local BGP routing process is not prepended.

  • The
    dual-as keyword is used to configure the eBGP neighbor to establish a peering session using the real autonomous-system number (from
    the local BGP routing process) or by using the autonomous system number configured with the
    ip-address argument (local-as).

  • The example configures the peering session with the 10.0.0.1 neighbor to accept the real autonomous system number and the
    local-as number.

Step 6


neighbor


ip-address




remove-private-as

Example:


Router(config-router)# neighbor 10.0.0.1 remove-private-as 

(Optional) Removes private autonomous system numbers from outbound routing updates.

  • This command can be used with the
    replace-as functionality to remove the private autonomous system number and replace it with an external autonomous system number.

  • Private autonomous system numbers (64512 to 65535) are automatically removed from the AS_PATH attribute when this command
    is configured.

Step 7


end

Example:


Router(config-router)# end 

Exits router configuration mode and enters privileged EXEC mode.

Step 8


show
ip
bgp
[network ] [network-mask ] [longer-prefixes ] [prefix-list
prefix-list-name |
route-map
route-map-name ] [shorter-prefixes
mask-length ]

Example:


Router# show ip bgp 

Displays entries in the BGP routing table.

  • The output can be used to verify if the real autonomous system number or local-as number is configured.

Step 9


show
ip
bgp
neighbors
[neighbor-address ] [received-routes |
routes |
advertised-routes |
paths
regexp |
dampened-routes |
received
prefix-filter ]

Example:


Router# show ip bgp neighbors 

Displays information about TCP and BGP connections to neighbors.

  • The output will display
    local
    AS
    ,
    no-prepend ,
    replace-as , and
    dual-as with the corresponding autonomous system number when these options are configured.

Configuration Examples for Dual-AS Peering for Network Migration

Example: Dual AS Configuration

The following examples shows how this feature is used to merge two autonomous systems without interrupting peering arrangements
with the customer network. The
neighbor
local-as
command is configured to allow Router 1 to maintain peering sessions through autonomous system 40000 and autonomous system
45000. Router 2 is a customer router that runs a BGP routing process in autonomous system 50000 and is configured to peer
with autonomous-system 45000.

Router 1 in Autonomous System 40000 (Provider Network)


interface Serial3/0 
 ip address 10.3.3.11 255.255.255.0 
! 
router bgp 40000 
 no synchronization 
 bgp router-id 10.0.0.11 
 neighbor 10.3.3.33 remote-as 50000 
 neighbor 10.3.3.33 local-as 45000 no-prepend replace-as dual-as

Router 1 in Autonomous System 45000 (Provider Network)


interface Serial3/0 
 ip address 10.3.3.11 255.255.255.0 
! 
router bgp 45000 
 bgp router-id 10.0.0.11 
 neighbor 10.3.3.33 remote-as 50000 

Router 2 in Autonomous System 50000 (Customer Network)


interface Serial3/0 
 ip address 10.3.3.33 255.255.255.0 
! 
router bgp 50000 
 bgp router-id 10.0.0.3 
 neighbor 10.3.3.11 remote-as 45000 

After the transition is complete, the configuration on router 50000 can be updated to peer with autonomous system 40000 during
a normal maintenance window or during other scheduled downtime:


 neighbor 10.3.3.11 remote-as 100 

Example: Dual AS Confederation Configuration

The following example can be used in place of the Router 1 configuration in the «Example: Dual AS Configuration» example.
The only difference between these configurations is that Router 1 is configured to be part of a confederation.


interface Serial3/0/0 
 ip address 10.3.3.11 255.255.255.0 
! 
router bgp 65534 
 no synchronization
 bgp confederation identifier 100  
 bgp router-id 10.0.0.11 
 neighbor 10.3.3.33 remote-as 50000 
 neighbor 10.3.3.33 local-as 45000 no-prepend replace-as dual-as 

Example: Replace an AS with Another AS in Routing Updates

The following example strips private autonomous system 64512 from outbound routing updates for the 10.3.3.33 neighbor and
replaces it with autonomous system 50000:


router bgp 64512 
 neighbor 10.3.3.33 local-as 50000 no-prepend replace-as 

Additional References

Related Documents

Related Topic

Document Title

Cisco IOS commands

Cisco IOS Master Command List, All Releases

BGP commands

Cisco IOS IP Routing: BGP Command Reference

Technical Assistance

Description

Link

The Cisco Support and Documentation website provides online resources to download documentation, software, and tools. Use
these resources to install and configure the software and to troubleshoot and resolve technical issues with Cisco products
and technologies. Access to most tools on the Cisco Support and Documentation website requires a Cisco.com user ID and password.

http://www.cisco.com/cisco/web/support/index.html

Feature Information for BGP
Support for Dual AS Configuration for Network AS Migrations

The following table provides release information about the feature or features described in this module. This table lists
only the software release that introduced support for a given feature in a given software release train. Unless noted otherwise,
subsequent releases of that software release train also support that feature.

Use Cisco Feature Navigator to find information about platform support and Cisco software image support. To access Cisco Feature
Navigator, go to http://www.cisco.com/go/cfn. An account on Cisco.com is not required.

Table 1. Feature Information for BGP
Support for Dual AS Configuration for Network AS Migrations

Feature Name

Releases

Feature
Information

BGP Support
for Dual AS Configuration for Network AS Migrations

12.2(33)SRA

Cisco IOS XE Release 2.1

The BGP
Support for Dual AS Configuration for Network AS Migrations feature extended
the functionality of the BGP Local-AS feature by providing additional
autonomous system path customization configuration options. The configuration
of this feature is transparent to customer peering sessions, allowing the
provider to merge two autonomous systems without interrupting customer peering
arrangements. Customer peering sessions can later be updated during a
maintenance window or during other scheduled downtime.

This feature was introduced on the Cisco ASR 1000 Series
Routers.

The following
command was modified by this feature:
neighbor
local-as
.

Wouldn’t it be awesome if you had two first names and you had the choice to use whichever one you wanted based on some criteria? Well in BGP your first names are your ASN (Autonomous System Numbers). In BGP you can only spin up one instance of BGP with an ASN unlike OSPF or other routing protocols. For example, you will get this error message if you try to spin up more than one instance.

R2(config)#router bgp 200

R2(config-router)#exit

R2(config)#router bgp 201

BGP is already running; AS is 200

So what do you do when you need to have more than one ASN number on the same router? This is where local-as comes in handy. 

Consider this simple topology below and let’s get started. 

Our objective here is to get R2 to peer with R3 using ASN 200 and R2 to peer with R4 using ASN 201. 

First, as usual let’s get our interfaces configured. 

R2 interface configuration
R3 interface configuration

R4 interface configuration

Now let’s get the BGP configured. 

Notice the command local-as which states that R2 should use 201 as its ASN when peering with R4 (2.2.2.2)

R3 BGP configuration

R4 BGP configuration. Notice in the neighbor statement ASN 201 and BGP is established.

Let’s now advertise a route to R4 and see take a look at the AS PATH. 

R2(config)#ip route 10.10.10.10 255.255.255.255 null 0

R2(config)#router bgp 200

R2(config-router)#network 10.10.10.10 mask 255.255.255.255

R4#show ip bgp

BGP table version is 2, local router ID is 2.2.2.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

*> 10.10.10.10/32   2.2.2.1                  0             0 201 200 i

Notice that the AS PATH contains the original ASN of 200. To remove this you can type ‘neighbor 2.2.2.2 local-as 201 no-prepend replace-as‘ on R2. 

R2#sh run | sec bgp

router bgp 200

 no synchronization

 bgp log-neighbor-changes

 network 10.10.10.10 mask 255.255.255.255

 neighbor 1.1.1.2 remote-as 300

 neighbor 2.2.2.2 remote-as 400

 neighbor 2.2.2.2 local-as 201 no-prepend replace-as

 no auto-summary

Now notice the R4 AS PATH. ASN 200 is no longer in the AS PATH. 

R4#sh ip bgp

BGP table version is 4, local router ID is 2.2.2.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

*> 10.10.10.10/32   2.2.2.1                  0             0 201 i

Conclusion:

local-as comes in handy when you want to run multiple ASN in the same router. The no-prepend option is available for special cases where iBGP peers wont accept routes when they see their own ASN in the AS PATH. 

Many more articles to come so stay tuned. 

If you like my posts please comment/subscribe/+1. 

Thank you. 

Время на прочтение
15 мин

Количество просмотров 25K

Статья рассматривает способ управления BPG-анонсами на маршрутизаторах Cisco, c операционной системой IOS XE, с помощью Cisco Embedded Event Manager (EEM) для балансировки входящего трафика и резервирования uplink от нескольких вышестоящих провайдеров.

Введение

Часто в сети небольшого провайдера можно встретить ситуацию, когда uplink представляет собой BGP-присоединение к двум или более операторам. Причем, второй провайдер используется не в качестве резерва, а вместе и одновременно с первым. Кроме того, ситуация осложняется тем, что каналы эти могут быть не симметричны по скорости. Например, при общей потребности uplink в 2 Gbps покупается два канала у двух разных провайдеров: 1500 Mbps и 500 Mbps. Протокол BGP, в этом случае замечательно решает задачу резервирования. Конечно, полноценного резерва тут нет. Очевидно, что нельзя зарезервировать два гигабита пятьюстами мегабитами без деградации сервиса для абонентов, однако, полного отказа услуги не произойдет. А если отказ произойдет не в ЧНН (часы наибольшей нагрузки), то сервис может не пострадать вовсе.

Значительно больше проблем в такой ситуации возникает не с резервированием, а с балансировкой. Особенно из-за несимметричности каналов по скорости. Причем, балансировка исходящего трафика (который мы можем, более или менее, контролировать) не столь важна. А вот контролировать входящий трафик значительно сложнее.

Рассмотрим, в качестве примера, следующую схему:

Схема сети

«Наша» AS65000 подключена в двум провайдерам: ISP #1 (AS65001) и ISP #2 (AS65002) по каналам шириной 1,5 Gbps и 500 Mbps, соответственно. Абоненты в нашей сети находятся за тремя локальными маршрутизаторами R7, R8 и R9 и используют, соответственно, три подсети:

  • 172.16.7.0/24
  • 172.16.8.0/24
  • 172.16.9.0/24

В качестве «ресурсов глобальной сети Интернет» выступают три маршрутизатора:

  • R5 (AS65050, 10.0.5.0/24) – имеет присоединение к обоим провайдерам;
  • R10 (AS65100, 10.0.10.0/24) – присоединен только к ISP#1;
  • R11 (AS65110, 10.0.11.0/24) – присоединен только к ISP#2.

Провайдеры имеют между собой пиринговый стык (между R12 и R13).

В отличии от клиентского присоединения, загрузка которого прямо связано с выручкой провайдера, пиринговый стык может не приносить провайдеру непосредственный доход, а то и вовсе, быть расходным. Поэтому нормальной практикой является увеличение BPG Local Preference для клиентских присоединений, и его уменьшение для пиров. На нашей схеме значения local preference обозначены красными маркерами: на пиринге у обоих провайдеров стоит значение 100 (по умолчанию), а на соединениях с нами, как с клиентом, увеличенное 120. Такой вариант позволяет провайдеру, при получении одинакового BPG-маршрута от клиента и другого провайдера, явным образом отдавать предпочтение клиентскому присоединению. Одновременно, именно это и является одной из причин трудностей с балансировкой uplink стандартными средствами BGP.

Балансировка

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

  • 1500 Mbps через ISP#1;
  • 500 Mbps через ISP#2.

Эмпирическим путем устанавливаем два диапазона IP-адресов, которые «потребляют» трафик в требуемой нам пропорции. Для простоты ситуации (принцип метода от этого не меняется) допустим, что абоненты за маршрутизаторами R7 и R8 потребляют примерно три четверти общего входящего трафика, а оставшаяся четверть приходится на абонентов маршрутизатора R9. В таком случае, использую BGP анонсы, мы должны добиться что бы трафик для сетей 172.16.7.0/24 и 172.16.8.0/24 шел через ISP#1, а для сети 172.16.9.0/24 – через ISP#2.

Сформируем два префикс-листа и рассмотрим методы, которыми мы можем разделить трафик для них по каналам:

ip prefix-list isp-1-out seq 5 permit 172.16.7.0/24
ip prefix-list isp-1-out seq 10 permit 172.16.8.0/24

ip prefix-list isp-2-out seq 5 permit 172.16.9.0/24

AS-PATH Prepend

В качестве стандартного решения такой задачи протокол BGP предлагает механизм AS-PATH Prepend. Суть его в том, что при выборе лучшего маршрута из нескольких возможных, протокол BGP использует значение атрибута AS-PATH, где последовательно перечислены номера всех автономных систем, через которые прошел BGP-анонс. Маршрут с кратчайшим AS-PATH является предпочтительным. Метод AS-PATH prepend позволяет искусственно удлинить значение атрибута для некоторых маршрутов.

Попробуем применить этот метод в нашей сети. Для этого создадим на CSR два route-map и используем их:

route-map isp-1-out permit 10
 match ip address prefix-list isp-1-out
route-map isp-1-out permit 20
 match ip address prefix-list isp-2-out
 set as-path prepend 65000 65000 65000

route-map isp-2-out permit 10
 match ip address prefix-list isp-1-out
 set as-path prepend 65000 65000 65000
route-map isp-2-out permit 20
 match ip address prefix-list isp-2-out

router bgp 65000
 address-family ipv4
  neighbor 192.168.101.1 route-map isp-1-out out
  neighbor 192.168.103.3 route-map isp-2-out out

Теперь в сторону ISP#1 префикс 172.16.9.0/24 будет анонсироваться с AS-PATH, удлиненным на три номера AS65000, а в сторону ISP#2 тоже самое будет делаться для префиксов 172.16.7.0/24 и 172.16.8.0/24.

Теперь, в идеале, трафик для каждой группы префиксов должен поступать через своего провайдера, а в случае падения одного из uplink, начнет работать анонс с prepend. Например, при падении ISP#2 трафик для 172.16.9.0/24 не прервется, так как весь мир все равно «видит» этот префикс через ISP#1, хоть с удлиненным AS-PATH.

Этот способ сработал бы, но тут в игру вмешиваются различные local preferences, которые провайдеры используют для клиентов и пиринга. Так как, при выборе маршрута атрибут LOCAL PREFERENCE имеет больший приоритет, чем AS-PATH, внутри каждого провайдера наш prepend не будет играть роли и трафик всегда будет направляться через клиентский канал. В нашей сети этот метод сработает только для AS65050, так как она присоединена в обоим провайдерам.

Посмотрим подробней.

Действительно, на R5 все хорошо:

R5#sh ip bgp
...
 *   172.16.7.0/24  192.168.45.4  0 65002 65000 65000 65000 65000 ?
 *>                 192.168.25.2  0 65001 65000 ?
 *   172.16.8.0/24  192.168.45.4  0 65002 65000 65000 65000 65000 ?
 *>                 192.168.25.2  0 65001 65000 ?
 *>  172.16.9.0/24  192.168.45.4  0 65002 65000 ?
 *                  192.168.25.2  0 65001 65000 65000 65000 65000 ?
R5#sh ip route
...
      172.16.0.0/24 is subnetted, 3 subnets
B        172.16.7.0 [20/0] via 192.168.25.2, 1d00h
B        172.16.8.0 [20/0] via 192.168.25.2, 1d00h
B        172.16.9.0 [20/0] via 192.168.45.4, 1d00h

R5#traceroute 172.16.7.1 source 10.0.5.1
...
  1 192.168.25.2 0 msec 0 msec 1 msec
  2 192.168.12.1 0 msec 1 msec 0 msec
  3 192.168.101.100 3 msec 3 msec 3 msec
  4 192.168.107.7 2 msec *  2 msec

R5#traceroute 172.16.9.1 source 10.0.5.1
...
  1 192.168.45.4 1 msec 0 msec 1 msec
  2 192.168.34.3 0 msec 1 msec 0 msec
  3 192.168.103.100 3 msec 3 msec 3 msec
  4 192.168.109.9 2 msec *  3 msec

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

Но вот на R11 (AS65110) все не так радужно.

R11#traceroute 172.16.7.1 source 10.0.11.1
...
  1 192.168.114.4 0 msec 1 msec 4 msec
  2 192.168.34.3 1 msec 0 msec 0 msec
  3 192.168.103.100 3 msec 3 msec 3 msec
  4 192.168.107.7 2 msec *  2 msec

R11#traceroute 172.16.9.1 source 10.0.11.1
...
  1 192.168.114.4 0 msec 1 msec 0 msec
  2 192.168.34.3 0 msec 0 msec 0 msec
  3 192.168.103.100 3 msec 2 msec 3 msec
  4 192.168.109.9 2 msec *  2 msec

Трафик до обоих хостов идет к нам через один и тот же пятисотмегабитный стык.

Причина как раз в local preference. Смотрим на R13 провайдера ISP#2:

R13>sh ip bgp
 ...
 *   172.16.7.0/24  192.168.200.12           0 65001 65000 ?
 *>i                192.168.103.100  0  120  0 65000 65000 65000 65000 ?
 *   172.16.8.0/24  192.168.200.12           0 65001 65000 ?
 *>i                192.168.103.100  0  120  0 65000 65000 65000 65000 ?
 *   172.16.9.0/24  192.168.200.12           0 65001 65000 65000 65000 65000 ?
 *>i                192.168.103.100  0  120  0 65000 ?

R13#sh ip route
...
      172.16.0.0/24 is subnetted, 3 subnets
B        172.16.7.0 [200/0] via 192.168.103.100, 1d00h
B        172.16.8.0 [200/0] via 192.168.103.100, 1d00h
B        172.16.9.0 [200/0] via 192.168.103.100, 1d00h

На маршрутизаторе все BGP-анонсы наших сетей в двух экземплярах:

  • полученные через клиентское присоединение (next-hop 192.168.103.100);
  • полученные через пиринг (next-hop 192.168.200.12).

Но, несмотря на длинный AS-PATH, для префиксов 172.16.7.0/24 и 172.16.8.0/24 best-маршрут – маршрут с local preference 120 через клиента, т.е. через нас, а не через пиринг. Получается, что ISP#2 направит весь трафик наших абонентов через канал 500Mbps. И, если за этим провайдером окажется дата-центр какого-нибудь крупного контент-провайдера (например VK.com), то это приведет к перегрузке на канале и проблемам с сервисом.

Получается, что стандартный AS-PATH prepend нам не поможет.

Исключение анонсов

Другой способ разделить трафик – просто исключить из BGP-анонсов в сторону оператора те префиксы, трафик на которые мы не хотим получать через этого провайдера.

Попробуем.

Вместо route-map настроим для каждого соседа фильтрующий prefix-list.

router bgp 65000
 address-family ipv4
  neighbor 192.168.101.1 prefix-list isp-1-out out
  neighbor 192.168.103.3 prefix-list isp-2-out out

Теперь в сторону каждого провайдера анонсируются только те маршруты, которые должны получать трафик через этот стык:

CSR#sh ip bgp neighbors 192.168.101.1 advertised-routes
...
     Network          Next Hop    Metric LocPrf Weight Path
 *>  172.16.7.0/24    192.168.107.7    0         32768 ?
 *>  172.16.8.0/24    192.168.108.8    0         32768 ?

Total number of prefixes 2

CSR#sh ip bgp neighbors 192.168.103.3 advertised-routes
...
     Network          Next Hop    Metric LocPrf Weight Path
 *>  172.16.9.0/24    192.168.109.9    0         32768 ?

Total number of prefixes 1

При таком подходе оператор выстраивает свою таблицу маршрутизации именно так, как нам надо:

R13>sh ip route
...
      172.16.0.0/24 is subnetted, 3 subnets
B        172.16.7.0 [20/0] via 192.168.200.12, 00:04:53
B        172.16.8.0 [20/0] via 192.168.200.12, 00:04:53
B        172.16.9.0 [200/0] via 192.168.103.100, 00:05:13

Теперь трассировки с R11 идут через разных провайдеров:

R11#traceroute 172.16.7.1 source 10.0.11.1
...
  1 192.168.114.4 4 msec 4 msec 4 msec
  2 192.168.134.13 1 msec 0 msec 1 msec
  3 192.168.200.12 0 msec 1 msec 0 msec
  4 192.168.121.1 0 msec 1 msec 1 msec
  5 192.168.101.100 2 msec 4 msec 3 msec
  6 192.168.107.7 2 msec *  2 msec

R11#traceroute 172.16.9.1 source 10.0.11.1
...
  1 192.168.114.4 0 msec 4 msec 0 msec
  2 192.168.34.3 0 msec 1 msec 0 msec
  3 192.168.103.100 3 msec 3 msec 3 msec
  4 192.168.109.9 2 msec *  2 msec

Однако, тут возникает проблема с резервированием. Действительно, при падении ISP#2 абоненты из сети 172.16.9.0/24 лишаются сервиса, так как весь мир больше «не видит» маршрута к ним. Обычно, это можно решить анонсированием агрегирования префикса для резерва. Например, если бы мы располагали диапазоном адресов от 172.16.6.0 до 172.16.9.255, то мы могли бы дополнительно анонсировать обоим провайдерам укрупненные подсети 172.16.6.0/23 и 172.16.8.0/23, которые включают в себя наши префиксы. Тогда, при падении одного из провайдеров и исчезновении в Интернете «специфик» маршрутов /24, все равно оставались бы /23, и сервис работал бы у всех абонентов даже на одном uplink. Но в нашем примере такое невозможно. Наши клиентские сети нельзя агрегировать в один или два префикса. Конечно, сети в примере подобраны специально, но, именно, столкновение с такой ситуацией на практике подтолкнуло меня к написанию заметки.

Резервирование

Мы решили проблему балансировки входящего трафика. Осталось добиться резервирования. Общий путь решения поняетн: в случае падения одного из пиров менять фильтр исходящих анонсов на том, пире, что еще «жив». Это можно было бы реализовать «снаружи», меняя настройки нашего пограниченого маршрутизатора скриптом по SSH или SNMP. Однако, цель заметки – сделать все встроенными средствами Cisco.

BGP Conditional Advertisement

Один из вариантов управления BGP-анонсами в зависимости от состояния BGP-соседства — Conditional Advertisement, которое позволяет анонсировать в сторону соседа те или иные префиксы, в зависимости от наличия или отсутствия в таблице BGP «контрольных» префиксов.

Префиксы, которые нужно анонсировать или, наоборот, убрать из анонса определяются специальным route-map: advertise-map, который может быть в режиме withdraw (префиксы, соответствующие route-map исключаются из анонса) или advertise (префиксы участвуют в анонсе). «Контрольные» префиксы определяются отдельным condition-map, который может быть объявлен как exist-map или non-exist-map. В первом случае префиксы из advertise-map анонсируются, только если в таблице BGP есть префиксы, соотвествующие exist-map. В случае non-exist-map — наоброт: если non-exist-map возвращет пустой список префиксов, то префиксы advertise-map анонсируются, а если нет, то исключаются из анонса.

В нашем случае подходит вариант с non-exist-map. Конфигурация route-map тут имеет несколько особенностей:

  1. route-map должен содержать только permit-секции;
  2. в каждой секции в условиях match должен обязательно содержаться prefix-list (нельзя фильтровать только по as-path или community);
  3. prefix-list должен быть «точного соответствия», т.е. без параметров le или ge;
  4. фильтрация по next-hop или interface не поддерживается.

Значить нам нужен контрольный префикс. Можно выбрать что-то из того, что нам анонсируют провайдеры (или даже сообщить им, что вы используете conditional advertisement и попросить добавить в анонс префикс, на который можно ориентироваться). Но в большинстве случаев (если среди ваших клиентов нет других провайдеров) вы, вместо full-view, получите от своего вышестоящего провайдера default-префикс 0.0.0.0/0. Его мы и будем использовать в качестве контрольного. А что бы отличить default одного провайдера от другого добавим в non-exist-map фильтр по AS-PATH.

Создадим prefix-list и два as-path ACL:

ip prefix-list default seq 5 permit 0.0.0.0/0

ip as-path access-list 1 permit ^65001.*
ip as-path access-list 2 permit ^65002.*

Добавим два condition-map, каждый из которых будет возвращать непустой список, только если соединение с соответствующим ISP установлено:

route-map isp-1-is-alive permit 10
 match ip address prefix-list default
 match as-path 1

route-map isp-2-is-alive permit 10
 match ip address prefix-list default
 match as-path 2

Создадим два route-map, который будут advertise-map для соотвествубщих пиров:

route-map isp-1-adv permit 10
 match ip address prefix-list isp-2-out

route-map isp-2-adv permit 10
 match ip address prefix-list isp-1-out

Еще один route-map будем использовать для фильтрации всех исходящих анонсов:

route-map full-out permit 10
 match ip address prefix-list isp-1-out isp-2-out

Теперь применим их в конфигурации BGP-соседей:

router bgp 65000
 address-family ipv4
  neighbor 192.168.101.1 advertise-map isp-1-adv non-exist-map isp-2-is-alive
  neighbor 192.168.101.1 route-map full-out out
  neighbor 192.168.103.3 advertise-map isp-2-adv non-exist-map isp-1-is-alive
  neighbor 192.168.103.3 route-map full-out out

Рассмотрим подробней конфигурацию neighbor 192.168.103.3:

  1. префиксы для анонса выбираются по route-map full-out;
  2. дополнительно проверяется non-exist-map isp-1-is-alive:
    • если isp-1-is-alive вернул НЕпустой список, до advertise-map isp-1-adv присваивается статус withdraw и его префиксы исключаются из анонса;
    • если isp-1-is-alive вернул пустой список, до advertise-map isp-1-adv присваивается статус advertise и его префиксы анонсируются.

Посмотрим, что получилось. Изначально «контрольные» префиксы для обоих non-exist-map есть в таблице BGP и соответствующие advertise-map находятся в статусе withdraw:

CSR#sh ip bgp neighbors 192.168.101.1 | i Condition
  Condition-map isp-2-is-alive, Advertise-map isp-1-adv, status: Withdraw

CSR#sh ip bgp neighbors 192.168.103.3 | i Condition
  Condition-map isp-1-is-alive, Advertise-map isp-2-adv, status: Withdraw

Так как оба провайдера «живы», то в сторону каждого из них анонсируются только часть префиксов:

CSR#sh ip bgp neighbors 192.168.101.1 advertised-routes
...
     Network          Next Hop            Metric LocPrf Weight Path
 *>  172.16.7.0/24    192.168.107.7            0         32768 i
 *>  172.16.8.0/24    192.168.108.8            0         32768 i

Total number of prefixes 2

CSR#sh ip bgp neighbors 192.168.103.3 advertised-routes
...
     Network          Next Hop            Metric LocPrf Weight Path
 *>  172.16.9.0/24    192.168.109.9            0         32768 i

Total number of prefixes 1

В случае отключения BGP-соседства c ISP#1 из таблицы BGP исчезают префиксы для route-map isp-1-is-alive и advertise-map isp-2-adv для ISP#2 переходит в статус advertise:

CSR#sh ip bgp neighbors 192.168.103.3 | i Condition
  Condition-map isp-1-is-alive, Advertise-map isp-2-adv, status: Advertise

Теперь префиксы по route-map isp-2-adv не исключаются из анонса и в сторону ISP#2 анонсируется полный набор префиксов:

CSR#sh ip bgp neighbors 192.168.103.3 advertised-routes
...
     Network          Next Hop            Metric LocPrf Weight Path
 *>  172.16.7.0/24    192.168.107.7            0         32768 i
 *>  172.16.8.0/24    192.168.108.8            0         32768 i
 *>  172.16.9.0/24    192.168.109.9            0         32768 i

Total number of prefixes 3

При восстановлении BGP-соседства статус меняется advertise-map обратно на withdraw, и префиксы вновь распределяются по провайдерам для балансировки.

Еще один вариант использования Conditional Advertismement, это локализация проблемы на стороне провадйера или даже выше его зоны ответственности. В случае нашей тестовой схемы можно представить, что в AS65110 находится дацацентр крупного контент-провайдера, доступ к которому критичен для наших абонентов. В случае падения пиринговой связанности между двумя провайдерами, часть абонентов, чьи префиксы анонсируются только в сторону ISP#1 лишатся доступа в AS65110. При этом соединение с провайдером есть, префиксы и default от него есть, но сервис абонентов страдает. В этом случае мы можем использовать конфигурацию, аналогичную описанной выше, только в качестве «контрольного» префикса использовать адреса критично важных для нас ресурсов в AS65110.

Cisco Embedded Event Manager

Описанный дальше метод, учитывая возможности BGP Conditional Advertismement, выглядит немного искусственным для решения такой простой задачи. Причина этого в том, что в первоначальной версии статьи он был единственным, так как рассказ о Cisco EEM и был целью написания заметки. При этом проблема балансировки была выбрана как наиболее простой и понятный вариант иллюстрации. Однако позже, в комментариях, мне справедливо указали, что описывать проблему управления BGP-анонсами не упомянув инструмент, который именно для этого и предназначен не очень корректно. Так в статье появился параграф про BGP Conditional Advertisment, на фоне которого применение Cisco EEM кажется громоздким и избыточным. Однако это очень мощный инструмент, имеющий колоссальное поле применения, так что познакомиться с ним все же стоит.

Мы решили проблему балансировки входящего трафика. Осталось добиться резервирования. Общий путь решения понятен: в случае падения одного из пиров менять фильтр исходящих анонсов на том, пире, что еще «жив». Это можно было бы реализовать «снаружи», меняя настройки нашего пограниченого маршрутизатора скриптом по SSH или SNMP. Однако, цель заметки – сделать все встроенными средствами Cisco.

Тут нам пригодиться механизм Cisco Embedded Event Manager (EEM). Это очень гибкий механизм управления маршрутизатором и траблшутинга проблем на сети, возможности которого выходят далеко за пределы описываемой задачи. Нам от него требуется его умение отловить возникновение определённого события (падение или восстановление BGP-соседства) и выполнить заданный набор команд.

Для начала создадим префикс-лист, который включает в себя все наши префиксы.

ip prefix-list full-out seq 5 permit 172.16.7.0/24
ip prefix-list full-out seq 10 permit 172.16.8.0/24
ip prefix-list full-out seq 15 permit 172.16.9.0/24

Теперь сконфигурируем EEM-аплет, который будет запускаться при возникновении в логе записи об изменении статуса BGP-соседства (определяем регулярным выражением). Аплет:

  1. парсит сообщение в логе и определяет:
    • router-id BGP-соседа, который спровоцировал сообщение,
    • его статус;
  2. в зависимости от IP-адреса и статуса применяет для другого BGP-соседа тот или иной префикс-лист;
  3. «мягко» сбрасывает анонсы в сторону второго соседа, что бы ускорить распространение маршрутной информации и применение сделанных изменений.

Конфигурация аплета:

event manager applet isp
 event syslog pattern "neighbor 192.168.10[13].[13] (Up|Down|reset)"
 action 01.0 regexp "(192.168.10[13].[13])" "$_syslog_msg" _match _ip
 action 02.0 if $_ip eq "192.168.101.1"
 action 03.0  set _name "ISP #1"
 action 04.0  set _target_ip "192.168.103.3"
 action 05.0  set _list "isp-2-out"
 action 06.0 elseif $_ip eq "192.168.103.3"
 action 07.0  set _name "ISP #2"
 action 08.0  set _target_ip "192.168.101.1"
 action 09.0  set _list "isp-1-out"
 action 10.0 else
 action 11.0  exit
 action 12.0 end
 action 13.0 regexp "(Up|Down|reset)" "$_syslog_msg" _match _state
 action 14.0 if $_state eq "Up"
 action 15.0  set _status "UP"
 action 16.0 else
 action 17.0  set _status "DOWN"
 action 18.0  set _list "full-list"
 action 19.0 end
 action 20.0 syslog priority warnings msg "$_name now is $_status !"
 action 21.0 syslog priority warnings msg "Applying prefix list '$_list' to the neighbor $_target_ip"
 action 22.0 cli command "enable"
 action 23.0 cli command "configure terminal"
 action 24.0 cli command "router bgp 65000"
 action 25.0 cli command "address-family ipv4" 
 action 26.0 cli command "neighbor $_target_ip prefix-list $_list out"
 action 27.0 cli command "end"
 action 28.0 syslog priority warnings msg "Soft clear BGP session $_target_ip"
 action 29.0 cli command "clear ip bgp $_target_ip soft out"

Изначально обе BGP-сессии у нас активны и анонсы выглядят следующим образом:

CSR#show ip bgp summary
...
Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
192.168.101.1   4        65001       8       5        7    0    0 00:00:19        3
192.168.103.3   4        65002       8       5        7    0    0 00:00:24        3

CSR#show ip bgp neighbors 192.168.101.1 advertised-routes
...
     Network          Next Hop            Metric LocPrf Weight Path
 *>  172.16.7.0/24    192.168.107.7            0         32768 ?
 *>  172.16.8.0/24    192.168.108.8            0         32768 ?

Total number of prefixes 2

CSR#show ip bgp neighbors 192.168.103.3 advertised-routes
...
     Network          Next Hop            Metric LocPrf Weight Path
 *>  172.16.9.0/24    192.168.109.9            0         32768 ?

Total number of prefixes 1

На сети ISP#2 наши анонсы выглядят следующим образом:

R13>show ip bgp
...
 Network          Next Hop            Metric LocPrf Weight Path
 *>  172.16.7.0/24    192.168.200.12                     0 65001 65000 ?
 *>  172.16.8.0/24    192.168.200.12                     0 65001 65000 ?
 *>i 172.16.9.0/24    192.168.103.100      0    120      0 65000 ?

Трассировки с R11 идут в нашу сеть так, как нам нужно:

R11#traceroute 172.16.7.1 source 10.0.11.1
Type escape sequence to abort.
Tracing the route to 172.16.7.1
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.114.4 0 msec 1 msec 0 msec
  2 192.168.134.13 0 msec 0 msec 1 msec
  3 192.168.200.12 0 msec 0 msec 1 msec
  4 192.168.121.1 1 msec 1 msec 1 msec
  5 192.168.101.100 3 msec 3 msec 3 msec
  6 192.168.107.7 2 msec *  3 msec

R11#traceroute 172.16.9.1 source 10.0.11.1
Type escape sequence to abort.
Tracing the route to 172.16.9.1
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.114.4 1 msec 0 msec 1 msec
  2 192.168.34.3 0 msec 1 msec 0 msec
  3 192.168.103.100 3 msec 3 msec 3 msec
  4 192.168.109.9 2 msec *  2 msec

Теперь попробуем отключить пир с ISP#1 со стороны провайдера. В результате одна из BGP-сессий на нашем бордере переходит в IDLE:

CSR#show ip bgp summary
...
Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
192.168.101.1   4        65001       0       0        1    0    0 00:00:10 Idle
192.168.103.3   4        65002      26      26        9    0    0 00:16:31        3

В логе мы при этом видим, что как только возникло событие %BGP-5-NBR_RESET: Neighbor 192.168.101.1 reset (Peer closed the session) сработал наш аплет и изменил префикс-лист:

*Jul 20 09:00:58.208: %BGP-5-NBR_RESET: Neighbor 192.168.101.1 reset (Peer closed the session)
*Jul 20 09:00:58.208: %BGP-5-ADJCHANGE: neighbor 192.168.101.1 Down Peer closed the session
*Jul 20 09:00:58.214: %HA_EM-4-LOG: isp: ISP #1 now is DOWN !
*Jul 20 09:00:58.214: %HA_EM-4-LOG: isp: Applying prefix list 'full-list' to the neighbor 192.168.103.3
*Jul 20 09:00:58.778: %SYS-5-CONFIG_I: Configured from console by  on vty0 (EEM:isp)
*Jul 20 09:00:58.879: %HA_EM-4-LOG: isp: Soft clear BGP session 192.168.103.3

Посмотрим, что теперь мы анонсируем в сторону ISP#2:

CSR#show ip bgp neighbors 192.168.103.3 advertised-routes
...
     Network          Next Hop         Metric LocPrf Weight Path
 *>  172.16.7.0/24    192.168.107.7         0         32768 ?
 *>  172.16.8.0/24    192.168.108.8         0         32768 ?
 *>  172.16.9.0/24    192.168.109.9         0         32768 ?
Total number of prefixes 3

Т.е. теперь мы анонсируем через ISP#2 все наши префиксы. Вот как это теперь выглядит на R13:

R13>show ip bgp
...
     Network          Next Hop          Metric LocPrf Weight Path
 *>i 172.16.7.0/24    192.168.103.100        0    120      0 65000 ?
 *>i 172.16.8.0/24    192.168.103.100        0    120      0 65000 ?
 *>i 172.16.9.0/24    192.168.103.100        0    120      0 65000 ?

А все трассировки в нашу сеть идут через одного провайдера.

При восстановлении BGP-сессии с IPS#1 аплет снова вернет префикс-лист для ISP#2 в исходное положение.

Заключение

Целью статьи было кратко рассмотреть применение Cisco EEM для управления входящим трафиком при балансировке нескольких аплинков, и, надеюсь, это удалось. Конечно, данный способ едва ли возможно назвать оптимальным. Скорее, это решение «в лоб». Однако, он работает и обеспечивает определенную степень отказоустойчивости. Для написания заметки вся схема собиралась в UNELAB на образах Cisco IOL и Cisco CSRv1000. Конфигурации всех устройств из рассматриваемго примера можно скачать по ссылке.

return

24 июня 2013, 17:29

like

67
views
430928
message
61



До сих пор мы варились в собственном соку – VLAN’ы, статические маршруты, OSPF. Плавно росли над собой из зелёных студентов в крепких инженеров.

Теперь отставим в сторону эти игрушки, пришло время BGP.


Содержание выпуска

  • Автономные системы – AS
  • PI и PA адреса
  • Протокол BGP
  • Установление BGP-сессии и процедура обмена маршрутами
  • Настройка BGP и практика
  • Full View и Default Route
  • Looking Glass и другие инструменты
  • Control Plane и Data Plane
  • Выбор маршрута
  • Управление маршрутами
    • AS-Path ACL
    • Prefix-list
    • Route Map
  • Балансировка и распределение нагрузки
    • Балансировка нагрузки
    • Распределение нагрузки
      • Исходящий
      • Входящий
  • PBR
  • IP SLA
  • Материалы выпуска
  • Полезные ссылки

Сначала освежим в памяти основы протоколов динамической маршрутизации.

Бывает два вида протоколов: IGP (внутренние по отношению к вашей автономной системе) и EGP (внешние).

И те и другие опираются на один из двух алгоритмов: DV (Distance Vector) и LS (Link State).

Внутренние мы уже рассматривали. К ним относятся ISIS/OSPF/RIP/EIGRP. Нужны они для того, чтобы обеспечить распространение маршрутной информации внутри вашей сети.

EGP представляет только один протокол – BGP – Border Gateway Protocol. Он призван обеспечивать передачу маршрутов между различными сетями (автономными системами).

Грубо говоря, стык между Балаган-Телекомом и его аплинковым провайдером будет точно организован через BGP.

То есть схема применения примерно такая:


Автономные системы – AS

BGP неразрывно связан с понятием Автономной Системы (ASAutonomous System), которое уже не раз встречалось в нашем цикле.

Согласно определению вики, АС — это система IP-сетей и маршрутизаторов, управляемых одним или несколькими операторами, имеющими единую политику маршрутизации с Интернетом.

Чтобы было немного понятнее, можно, например, представить, что город – это автономная система. И как два города связаны между собой магистралями, так и две АС связываются между собой BGP. При этом внутри каждого города есть своя дорожная система – IGP.
Вот как это выглядит с небольшого отдаления:

В BGP AS – это не просто какая-то абстрактная вещь для удобства. Эта штука весьма формализована, есть специальные окошки в собесе, где можно в будние дни с 9 до 6 получить номер автономной системы. Выдачей этих номеров занимаются RIR (Regional Internet Registry) или LIR (Local Internet Registry).

Вообще глобально этим занимается IANA. Но чтобы не разорваться, она делегирует свои задачи RIR – это региональные организации, каждая из которых отвечает за определённую часть планеты (Для Европы и России – это RIPE NCC)

LIR’ом может стать почти любая желающая организация при наличии необходимых документов. Они нужны для того, чтобы RIR’у не пришлось напрягаться с запросами от таких мелких контор, как ЛинкМиАп.

Ну вот, например, Балаган-Телеком мог бы быть LIR’ом. И у него мы и взяли ASN (номер АС) – 64500, например. А у самого у него AS 64501.

До 2007 года были возможны только 16-битные номера AS, то есть всего было доступно 65536, номеров. 0 и 65535 – зарезервированы.

Номера 64512 до 65534 предназначены для приватных AS, которые не маршрутизируются глобально – что-то вроде приватных IP-адресов.

Номера 64496-64511 – для использования в примерах и документации, чем мы и воспользуемся.

Сейчас возможно использование 32битных номеров AS. Этот переход значительно легче, чем IPv4->IPv6.

Опять же нельзя говорить об автономных системах без привязки к блокам IP-адресов. На практике с каждой AS должен быть связан какой-то блок адресов.


PI и PA адреса

В пору своей профессиональной юности, читая договор с нашим LIR я посмеивался над менеджерами, которые не могли правильно написать IP-адрес: то и дело в тексте встречалось слово “PI-адрес”.
Слава богу хватило тогда ума загуглить этот вопрос

На самом деле PI – это Provider Independent.

В обычной ситуации, когда вы подключаетесь к провайдеру, он выдаёт вам диапазон публичных адресов – так называемые PA-адреса (Provider Aggregatable).

Получить их – раз плюнуть, но если вы не являетесь LIR’ом, то при смене провайдера придётся возвращать и PA-адреса. Тем более фактически допускается подключение только к одному провайдеру. И если вы решите сменить провайдера, то старые адреса уйдут вместе с ним, а новый провайдер выдаст новые. Ну и где тут гибкость?

У LIR вы можете приобрести повайдеро-независимый блок адресов (PI) и обязательно ASN. В нашем случае пусть это будет блок 100.0.0.0/23, который мы будем анонсировать по BGP своим соседям. И эти адреса уже чисто наши и никакие провайдеры нам не страшны: не понравился один – ушли к другому с сохранением своих адресов.

Получить PI-адреса всегда было не очень просто. Вам нужно подготовить массу документов, обосновать необходимость такого блока итд.

Сейчас с исчерпанием IPv4 получить большие блоки становится всё сложнее. RIR их уже не выдаёт, а LIR раздают последнее.
Таким образом и номера AS и PI-адреса можно получить в одних их тех же конторах.

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

Вот краткая инструкция по объектам БД RIPE.

Предположим, что в нашем случае компания ЛинкМиАп получила блок адресов 100.0.0.0/23 и AS 64500. Возвращаясь к нашей аналогии, мы дали городу имя и снабдили его диапазоном индексов.

Ещё одна статья на эту тему.


BGP

Так вот для того, чтобы нам из своей AS передать информацию об этих публичных адресах в другую AS (читай в Интернет) и используется BGP. И если вы думаете, что яндекс или майкрософт использует какие-то небесные технологии для подключения своих ЦОДов к Интернету, то вы ошибаетесь – всё тот же BGP.

Теперь главный вопрос, который интересует всегда новичков: а зачем BGP, почему не взять пресловутый OSPF или вообще статику?

Наверное, большие дяди могут очень подробно и обстоятельно объяснить это, мы же постараемся дать поверхностное понимание.

  • Если говорить о OSPF/IS-IS, то это Link-State алгоритмы, которые подразумевают (внимание!), что каждый маршрутизатор знает топологию всей сети. Представляем себе миллионы маршрутизаторов в Интернете и отказываемся от идеи использовать Link State для этих целей вообще.

    Вообще OSPF при маршрутизации между area’ми является фактически distance vector протоколом. Гипотетически, можно было бы заменить «AS» на «Area» в плане глобальной маршрутизации, но OSPF просто не предназначен для переваривания таких объемов маршрутной информации, да и нельзя выделить в интернете Area 0.

    RIP, EIGRP… Кхе-кхе. Ну, тут всё понятно.

  • IGP – это нечто интимное и каждому встречному ISP показывать его не стоит. Даже без AS ситуация, когда клиент поднимает IGP с провайдером, крайне редкая (за исключением L3VPN). Дело в том, что IGP не имеют достаточно гибкой системы управления маршрутами – для LS-протоколов это вообще знать всё или ничего (опять же можно фильтровать на границе зоны, но гибкости никакой). В итоге оказывается, что придётся открывать кому-то чужому потаённые части своей приватной сети или настраивать хитрые политики импорта между различными IGP-процессами.
  • В данный момент в интернете более 450 000 маршрутов. Если бы даже OSPF/ISIS могли хранить всю топологию Интернета, представьте сколько времени заняла бы работа алгоритма SPF. Вот наглядный пример, чем может быть опасно использование IGP там, где напрашивается нечто глобальное. Поэтому нужен свой специальный протокол для взаимодействия между AS.

И к такому протоколу есть ряд требований:

  • Во-первых, он должен быть дистанционно-векторным – это однозначно. Маршрутизатор не должен делать расчёт маршрута до каждой сети в Интернете, он лишь должен выбрать один из нескольких предложенных.
  • Во-вторых, он должен иметь очень гибкую систему фильтрации маршрутов. Мы должны легко определять, что светить соседям, а что не нужно выносить из избы.
  • В-третьих, он должен быть легко масштабируемым, иметь защиту от образования петель и систему управления приоритетами маршрутов.
  • В-четвёртых, он должен обладать высокой стабильностью. Поскольку данные о маршрутах будут передаваться через среду, которая не всегда может обладать гарантированным качеством (за стык отвечают по крайней мере две организации), необходимо исключить возможные потери маршрутной информации.
  • Ну и логичное, в-пятых, он должен понимать, что такое AS, отличать свою AS от чужих.

Встречайте: BGP.

Вообще описание работы этого поистине грандиозного протокола мы разобьём на две части. И сегодня рассмотрим принципиальные моменты.

BGP делится на IBGP и EBGP.

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

EBGP – это обычный BGP между автономными системами. На нём и остановимся.

Установление BGP-сессии и процедура обмена маршрутами

Возьмём типичную ситуацию, когда у нас подключение к провайдерскому шлюзу организовано напрямую.

Устройства, между которыми устанавливается BGP-сессия называются BGP-пирами или BGP-соседями.

BGP не обнаруживает соседей автоматически – каждый сосед настраивается вручную.

Процесс установления отношений соседства происходит следующим образом:

  • I) Изначальное состояние BGP-соседства – IDLE. Ничего не происходит.

    BGP находится в соcтоянии IDLE, если нет маршрута к BGP-соседу.

  • II) Для обеспечения надёжности BGP использует TCP.

    Это означает, что теоретически BGP-пиры могут быть подключены не напрямую, а, например, так.

    Но в случае подключения к провайдеру, как правило, берётся всё же прямое подключение, таким образом маршрут до соседа всегда есть, как подключенный непосредственно.

    BGP-маршрутизатор (их также называют BGP-спикерами/speaker или BGP-ораторами) слушает и посылает пакеты на 179-й TCP порт.

    Когда слушает – это состояние CONNECT. В таком состоянии BGP находится очень недолго.
    Когда отправил и ожидает ответа от соседа – это состояние ACTIVE.

    R1 отправляет TCP SYN на порт 179 соседа, инициируя TCP-сессию.

    R2 возвращает TCP ACK, мол, всё получил, согласен и свой TCP SYN.

    R1 тоже отчитывается, что получил SYN от R2.

    После этого TCP-сессия установлена.

    В состоянии ACTIVE BGP может подвиснуть, если

    • Нет IP-связности с R2
    • BGP не запущен на R2
    • Порт 179 закрыт ACL

    Вот пример неуспешного установления TCP-сессии. BGP будет в состоянии ACTIVE, иногда переключаясь на IDLE и снова обратно.

    TCP SYN отправлен с R1 на R2.

    На R2 не запущен BGP, и R2 возвращает ACK, что получен SYN от R1 и RST, означающий, что нужно сбросить подключение.

    Периодически R1 будет пытаться снова установить TCP-сессию.

    В свою бытность зелёным юнцом, я, впервые настраивая BGP-пиринг с провайдером, потратил полдня на поиск проблемы. Я реально не знал, как настраивается BGP и искал ошибку в конфигурации, думал, что есть какие-то тонкости для моей ситуации, уже начал читать про community. Но наконец в голову пришла светлая мысль – проверить ACL на входе в сеть. Да, TCP-запросы провайдера попадали в deny и сессия не устанавливалась.

    Будьте аккуратны. Рядовая практика для провайдера вешать на все свои внешние интерфейсы, торчащие в «мир» ACL.

  • III) После того, как TCP-сессия установлена, BGP-ораторы начинают обмен сообщениями OPEN.

    OPEN – первый тип сообщений BGP. Они отсылаются только в самом начале BGP-сессии для согласования параметров.

    В нём передаются версия протокола, номер AS, Hold Timer и Router ID. Чтобы BGP-сессия поднялась, должны соблюдаться следующие условия:

    • Версии протокола должна быть одинаковой. Маловероятно, что это будет иначе
    • Номера AS в сообщении OPEN должны совпадать с настройками на удалённой стороне
    • Router ID должны различаться

    Также внизу вы можете увидеть поддерживает ли маршрутизатор дополнительные возможности протокола.

    Получив OPEN от R1, R2 отправляет свой OPEN, а также KEEPALIVE, говорящий о том, что OPEN от R1 получен – это сигнал для R1 переходить к следующему состоянию – Established.

    Вот примеры неконсистентности параметров:

    • а) некорректная AS (На R2 настроена AS 300, тогда, как на R1 считается, что данный сосед находится в AS 200):
      R2 отправляет обычный OPEN

      R1 замечает, что AS в сообщении не совпадает с настроенным, и сбрасывает сессию, отправляя сообщение NOTIFICATION. Они отправляются в случае каких-либо проблем, чтобы разорвать сессию.

      При этом в консоли R1 появляются следующие сообщения:

    • б) одинаковый Router ID
      R2 отправляет в OPEN Router ID, который совпадает с ID R1:

      R1 возвращает NOTIFICATION, мол, опух?!

      При этом в консоли будут следующего плана сообщения:

      После таких ошибок BGP переходит сначала в IDLE, а потом в ACTIVE, пытаясь заново установить TCP-сессию и затем снова обменяться сообщениями OPEN, вдруг, что-то изменилось?

    Когда сообщение Open отправлено – это состояние OPEN SENT.

    Когда оно получено – это состояние OPEN CONFIRM.

    Если Hold Timer различается, то выбран будет наименьший. Поскольку Keepalive Timer не передаётся в сообщении OPEN, он будет рассчитан автоматически (Hold Timer/3). То есть Keepalive может различаться на соседях

    Вот пример: на R2 настроены таймеры так: Keepalive 30, Hold 170.

    R2 отправляет эти параметры в сообщении OPEN. R1 получает его и сравнивает: полученное значение – 170, своё 180. Выбираем меньшее – 170 и вычисляем Keepalive таймер:

    Это означает, что R2 свои Keepalive’ы будет рассылать каждые 30 секунд, а R1 – 56. Но главное, что Hold Timer у них одинаковый, и никто из них раньше времени не разорвёт сессию.

    Увидеть состояние OPENSENT или OPENCONFIRM сложно – BGP на них не задерживается.

  • IV) После всех этих шагов они переходят в стабильное состояние ESTABLISHED.

    Это означает, что запущена правильная версия BGP и все настройки консистентны.

    Для каждого соседа можно посмотреть Uptime – как долго он находится в состоянии ESTABLISHED.

  • V) В первые мгновения после установки BGP-сессии в таблице BGP только информация о локальных маршрутах.

    Можно переходить к обмену маршрутной информацией.

    Для это используются сообщения UPDATE

    Каждое сообщение UPDATE может нести информацию об одном новом маршруте или о удалении группы старых. Причём одновременно.

    Разберём их поподробнее.

    R1 передаёт маршрутную информацию на R2.

    Первый плюсик в сообщении UPDATE – это атрибуты пути. Мы их подробно рассмотрим позже, но вам уже должны быть поняты два из них. AS_PATH означает, что маршрут пришёл из AS с номером 100.

    NEXT_HOP – что логично, информация для R2, что указывать в качестве шлюза для данного маршрута. Теоретически здесь может быть не обязательно адрес R1.

    Атрибут ORIGIN сообщает о происхождении маршрута:

    • IGP – задан вручную командой network или получен по BGP
    • EGP – этот код вы никогда не встретите, означает, что маршрут получен из устаревшего протокола, который так и назывался – “EGP”, и был полностью повсеместно заменен BGP
    • Incomplete – чаще всего означает, что маршрут получен через редистрибьюцию

    Второй плюсик – это собственно информация о маршрутах – NLRI – Network Layer Reachability Information. Собственно, наша сеть 100.0.0.0/23 тут и указана.

    Ну и UPDATE от R2 к R1.

    Нижеидущие KEEPALIVIE – это своеобразные подтверждения, что информация получена.

    Информация о сетях появилась теперь в таблице BGP:

    И в таблице маршрутизации:

    UPDATE передаются при каждом изменении в сети до тех пор пока длится BGP-сессия. Заметьте, никаких синхронизаций таблиц маршрутизации нет, в отличии от какого-нибудь OSPF. Это было бы технически глупо – полная таблица маршрутов BGP весит несколько десятков мегабайтов на каждом соседе.

  • VI) Теперь, когда всё хорошо, каждый BGP-маршрутизатор регулярно будет рассылать сообщения KEEPALIVE. Как и в любом другом протоколе это означает: «Я всё ещё жив». Это происходит с истечением таймера Keepalive – по умолчанию 60 секунд.

    Если BGP-сессия устанавливается нормально, но потом рвётся и это повторяется с некой периодичностью – верный знак, что не проходят keepalive. Скорее всего, период цикла – 3 минуты (таймер HOLD по умолчанию). Искать проблему надо на L2. Например, это может быть плохое качество связи, перегрузки на интерфейсе или ошибки CRC.

Ещё один тип сообщений BGP – ROUTE REFRESH – позволяет запросить у своих соседей все маршруты заново без рестарта BGP процесса.

Подробнее обо всех типах сообщений BGP.

Полная конечный автомат) для BGP выглядит так:

Вопрос на засыпку: Предположим, что Uptime BGP-сессии 24 часа. Какие сообщения гарантировано не передавались между соседями последние 12 часов?

Теперь расширим наш кругозор до вот такой сети:

Картинки без подсетей

И посмотрим, что из себя представляет таблица маршрутов BGP на маршрутизаторе R1:

Как видите, маршрут представляет из себя вовсе не только NextHop или просто список устройств до нужной подсети. Это список AS. Иначе он называется AS-Path.

То есть, чтобы попасть в сеть 123.0.0.0/24 мы должны отправить пакет наружу, преодолеть AS 200 и AS 300.

AS-path формируется следующим образом:

  • а) Пока маршрут гуляет внутри AS, список пустой. Все маршрутизаторы понимают, что полученный маршрут из этой же AS
  • б) Как только маршрутизатор анонсирует маршрут своему внешнему соседу, он добавляет в список AS-path номер своей AS.
  • в) Внутри соседской AS, список не меняется и содержит только номер изначальной AS
  • г) Когда из соседской AS маршрут передаётся дальше в начало списка добавляется номер текущей AS.

И так далее. При передаче маршрута внешнему соседу номер AS всегда добавляется в начало списка AS-path. То есть фактически это стек.

AS-path нужен не просто для того, чтобы маршрутизатор R1 знал путь до конечной сети – ведь по сути Next Hop достаточно – каждый маршрутизатор решение по-прежнему принимает на основе таблицы маршрутизации. На самом деле тут преследуются две более важные цели:

  1. Предотвращение петель маршрутизации. В AS-Path не должно быть повторяющихся номеров

    На самом деле ASN может повторяться в AS-Path в двух случаях

    • а) Когда вы используете AS-Path Prepend, о котором ниже.
    • б) Когда вы хотите соединить два куска одной AS, не имеющих прямой связи друг с другом.
  2. Выбор наилучшего маршрута. Чем короче AS-Path, тем предпочтительнее маршрут, но об этом позже.

Настройка BGP и практика

В этом выпуске мы смешаем теорию с практикой, потому что так будет проще всего понять. Собственно сейчас обратимся к нашей сети ЛинкМиАп.

Как обычно, отрезаем всё лишнее и добавляем необходимое:

Внизу наш главный маршрутизатор msk-arbat-gw1. Для упрощения настройки и понимания, мы отрешимся от всех старых настроек и освободим интерфейсы.

Выше два наших старых провайдера – Балаган Телеком и Филькин Сертификат.

Разумеется, у каждого провайдера здесь своя AS. Мы добавили ещё одну тупиковую AS – до неё и будем проверять, пусть, это например, ЦОД в Интернете.

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

Мы поднимаем BGP-сессию с обоими провайдерами.

Нам важна следующая информация:

  1. Номер нашей AS и блок IP-адресов. Их мы уже получили: AS64500 и блок: 100.0.0.0/23.
  2. Номер AS «Балаган Телеком» и линковая подсеть с ним. AS64501 и линковая сеть: 101.0.0.0/30.
  3. Номер AS «Филькин Сертификат» и линковая подсеть с ним. AS64502 и линковая сеть: 102.0.0.0/30.

При подключении по BGP в качестве линковых адресов используются обычно публичные с маской подсети /30 и выдаёт их нам вышестоящий провайдер.

Делается это по той простой причине, чтобы ваш трафик везде следовал по публичным адресам и в трассировке посередине не появлялись всякие 10.Х.Х.Х. Не то, чтобы это что-то запрещённое, но обычно-таки придерживаются этого правила.

Начнём с банального.

Настройка интерфейсов:

msk-arbat-gw1
R1(config)#int fa0/0
R1(config-if)#ip address 101.0.0.2 255.255.255.252
R1(config-if)#no shutdown 

R1(config)#int fa0/1
R1(config-if)#ip address 102.0.0.2 255.255.255.252
R1(config-if)#no shutdown 

Теперь назначим какой-нибудь адрес на интерфейс Loopback, чтобы потом проверить связность:

R1(config)#int loopback 0
R1(config-if)#ip address 100.0.0.1 255.255.255.255

Черёд BGP. Тут заострим внимание на каждой строчке.

R1(config)#router bgp 64500

Сначала мы запускаем BGP процесс и указываем номер AS. Именно тот номер, который выдал LIR. Это вам не OSPF – вольности недопустимы.

Теперь поднимаем пиринг.

R1(config-router)#neighbor 101.0.0.1 remote-as 64501

Командой neighbor мы указываем, с кем устанавливать сессию. Именно на адрес 101.0.0.1 маршрутизатор будет отсылать сначала TCP-SYN, а потом OPEN. Также мы обязаны указать номер удалённой Автономной Системы – 64501.

Конфигурация с обратной стороны симметрична:

R2(config)#router bgp 64501
R2(config-router)#neighbor 101.0.0.2 remote-as 64500

Уже по одному сообщению

*Mar 1 00:11:12.203: %BGP-5-ADJCHANGE: neighbor 101.0.0.2 Up

можно судить, что BGP поднялся, но давайте проверим его состояние:

Вот они пробежали по всем состояниям и сейчас их статус Established.

Получал и отправлял наш маршрутизатор по одному OPEN и успел за это время отослать и принять уже 2 KEEPALIVE.

Командой sh ip bgp можно посмотреть какие сети известны BGP:

Пусто. Надо указать, что есть у нас вот эта сеточка 100.0.0.0/23 и передать её провайдерам?

Для этого существует три варианта:

  • Определить сети командой network
  • Импортировать из другого источника (direct, static, IGP)
  • Создать агрегированный маршрут командой aggregate-address

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

R1(config)#router bgp 64500
R1(config-router)#network 100.0.0.0 mask 255.255.254.0

Смотрим появилась ли наша сеть в таблице:

Странно, но нет, ничего не появилось. На R2 тоже.

А дело тут в том, что в ту сеть, которую вы прописали командой network должен быть точный маршрут, иначе она не будет добавлена в таблицу BGP – это обязательное условие. Конечно, такого маршрута нет. Откуда ему взяться:

Поскольку реально у нас некуда прописывать такой маршрут – кроме одного Loopback-интерфейса, нигде этой сети нет, мы можем поступить следующим образом

R1(config)#ip route 100.0.0.0 255.255.254.0 Null 0

Данный маршрут говорит о том, что все пакеты в эту подсеть будут отброшены. Но, не пугайтесь, нормальная работа не будет нарушена. Если у вас есть более точные маршруты (с маской больше /23, например, /24, /30, /32), то они будут предпочтительнее согласно правилу Longest Prefix Match.

И теперь в таблице BGP есть наш локальный маршрут:

Если настроить BGP и нужные маршруты на всех устройствах нашей схемы, то таблицы BGP и маршрутизации на нашем бордере (border – маршрутизатор на границе сети) будут выглядеть так:

Обратите внимание, что в таблице BGP по 2 маршрута к некоторым сетям, а в таблице маршрутизации только один. Маршрутизатор выбирает лучший из всех и только его переносит в таблицу маршрутизации. Об этом поговорим позже.
Это необходимый минимум, после которого уже будет маленькое счастье.


Задача №1
Схема:

Условие:
Настройки маршрутизаторов несущественны. Никаких фильтров маршрутов не настроено. Почему на одном из соседей отсутствует альтернативный маршрут в сеть 195.12.0.0/16 через AS400?

Подробности задачи тут


Full View и Default Route

Говоря о BGP и подключении к провайдерам, нельзя не затронуть эту тему. Когда ЛинкМиАп, имея уже AS и PI-адреса, будет делать стык с Балаган-Телекомом, одним из первых вопросов от них будет: “Фул вью или Дефолт?”. Тут главное не растеряться и не сморозить чепуху.

То, что вы видели до сих пор – это так называемый Full View – маршрутизатор изучает абсолютно все маршруты Интернета, пусть даже в нашем случае это пять-шесть штук. В реальности их сейчас больше 400 000. Соответственно от одного провайдера вы получите 400k маршрутов, от второго столько же. Подчас бывает и третий резервный – плюс ещё 400k. Итого больше миллиона. Ну не покупать же теперь маленькому недоинтерпрайзу циску старших серий только для этого?


* вывод таблицы маршрутизации с одного из публичных серверов (дуступен по telnet route-server.ip.att.net)

На самом деле, далеко не каждому, кто имеет AS, нужен Full View. Обычно для таких компаний, как наша вполне достаточно Default Route, по названиям вполне понятно, чем они отличаются. В последнем случае от каждого провайдера приходит только один маршрут по умолчанию, вместо сотен тысяч специфических (хотя вообще-то может и вместе).

Позвольте привести небольшие аргументы в пользу того и другого.

  • Full View. Вы обладаетe полным чистейшим знанием о структуре Интернета. До любого адреса в Интернете вы можете просмотреть путь от себя:

    Вы знаете, какие к нему ведут AS. Через сайт RIPE можно посмотреть какие провайдеры обеспечивают транзит. Вы следите за всеми изменениями. Если вдруг у кого-то что-то упадёт через первый линк (даже не у вас или у провайдера, а где-то там, дальше), BGP это отследит и перестроит свою таблицу маршрутизации для передачи данных через второго провайдера.

    При этом вы очень гибко можете управлять маршрутами, вмешиваясь в стандартную процедуру выбора наилучшего пути.

    Например, весь трафик на яндекс вы будете пускать через Балаган Телеком, а на гугл через Филькин Сертификат. Это называется распределением нагрузки.

    Достигается это путём настройки, например, приоритетов маршрутов для определённых префиксов.

    Full View обязателен, если ваша АС транзитная, то есть вы собираетесь по BGP подключать к себе ещё клиентов.

    Платить за все эти плюсы приходится производительностью: высокая утилизация оперативной памяти и весьма долгое изучение маршрутной информации после установления BGP-сессии. Например, после того, как дёрнулся линк с вышестоящим провайдером, полное восстановление может занять несколько минут.

  • Default Route Ну, во-первых, это, конечно, сильно экономит ресурсы вашего оборудования.

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

    В-третьих, никакого представления о состоянии интернета и реальной доступности получателей нет – вы просто слепо доверяетесь дефолту, полученному от апстрима. То есть в случае проблемы выше, вы о ней не узнаете и часть сервисов может упасть. Но тут мы надеемся, что у вышестоящих провайдеров надёжность сети на порядки выше и нам не о чем беспокоиться.

    Балансировка и распределение входящего трафика при получении маршрута по умолчанию никак не затрагивается – проблемы те же. А вот с исходящим, конечно, всё, немного иначе, былой гибкости тут уже не будет.

В общем, очень грубый совет прозвучит так:

Если вы не собираетесь организовывать через себя транзит (подключать клиентов со своими АС) и нет нужды в тонком распределении исходящего трафика, то вам хватит Default Route.

Но уж точно нет смысла принимать от одного провайдера Full View, а от другого Default – в этом случае один линк будет всегда простаивать на исходящий трафик, потому что маршрутизатор будет выбирать более специфический путь.

При этом от всех провайдеров вы можете брать Default плюс определённые префиксы (например, именно этого провайдера). Таким образом до нужных ресурсов у вас будут специфические маршруты без Full View.

Вот пример настройки передачи Default Route нижестоящему маршрутизатору:

balagan-router(config-router)#neighbor 101.0.0.2 default-originate

И вот как после этого выглядит таблица маршрутов на нашем бордере:

То есть помимо обычных маршрутов (Full View) передаётся ещё маршрут по умолчанию.

Сейчас вы уже должны начинать догадываться, что Default Route – это не противопоставление Full View. Не обязательно здесь стоит «или то или другое» (надо бы ввести понятие хили или ксили, как английское XOR), вы вполне можете использовать Default Route в дополнение к Full View или Default Route и часть каких-то других маршрутов.


Задача №2
Схема: Общая схема сети
Задание:
Настроить фильтрацию со стороны провайдера таким образом, чтобы он передавал нам только маршрут по умолчанию и ничего лишнего.
То есть, чтобы таблица BGP выглядела так:

Подробности задачи тут


Looking Glass и другие инструменты

Одним из очень мощных инструментов работы с BGP – Looking Glass. Это сервера, расположенные в Интернете, которые позволяют взглянуть на сеть извне: проверить доступность, просмотреть через какие AS лежит путь в вашу автономную систему, запустить трассировку до своих внутренних адресов.

Это как если бы вы попросили кого-то: “слушай, а посмотри, как там мои анонсы видятся?”, только просить никого не нужно.

Не стоит недооценивать силу внешних инструментов. Однажды у меня была проблема с очень низкой скоростью отдачи вовне. Она едва переваливала за несколько мегабит. После довольно продолжительного траблшутинга, решил взглянуть в Looking Glass. Какого же было моё удивление, когда я обнаружил, что трафик идёт ко мне, через VPN канал до филиала в другом городе, с которым установлен IBGP. Естественно, ширина канала была небольшой и утилизировалась практически полностью.

Существуют также специальные организации, которые отслеживают анонсы BGP в Интернете и, если вдруг происходит что-то неожиданное, они могут уведомить владельца сети – BGPMon, Renesys, RouteViews. Благодаря им было предотвращено несколько глобальных аварий.
С помощью сервиса BGPlay можно визуализировать информацию о распространении маршрутов.

На nag.ru можно почитать о самых ярких случаях, когда некорректные анонсы BGP вызывали глобальные проблемы в Интернете, таких как ”AS 7007 Incident” и “Google’s May 2005 Outage”.
Очень хорошая статья по разнообразным прекраснейшим инструментам для работы с BGP.

Список серверов Looking Glass.


Control Plane и Data Plane

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

В своё время, читая MPLS Enabled Application, я сломал свой мозг на них. Просто никак не мог сообразить, о чём авторы ведут речь.

Итак, дабы не было конфузов у вас.

Это не уровни модели, не уровни среды или моменты передачи данных – это весьма абстрактное деление.

Управляющий уровень (Control Plane) – работа служебных протоколов, обеспечивающих условия для передачи данных.

Например, когда запускается BGP, он пробегает все свои состояния, обменивается маршрутной информацией итд.

Или в MPLS-сети LDP распределяет метки на префиксы.

Или STP, обмениваясь BPDU, строит L2-топологию.

Всё это примеры процессов Control Plane. То есть это подготовка сети к передаче – организация коммутации, наполнение таблицы маршрутизации.

Передающий уровень (Data Plane) – собственно передача полезных данных клиентов.

Часто случается так, что данные двух уровней ходят в разных направлениях, “навстречу друг другу”. Так в BGP маршруты передаются из AS100 в AS200 для того, чтобы AS200 могла передать данные в AS100.

Более того, на разных уровнях могут быть разные парадигмы работы. Например, в MPLS Data Plane ориентирован на создание соединения, то есть данные там передаются по заранее определённому пути – LSP.

А вот сам этот путь подготавливается по стандартным законам IP – от хоста к хосту.

Важно понять назначение уровней и в чём разница.

Для BGP это принципиальный вопрос. Когда вы анонсируете свои маршруты, фактически вы создаёте путь для входящего трафика. То есть маршруты исходят от вас, а трафик к вам.


Выбор маршрута

Ситуация с маршрутами у нас такая.

Есть BGP-таблица, в которой хранятся абсолютно все маршруты, полученные от соседей.


То есть если есть у нас несколько маршрутов, до сети 100.0.0.0/23, то все они будут в BGP-таблице, независимо от “плохости” оных:

А есть знакомая нам таблица маршрутизации, хранящая только лучшие из лучших. Точно также BGP анонсирует не все приходящие маршруты, а только лучшие. То есть от одного соседа вы никогда не получите два маршрута в одну сеть.

Итак, критерии выбора лучших:

  1. Максимальное значение Weight (локально для маршрутизатора, только для Cisco)
  2. Максимальное значение Local Preference (для всей AS)
  3. Предпочесть локальный маршрут маршрутизатора (next hop = 0.0.0.0)
  4. Кратчайший путь через автономные системы. (самый короткий AS_PATH)
  5. Минимальное значение Origin Code (IGP < EGP < incomplete)
  6. Минимальное значение MED (распространяется между автономными системами)
  7. Путь eBGP лучше чем путь iBGP
  8. Выбрать путь через ближайшего IGP-соседа.
    Если это условие выполнено, то происходит балансировка нагрузки между несколькими равнозначными линками Следующие условия могут различаться от вендора к вендору.
  9. Выбрать самый старый маршрут для eBGP-пути
  10. Выбрать путь через соседа с наименьшим BGP router ID
  11. Выбрать путь через соседа с наименьшим IP-адресом

Как видите, очень много критериев выбора. Причём они довольно сложные и с ходу их все понять непросто. Втягивайтесь потихоньку.

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


Задача №3
Схема: Общая схема сети
Условие: Full View на всех маршрутизаторах
Если вы сейчас посмотрите таблицу BGP на маршрутизаторе провайдера Балаган Телеком, то увидите 3 маршрута в сеть 102.0.0.0/21 – сеть Филькина Сертификата. И один из маршрутов ведёт через нашу сети ЛинкМиАп.

Это говорит о том, что наш бордер анонсирует чужие маршруты дальше, иными словами наша AS является транзитной.
Задание:
Настроить фильтрацию таким образом, чтобы наша AS64500 перестала быть транзитной.

Подробности задачи тут


Управление маршрутами

Прежде чем переходить к большой теме распределения нагрузки с помощью BGP просто необходимо разобраться с тем, каким образом мы вообще можем управлять маршрутами в этом протоколе. Именно возможность такого управления обменом маршрутной информации делает BGP таким гибким и подходящим для взаимодействия нескольких различных провайдеров, в отличии от любого IGP.

И инструментов для этого у нас немало:

  • AS-Path ACL
  • Prefix-list
  • Weight
  • Local Preference
  • MED

Но только первые два из них позволяют фильтровать анонсируемые или принимаемые маршруты, остальные лишь устанавливают приоритеты.

AS-Path ACL

Весьма мощный, но не самый популярный механизм.

С помощью AS-Path ACL вы можете, например, запретить принимать анонсы маршрутов, принадлежащих AS 200. Ну вот просто не хотите – пусть они через другого провайдера будут известны, а через этого нет.

Самое сложное в таком подходе – запомнить все регулярные выражения и научиться их использовать. Сначала голова от них кругом:

  • . — любой символ, включая пробел
  • * — ноль или больше совпадений с выражением
  • + — одно или больше совпадений с выражением
  • ? — ноль или одно совпадение с выражением
  • ^ — начало строки
  • $ — конец строки
  • _ — любой разделитель (включая, начало, конец, пробел)
  • \ — не воспринимать следующий символ как специальный
  • [ ] — совпадение с одним из символов в диапазоне
  • | — логическое «или»

Чтобы было чуть более понятно, приведём несколько примеров:

  • _127_ — Маршруты проходящие через AS 127. До и после номера AS идут знаки “_”, означающие, что в AS-path номер 200 может стоять в начале, середине или конце, главное, чтобы он был.
  • ^127$ — Маршруты из соседней AS 127. “^” означает начало списка, а “$” – конец. То есть в AS-path всего лишь один номер AS – это означает, что маршрут был зарождён в AS 127 и оттуда сразу был передан нам.
  • _127$ — Маршруты отправленные из AS 127. “$” означает конец списка, то есть это самая первая AS, из неё маршрут и зародился, знак “_” говорит о том, что неважно, что находится дальше, хоть ничего, хоть 7 других AS.
  • ^127_ — Сети находящиеся за AS 127. Знак “^” означает, что ASN 200 была добавлена последней, то есть маршрут к нам пришёл из AS 200, но это не значит, что родился он в ней же – знак “_” говорит о том, что это может быть конец списка, а может пробел перед следующей AS.
  • ^$ — Маршруты локальной AS.

Список AS-path пуст, значит маршрут локальный, сгенерированный внутри нашей AS.

Пример

Вот в нашей сети отфильтруем маршруты, которые зародились в AS 64501. То есть мы будем от соседа 101.0.0.1 получать все интернетовские маршруты, но не будем получать их локальные.

ip as-path access-list 100 deny ^64501$
ip as-path access-list 100 permit .*

router bgp 64500
neighbor 101.0.0.1 filter-list 100 in

Конфигурация устройств.

Prefix-list

Тут всё просто и логично. Ну почти.

Префикс-листы – это просто привычные нам сеть/маска, и мы указываем разрешить такие маршруты или нет.

Синтаксис команды:

ip prefix-list {list-name} [seq {value}] {deny|permit} 
{network/length} [ge {value}] [le {value}]
  • list-name – название списка. Ваш КО. Обычно указывается, как name_in или name_out. Это подсказывает нам на входящие или исходящие маршруты будет действовать (но, конечно, на данном этапе никак не определяет).
  • seq – порядковый номер правила (как в ACL), чтобы проще было оперировать с ними.
  • deny/permit – определяем разрешать такой маршрут или нет
  • network/length – привычная для нас запись, вроде, 192.168.14.0/24.
    А вот дальше, внимание, сложнее – возможны ещё два параметра:
  • ge и le. Как и при настройке NAT (или в ЯП Фортран), это означает «greater or equal» и «less or equal».
  • То есть вы можете задать не только один конкретный префикс, но и их диапазон.

    Например, такая запись

    ip prefix-list NetDay permit 10.0.0.0/8 ge 10 le 16
    

    будет означать, что в префикс-лист попадут любые маршруты с длиной от 10 до 16 бит, входящие в диапазон 10/8.
    Например: 10.0.0.0/10, 10.32.0.0/11, 10.96.0.0.12, 10.0.0.0/13, 10.0.0.0/14, 10.0.0.0/15, 10.8.0.0/16 итд

Пример

Сейчас мы запретим принимать анонс сети 120.0.0.0/24 через провайдер Филькин Сертификат, а все остальные разрешим. Запись 0.0.0.0/0 le 32 означает любые подсети с любой длиной маски (меньшей или равной 32 (0-32)).

ip prefix-list TEST_PL_IN seq 5 deny 120.0.0.0/24
ip prefix-list TEST_PL_IN seq 10 permit 0.0.0.0/0 le 32

router bgp 64500
neighbor 102.0.0.1 prefix-list TEST_PL_IN in

Сделаем на всякий случай оговорку: последний пример не означает, что соседний провайдер не будет вам их передавать – конечно, будет, ведь он-то ничего не знает о ваших политиках – а вот ваш маршрутизатор, получив такой анонс, не добавит маршрут в свою BGP-таблицу.

Конфигурация устройств.

Route Map

До сих пор все правила применялись безусловно – на все анонсы от пира или пиру.

С помощью карт маршрутов (у других вендоров они могут называться политиками маршрутизации) мы можем очень гибко применять правила, дифференцируя анонсы.

Синтаксис команды следующий:

route-map {map_name} {permit|deny} {seq}
[match {expression}]
[set {expression}]
  • map_name – имя карты
  • permit/deny – разрешаем или нет прохождение данных, подпадающих под условия route-map
  • seq – номер правила в route-map
  • match – условие подпадания трафика под данное правило.
  • expression:
    Критерий Команда конфигурации
    Network/mask match ip address prefix-list
    AS-path match as-path
    BGP community match community
    Route originator match ip route-source
    BGP next-hop address match ip next-hop

    set – что сделать с отфильтрованными маршрутами expression:

    Параметры Команда конфигурации
    AS path prepend set as-path prepend
    Weight set weight
    Local Preference set local-preference
    BGP community set community
    MED set metric
    Origin set origin
    BGP next-hop set next-hop

    Пример применения

    Укажем, что в подсеть 120.0.0.0/24 предпочтительно ходить через Балаган Телеком, а в 103.0.0.0/22 через Филькин Сертификат. Для этого воспользуемся атрибутом Local Preference. Чем выше значение этого параметра, тем выше приоритет маршрута.

    ip prefix-list TEST1_IN seq 5 permit 120.0.0.0/24
    
    ip prefix-list TEST2_IN seq 5 permit 103.0.0.0/22
    
    route-map BGP1_IN permit 10
    match ip address prefix-list TEST1_IN
    set local-preference 50
    
    route-map BGP1_IN permit 20
    set local-preference 100
    
    route-map BGP2_IN permit 10
    match ip address prefix-list TEST2_IN
    set local-preference 50
    route-map BGP2_IN permit 20
    set local-preference 100
    router bgp 64500
    neighbor 101.0.0.1 route-map BGP2_IN in
    neighbor 102.0.0.1 route-map BGP1_IN in
    

    prefix-list, которым выделили подсеть 120.0.0.0/24. Permit означает, что на этот префикс в будущем будут действовать правила route-map. Как и в обычных ACL далее идёт неявное правило deny для всего остального. В данном случае оно означает, что под действие route-map подпадёт только 120.0.0.0/24 и ничего другого.

    В созданной карте маршрутов BGP1_IN мы разрешили прохождение маршрутной информации (permit), подпадающей под созданный prefix-list (match ip address prefix-list TEST1_IN). Для этих анонсов установим local preference в 50 – ниже, чем стандартные 100 (set local-preferеnce 50). То есть они будут менее «интересными».

    И в конечном итоге привяжем карту к конкретному BGP-соседу (neighbor 102.0.0.1 route-map BGP1_IN in).

    Что же получается в результате?

    Конфигурация устройств

    Другие примеры рассмотрим в следующем разделе.


    Задача №4
    Схема: Общая схема сети
    Условие: ЛинкМиАп получает Full View от обоих провайдеров.
    Тема: Поиск неисправностей.

    От провайдеров: полная таблица маршрутов BGP

    На маршрутизаторе msk-arbat-gw1 настроено распределение исходящего трафика между провайдерами Балаган Телеком и Филькин Сертификат. Трафик идущий в сети провайдера Филькин Сертификат, должен идти через него, если он доступен. Остальной исходящий трафик, должен передаваться через провайдера Балаган Телеком, когда он доступен.

    При проверке исходящего трафика, оказалось, что при отключении Балаган Телеком, исходящий трафик к ЦОД (103.0.0.1) не идет через Филькин Сертификат.

    Задание:
    Исправить настройки так, чтобы исходящий трафик в сети провайдера ISP2, к его клиенту и в сеть удаленного офиса компании, шел через провайдера ISP2.

    Подробности задачи и конфигурация тут


    Балансировка и распределение нагрузки

    “А какие вы знаете способы балансировки трафика в BGP?”

    Это вопрос, который любят задавать на собеседованиях.

    Начиная готовиться к этой статьей, я имел разговор с нашей Наташей, из которого стало понятно, что в BGP балансировка и распределение – это две большие разницы.

    Рассматриваемое дальше разделение условно и существуют альтернативные взгляды.

    Балансировка нагрузки

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

    Включается она просто

    router bgp 100
    maximum-paths 2
    

    При этом должны выполняться следующие условия:

    • Не менее двух маршрутов в таблице BGP для этой сети.
    • Оба маршрута идут через одного провайдера
    • Параметры Weight, Local Preference, AS-Path, Origin, MED, метрика IGP совпадают.
    • Параметр Next Hop должен быть разным для двух маршрутов.

    Последнее условие обходится скрытой командой

    router bgp 64500
    bgp bestpath as-path multipath-relax
    

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

    Как мы можем проверить это на нашей сети? Нам ведь нужно убедиться, что балансировка работает.

    Балансировка обычно осуществляется на базе потоков (IP-адрес/порт отправителя и IP-адрес/порт получателя), чтобы пакеты приходили в правильном порядке. Поэтому нам нужно создать два потока. Нет ничего проще:

    1) ping непосредственно с msk-arbat-gw1 на 103.0.0.1

    2) подключаемся телнетом на msk-arbat-gw1 (не забыв настроить параметры) с любого другого маршрутизатора и запускаем пинг с указанием источника (чтобы потоки чем-то отличались друг от друга)

    После этого один пинг пойдёт через один линк, а второй через другой. Проверено

    По умолчанию никак не учитывается пропускная способность внешних каналов. Такая возможность однако реализована и запускается командами

    router bgp 64500
    bgp dmzlink-bw
    neighbor 101.0.0.1 dmzlink-bw
    neighbor 102.0.0.1 dmzlink-bw
    

    Конфигурация устройств


    Задача №5
    Схема: Общая схема сети
    Условие: ЛинкМиАп получает от обоих провайдеров маршрут по умолчанию.
    Задание:
    Настроить балансировку исходящего трафика между маршрутами по умолчанию от провайдеров Балаган Телеком и Филькин Сертификат в пропорции 3 к 1.
    Подробности задачи тут


    Распределение нагрузки

    Совсем другая песня с распределением – это более тонкая настройка путей исходящего и входящего трафика.

    Исходящий

    Исходящий трафик направляется в соответствии с маршрутами, полученными свыше.

    Соответственно ими и надо управлять.

    Напомним схему нашей сети

    Итак, есть следующие способы:

    1. Настройка Weight. Это цисковский внутренний параметр – никуда не передаётся – работает в пределах маршрутизатора. У других вендоров тоже часто бывают аналоги (например, PreVal у Huawei). Тут ничего специфического – не будем даже останавливаться. (по умолчанию – 0)

      Применение ко всем маршрутам полученным от соседа:

      neighbor 192.168.1.1 weight 500
      

      Применение через route-map:

      route-map SET_WEIGHT permit 10
      set weight 500
      !
      router bgp 64500
      neighbor 102.0.0.1 route-map SET_WEIGHT in
      

    2. Local Preference. Это параметр стандартный. По умолчанию 100 для всех маршрутов. Если вы хотите трафик на определённые подсети направлять в определённые линки, то Local Preference незаменим.

      Выше мы уже рассматривали пример использования данного параметра.

    3. Вышеуказанная балансировка командой maximum-paths.

    Задача №6
    Схема: Общая схема сети
    Условие: ЛинкМиАп получает Full View от обоих провайдеров.
    Задание:
    Не используя атрибуты weight, local preference или фильтрацию, настроить маршрутизатор msk-arbat-gw1 так, чтобы для исходящего трафика Балаган Телеком был основным, а Филькин Сертификат резервным.

    Подробности задачи тут


    Входящий

    Тут всё сложно.

    Дело в том, что даже у крупных провайдеров исходящий трафик незначителен в сравнении со входящим. И там так остро не замечается неровное распределение.

    Зато если речь идёт о Центрах Обработки Данных или хостинг-провайдерах, то ситуация обратная и вопрос балансировки стоит очень остро.

    Тут мы крайне стеснены в средствах:

    1) AS-Path Prepend

    Один из самых частых приёмов – “ухудшение” пути. Нередко бывает так, что через одного провайдера ваши маршруты будут переданы с длиной AS-path больше, чем через другого. Разумеется, BGP выбирает первого, безапелляционно, и только через него будет передавать трафик. Чтобы выровнять ситуацию при анонсировании маршрутов можно добавить лишний “хоп” в AS-Path.

    А бывает такая ситуация, что один провайдер предоставляет более широкий канал за небольшие деньги, но при этом путь через него длиннее и весь трафик уходит в другой – дорогой и узкий. Нам эта ситуация невыгодна и мы бы хотели, чтобы узкий канал стал резервным.

    Вот её и разберём. Но придётся взять совершенно вырожденную ситуацию. К примеру, доступ из Балаган Телекома к сети ЛикМиАп.

    Вот так выглядит таблица BGP и маршрутизации на провайдере Балаган Телеком в обычной ситуации:

    Если мы хотим ухудшить основной путь (прямой линк между ними), то нужно добавить AS в список AS-Path:

    router bgp 64500
    neighbor 101.0.0.1 route-map AS_PATH_PREP out
    
    route-map AS_PATH_PREP permit 10
    set as-path prepend 64500 64500
    

    Тогда выглядеть картинка будет так

    Разумеется, выбирается путь с меньшей длиной AS-Path, то есть через Филькин Сертификат (AS6502)

    Этот маршрут и добавится в таблицу маршрутизации.

    Заметим, что обычно в AS-Path добавляют именно свой номер AS. Можно, конечно, и чужую, но вас не поймут в приличном обществе.
    Таким образом мы добились того, что трафик пойдёт намеченным нами путём.

    Естественно, при падении одного из каналов трафик переключится на второй, независимо от настроенных AS-Path Prepend’ов.

    Конфигурация устройств.

    2) MED

    Multiexit Discriminator. В cisco он называется метрикой (Inter-AS метрика). MED является слабым атрибутом. Слабым, потому что он проверяется лишь на шестом шаге при выборе маршрута и оказывает по сути слабое влияние.

    Если Local Preference влияет на выбор пути выхода трафика из Автономной системы, то MED передаётся в соседние AS и таким образом влияет на пути входа трафика.

    Вообще MED и Local Preference часто путают новички, поэтому опишем в табличке разницу

    Local Preference MED
    Определяет приоритет пути для выхода трафика Определяет приоритет пути для входа трафика
    Действует только внутри AS. Никак не передаётся в другие AS Передаётся в другие AS и намекает через какой путь передавать трафик предпочтительнее
    Может работать при подключении к разным AS Работает только при нескольких подключениях к одной AS
    Чем больше значение, тем выше приоритет Чем больше значение, тем ниже приоритет

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

    3) Анонс разных префиксов через разных ISP

    Ещё один способ распределить нагрузку – раздавать разные сети разным провайдерам.

    Сейчас в сети ЦОДа наши анонсы выглядят так:

    То есть наша сеть 100.0.0.0/23 известна через два пути, но в таблицу маршрутизации добавится только один. Соответственно и весь трафик назад пойдёт одним – лучшим путём.

    Но!

    Мы можем разделить её на две подсети /24 и одну отдавать в Балаган Телеком, а другую в Филькин Сертификат.
    Соответственно ЦОД будет знать про эти подсети через разные пути:

    Настраивается это так.

    Во-первых, мы прописываем все свои подсети – все 3: одну большую /23 и две маленькие /24:

    router bgp 64500
    network 100.0.0.0 mask 255.255.254.0
    network 100.0.0.0 mask 255.255.255.0
    network 100.0.1.0 mask 255.255.255.0
    

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

    ip route 100.0.0.0 255.255.254.0 Null0
    ip route 100.0.0.0 255.255.255.0 Null0
    ip route 100.0.1.0 255.255.255.0 Null0
    

    А теперь создаём префикс-листы, которые разрешают каждый только одну подсеть /24 и общую /23.

    ip prefix-list LIST_OUT1 seq 5 permit 100.0.0.0/24
    ip prefix-list LIST_OUT1 seq 10 permit 100.0.0.0/23
    ! 
    ip prefix-list LIST_OUT2 seq 5 permit 100.0.1.0/24
    ip prefix-list LIST_OUT2 seq 10 permit 100.0.0.0/23
    

    Осталось привязать префикс-листы к соседям.

    router bgp 64500
    neighbor 101.0.0.1 remote-as 64501
    neighbor 101.0.0.1 prefix-list LIST_OUT1 out
    neighbor 102.0.0.1 remote-as 64502
    neighbor 102.0.0.1 prefix-list LIST_OUT2 out
    

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

    Итак, соседу 101.0.0.1 (Балаган Телеком) мы будем анонсировать сети 100.0.0.0/24 и 100.0.0.0/23.

    А соседу 102.0.0.1 (Филькин Сертификат) – сети 100.0.1.0/24 и 100.0.0.0/23.

    Результат будет таким:

    Вроде бы, неправильно, потому что у нас по два маршрута в каждую сеть /24 – через Балаган Телеком и через Филькин Сертификат.

    Но если приглядеться, то вы увидите, что согласно AS-Path у нас такие маршруты:

    То есть, по сути всё правильно. Да и в таблицу маршрутизации всё помещается правильно:

    Теперь осталось ответить на вопрос какого лешего мы тащили за собой большую подсеть /23? Ведь согласно правилу Longest prefix match более точные маршруты предпочтительней, то есть /23, как бы и не нужен, когда есть /24.

    Но вообразим себе ситуацию, когда падает сеть Балаган Телеком. Что при этом произойдёт

    Существуют также специальные организации, которые отслеживают анонсы BGP в Интернете и, если вдруг происходит что-то неожиданное, может уведомить владельца сети. Подсеть 100.0.0.0/24 перестанет быть известной в интернете – ведь только Балаган Телеком что-то знал о ней благодаря нашей настройке. Соответственно, ляжет и часть нашей сети. Но! Нас спасает более общий маршрут 100.0.0.0/23. Филькин Сертификат знает о нём и анонсирует его в Интернет. Соответственно, хоть ЦОД и не знает про сеть 100.0.0.0/24, он знает про 100.0.0.0/23 и пустит трафик в сторону Филькина Сертификата.

    То есть, слава Лейбницу, мы застрахованы от такой ситуации.

    Надо иметь ввиду, что помимо настройки маршрутизатора вам придётся завести все три сети в базе данных RIPE. Там должны быть и обе сети /24 и сеть /23.

    Конфигурация устройств

    4) BGP Community

    C помощью BGP Community можно давать провайдеру указания, что делать с префиксом, кому передавать, кому нет, какой local preference у себя ставить и т.д. Рассматривать этот вариант сейчас не будем, потому что тему коммьюнити мы перенесём в следующий выпуск.


    Задача №7
    Схема: Общая схема сети
    Условие: На маршрутизаторе msk-arbat-gw1 настроено управление входящим и исходящим трафиком. Основной провайдер Балаган Телеком, резервый – Филькин Сертификат. При проверке настроек оказалось, что исходящий трафик передается правильно. При проверке входящего трафика, оказалось, что входящий трафик идет и через провайдера Балаган Телеком, но когда отключается Балаган Телеком, входящий трафик не идет через Филькин Сертификат.
    Задание: Исправить настройки.

    Подробности задачи и конфигурация тут


    PBR

    Все технологии маршрутизации, которые мы применяли до этого момента в наших статьях, будь то статическая маршрутизация, динамическая маршрутизация (IGP или EGP), в своей работе принимали во внимание только один признак пакета: адрес назначения. Все они, упрощенно, действовали по одному принципу: смотрели, куда идет пакет, находили в таблице маршрутизации наиболее специфичный маршрут до пункта назначения (longest match), и переправляли пакет в тот интерфейс, который был записан в таблице напротив этого самого маршрута. В этом, в общем-то, и состоит суть маршрутизации. А что, если такой порядок вещей нас не устраивает? Что, если мы хотим маршрутизировать пакет, отталкиваясь от адреса источника? Или нам нужно мальчики HTTP направо, девочки SNMP налево?

    В такой ситуации нам приходит на помощь маршрутизация на базе политик ака PBR (Policy based routing). Эта технология позволяет нам управлять трафиком, базируясь на следующих признаках пакета:

    • Адрес источника (или комбинация адрес источника-адрес получателя)
    • Информация 7 уровня (приложений) OSI
    • Интерфейс, в который пришел пакет
    • QoS-метки
    • Вообще говоря, любая информация, используемая в extended-ACL (порт источника\получателя, протокол и прочее, в любых комбинациях). Т.е. если мы можем выделить интересующий нас трафик с помощью расширенного ACL, мы сможем его смаршрутизировать, как нам будет угодно.

    Плюсы использования PBR очевидны: невероятная гибкость маршрутизации. Но и минусы тоже присутствуют:

    • Все нужно писать руками, отсюда много работы и риск ошибки
    • Производительность. На большинстве железок PBR работает медленнее, чем обычный роутинг (исключение составляют каталисты 6500, к ним есть супервайзер с железной поддержкой PBR)

    Политика, на основе которой осуществляется PBR, создается командой route map POLICY_NAME, и содержит два раздела:

    • Выделение нужного трафика. Осуществляется либо с помощью ACL, либо в зависимости от интерфейса, в который трафик пришел. За это отвечает команда match в режиме конфигурации route map
    • Применение действия к этому трафику. За это отвечает команда set

    Немного практики для закрепления
    Имеем вот такую топологию:

    В данный момент трафик R1-R5 и обратно идет по маршруту R1-R2-R4-R5, для удобства, адреса присвоены так, чтобы последняя цифра адреса была номером маршрутизатора:

    R1#traceroute 192.168.100.5
    1 192.168.0.2 20 msec 36 msec 20 msec
    2 192.168.2.4 40 msec 44 msec 16 msec
    3 192.168.100.5 56 msec * 84 msec

    R5#traceroute 192.168.0.1
    1 192.168.100.4 56 msec 40 msec 8 msec
    2 192.168.2.2 20 msec 24 msec 16 msec
    3 192.168.0.1 64 msec * 84 msec

    Для примера, предположим, что нам нужно, чтобы обратно трафик от R5 (с его адресом в источнике) шел по маршруту R5-R4-R3-R1. По схеме очевидно, что решение об этом должен принимать R4. На нем сначала создаем ACL, который отбирает нужные нам пакеты:

    R4(config)#access-list 100 permit ip host 192.168.100.5 any
    

    Затем создаем политику маршрутизации с именем “BACK”:

    R4(config)#route-map BACK
    

    Внутри нее говорим, какой трафик нас интересует:

    R4(config-route-map)#match ip address 100
    

    И что с ним делать:

    R4(config-route-map)#set ip next-hop 192.168.3.3
    

    После чего заходим на интерфейс, который смотрит в сторону R5 (PBR работает с входящим трафиком!) и применяем на нем полученную политику:

    R4(config)#int fa1/0
    R4(config-if)#ip policy route-map BACK
    

    Проверяем:

    R5#traceroute 192.168.0.1
    1 192.168.100.4 40 msec 40 msec 16 msec
    2 192.168.3.3 52 msec 52 msec 44 msec
    3 192.168.1.1 56 msec * 68 msec

    Работает! А теперь посмотрим внимательно на схему и подумаем: все ли хорошо?

    А вот и нет!

    Следуя данному ACL, у нас заворачивается на R3 весь трафик с источником R5. А это значит, что если, например, R5 захочет попасть на R2, он, вместо короткого и очевидного маршрута R5-R4-R2, будет послан по маршруту R5-R4-R3-R1-R2. Поэтому, нужно очень аккуратно и вдумчиво составлять ACL для PBR, делая его максимально специфичным.

    В этом примере мы в качестве действия, применяемого к трафику, выбрали переопределение некстхопа (узла сети, куда дальше отправится пакет). А что еще можно сделать с помощью PBR? Имеются в наличие команды:

    • set ip next-hop
    • set interface
    • set ip default next-hop
    • set default interface

    С первыми двумя все относительно понятно – они переопределяют некстхоп и интерфейс, из которого пакет будет выходить (чаще всего set interface применяется для point-to-point линков). А в случае, если мы применяем команды set ip default next-hop или set default interface, роутер сначала смотрит таблицу маршрутизации, и, если там имеется маршрут для проверяемого пакет, отправляет его соответственно таблице. Если маршрута нет, пакет отправляется, как сказано в политике. К примеру, если бы мы в нашей топологии вместо set ip next-hop 192.168.3.3 скомандовали set ip default next-hop 192.168.3.3, ничего бы не поменялось, так как у R4 есть маршрут к R1 (через R2). Но если бы он отсутствовал, трафик направлялся бы к R3.

    Вообще говоря, с помощью команды set можно изменять очень много в подопытном пакете: начиная от меток QoS или MPLS и заканчивая атрибутами BGP


    Задача №8
    Условие: ЛинкМиАп использует статические маршруты к провайдерам (не BGP).

    Схема и конфигурация. Маршрутизаторы провайдеров также не используют BGP.

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

    Маршрут по умолчанию к Балаган Телеком должен использоваться до тех пор, пока приходят icmp-ответы на пинг google (103.0.0.10) ИЛИ yandex (103.0.0.20). Запросы должны отправляться через Балаган Телеком. Если ни один из указанных ресурсов не отвечает, маршрут по умолчанию должен переключиться на провайдера Филькин Сертификат. Для того чтобы переключение не происходило из-за временной потери отдельных icmp-ответов, необходимо установить задержку переключения, как минимум, 5 секунд.

    Подробности задачи тут


    IP SLA

    А теперь самое вкусное: представим, что в нашей схеме основной путь R4-R2-R1 обслуживает один провайдер, а запасной R4-R3-R1 – другой. Иногда у первого провайдера бывают проблемы с нагрузкой, которые приводят к тому, что наш голосовой трафик начинает страдать. При этом, другой маршрут не нагружен и хорошо бы в этот момент перенести голос на него. Ок, пишем роут-мап, как мы делали выше, который выделяет голосовой трафик и направляем его через нормально работающего провайдера. А тут – оп, ситуация поменялась на противоположную – опять надо менять все обратно. Будни техподдержки: “И такая дребедень целый день: то тюлень позвонит, то олень”. А вот бы было круто, если можно было бы отслеживать нужные нам характеристики основного канала (например, задержку или джиттер), и в, зависимости от их значения, автоматически направлять голос или видео по основному или резервному каналу, да? Так вот, чудеса бывают. В нашем случае чудо называется IP SLA.

    Эта технология, по сути, есть активный мониторинг сети, т.е. генерирование некоего трафика с целью оценить ту или иную характеристику сети. Но мониторингом все не заканчивается – роутер может, используя полученные данные, влиять на принятие решений по маршрутизации, таким образом реагируя и разрешая проблему. К примеру, разгружать занятой канал, распределяя нагрузку по другим.

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

    R4(config)#ip sla 1
    

    Так-с, что мы тут можем мониторить?

    R4(config-ip-sla)#? IP SLAs entry configuration commands:
    dhcp DHCP Operation
    dns DNS Query Operation
    exit Exit Operation Configuration
    frame-relay Frame-relay Operation
    ftp FTP Operation
    http HTTP Operation
    icmp-echo ICMP Echo Operation
    icmp-jitter ICMP Jitter Operation
    mpls MPLS Operation
    path-echo Path Discovered ICMP Echo Operation
    path-jitter Path Discovered ICMP Jitter Operation
    slm SLM Operation
    tcp-connect TCP Connect Operation
    udp-echo UDP Echo Operation
    udp-jitter UDP Jitter Operation
    voip Voice Over IP Operation

    Нужно сказать, что синтаксис команд, относящихся к IP SLA, претерпел некоторые изменения: начиная с IOS 12.4(4)T он такой, как в статье, до этого некоторые команды писались по другому. Например, вместо ip sla 1 было rtr 1 или вместо ip sla responder – rtr responder

    Как видите, список внушительный, поэтому останавливаться не будем, для интересующихся есть подробная статья на циско.ком.


    Задача №9
    Схема и конфигурация. Маршрутизаторы провайдеров также не используют BGP.
    Задание:
    Настроить маршрутизацию таким образом, чтобы HTTP-трафик из локальной сети 10.0.1.0 шел через Балаган Телеком, а весь трафик из сети 10.0.2.0 через Филькин Сертификат. Если в адресе отправителя фигурирует любой другой адрес, трафик должен быть отброшен, а не маршрутизироваться по стандартной таблице маршрутизации (задание надо выполнить не используя фильтрацию с помощью ACL, примененных на интерфейсе).

    Дополнительное условие: Правила PBR должны работать так только если соответствующий провайдер доступен (в данной задаче достаточно проверки доступности ближайшего устройства провайдера). Иначе должна использоваться стандартная таблица маршрутизации.

    Подробности задачи тут


    Обычно, работу IP SLA рассматривают на простейшем примере icmp-echo. То есть, в случае, если мы можем пинговать тот конец линии, трафик идет по ней, если не можем – по другой. Но мы пойдем путем чуть посложнее. Итак, нас интересуют характеристики канала, важные для голосового трафика, например, джиттер. Конкретнее, udp-jitter, поэтому пишем

    R4(config-ip-sla)#udp-jitter 192.168.200.1 55555
    

    В этой команде после указания вида проверки (udp-jitter) идет ip адрес, куда будут отсылаться пробы (т.е. меряем от нас до 192.168.200.1 – это лупбек на R1) и порт (от балды 55555). Затем можно настроить частоту проверок (по умолчанию 60 секунд):

    R4(config-ip-sla-jitter)#frequency 10
    

    и предельное значение, при превышении которого объект ip sla 1 рапортует о недоступности:

    R4(config-ip-sla-jitter)#threshold 10
    

    Некоторые виды измерений в IP SLA требуют наличия “на той стороне” так называемого “ответчика” (responder), некоторые (например, FTP, HTTP, DHCP, DNS) нет. Наш udp-jitter требует, поэтому, прежде чем запускать измерения, нужно подготовить R1:

    R1(config)#ip sla responder
    

    Теперь нам нужно запустить сбор статистики. Командуем

    R4(config)#ip sla schedule 1 start-time now life forever
    

    Т.е. запускаем объект мониторинга 1 прямо сейчас и до конца дней.

    Мы не можем менять параметры объекта, если запущен сбор статистики. Т.е. чтобы поменять, например, частоту проб, нам нужно сначала выключить сбор информации с него: no ip sla schedule 1

    Теперь уже можем посмотреть, что у нас там собирается:

    R4#sh ip sla statistics 1
    Round Trip Time (RTT) for Index 1
    Latest RTT: 36 milliseconds
    Latest operation start time: *00:39:01.531 UTC Fri Mar 1 2002
    Latest operation return code: OK
    RTT Values:
    Number Of RTT: 10 RTT Min/Avg/Max: 19/36/52 milliseconds
    Latency one-way time:
    Number of Latency one-way Samples: 0
    Source to Destination Latency one way Min/Avg/Max: 0/0/0 milliseconds
    Destination to Source Latency one way Min/Avg/Max: 0/0/0 milliseconds
    Jitter Time:
    Number of SD Jitter Samples: 9
    Number of DS Jitter Samples: 9
    Source to Destination Jitter Min/Avg/Max: 0/5/20 milliseconds
    Destination to Source Jitter Min/Avg/Max: 0/16/28 milliseconds
    Packet Loss Values:
    Loss Source to Destination: 0 Loss Destination to Source: 0
    Out Of Sequence: 0 Tail Drop: 0
    Packet Late Arrival: 0 Packet Skipped: 0
    Voice Score Values:
    Calculated Planning Impairment Factor (ICPIF): 0
    Mean Opinion Score (MOS): 0
    Number of successes: 12
    Number of failures: 0
    Operation time to live: Forever

    а также что мы там наконфигурировали

    R4#sh ip sla conf
    IP SLAs Infrastructure Engine-II
    Entry number: 1
    Owner:
    Tag:
    Type of operation to perform: udp-jitter
    Target address/Source address: 192.168.200.1/0.0.0.0
    Target port/Source port: 55555/0
    Request size (ARR data portion): 32
    Operation timeout (milliseconds): 5000
    Packet Interval (milliseconds)/Number of packets: 20/10
    Type Of Service parameters: 0x0
    Verify data: No
    Vrf Name:
    Control Packets: enabled
    Schedule:
    Operation frequency (seconds): 10 (not considered if randomly scheduled)
    Next Scheduled Start Time: Pending trigger
    Group Scheduled: FALSE
    Randomly Scheduled: FALSE
    Life (seconds): 3600
    Entry Ageout (seconds): never
    Recurring (Starting Everyday): FALSE
    Status of entry (SNMP RowStatus): Active
    Threshold (milliseconds): 10
    Distribution Statistics:
    Number of statistic hours kept: 2
    Number of statistic distribution buckets kept: 1
    Statistic distribution interval (milliseconds): 4294967295
    Enhanced History:

    Теперь настраиваем так называемый track (неправильный, но понятный перевод “отслеживатель”). Именно к его состоянию привязываются впоследствии действия в роут-мапе. В track можно выставить задержку переключения между состояниями, что позволяет решить проблему, когда у нас по одной неудачной пробе меняется маршрутизация, а по следующей, уже удачной, меняется обратно. Указываем номер track и к какому номеру объекта ip sla мы его подключаем (rtr 1):

    R4(config)#track 1 rtr 1
    

    Настраиваем задержку:

    R4(config-track)#delay up 10 down 15
    

    Это означает: если объект мониторинга упал и не поднялся в течение 15 секунд, переводим track в состояние down. Если объект был в состоянии down, но поднялся и находится в поднятом состоянии хотя бы 10 секунд, переводим track в состояние up.

    Следующим действием нам нужно привязать track к нашей роут-мапе. Напомню, стандартный путь от R5 к R1 идет через R2, но у нас имеется роут-мапа BACK, переназначающая стандартное положение вещей в случае, если источник R5:

    R4#sh run | sec route-map
    ip policy route-map BACK
    route-map BACK permit 10
    match ip address 100
    set ip next-hop 192.168.3.3

    Если мы привяжем наш мониторинг к этой мапе, заменив команду set ip next-hop 192.168.3.3 на set ip next-hop verify-availability 192.168.3.3 10 track 1, получим обратный нужному эффект: в случае падения трека (из-за превышения показателя джиттера в sla 1), мапа не будет отрабатываться (все будет идти согласно таблице маршрутизации), и наоборот, в случае нормальных значений, трек будет up, и трафик будет идти через R3.

    Как это работает: роутер видит, что пакет подпадает под условия match, но потом не сразу делает set, как в предыдущем примере с PBR, а промежуточным действием проверяет сначала состояние трека 1, а затем, если он поднят (up), уже делается set, если нет – переходит к следующей строчке роут-мапы.

    Для того, чтобы наша мапа заработала, как надо, нам нужно как-то инвертировать значение трека, т.е. когда джиттер большой, наш трек должен быть UP, и наоборот. В этом нам поможет такая штука, как track list. В IP SLA существует возможность объединять в треке список других треков (которые, по сути, выдают на выходе 1 или 0) и производить над ними логические операции OR или AND, а результатом этих операций будет состояние этого трека. Кроме этого, мы можем применить логическое отрицание к состоянию трека. Создаем трек-лист:

    R4(config)#track 2 list boolean or

    Единственным в этом “списке” будет логическое отрицание значения трека 1:

    R4(config-track)#object 1 not
    

    Теперь привязываем роут-мап к этому треку

    R4(config)#route-map BACK
    R4(config-route-map)#no set ip next-hop 192.168.3.3
    R4(config-route-map)#set ip next-hop verify-availability 192.168.3.3 10 tr 2
    

    Цифра 10 после адреса некстхопа – это его порядковый номер (sequence number). Мы можем, к примеру, использовать его так:

    route-map BACK permit 10
    match ip address 100
    set ip next-hop verify-availability 192.168.3.3 10 track 1
    set ip next-hop verify-availability 192.168.2.2 20 track 2
    

    Тут такая логика: выбираем трафик, подпадающий под ACL 100, затем идет промежуточная проверка track 1, если он up, ставим пакету некстхоп 192.168.3.3, если down, переходим к следующему порядковому номеру (20 в данном случае), опять же промежуточно проверяем состояние трека (уже другого, 2), в зависимости от результата, ставим некстхоп 192.168.2.2 или отправляем с миром (маршрутизироваться на общих основаниях).

    Давайте теперь немножко словами порассуждаем, что же мы такое накрутили: итак, измерения джиттера у нас идут от источника R4 к респондеру R1 по маршруту через R2. Максимальное допустимое значение джиттера на этом маршруте у нас – 10. В случае, если джиттер превышает это значение и держится на этом уровне 15 секунд, мы переключаем трафик, генерируемый R5, на маршрут через R3. Если джиттер падает ниже 10 и держится там минимум 10 секунд, пускаем трафик от R5 по стандартному маршруту. Попробуйте для закрепления материала найти, в каких командах задаются все эти значения.

    Итак, мы достигли цели: теперь, в случае ухудшения качества основного канала (ну, по крайней мере, значений udp-джиттера), мы переходим на резервный. Но что, если и там тоже не очень? Может, попробуем с помощью IP SLA решить и эту проблему?

    Попробуем выстроить логику того, что мы хотим сделать. Мы хотим перед переключением на резервный канал проверять, как у нас обстоит дело с джиттером на нем. Для этого нам нужно завести дополнительный объект мониторинга, который будет считать джиттер на пути R4-R3-R1, пусть это будет 2. Сделаем его аналогичным первому, с теми же значениями. Условием переключения на резервный канал тогда будет: объект 1 down И объект 2 up. Чтобы измерять джиттер не по основному каналу, придется пойти на хитрость: сделать loopback-интерфейсы на R1 и R4, прописать статические маршруты через R3 туда-обратно, и использовать эти адреса для объекта SLA 2.

    R1(config)#int lo1
    R1(config-if)#ip add 192.168.30.1 255.255.255.0
    R1(config-if)#exit
    R1(config)#ip route 192.168.31.0 255.255.255.0 192.168.1.3
    
    R3(config)#ip route 192.168.30.0 255.255.255.0 192.168.1.1
    R3(config)#ip route 192.168.31.0 255.255.255.0 192.168.3.4
    
    R4(config)#int lo0
    R4(config-if)#ip add 192.168.31.4 255.255.255.0
    R4(config-ip-sla-jitter)#exit
    R4(config)#ip sla 2
    R4(config-ip-sla)#udp-jitter 192.168.30.1 55555 source-ip 192.168.31.4
    R4(config-ip-sla-jitter)#threshold 10
    R4(config-ip-sla-jitter)#frequency 10
    R4(config-ip-sla-jitter)#exit
    R4(config)#ip route 192.168.30.0 255.255.255.0 192.168.3.3
    R4(config)#ip sla schedule 2 start-time now life forever
    R4(config)#track 3 rtr 2
    

    Теперь меняем условие трека 2, к которому привязана роут-мапа:

    R4(config)#track 2 list boolean and
    R4(config-track)#object 1 not
    R4(config-track)#object 3
    

    Вуаля, теперь трафик R5->R1 переключается на запасной маршрут только в том случае, если джиттер основного канала больше 10 и, в это же время, джиттер запасного меньше 10. В случае, если высокий джиттер наблюдается на обоих каналах, трафик идет по основному и молча страдает.

    Состояние трека можно привязать также к статическому маршруту: например, мы можем командой ip route 0.0.0.0 0.0.0.0 192.168.1.1 track 1 сделать шлюзом по умолчанию 192.168.1.1, который будет связан с треком 1 (который, в свою очередь, может проверять наличие этого самого 192.168.1.1 в сети или измерять какие-нибудь важные характеристики качества связи с ним). В случае, если связанный трек падает, маршрут убирается из таблицы маршрутизации.

    Также будет полезным упомянуть, что информацию, получаемую через IP SLA, можно вытащить через SNMP, чтобы потом можно было ее хранить и анализировать где-нибудь в вашей системе мониторинга. Можно даже настроить SNMP-traps.


    Задача №10
    Схема: как и для других задач по PBR. Конфигурация ниже.
    Условие: ЛинкМиАп использует статические маршруты к провайдерам (не BGP).

    На маршрутизаторе msk-arbat-gw1 настроена PBR: HTTP-трафик должен идти через провайдера Филькин Сертификат, а трафик из сети 10.0.2.0 должен идти через Балаган Телеком. Указанный трафик передается правильно, но не маршрутизируется остальной трафик из локальной сети, который должен передаваться через провайдера Балаган Телеком.

    Задание:
    Исправить настройки таким образом, чтобы они соответствовали условиям.

    Подробности задачи и конфигурация тут


    Материалы выпуска

    Конфигурация устройств:

    • Базовый BGP
    • AS-PATH ACL
    • AS-PATH Prepend
    • Load Balancing
    • Load Sharing на основе Prefix List
    • Prefix List
    • Route Map

    Полезные ссылки

    Поредели со временем — пришлось выкинуть бОльшую часть.

    BGP

    • Общее описание
    • LIR, RIR и прочее
    • Описание самых ярких аварий BGP

    IP SLA

    • Параметры IP SLA

    Благодарности

    Статью для вас подготовили eucariot и Gluck. За помощь спасибо JDima. Задачки нам написала несравненная Наташа Самойленко.

    У цикла “Сети для самых маленьких” есть свой сайт: linkmeup.ru, где вы сможете найти все выпуски аккуратно сложенными и готовыми к вдумчивому чтению.


    Авторы

    • eucariot — Марат Сибгатулин (inst, tg, in)
    • Макс Gluck

    Оставайтесь на связи

    Пишите нам: info@linkmeup.ru
    Канал в телеграме: t.me/linkmeup_podcast
    Канал на youtube: youtube.com/c/linkmeup-podcast
    Подкаст доступен в iTunes, Google Подкастах, Яндекс Музыке, Castbox
    Сообщество в вк: vk.com/linkmeup
    Группа в фб: www.facebook.com/linkmeup.sdsm
    Добавить RSS в подкаст-плеер.
    Пообщаться в общем чате в тг: https://t.me/linkmeup_chat

    Поддержите проект:

like

67
views
430928
message
61

61 коментарий

Ещё статьи

Большая уборка в СДСМ

Нам пишут, что половина картинок в статьях СДСМ уже потерялись, потому что хранились на яндекс-фотках, а гифки превратились в тыкву. И я (eucariot) уже думал, что от оформления и иллюстраций …

АДСМ. Заметки. RESTful API

Эта статья — одна из обещанных коротких заметок по ходу АДСМ. Поскольку основным способом взаимодействия с NetBox будет RESTful API, я решил рассказать о нём отдельно. Воздаю хвалы архитекторам современного …

like

531

18507


1

27 января 2020

Анонс telecom №113. gNMI

С АДСМ 5 и 6 мне помогал Роман Додин — инженер Nokia, автор блога netdevops.me и соавтор утилиты gNMIc. И мы с ним договорились, надолго не затягивая, провести подкаст на …

  • Beeline нет интернета через роутер
  • Bssid что это такое в роутере где найти
  • Beok bot 313 wi fi подключение к роутеру
  • Beeline роутер smart box one настройка
  • Beeline прошивка для роутера smart box