По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
И Linux и BSD-системы бесплатны и с открытым исходным кодом, они являются Unix-подобными системами. Они зачастую даже используют практически одинаковый софт - у них много общего, и не так много различий. Так зачем тогда плодить сущности, другими словами - почему существует и те, и другие?
Основы
То, что большинство людей называют Линуксом, по сути, не совсем оно. Технически, Linux - это просто ядро Linux, так как типичные дистрибутивы Linux-а являются сборкой из множества кусочков различного софта, поэтому его иногда называют GNU/Linux. Но опять же, множество используемых на нем приложений также используются на BSD.
Как мы уже упомянули во введении, Linux и BSD являются Unix-подобными системами, но у них совершенно разное наследие. Linux был написан Линусом Торвальдсом, когда тот был студентом в Финляндии, а BSD расшифровывается как Berkeley Software Distribution, так как изначально это был пакет модификаций Bell Unix, который, в свою очередь, был создан в Калифорнийском Университете в Беркли. В конце концов, эта сборка эволюционировала в полноценную операционную систему, и теперь по миру ходит много разных BSD.
Ядро против полноценной ОС
Официально, Linux - это просто ядро. Дистрибутивы Линукса должны выполнять работу по сборке всего нужного ПО для создания полноценной операционной системы Линукс для создания того или иного дистрибутива, как например Ubuntu, Mint, Debian, Fedora, Red Hat или Arch - в мире есть огромное количество различных дистрибутивов.
А BSD, в свою очередь, это и ядро, и операционная система. К примеру, FreeBSD предоставляет и ядро FreeBSD и операционную систему FreeBSD, и все это добро обслуживается как единый проект. Другими словами, если вам захочется установить FreeBSD, вы просто сможете это сделать. Если же вы захотите установить себе Линукс, то вам вначале придется выбрать конкретный тип дистрибутива (у них есть большое количество тонкостей, различий и специфики между собой).
БСД системы иначе работают с софтом - они включают в себя ПО в исходном виде, и компьютер должен компилировать их перед запуском. Но, опять же, приложения также можно устанавливать в привычном виде, так что вам не придется тратить время и ресурсы на компиляцию.
Лицензирование
Лицензирование отличается у этих систем очень сильно, что для большинства не будет играть значения, а вот для людей, которые как-то на этом зарабатывают - можно и изучить подробнее. Linux использует GNU GPL, она же “Основная Публичная Лицензия”. Если вы модифицируете ядро Линукса и распространяете его, то вы обязаны также опубликовать исходники кода с вашими модификациями. В случае BSD, которые использует BSD лицензию, это совсем не так - вы ничего не обязаны публиковать, только если сами захотите.
И BSD, и Linux являются так называемыми “Open-source” системами, то есть имеют свободно распространяемый код, но это у них немного по-разному реализовано. Люди часто спорят, какая из этих лицензий является “более свободной”. GPL лицензия помогает конечным пользователям тем, что они всегда смогут найти исходники (это может помочь разобраться в решении и/или как-то доработать его, но ограничивает разработчиков, так как по сути заставляет их публиковать исходники всего того, что они наваяли в своих чертогах разума. Соответственно, на базе BSD разработчики могут создавать проекты с уже закрытым исходным кодом, для увеличения конечной стоимости и проприетарности.
Какие бывают БЗДы
Чаще всего воспринимают три основных типа BSD:
FreeBSD является самой популярной, целится на высокую производительность и удобство использования. Прекрасно работает на стандартных x86 и x64 процессорах от Intel и AMD;
NetBSD предназначена для запуска на чем угодно и поддерживает бесконечное количество разных архитектур. Их лозунг: Конечно, NetBSD работает;
OpenBSD сделана для максимальной безопасности, и не только со стороны ее функций, но и со стороны практик по ее внедрению. Она была спроектирована как операционная система для банков и прочих серьезных структур, у которых есть критические информационные инфраструктуры;
Есть еще две известные BSD системы:
DragonFly BSD была создана с целью использования в мультипоточных средах - к примеру, в кластерах, содержащих в себе большое количество компьютеров;
Mac OS X (вряд ли найдется человек, который не слышал это название) по факту базируется на ОС под названием Darwin, которая в свою очередь базируются на BSD. Она отличается от себе подобных систем: низкоуровневое ядро и прочее ПО является опенсорсным BSD кодом, бОльшая часть операционной системы это закрытый Mac OS код. Apple построила Mac OS и IOS на BSD, чтобы избавиться от необходимости писать низкоуровневую операционную систему, также как Google построила Android на базе Linux;
Зачем выбирать BSD вместо Linux?
Linux все еще гораздо популярнее той же FreeBSD. Как один из примеров, он начинает поддерживать новое железо раньше. По сути, они во многом обратно совместимы и многое ПО работает одинаково.
Если вам уже посчастливилось использовать Linux, то FreeBSD не будет ощущаться чем-то иным. Установите FreeBSD как десктопную ОС и вы будете использовать тот же Gnome или KDE, который вы использовали на Linux. Однако, FreeBSD не установит графическую оболочку автоматически, так что вам самим придется этим заниматься, то есть система является более «олдскульной» в том или ином смысле.
Иногда, FreeBSD может являться предпочтительной ОС на некоторых операционных системах за стабильность и надежность, а некоторые производители устройств могут выбирать BSD из-за отсутствия необходимости публиковать исходный код.
Если вы обычный пользователь десктопа, вам точно будет проще использовать Linux - так как такие операционные системы как Ubuntu или Mint гораздо дружелюбнее к конечному пользователю.
Основная цель любого проекта по разработке ПО – получить прибыль за счет автоматизации бизнес-процессов. Чем быстрее вы начнете выпускать новые версии, тем лучше для компании. Но как же научиться выпускать новые версии максимально быстро? Конечно же, все можно делать вручную. Например, подключить удаленный сервер через SSH, клонировать клонировать репозиторий с новым кодом, собрать его и запустить через командную строку. Да, такой способ работает, но он малоэффективен. Сегодня мы поговорим об автоматизации процесса разработки и выхода новых версий.
CI и CD – это два сокращения, которые означают Continuous Integration (Непрерывная интеграция) и Continuous Delivery (Непрерывное развертывание).
CI
CI описывает процесс добавления изменений в репозиторий. Ниже схематически представлен простой пример коллективной разработки.
Одновременно может работать целая группа людей, но все изменения передаются в главную ветку master поэтапно. Хотя даже в такой простой схеме возникает несколько вопросов.
Как мы узнаем, что код, который идет в ветку master, компилируется?
Мы хотим, чтобы разработчики писали тесты для кода. Как быть уверенными в том, что тестовое покрытие не уменьшится?
Все сотрудники команды должны форматировать код в соответствие с определенным стилем. Как отследить возможные нарушения?
Конечно же, все это можно проверить вручную. Но такой подход весьма хаотичен. Кроме того, по мере разрастания команды выполнять подобные проверки становится сложнее.
CI используется для автоматизации выше обозначенных пунктов.
Начнем с первого пункта. Как можно проверить, что новые изменения не сломают сборку? Для этого нам потребуется еще один блок в схеме.
Большинство CI-процессов можно описать по следующему алгоритму.
При открытии каждого Pull Request (запроса на включение изменений) и отправке новых изменений, Git-сервер отправляет уведомление CI-серверу.
CI-сервер клонирует репозиторий, проверяет исходную ветку (например bugfix/wrong-sorting) и сливает ее с основной веткой master.
Затем запускается скрипт сборки. Например ./gradlew build.
Если команда возвращает код «0», то сборка прошла успешно. Все остальные значения считаются ошибкой.
CI-сервер отправляет запрос на Git-сервер с результатом сборки.
Если сборка прошла без ошибок, то Pull Request разрешается слить. В противном случае он блокируется.
Данный процесс гарантирует, что код, попадающий в ветку master, не сломает дальнейшие сборки.
Проверка тестового покрытия
Давайте немного усложним задачу. Предположим, нам захотелось установить минимальный охват тестового покрытия. Это означает, что в любой момент времени покрытие ветки master должно быть не менее 50%. Плагин Jacoco идеально справляется с этой задачей. Вы просто настраиваете его так, чтобы при охвате тестового покрытия ниже допустимого, сборка уходила в ошибку.
Реализовать такой подход проще некуда. Но есть небольшая оговорка. Этот метод работает только при условии, что плагин настраивался на старте проекта.
Представим ситуацию: вы работаете над проектом, которому уже 5 лет. С момента первого коммита никто не проверял тестовое покрытие. Разработчики добавляли тесты в случайном порядке и без какой-либо организации. Но вот однажды вы решаете увеличить количество тестов. Вы настраиваете плагин Jacoco на минимальную планку в 60%. Спустя какое-то время разработчик открывает новый Pull Request. Затем разработчики вдруг понимают, что покрытие – всего лишь 30%. Так что для успешного закрытия задачи нужно покрыть не менее 30% кода продукта. Как вы можете догадаться, для проекта 5-летней давности – это практически неразрешимая проблема.
Но что, если будут проверяться только будущие изменения в коде, а не весь продукт? Если в Pull Request разработчик изменит 200 строк, то нужно будет охватить не менее 120 из них (при тестовом покрытии в 60%). Тогда не придется проходить по множеству модулей, которые не относятся к задаче. В принципе, проблема решаема. Но как применить все это к проекту? К счастью, есть решение.
Отчет Jacoco отправляется на сервер тестового покрытия.
Одно из самых популярных решений – SonarCloud.
Сервер хранит статистику по предыдущим вычислениям. Это очень удобно: вычислять тестовое покрытие не только всего кода, но и будущих изменений. Затем результат анализа отправляется на CI-сервер, который перенаправляет его на Git-сервер.
Такая рабочая модель позволяет применять культуру обязательного тестирования на любой стадии развития продукта, поскольку проверяется лишь часть изменений.
Если говорить о стиле оформления кода, то отличий практически нет. Можете попробовать плагин Checkstyle. Он автоматически отклоняет сборку, которая нарушает любое из заявленных требований. Например, в коде есть неиспользованный импорт. Кроме того, вы можете присмотреться к облачным сервисам, которые выполняют анализ кода и визуально отображают результаты в виде графиков (SonarCloud это тоже умеет).
CD
CD описывает процесс автоматического развертывания новой версии продукта.
Давайте еще немного подкорректируем схему CI. Вот так конвейерный процесс CI/CD мог бы выглядеть в реальном проекте.
Первое отличие – теперь CI-сервер называется CI/CD-сервером. Дело в том, что зачастую оба процесса (CI и CD) выполняются одним и тем же диспетчером задач. Так что мы будем рассматривать именно этот случай.
Но так бывает не всегда. Например, задачи по интеграции могут делегироваться на GitLab CI, а задачи по доставке – отдаваться в Jenkins.
Правая часть схемы изображает CI. Мы обсудили ее выше. Слева показана CD. Задача по CD создает проект (или повторно использует артефакты, полученные на стадии CI) и развертывает его на конечном сервере.
Стоит отметить, что сервер в нашем случае – это понятие абстрактное. Например, развертывание может выполняться в кластер Kubernetes. Так что самих серверов может быть несколько.
Обычно после стадии развертывания на почту приходят сообщения о выполнении. Например, CD-сервер может уведомлять подписчиков об успешном развертывании/ошибках.
В любом случае, возникает важный вопрос. В какой момент мы должны запускать задачи по CD? Триггеры могут быть разными.
Развертывание после каждого слияния Pull Request.
Развертывание по расписанию.
Развертывание после каждого слияния Pull Request с определенной веткой.
Сочетание нескольких вариантов.
В первом пункте процесс выстроен так, что задачи по CI и CD всегда выполняются последовательно. Данный подход весьма популярен при разработке программ с исходным кодом. Библиотека Semantic Release помогает настроить проект для прозрачной интеграции данной модели.
Важно помнить о трактовке понятия deploy (развертывание). Это не всегда «что-то где-то запустить». Например, при разработке библиотеки, нет никакого запуска. В данном случае процесс развертывания означает выпуск новой версии библиотеки.
Второй пункт не зависит от процесса CI, ведь проект развертывается по определенному расписанию. Например, ежедневно в 01:00.
Третий пункт аналогичен первому, но с небольшими отличиями. Предположим, в репозитории у нас есть 2 основные ветки: develop и master. В develop содержатся самые последние изменения, а в master – только релизы версий. Если мы хотим развертывать только ветку master, то не нужно вызывать CD-задачу по слиянию в develop.
Последний пункт – это сочетание подходов. Например, ветку develop можно развертывать по расписанию в среду разработки. А ветку master – в реальную среду по каждому слиянию Pull Request.
Инструменты
На рынке доступно множество решений по автоматизации процессов CI/CD. Ниже представлено несколько продуктов.
Jenkins. Один из самых востребованных инструментов CI/CD в мире. Свою популярность он заслужил, благодаря политике открытого кода (open-source). То есть вам не нужно ни за что платить. В Jenkins вы можете императивно описывать конвейеры сборки с помощью Groovy. С одной стороны это достаточно гибкое решение, но с другой – требует более высокого уровня квалификации.
GitHub Actions. Этот инструмент для CI/CD доступен для GitHub и GitHub Enterprise. В отличие от Jenkins, GitHub Actions предлагает декларативные сценарии сборки с YAML-конфигурацией. Кроме того, в данном решении доступна интеграция с различными системами обеспечения качества (например SonarCube). Таким образом, сборку можно описать в нескольких текстовых строках.
GitLab CI. Во многом похож на GitHub Actions, но со своими особенностями. Например, GitLab CI может указывать на определенные тесты, вызывающие ошибку в сборке.
Travis CI. Облачный CI/CD-сервис. Предлагает множество возможностей, не требующих сложных настроек. Например, шифрование данных, которые следует скрыть в публичном репозитории. Есть и приятный бонус в том, что Travis CI можно совершенно бесплатно использовать в публичных open-source проектах на GitHub, GitLab и BitBucket.
В этом материале расскажем, как можно фильтровать маршруты, анонсируемые протоколом динамической маршрутизации EIGRP. Данный материал предполагает, что у читателя есть начальные навыки работы с сетью или как минимум знания на уровне CCNA. Поэтому о том, что такое динамическая маршрутизация в этом материале не будет рассказано, так как тема достаточно большая и займет не одну страницу.
Теперь представим, что мы работаем в большой компании с сотнями серверов, десятками филиалов. Мы подняли сеть, настроили динамическую маршрутизацию и все счастливы. Пакеты ходят куда надо, как надо. Но в один прекрасный день, нам сказали, что на маршрутизаторах филиалов не должно быть маршрутов к сетям отдела производства. На рисунке ниже представлена упрощенная схема нашей вымышленной сети.
Конфигурацию всех устройств из этой статьи (для каждой ноды) можно скачать в архиве по ссылке ниже.
Скачать конфиги тестовой лаборатории
Мы конечно можем убрать из-под EIGRP указанные сети, но в этом случае из сетей в головном офисе тоже не будет доступа к сетям отдела производства. Именно для таких случаев была придумана такая возможность, как фильтрация маршрутов. В EIGRP это делается командой distribute-list в конфигурации EIGRP.
Принцип работы distribute-list (список распределения) прост: список распределения работает по спискам доступа (ACL), спискам префиксов (prefix-list) или карте маршрутов (route-map). Эти три инструмента определяют будут ли анонсироваться указанные сети в обновлениях EIGRP или нет. В команде distribute-list также можно указать направление обновлений: входящие или исходящие. Также можно указать конкретный интерфейс, где должны фильтроваться обновления. Полная команда может выглядеть так:
distribute-list acl [in | out][interface-type interface-number]
Фильтрация маршрутов с помощью списков доступа
Первым делом рассмотрим фильтрацию с помощью ACL. Фильтрация маршрутов EIGRP с помощью списков ACL основан на разрешающих и запрещающих действиях списков доступа. То есть, чтобы маршрут анонсировался, в списке доступа он должен быть указан с действием permit, а deny, соответственно, запрещает анонсирование маршрута. При фильтрации, EIGRP сравнивает адрес источника в списке доступа с номером подсети (префиксом) каждого маршрута и принимает решение на основе действий, указанных в ACL.
Чтобы лучше узнать принцип работы приведём примеры.
Для фильтрации маршрутов, указанных на рисунке выше нужно создать ACL, где каждый указанный маршрут сопровождается командой deny, а в конце следует прописать permit any, чтобы остальные маршруты могли анонсироваться:
access-list 2 deny 10.17.32.0 0.0.1.255
access-list 2 deny 10.17.34.0 0.0.0.255
access-list 2 deny 10.17.35.0 0.0.0.127
access-list 2 deny 10.17.35.128 0.0.0.127
access-list 2 deny 10.17.36.0 0.0.0.63
access-list 2 deny 10.17.36.64 0.0.0.63
access-list 2 permit any
А на интерфейсе настройки EGRP прописываем:
distribute-list 2 out s4/0
Проверим таблицу маршрутизации до и после применения указанных команд. Фильтрацию будем проводить на WAN маршрутизаторах.
Как видим все маршруты до сети отдела Производства видны в таблице маршрутизации филиала. Теперь применим указанные изменения:
И посмотрим таблицу маршрутов роутера филиала еще раз:
Все маршруты в отдел производства исчезли из таблицы маршрутизации. Правда, можно было обойтись и одной командой в списке доступа, но для наглядности решили прописать все адреса. А более короткую версию можете указать в комментариях к этому посту. Кстати, фильтрацию в данном примере мы применили на один интерфейс, но можно применить и на все интерфейсы, на которых включен EIGRP. Для этого команду distribute-list нужно ввести без указания конкретного интерфейса.
distribute-list 2 out
Следует отметить, что для правильной работы фильтрации в нашей топологии на маршрутизаторе WAN2 нужно прописать те же настройки, что и на WAN1.
Фильтрация маршрутов с помощью списка префиксов
В Cisco IOS есть еще один инструмент, который позволяет осуществлять фильтрацию маршрутов prefix-list-ы. Может возникнуть вполне логичный вопрос: а чем не угодили списки доступа? Дело в том, что изначально ACL был разработан для фильтрации пакетов, поэтому для фильтрации маршрутов он не совсем подходит по нескольким причинам:
списки IP-префиксов позволяют сопоставлять длину префикса, в то время как списки ACL, используемые командой EIGRP distribution-list, нет;
Использование расширенных ACL может оказаться громоздким для конфигурирования;
Невозможность определения совпадения маски маршрута при использовании стандартных ACL;
Работа ACL достаточно медленна, так как они последовательно применяется к каждой записи в маршрутном обновлении;
Для начала разберёмся в принципе работы списка префиксов. Списки IP префиксов позволяют сопоставлять два компонента маршрута:
адрес сети (номер сети);
длину префикса (маску сети);
Между списками доступа и списками префиксов есть общие черты. Как и нумерованные списки доступа, списки префиксов могу состоять из одной и более команд, которые вводятся в режиме глобальной конфигурации и нет отдельного режима конфигурации. Как и в именованных списках доступа, в списках префиксов можно указать номер строки. В целом команда выглядит так:
ip prefix-list list-name [ seq seq-value ] { deny | permit prefix / prefix-length } [ ge ge-value ] [ le le-value ]
Коротко работу списка префиксов можно описать так:
Адрес сети маршрута должен быть в пределах, указанных в команде ip prefix-list prefix/prefix-length.
Маска подсети маршрута должна соответствовать значениям, указанным в параметрах prefix-length, ge, le.
Первый шаг работает также как и списки доступа. Например, написав ip prefix-list TESTLIST 10.0.0.0/8 мы скажем маршрутизатору, что адрес сети должен начинаться с 10. Но списки префиксов всегда проверяют и на соответствие длины маски сети указанным значениям. Ниже приведено пояснение параметров списка IP-префиксов:
Параметр prefix-list-а
Значение
Не указан
10.0.0.0/8;
Маска сети должна быть равной длине, указанной в параметре prefix/prefix-length. Все маршруты, которые начинаются с 10.
ge и le (больше чем, меньше чем)
10.0.0.0/8 ge 16 le 24
Длина маски должна быть больше 16, но меньше 24. А первый байт должен быть равен 10-ти.
le меньше чем
10.0.0.0/8 le 24
Длина маски должна быть от восьми до 24-х включительно.
ge больше чем
10.0.0.0/8 ge 24
Длина маски должна быть равна или больше 24 и до 32-х включительно.
Учтите, что Cisco требует, чтобы параметры prefix-length, ge и le соответствовали следующему равенству: prefix-length <= ge-value <= le-value (8<=10<=24).
А теперь перейдем непосредственно к настройке фильтрации с помощью списка префиксов. Для этого в интерфейсе конфигурации EIGRP прописываем distribute-list prefix prefix-name.
Воспользуемся той же топологией и введём некоторые изменения в конфигурацию маршрутизатора WAN1, точно такую же конфигурацию нужно прописать и на WAN2. Итак, наша задача:
отфильтровать маршруты в сети 10.17.35.0 и 10.17.36.0;
отфильтровать маршруты сетей точка-точка так, чтобы маршрутизаторы в филиалах и на коммутаторах ядра (Core1 и Core2) не видели сети с длиной маски /30 бит. Так как трафик от пользователей в эти сети не идет, следовательно, нет необходимости анонсировать их в сторону пользователей.
Для этого создаем prefix-list с названием FILTER-EIGRP и добавим нужные сети:
ip prefix-list FILTER-EIGRP seq 5 deny 10.17.35.0/24 ge 25 le 25
ip prefix-list FILTER-EIGRP seq 10 deny 10.17.36.0/24 ge 26 le 26
ip prefix-list FILTER-EIGRP seq 15 deny 0.0.0.0/0 ge 30 le 30
ip prefix-list FILTER-EIGRP seq 20 permit 0.0.0.0/0 le 32
Удалим из конфигурации фильтрацию по спискам доступа и проверим таблицу маршрутизации:
А теперь применим наш фильтр и затем еще раз проверим таблицу маршрутизации:
Как видим из рисунка, маршрутов в сети 10.17.35.0, 10.17.36.0 и сети для соединений точка-точка между сетевыми устройствами в таблице уже нет. А теперь объясним что мы сказали маршрутизатору:
ip prefix-list FILTER-EIGRP seq 5 deny 10.17.35.0/24 ge 25 le 25
Все сети, которые начинаются на 10.17.35 и имеют длину 25 бит запретить. Под это условие попадают сети 10.17.35.0/25 и 10.17.35.128/25. Длине префикса /25 соответствует маска 255.255.255.128.
ip prefix-list FILTER-EIGRP seq 10 deny 10.17.36.0/24 ge 26 le 26
Все сети, которые начинаются на 10.17.36 и имеют длину 26 бит запретить. Под это условие попадают сети 10.17.36.0/26 и 10.17.36.64/26. Длине префикса /26 соответствует маска 255.255.255.192.
ip prefix-list FILTER-EIGRP seq 15 deny 0.0.0.0/0 ge 30 le 30
Все сети, длина префикса которых равна 30 бит - запретить. В нашей топологии под это условие попадают сети 10.1.1.0/30, 10.1.1.4/30, 10.1.2.0/30, 10.1.2.4/30 все сети которые начинаются на 10.9.2.
ip prefix-list FILTER-EIGRP seq 20 permit 0.0.0.0/0 le 32
Все сети, префикс которых имеет длину до 32-х бит разрешить. Под это условие попадают все остальные сети топологии.
Фильтрация маршрутов с помощью route-map
Далее пойдет речь о картах маршрутов или route-map-ах. В целом, в работе сети route-map-ы используются довольно часто. Этот достаточно гибкий инструмент дает возможность сетевому инженеру тонко настраивать маршрутизацию в корпоративной сети. Именно поэтому следует хорошо изучить принцип их работы, чем мы и займемся сейчас. А дальше покажем, как фильтровать маршруты с помощью этого инструмента.
Route-map применяет логику похожую на логику if, else, then в языках программирования. Один route-map может включать в себя несколько команд route-map и маршрутизатор выполняет эти команды поочередно согласно номеру строки, который система добавляет автоматически, если не был указан пользователем. После того как, система нашла соответствие маршрута условию и определила разрешить анонсирование или нет, маршрутизатор прекращает выполнение команды route-map для данного маршрута, даже если дальше указано другое условие. Каждый route-map включает в себя критерии соответствия, который задается командой match. Синтаксис route-map выглядит следующим образом:
route-map route-map-name {permit | deny} seq sequence-number
match (1st set of criteria)
Как и в случае с ACL или prefix-list, в route-map тоже можно указать порядковый номер строки для добавления или удаления соответствующего правила.
В команде match можно указать ACL или prefix-list. Но тут может возникнуть недоразумение. А связано оно с тем, как обрабатываются route-map Cisco IOS. Дело в том, что решение о запрете или допуске маршрута основано на команде deny или permit команды route-map. Другими словами, маршрут будет обработан route-map-ом если в ACL или prefix-list-е данный маршрут сопровождается командой permit. Иначе, route-map проигнорирует данную запись и перейдет к сравнению со следующим условием route-map. Поясним на примере:
access-list 101 permit 10.17.37.0 0.0.0.255
access-list 102 deny 10.17.35.0 0.0.0.127
route-map Test permit 5
match ip-address 101
route-map Test deny 10
match ip-address 102
В данном случае маршрут 10.17.37.0 будет обработан route-map 5, а маршрут 10.17.35.0 будет проигнорирован, так как в списке доступа под номером 102 он запрещён и не попадёт под критерий соответствия route-map.
Приведём ключевые пункты работы route-map при фильтрации маршрутов:
Команда route-map с опцией permit либо разрешит анонсирование маршрута, если он соответствует критерию, указанному в команде match, либо пропустит для обработки следующим пунктом.
Команда route-map с опцией deny либо запретит анонсирование маршрута, если он соответствует критерию, указанному в команде match, либо пропустит для обработки следующим пунктом.
Если команда match основывается на ACL или prefix-list-ы, а в ACL или prefix-list-ах указанный маршрут прописан с действием deny, то маршрут не будет отфильтрован. Это будет означать, что маршрут не соответствует критерию, указанному в команде match и его нужно пропустить для обработки следующим пунктом.
В конце каждого route-map существует явный запрет; чтобы пропустить все маршруты, которые не попали под критерии, нужно указать команду route-map с действием permit без опции match.
Для того чтобы задействовать route-map в фильтрации маршрутов используется та же команда distribute-list с опцией route-map route-map-name. Внесём некоторые изменения в конфигурацию маршрутизатора WAN1. Точно такие же изменения нужно будет сделать на WAN2. Используем те же префикс-листы, что и в предыдущем примере с незначительными редактированиями:
ip prefix-list MANUFACTURING seq 5 permit 10.17.35.0/24 ge 25 le 25
ip prefix-list MANUFACTURING seq 10 permit 10.17.36.0/24 ge 26 le 26
ip prefix-list POINT-TO-POINT seq 5 permit 0.0.0.0/0 ge 30 le 30
После внесения изменений маршрутов в сеть производства, а также в сети точка-точка таблице маршрутизации на роутерах филиалов не окажется. Также на Core1 не будет маршрута до сетей point-to-point:
Мы рассмотрели фильтрацию маршрутов в EIGRP тремя способами. Хорошим тоном считается использование списка префиксов, так как они заточены именно под эти цели. А использование карты маршрутизации или route-map-ов неэффективно из-за большего количества команд для конфигурации.
В следующем материале рассмотрим фильтрацию в домене OSPF.
