Фильтрация маршрутов BGP IPv6

Фильтрация IPv6 в BGP похожа на IPv4 фильтрацию. Есть три метода, которые можно использовать:

  • Prefix-list
  • Filter-list
  • Карты маршрутов Route-map

Постройте следующую схему:

Настройте интерфейсы и протокол BGP на R1:

end
enable
configure
hostname R1
 
ipv6 forwarding enable
 
#Настройка интерфейса
interface 2ge0
ipv6 address 2001:DB8:0:12::1/64
port ge0
service-instance 4ge0
encapsulation untagged
connect ip interface 2ge0
 
#Настройка loopback интерфейсов
interface loopback.0
ipv6 address 2001:DB8:0:1::1/64
interface loopback.1
ipv6 address 2001:DB8:0:11::1/64
interface loopback.2
ipv6 address 2001:DB8:0:111::1/64
interface loopback.3
ipv6 address 2001:DB8:0:1111::1/96
 
#Настройка BGP маршрутизатора
router bgp 1
bgp router-id 1.1.1.1
neighbor 2001:db8:0:12::2 remote-as 2
address-family ipv6
neighbor 2001:db8:0:12::2 activate
network 2001:db8:0:1::/64
network 2001:db8:0:11::/64
network 2001:db8:0:111::/64
network 2001:db8:0:1111::/96

Настройте интерфейсы и протокол BGP на R2:

end
enable
configure
hostname R2
 
ipv6 forwarding enable
 
#Настройка интерфейса
interface 2ge0
ipv6 address 2001:DB8:0:12::2/64
port ge0
service-instance 4ge0
encapsulation untagged
connect ip interface 2ge0
 
#Настройка BGP маршрутизатора
router bgp 2
bgp router-id 2.2.2.2
neighbor 2001:db8:0:12::1 remote-as 1
address-family ipv6
neighbor 2001:db8:0:12::1 activate

Проверьте изучил ли R2 все подсети:

R2#show ipv6 route bgp | begin 2001
B 2001:db8:0:1::/64 [20/0] via fe80::1e87:76ff:fe40:1, 2ge0, 00:00:04
B 2001:db8:0:11::/64 [20/0] via fe80::1e87:76ff:fe40:1, 2ge0, 00:00:04
B 2001:db8:0:111::/64 [20/0] via fe80::1e87:76ff:fe40:1, 2ge0, 00:00:04
B 2001:db8:0:1111::/96 [20/0] via fe80::1e87:76ff:fe40:1, 2ge0, 00:00:04

Отлично, всё что нужно в таблице маршрутизации. Теперь можно поэкспериментировать с фильтрацией.

Фильтрация по спискам префиксов

Начнём со списков префиксов. R1 объявляет одну подсеть с длиной префикса /96. Посмотрим, возможно ли настроить R2 для фильтрации этой сети:

R2(config)#ipv6 prefix-list SMALL_NETWORKS permit 2001::/16 le 64

Этот список префиксов просматривает весь диапазон 2001::/16 и разрешает все подсети с префиксом /64 бит или меньше. Все сети с большей длиной префикса, будут запрещены. Активируйте префиксный список:

R2(config)#router bgp 2
R2(config-router)#address-family ipv6
R2(config-router-af)#neighbor 2001:db8:0:12::1 prefix-list SMALL_NETWORKS in

Мы активируем входящий префикс-лист на маршрутизаторе R2 для всего, что получаем от маршрутизатора R1.

Перезапустите процесс BGP командой clear ip bgp *.

Проверьте R2 исчез ли префикс:

R2#show ipv6 route bgp
IP Route Table for VRF "default"
B  2001:db8:0:1::/64 [20/0] via fe80::1e87:76ff:fe40:1, 2ge0, 00:02:00
B  2001:db8:0:11::/64 [20/0] via fe80::1e87:76ff:fe40:1, 2ge0, 00:02:00
B  2001:db8:0:111::/64 [20/0] via fe80::1e87:76ff:fe40:1, 2ge0, 00:02:00

Здорово, он успешно отфильтрован!

Фильтрация по спискам фильтрации

Настройте список фильтрации (filtet-lists) и используйте его для фильтрации префиксов из определённых автономных систем. У всех префиксов которые объявляет R1, имеет только AS 1 в пути автономных систем. Мы настроим добавление автономной системы, чтобы у нас было с чем поиграться:

R1(config)#ipv6 prefix-list FIRST_LOOPBACK permit 2001:db8:0:1::/64
 
R1(config)#route-map PREPEND permit 10
R1(config-route-map)#match ipv6 address prefix-list FIRST_LOOPBACK
R1(config-route-map)#set as-path prepend 11
R1(config)#route-map PREPEND permit 20
 
R1(config)#router bgp 1
R1(config-router)#address-family ipv6
R1(config-router-af)#neighbor 2001:db8:0:12::2 route-map PREPEND out

Конфигурация выше гарантирует, что всякий раз, когда R1 объявляет префикс 2001:db8:0:1::/64, он добавит AS 11 к пути автономных систем. Проверьте это:

R2#show bgp ipv6
BGP table version is 3, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, 
i - internal, l - labeled   S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
 
    Network         Next Hop        Metric    LocPrf     Weight   Path
*>  2001:db8:0:1::/64
                    2001:db8:0:12::1(fe80::1e87:76ff:fe40:1)
                                       0        100         0     1 11 i
*>  2001:db8:0:11::/64
                    2001:db8:0:12::1(fe80::1e87:76ff:fe40:1)
                                       0        100         0    1 i
*>  2001:db8:0:111::/64
                    2001:db8:0:12::1(fe80::1e87:76ff:fe40:1)
                                       0        100         0    1 i
*>  2001:db8:0:1111::/96
                    2001:db8:0:12::1(fe80::1e87:76ff:fe40:1)
                                       0        100         0    1 i
 
Total number of prefixes 4

Теперь путь в подсеть 2001:db8:0:1::/64 лежит через автономную систему 11.

Теперь настройте filter-list на R2, чтобы избавиться от этой сети.

R2(config)#ip as-path access-list 11 permit ^1$
 
R2(config)#router bgp 2
R2(config-router)#address-family ipv6
R2(config-router-af)#neighbor 2001:db8:0:12::1 filter-list 11 in
 
R2#clear ip bgp *

Список доступа as-path, указанный выше, разрешает только префиксы из AS1 и ничего больше. 11 в данном случае это наименование списка доступа, а ^1$ — регулярное выражение означающее “1”, то есть AS 1. Мы применяем список доступа ко всем входящим пакетам, получаемым от R1.

Вот результат:

R2#show ipv6 route bgp
IP Route Table for VRF "default"
B  2001:db8:0:11::/64 [20/0] via fe80::1e87:76ff:fe40:1, 2ge0, 00:02:00
B  2001:db8:0:111::/64 [20/0] via fe80::1e87:76ff:fe40:1, 2ge0, 00:02:00

Сеть пропала из таблицы маршрутизации, миссия выполнена.

Фильтрация по картам маршрутов

Карты маршрутов (route-maps) крайне полезны и могут быть использованы для сопоставления множества различных вещей. Мы можем использовать список доступа IPv6 в карте маршрутов, чтобы отфильтровать подсеть 2001:DB8:0:11::/64:

R2(config)#ipv6 prefix-list THIRD_LOOPBACK permit 2001:db8:0:11::/64
 
R2(config)#route-map MY_FILTER deny 10
R2(config-route-map)#match ipv6 address prefix-list THIRD_LOOPBACK
R2(config-route-map)#exit
R2(config)#route-map MY_FILTER permit 20
 
R2(config)#router bgp 2
R2(config-router)#address-family ipv6
R2(config-router-af)#neighbor 2001:db8:0:12::1 route-map MY_FILTER in
 
R2#clear ip bgp *

В конфигурации выше задан префикс-лист под названием “THIRD_LOOPBACK” который совпадает с префиксом 2001:db8:0:11::/64, а далее он будет отклонён в маршрутной карте “MY_FILTER”. Последний, но важный момент — следует применить “MY_FILTER” в качестве входного фильтра на R2.

Вот результат:

R2#show ipv6 prefix-list
ipv6 prefix-list THIRD_LOOPBACK: 1 entries
     seq 5 permit 2001:db8:0:11::/64
R2#show ipv6 route bgp
IP Route Table for VRF "default"
B  2001:db8:0:111::/64 [20/0] via fe80::1e87:76ff:fe40:1, 2ge0, 00:10:47

Prefix-list сообщает нам, что совпадение есть, и вы можете видеть, что маршрут исчез из таблицы маршрутизации.

Порядок операций

Разобравшись, как работают prefix-list и route-map для нужд фильтрации префиксов IPv6, вы можете применять всё это одновременно. Взгляните на конфигурацию R2:

R2#show run bgp
!
bgp extended-asn-cap
!
router bgp 2
 bgp router-id 2.2.2.2
 neighbor 2001:db8:0:12::1 remote-as 1
 address-family ipv6 unicast
 neighbor 2001:db8:0:12::1 activate
 neighbor 2001:db8:0:12::1 prefix-list SMALL_NETWORKS in
 neighbor 2001:db8:0:12::1 route-map MY_FILTER in
 neighbor 2001:db8:0:12::1 filter-list 11 in
 exit-address-family
!

В рабочей сети вы, вероятно, не будете использовать все эти методы одновременно. Карта маршрутов — популярный инструмент, поскольку её можно использовать практически для любых целей, например, для фильтрации и добавления пути автономной системы.

Если вы активируете все эти методы одновременно, то в каком порядке маршрутизатор будет обрабатывать эти методы фильтрации? Порядок следующий:

Входящие:

  • Route-map
  • Filter-List
  • Prefix-List

Исходящие:

  • Prefix-List
  • Filter-List
  • Route-Map

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

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

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