Extended ACL и route-filtering

На прошлом экзамене я натолкнулся на занятный вопрос. Предлагалась разрешить к редистрибуции только маршрут по умолчанию и вместо привычного prefix list в вариантах ответа были исключительно расширенные списки контроля доступа (extended ACL).

Откровенно говоря я что-то где-то на эту тему читал, но никогда внимание не акцентировал. В стрессовой ситуации экзамена было сложно отойти от логики списков контроля доступа, разрешающих путь из определенного source в указанный destination. Но тут в памяти удачно всплыл недавний топик на тему применения wildcard mask для фильтрации четных и нечетных сетей и, делать нечего, я взял в руки маркер, доску и начал выписывать нолики с единичками.

Возьмем префикс 10.28.0.0/14 и попробуем разрешить к фильтрации эту радость, а так же длины префиксов от 14 до 24 включительно. Нет проблем, берем prefix list и вперед:

ip prefix-list filter permit 10.28.0.0/14 ge 14 le 24

А что делать если вас просят воспроизвести все это с помощью ACL?

Для начала разберем красную часть с сетью 10.28.0.0 и маской 255.252.0.0. Если бы нам потребовалось написать правило, разрешающее эту сеть, то мы бы просто взяли standart ACL и написали что-то типа

access-list 1 permit 10.28.0.0 0.3.255.255

Wildcard mask при этом в двоичной системе счисления выглядела бы так:

00000000.00000011.11111111.11111111

Ну а от /14 до /24 будут меняться только значения выделенные красным. Если бы стремились разрешить к фильтрации 10.28.0.0/14 сети с помощью ACL (напомню мы пока рассматриваем исключительно красную часть), то extended ACL выглядел бы так:

access-list 100 permit ip host 10.28.0.0 host 255.252.0.0

или

access-list 100 permit ip 10.28.0.0 0.0.0.0 255.252.0.0 0.0.0.0

Вместо логики source и destination мы говорим в ACL: фильтровать конкретно сеть 10.28.0.0 с определенной маской 255.252.0.0. Ведь по логике wildcard маски 0 – это то, что следуют “зафиксировать”, 1 – нам не важно какое значение будет принимать этот бит. Можем поиграться с этими значениями аналогичному тому, как мы вычленяли четные и нечетные сети. Так под ACL

access-list 100 permit ip 10.0.0.0 0.255.0.0 255.252.0.0 0.0.0.0

Попадут все сети, начинающиеся с 10.0.0.0 и имеющие маску /14 – 10.0.0.0/14, …, 10.28.0.0/14, 10.32.0.0/14 и так далее. А под ACL

access-list 100 permit ip 10.0.0.0 0.255.0.0 255.252.0.0 0.3.255.0

еще и длины префиксов начинающиеся с /14 и до /24.

Ну а возвращаясь к первоначальной задаче конкретно префикс 0.0.0.0/0 указывающий на маршрут по умолчанию с помощью extended ACL можно описать как

access-list 100 permit ip host 0.0.0.0 host 0.0.0.0

Extended ACL и distribute list в IGP

Extended ACL обладает логикой prefix list только в BGP и при редистрибуции. В distribute list, применяемых при фильтрации маршрутной информации в IGP логика меняется на следующую: source становится источником маршрута, а destination адресом сети.

Тип Source Destination
Extended ACL Адрес сети источника Адрес сети назначения
Extended ACL в BGP/редистрибуции Адрес сети + гибкие условия на основе wildcard маски Маска сети + гибкие условия на основе wildcard маски
Extended ACL в IGP’s distribute lists Источник маршрутной информации Адрес сети

Например конструкция

access-list 101 permit ip host 1.1.1.1 host 10.100.101.0
router eigrp 1
 distribute-list 101 in

разрешит только сеть 10.100.101.0/24 только от соседа 1.1.1.1 при приеме входящих анонсов.