По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Когда мы только начинаем изучать Python, мы закладываем некоторые вредные привычки при написании кода, о которых мы можем даже не подозревать.
Вы можете написать код, который сработает сейчас, но может не сработать в будущем, или вы можете использовать какие-то хитрые ходы вместо встроенной функции, которая могла бы облегчить вашу жизнь.
У большинства из нас сохранились не одна из тех вредных привычек при программировании на Python, что формируются в период первых месяцев обучения. Отличная новость в том, что вы можете с легкостью искоренить их, прочитав приведенный ниже текст.
1. Использование import *
Каждый раз, когда нам становится лень, то возникает соблазн импортировать все необходимое из модуля с помощью from xyz import *.
Это не самый лучший подход по многим причинам. Кот несколько из них:
Это может оказаться неэффективно: если в модуле очень много объектов, то вам придется долго ждать, пока все импортируется.
Это может вызвать конфликт имен переменных: когда вы используете *, то вы понятия не имеете, какие объекты вы импортируете и как они называются.
Как же с этим бороться? Импортируйте либо какой-то конкретный объект, либо весь модуль целиком.
# Using import *
# Bad
from math import *
print(floor(2.4))
print(ceil(2.4))
print(pi)
# Good
import math
from math import pi
print(math.floor(2.4))
print(math.ceil(2.4))
print(pi)
2. Try/except: отсутствие указания исключения в блоке «except»
Я очень долго пренебрегал этим. Сложно посчитать, сколько раз Pycharm давал мне понять (этими противными подчеркиваниями), что не нужно использовать «голое» исключение. Это идет в разрез с рекомендациями PEP8.
# Try - except
# Bad
try:
driver.find_element(...)
except:
print("Which exception?")
# Good
try:
driver.find_element(...)
except NoSuchElementException:
print("It's giving NoSuchElementException")
except ElementClickInterceptedException:
print("It's giving ElementClickInterceptedException")
Проблема «голых» исключений заключается в том, что оно будет перехватывать исключения SystemExit и KeyboardInterrupt, что затрудняет прерывание программы с помощью Control-C.
В следующий раз, когда вы будете использовать try/except, укажите исключение в блоке except.
3. Не использовать Numpy для математических вычислений
Очень часто мы забываем, что в Python есть множество пакетов, которые могут значительно облегчить нашу жизнь и сделать ее более продуктивной.
Одним из таких пакетов является Numpy – пакет для математических вычислений. Numpy может помочь вам вычислять математические операции быстрее, чем циклы for.
Допустим, что у нас есть массив random_scores, и мы хотим получить средний балл тех, кто не сдал экзамен (score>>dict_countries.keys()
dict_keys(['USA', 'UK', 'Canada'])>>>dict_countries.values()
dict_values([329.5, 67.2, 38])
Проблема тут заключается в том, что мы не всегда используем их должным образом.
Например, мы хотим просмотреть словарь и получить ключи. Вы можете использовать метод .keys, но знаете ли вы, что ключи можно получить, просто перебирая словарь? В этом случае использование метода .keys будет излишним.
# Not using .keys() properly
# Bad
for key in dict_countries.keys():
print(key)
# Good
for key in dict_countries:
print(key)
Кроме того, можно придумать некоторые хитрости для получения значений словаря, например, с помощью метода .items().
# Not using .items()
# Bad
for key in dict_countries:
print(dict_countries[key])
# Good
for key, value in dict_countries.items():
print(key)
print(value)
7. Никогда не использовать генераторы (или использовать их всегда)
Генератор предлагает более простой синтаксис при создании новой последовательности (списка, словаря и т.д.) на основе уже определенной последовательности.
Допустим, мы хотим перевести все элементы в нашем списке countries в нижний регистр.
И хотя вы могли бы это сделать просто с помощью цикла for, но также вы можете упростить работу при помощи генератора списка.
# Bad
countries = ['USA', 'UK', 'Canada']
lower_case = []
for country in countries:
lower_case.append(country.lower())
# Good (but don't overuse it!)
lower_case = [country.lower() for country in countries]
Генераторы – это очень полезно, но не злоупотребляйте ими! Помните правило Дзен Python: «Простое лучше, чем сложное».
8. Использование range(len())
Одни из первых функций, которые мы изучили будучи новичками – это range и len, поэтому не удивительно, почему многие люди имеют дурную привычку писать range(len()) при переборе списков.
Допустим у нас есть два списка: countries и populations. Если мы хотим пройтись по обоим спискам одновременно, то, вероятнее всего, вы воспользуетесь range(len()).
# Using range(len())
countries = ['USA', 'UK', 'Canada']
populations = [329.5, 67.2, 38]
# Bad
for i in range(len(countries)):
country = countries[i]
population = populations[i]
print(f'{country} has a population of {population} million people')
И хотя это в принципе выполняет свою работу, вы все равно можете упростить задачу, воспользовавшись enumerate (или, что еще лучше, воспользовавшись функцией zip для сопряжения элементов из обоих списков).
# OK
for i, country in enumerate(countries):
population = populations[i]
print(f'{country} has a population of {population} million people')
# Much Better
for country, population in zip(countries, populations):
print(f'{country} has a population of {population} million people')
9. Форматирование с помощью оператора +
Вероятно, одна из первых вещей, которую мы изучаем в Python, - это то, как соединять строки с помощью оператора +.
Это полезный, но не самый эффективный способ соединения строк в Python. Помимо этого, это не очень красиво – чем больше строк вам нужно соединить, тем больше операторов + вы будете использовать.
Вместо этого вы можете воспользоваться f-строкой.
# Formatting with + operator
# Bad
name = input("Introduce Name: ")
print("Good Morning, " + name + "!")
# Good
name = input("Introduce Name: ")
print(f'Good Morning, {name}')
Преимуществом f-строк в том, что они полезны не только для конкатенации, но и для других целей.
10. Использование изменяемых значений в качестве значений по умолчанию
Если вы включите изменяемое значение (например, список) в качестве параметра функции по умолчанию, то увидите нечто неожиданное.
# Bad
def my_function(i, my_list=[]):
my_list.append(i)
return my_list>>> my_function(1)
[1]
>>> my_function(2)
[1, 2]
>>> my_function(3)
[1, 2, 3]
В приведенном выше коде каждый раз, когда мы вызываем функцию my_function, список my_list сохраняет значения из предыдущих вызовов (а мы, скорее всего, хотим инициировать пустой список при каждом вызове функции).
Чтобы избежать такой проблемы, мы должны установить этот параметр my_list равным None и добавить условие if как показано ниже.
# Good
def my_function(i, my_list=None):
if my_list is None:
my_list = []
my_list.append(i)
return my_list>>> my_function(1)
[1]
>>> my_function(2)
[2]
>>> my_function(3)
[3]
Учет использования системных ресурсов, производительности и возможных проблем в обслуживании довольно сложная задача. Более серьёзные сложности появляются при создании инфраструктуры, включающей несколько компонентов, таких как сервер, база данных, обмен сообщениями, аутентификация, балансировка нагрузки и т.д.
Когда у вас есть 1 или 2 сервера, то, вероятно, ими легко управлять вручную, но когда вы имеете дело с сотнями или тысячами, то вам нужен инструмент для управления ими. Умный инструмент, который может помочь ускорить административные задачи как установка, внесение исправлений, конфигурация, контроль, и т.д.
Представьте, что вы - sysadmin и должны управлять сотней серверов вручную. На это не хватит времени чисто физически.
В этой статье приведём некоторые инструменты, которые можете использовать для облегчения и упрощения рутинных задач. Некоторые из них бесплатны, поэтому не придётся убеждать своего начальника в целесообразности вложения.
Cockpit
Cockpit - это решение с открытым исходным кодом для администрирования Linux серверов. С его помощью можно запускать контейнеры, управлять дисками, настраивать сеть, анализировать логи и т.д. и т.п.
Система имеет возможность одновременного управления и мониторинга состояние нескольких серверов. Для этого достаточно добавить нужные хосты в систему и Cockpit начнёт следить за ними. Вот некоторые возможности системы:
Визуализация производительности системы
Управление Docker-контейнерами
Веб-оболочка в окне терминала
Командная строка
Управление учетными записями
Сбор конфигурации системы и диагностической информации
Изменение настроек сети
Благодаря хорошей документации эту систему можно легко установить и сразу же начать пользоваться.
Ajenti
Ajenti - популярное решение с открытым исходным кодом, которое предлагает панель администрирования сервера через браузер. Можно устанавливать дополнительные пакеты и выполнять команды, а также просматривать важную информацию о состоянии сервера, например, количество используемой оперативной памяти, размер свободного места на диске и т. д.
Ajenti предлагает очень удобный инструмент для управления несколькими веб-сайтами. Для этого нужно установить дополнительную надстройку под названием Ajenti V. Она позволяет управлять сайтами на основе PHP, Python, Ruby и Node.js. Ajenti модульный, легко расширяемый, который удивительно полезен для различных случаев использования.
Некоторые из его особенностей включают:
Понятный и хорошо документированный интерфейс
Графический интерфейс пользователя на AngularJS
Одностраничное приложение на AJAX
Интуитивный дизайн
Уведомления, модульные окна и обновления в реальном времени
Подключаемая аутентификация и авторизация
Брандмауэр
Webmin
Webmin - как и говорит название, панель управления для Linux серверов через веб-браузер. Он поддерживает более 100 Unix дистрибутивов. Он выполняет функции комплексного интерфейса для базовых приложений на серверах, включая поддержку настройки таких приложений, как FTP, ssh, почта, Web, базы данных и многое другое.
Webmin модульная система, благодаря чему любой кто может писать плагины очень легко может добавлять новые функции и возможности
Webmin основан на модуле, что позволяет легко добавлять новые функциональные возможности и возможно для любого, кто хочет писать плагины для управления сервером. По умолчанию, доступно более 100 модулей.
InterWorx
InterWorx состоит из двух модулей:
NodeWorx - для управления серверами
SiteWorx - для управления сайтами и доменами
Система имеет поддержку на основе приложений, которая включает в себя Apache, PHP, MySQL, Perl и Djbdns (DNS), а также работу электронной почты и включает в себя сервисы POP3, IMAP, SMTP, использующие Qmail.
Ниже перечислены некоторые возможности системы
Управление резервными копиями
Использование полосы пропускания
Уведомления в случае сбоев
CLI, API и поддержка плагинов
Кластеризация для отказоустойчивости
cPanel
Пожалуй, самая известная система управления сайтом. Система работает на Linux, имеет простой и понятный графический интерфейс и позволяет автоматизировать задачи управление веб-хостингом.
cPanel безусловно одна из лучших панелей управления веб-хостингом в своей отрасли. Она имеет возможность публикации веб-сайта, создания электронной почты и календарей, безопасного управления файлами, управления доменами, запуска баз данных, добавления или удаления DNS, настройки FTP, планирования заданий с помощью cron, отображения статистики логирования и многое другое.
Plesk
Plesk - система, позволяющая управлять облачными серверами, WordPress-ом, Joomla и т.д. Она поддерживает больше ста расширений.
Почему для управления хостингом стоит выбирать Plesk? Все просто:
Дружественный интерфейс;
Мультитенантность;
Высокая безопасность;
Набор SEO-инструментов.
Мультитенантность - элемент архитектуры программного обеспечения, где один экземпляр запущенного на сервере приложения обслуживает множество клиентов («арендаторов»).
Почти все ИТ специалисты, разработчики, цифровые агентства, контент-менеджеры - пользователи Plesk. Plesk - основной конкурент cPanel, о котором упоминалось выше.
Directadmin
DirectAdmin - не менее популярная система управление веб хостингом, которая по умолчания имеет три уровня доступа - администраторы, реселлеры, пользователи. Каждый их уровней имеет свой функционал.
Администраторы имеют право на администрирование и кластеризацию DNS, управление IP, управление пользователями, обновление программного обеспечения и многие другие функции.
Реселлеру доступны функции управления учетными записями и пакетами, управления связями с пользователями, системной информацией.
Пользователи получат возможность управления файлами и базами данных, администрирования электронной почты, управления FTP, резервного копирования сайта и многие другие функции.
Virtualmin
Virtualmin мощная и расширяемая панель для управления веб-хостингом для Linux и BSD систем. Панелью можно пользоваться через настольные ПК, планшеты и мобильные устройства. Virtualmin решение с открытым исходным кодом с премиум поддержкой. Эта система с большим чем 100 тысяч установок - одна из самых популярных панелей управления веб-хостингом.
После установке Virtulmin вы получаете все функции управления веб-хостингом, как web, электронная почта, домен, DNS, аналитика, отчетность и т. д. Она также предлагает некоторые эксклюзивные возможности, как двухфакторная аутентификация, аутентификация через LDAP, управление посредством командной строки и много других передовых средств управления доступом.
Заключение
Подключение к серверам по одному и ручная проверка их работы действительно занимает очень много времени пользователя. Именно поэтому управление серверами со временем привлекло к себе столько внимания. Средства удаленного администрирования серверов облегчают управление серверами и повышают эффективность.
В этом материале расскажем, как можно фильтровать маршруты, анонсируемые протоколом динамической маршрутизации 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.