Фильтрация маршрутов 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.