Таблица маршрутизации: Маршрутизация | CiscoTips

Содержание

Маршрутизация | CiscoTips

В этой статье будет много тавтологий: итак, основное назначение маршрутизатора – маршрутизировать и делает он это при помощи маршрутов в таблице маршрутизации. Маршрутизатор может быть с продвинутой версией софта, обладать теми или иными дополнительными функциями (VPN, Firewall, и т.п.), может быть совсем простым с версией IOS «BASE», но он в любом случае будет маршрутизировать – это его главная задача.

Маршрутизация осуществляется на третьем уровне модели OSI. Если в сети есть не только IP, но и другие протоколы сетевого уровня, то процесс маршрутизации для каждого из них выполняется отдельно. В курсе CCNA рассматривается только маршрутизация IPv4 и IPv6 пакетов (тем не менее, даже это – два разных протокола и маршрутизация у них работает независимо друг от друга).

В чём же суть процесса: маршрутизатор содержит специальную таблицу – таблицу маршрутизации (routing table), в которой собирает маршруты во все сети, про которые ему довелось узнать. Каждый маршрут представляет из себя:

  1. собственно, саму сеть, в которую он ведёт
  2. направление к этой сети (направление может записываться двумя способами: это либо адрес следующего маршрутизатора на пути к нужной сети, либо имя интерфейса, из которого нужно «выдать наружу» пакет, чтобы он продолжил двигаться к нужной сети)
  3. метрика (опционально) – характеризует качество маршрута чем меньше метрика, тем «лучше» и «приоритетнее» маршрут

Маршруты могут попадать в таблицу маршрутизации тремя способами:

  1. Непосредственно подключенные (Connected). Такие маршруты появляются автоматически, когда мы включаем на маршрутизаторе какой-то интерфейс и настраиваем на нём ip адрес. Это наше действие означает, что непосредственно рядом с маршрутизатором за этим самым интерфейсом к нему примыкает указанная сеть, один из адресов которой мы настроили на новом интерфейсе. Маршрутизатор автоматически добавляет такой маршрут с указанием, что сеть доступна через данный интерфейс.
  2. Статические маршруты (Static). Если искомая сеть находится не в непосредственной близости к маршрутизатору, а хотя бы через один маршрутизатор от данного, то сам он про неё никак не узнает и один из способов сообщить, что «где-то там далеко есть такая сеть» — прописать статический маршрут. То есть явно сеть и направление к ней. Подробнее об этом можно прочитать в статье про статические маршруты.
  3. Динамическая маршрутизация. В этом случае на каждом маршрутизаторе настраивается один из протоколов динамической маршрутизации. Они бывают разными, но цели их работы одни и те же: каждый маршрутизатор берёт свои собственные непосредственно подключенные (Connected) сети (про которые, как мы уже говорили, он узнаёт автоматически), и передаёт их своим соседям. В результате каждый маршрутизатор узнаёт про все сети других маршрутизаторов и у всех в итоге получается таблица маршрутизации со всеми сетями данного участка. Динамическая маршрутизация, в отличие от статической может применяться на больших сетях, где статических маршрутов пришлось бы прописывать очень много.

Итак, тем или иным способом, таблица маршрутизации пополнилась маршрутами. Теперь, если на вход маршрутизатора приходит некий пакет, идущий в сеть N, то маршрутизатор просматривает свою таблицу в поисках искомой сети. Если сеть найдена, то берётся её направление (например, ip адрес следующего маршрутизатора) и ему пересылается данный пакет. Кроме того, существует маршрут по умолчанию, куда отправляются те пакеты, сеть получателя которых отсутствует в таблице маршрутизации. Если маршрут по умолчанию не задан, то такие пакеты уничтожаются, а отправителю может быть отправлено ICMP сообщение «Destination Unreachable»

Просмотреть содержимое таблицы маршрутизации можно с помощью команды show ip route. С этой командой необходимо разобраться детально, так как она непременно присутствует в любом траблшутинге.

Router#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
       * - candidate default, U - per-user static route, o - ODR
       P - periodic downloaded static route
 
Gateway of last resort is not set
 
C    192. 168.0.0/24 is directly connected, FastEthernet0/0
D    192.168.2.0/24 [90/156160] via 192.168.0.1, 00:55:03, FastEthernet0/0
Router>

Итак, вначале вывода команды мы видим легенду, где показано, какая буква что обозначает. Из того что проходится в CCNA, нам потребуется: S – статический маршрут, C – непосредственно подключенная сеть и динамические протоколы (R – RIP, D – EIGRP, O – OSPF).

Ниже легенды идёт список известных устройству маршрутов. Первая из строчек «Gateway of last resort is not set» означает, что маршрут по умолчанию на данном маршрутизаторе не задан, далее идут две известных сети. Первая начинается с буквы C, что означает, что сеть непосредственно подключена к нашему маршрутизатору (конкретно, интерфейс FastEthernet0/0 является её частью). Вторая строчка начинается с буквы D, если посмотреть в легенду выше, то видно, что это EIGRP маршрут, про который информация получена издалека. Можно сказать, что сеть 192.168.2.0 не граничит с нашим роутером непосредственно, а находится где-то далеко, конкретно, за другим маршрутизатором с адресом 192. 168.0.1 и чтобы достичь этой сети, пакет должен быть отправлен этому маршрутизатору через интерфейс FastEthernet0/0. Два других значения, которые есть в этой строчке — [90/156160]. Первое из них – это административная дистанция, вторая – метрика. Про дистанцию можно подробнее прочитать в этой статье, что касается метрики – то она считается по-разному для каждого протокола маршрутизации и характеризует качество маршрута. Чем меньше метрика, тем лучше маршрут. Используется метрика в том случае, когда один протокол имеет более одного маршрута в одну и ту же сеть. В это случае в таблицу маршрутизации попадает только маршрут с самой лучше (читай – меньшей) метрикой. Подробнее про вычисление метрике следует читать в описании конкретного протокола.

Аналогично маршрутизатору любой компьютер имеет свою таблицу маршрутизации, но она, как правило простая: состоит из «своей сети» и шлюза по умолчанию. Например, в windows можно посмотреть такую таблицу командной route print.

Теперь, когда мы более или менее понимаем, как происходит маршрутизация, давайте задумаемся, какие выводы можно сделать из приведённого выше. В курсе CCNA три достаточно очевидных вывода сделаны за нас. Вот они:

  1. Каждый маршрутизатор самостоятельно принимает решение о том, куда надо отправить очередной проходящий через него пакет. При этом он основывается только на адресе получателя пакета и своей собственной таблице маршрутизации.
  2. Тот факт, что один маршрутизатор «знает» маршрут в некоторую сеть не гарантирует, что другой маршрутизатор будет «знать» про ту же сеть.
  3. Если маршрутизатор может переправить пакет из сети А в сеть Б, это не гарантирует, что он может переправить пакет обратно – из сети Б в сеть А.

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

Маршрутизация – очень важный процесс, так как именно он описывает структуру всего интернета. Как правило, каждое устройство знает маршруты только до нескольких сетей. Например, маршрутизатор предприятия будет знать только маршруты к сетям этого предприятия. Если пакет предназначается одной из таких сетей, то маршрутизатор переправляет его по внутренней сети, если же сеть неизвестна (например, пакет предназначается какому-то далёкому узлу в интернете), то маршрутизатор отправляет его используя маршрут по умолчанию вышестоящему провайдеру. Провайдер, в свою очередь так же знает только про сети своих клиентов. Если пакет предназначается кому-то из них, то он будет передан на маршрутизатор этого клиента, если нет, то он по маршруту по умолчанию уходит ещё выше – следующему вышестоящему провайдеру. Таким образом функционирует весь интернет.

Выбор маршрута в маршрутизаторах Cisco

Один из самых интересных аспектов маршрутизаторов Cisco, особенно для пользователей, малознакомых с маршрутизацией, — это метод, который маршрутизатор использует для выбора наилучшего из доступных маршрутов, созданных протоколами маршрутизации, при помощи ручной настройки и другими способами. Несмотря на то что процесс выбора маршрута проще, чем можно предположить, полное понимание этого процесса требует некоторых знаний принципа работы маршрутизаторов Cisco.

Требования

Для данного документа отсутствуют предварительные условия.

Используемые компоненты

Настоящий документ не имеет жесткой привязки к каким-либо конкретным версиям программного обеспечения и оборудования.

Условные обозначения

Дополнительные сведения об условных обозначениях см. в документе Технические рекомендации Cisco. Условные обозначения.

В создание и поддержку таблицы маршрутизации в маршрутизаторе Cisco вовлечены три процесса:

  • Различные процессы маршрутизации, которые фактически запускают сетевой протокол или протокол маршрутизации, такой как улучшенный протокол маршрутизации внутреннего шлюза (EIGRP), связь между промежуточными системами (IS-IS), первоочередное открытие кратчайших маршрутов (OSPF).

  • Сама таблица маршрутизации, которая получает сведения от процессов маршрутизации и отвечает на запросы данных от процесса переадресации.

  • Процесс переадресации, который запрашивает информацию из таблицы маршрутизации, чтобы принять решение о переадресации пакета.

Чтобы понять, как происходит построение таблицы маршрутизации, рассмотрим взаимодействие между протоколами маршрутизации и таблицей маршрутизации.

Основные вопроси при построении маршрутной таблицы:

  • Административное расстояние – Это мера надежности источника маршрута. Если маршрутизатор узнает о получателе из нескольких протоколов маршрутизации, то сравниваются административные расстояния и преимущество получают маршруты с меньшим административным расстоянием. Другими словами, это степень доверия источнику маршрута.

  • Метрики – это мера, используемая протоколом маршрутизации для вычисления лучшего пути к данному месту назначения, если известно множество путей к нему. Каждый протокол маршрутизации использует свою метрику.

  • Длина префикса

Поскольку каждый процесс маршрутизации получает обновления и иную информацию, он выбирает наилучший путь к указанному пункту назначения и предпринимает попытку внедрить данный путь в таблицу маршрутизации. Например, если протокол EIGRP определяет наилучший путь к адресу 10.1.1.0/24, выполняется попытка установки данного пути в таблицу маршрутизации.

Маршрутизатор решает, устанавливать ли маршруты, представленные процессом маршрутизации, основанном на административном расстоянии маршрута. Если данный маршрут имеет наименьшую административную длину до цели (по сравнению с другими маршрутами таблицы), он будет прописан в таблице маршрутизации. Если этот маршрут не является маршрутом с лучшим административным расстоянием, он отклоняется.

Для лучшего понимания давайте обратимся к примеру. Предположим, что в маршрутизаторе работает 4 процесса маршрутизации —: EIGRP, OSPF, RIP и IGRP. Все 4 процесса получили данные о различных маршрутах к сети 192.168.24.0/24, и каждый выбрал наилучший путь к этой сети, используя внутренние метрики и процессы.

Каждый из четырех процессов пытается установить свой маршрут к сети 192.168.24.0/24 в таблицу маршрутизации. Каждый из процессов маршрутизации назначил административное расстояние, которое используется для определения маршрута, который следует установить.

Административное расстояние по умолчанию
Подключено 0
Статичный 1
eBGP 20
EIGRP (внутренний) 90
IGRP 100
OSPF 110
IS-IS 115
RIP 120
EIGRP (внешний) 170
iBGP 200
Суммарный маршрут EIGRP 5

Так как внутренний маршрут EIGRP имеет наилучшее административное расстояние (чем меньше административное расстояние, тем выше приоритет), он устанавливается в таблицу маршрутизации.

Резервные маршруты

Что другие протоколы, RIP, IGRP и OSPF, делают с неустановленными маршрутами? Что делать, если оптимальный маршрут, полученный от EIGRP, недоступен? ПО Cisco IOS® использует два похода к решению этой проблемы: Сначала каждый процесс маршрутизации должен периодически пытаться установить свои лучшие маршруты. Если наиболее предпочтительный маршрут недоступен, то на следующей попытке будет выбран следующий по приоритету маршрут (в соответствие с административным расстоянием). Другим решением для протокола маршрутизации, которому не удалось установить маршрут в таблице, является использование маршрута и передача процессу таблицы маршрутизации команды послать отчет, если лучший маршрут даст сбой.

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

Для протоколов, не имеющих БД маршрутной информации, например EIGRP, IS-IS, OSPF, BGP и RIP, резервный маршрут регистрируется при сбое первоначальной попытки установить маршрут. Если маршрут, установленный в таблице маршрутизации, отказывает по тем или иным причинам, процесс обслуживания таблицы маршрутизации вызывает процессы всех протоколов маршрутизации, которые зарегистрировали резервный маршрут, и просит установить этот маршрут в таблицу. Если резервный маршрут зарегистрировали несколько протоколов, предпочтительный маршрут выбирается на основе административного расстояния.

Настройка административного расстояния

Административное расстояние по умолчанию не всегда подходит для вашей сети; можно внести изменение, чтобы маршруты RIP были предпочтительны, например, по сравнению с маршрутами IGRP. Перед тем как объяснить, как регулировать административные расстояния, необходимо посмотреть на последствия изменения административного расстояния.

Опасно изменять административное расстояние в протоколах маршрутизации! Изменение расстояний по умолчанию может привести к образованию петель маршрутизации. Рекомендуется изменять административное расстояние с осторожностью и с полным представлением о том, что требуется получить, и всех последствиях своих действий.

Для полных протоколов изменение расстояния относительно просто. Для этого необходимо ввести команду distance в режиме субконфигурации процесса маршрутизации. Также можно изменить расстояние маршрутов, полученных только из одного источника или расстояние только определенных маршрутов. Для получения дополнительной информации см. Изменение административного расстояния для выбора маршрута в примере настройки маршрутизаторов Cisco IOS.

Чтобы изменить расстояние для статических маршрутов, введите нужное расстояние после следующей команды ip route:

ip-маршрут подсеть сети маска следующий транзитный участок расстояние

Невозможно одновременно изменить административное расстояние для всех статических маршрутов.

Как метрика определяет процесс выбора маршрута

Маршрутизаторы выбираются и включаются в маршрутизационную таблицу на основании административного расстояния протокола маршрутизации. Маршруты с наименьшим административным расстоянием, полученные от протокола маршрутизации, устанавливаются в таблицу маршрутизации. Если с одного протокола маршрутизации существует несколько путей к одному и тому же получателю, то эти пути имеют одно административное расстояние, а оптимальный путь выбирается на основе метрики. Метрики представляют собой значения, связанные с определенными маршрутами, ранжирующие их в интервале от наиболее предпочитаемых до наименее предпочитаемых. Параметры, используемые для расчета метрик, зависят от протокола маршрутизации. Путь с самой низкой метрикой выбирается в качестве оптимального пути и устанавливается в таблице маршрутизации. Если существует несколько путей с равной метрикой до одного назначения, распределение нагрузки выполняется по этим путям эквивалентной стоимости. Дополнительные сведения о распределении нагрузки см. в разделе «Как работает средство распределения нагрузки»?

Длина префикса

Давайте посмотрим на другой сценарий, чтобы увидеть, как маршрутизатор обрабатывает другую типичную ситуацию: переменные длины прификсов. Предположим, что в маршрутизаторе запущено четыре процесса со следующими маршрутами:

Который из этих маршрутов будет установлен в таблице маршрутизации? Поскольку внутренний маршрут EIGRP имеет наилучшее административное расстояние, легко предположить, что он будет установлен первым. Однако, маршруты имеют разные длины префиксов (маски подсети) и, следовательно, считаются маршрутами к разным местам назначения. В этом случае в таблицу маршрутизации будут добавлены все маршруты.

Давайте посмотрим, как переадресующий инструмент использует информацию таблицы маршрутизации для принятия решений о пересылке.

Давайте взглянем на три маршрута, которые мы только что установили в таблице маршрутизации, и посмотрим, как они выглядят на маршрутизаторе.

router# show ip route
     ....
     D   192.168.32.0/26 [90/25789217] via 10.1.1.1
     R   192.168.32.0/24 [120/4] via 10.1.1.2
     O   192.168.32.0/19 [110/229840] via 10. 1.1.3
     ....

Если пакет прибывает на интерфейс маршрутизатора с адресом назначения 192.168.32.1, какой маршрут выберет маршрутизатор? Это зависит от длины префикса или количества бит, установленного в маске подсети. При пересылке пакета более длинные префиксы всегда предпочтительнее коротких.

В этом примере, пакет, отправленный по адресу 192.168.32.1 направляется в сеть 10.1.1.1, так как адрес 192.168.32.1 находится в сети 192.168.32.0/26 (192.168.32.0–192.168.32.63). Адресу соответствуют еще два доступных маршрута, но у 192.168.32.0/26 наиболее длинный префикс в таблице маршрутизации (26 бит против 24 и 19).

Точно так же, если пакет, направленный на адрес 192.168.32.100, прибывает на один из интерфейсов маршрутизатора, он перенаправляется на 10.1.1.2, поскольку 192.168.32.100 не попадает в диапазон адресов 192.168.32.0/26 (от 192.168.32.0 до 192.168.32.63), но попадает в диапазон адресов 192.168.32.0/24 назначения (от 192.168.32. 0 до 192.168.32.255). Опять, он также попадает в область, перекрытую 192.168.32.0/19, но 192.168.32.0/24 имеет более длинный префикс.

Ip classless

Для тех адресов, для которых команда ip classless configuration попадает в данный диапазон, возможно возникновение сбоев в процессе маршрутизации и пересылки. В реальности команда «IP classless» влияет только на работу процессов переадресации IOS, но не влияет на построение таблицы маршрутизации. Если функция «IP classless» не настроена (с помощью команды no ip classless), маршрутизатор не будет переадресовать пакеты в подсети. Для примера снова поместим три маршрута в таблицу маршрутизации и проведем пакеты через маршрутизатор.

Примечание: Если суперсеть или маршрут по умолчанию получены через IS-IS или OSPF, то команда no ip classless configuration игнорируется. В этом случае режим коммутация пакетов работает так, как если бы команда ip classless была настроена.

router# show ip route
. ...
     172.30.0.0/16 is variably  subnetted, 2 subnets, 2 masks
D        172.30.32.0/20 [90/4879540] via  10.1.1.2
D       172.30.32.0/24  [90/25789217] via 10.1.1.1
S*   0.0.0.0/0 [1/0] via 10.1.1.3  

Помня о том, что сеть 172.30.32.0/24 включает адреса с 172.30.32.0 по 172.30.32.255, а сеть 172.30.32.0/20 включает адреса с 172.30.32.0 по 172.30.47.255, мы можем выполнить коммутацию трех пакетов с использованием этой таблицы маршрутизации и проанализировать результаты.

  • Пакет, направленный по адресу 172.30.33.1, переадресуются на 10.1.1.2, так как этот маршрут имеет наибольший префикс.

  • Пакет, предназначенный для адреса 172.30.33.1, пересылается на 10.1.1.2, из-за совпадения самого длинного префикса.

  • Пакет, направленный по адресу 192.168.10.1 переадресуются на 10.1.1.3. Так как сеть отсутствует в таблице маршрутизации, пакет переадресуется на маршрут по умолчанию.

  • Пакет, отправленный по адресу 172. 30.254.1, отбрасывается.

Удивительно, что из этих четырех пакетов был отброшен последний. Он отброшен потому, что его место назначения 172.30.254.1 находится внутри известной крупной сети 172.30.0.0/16, но маршрутизатор не знает об этой отдельной подсети внутри этой крупной сети.

На этом основана маршрутизация типа classful: Если одна часть основной сети известна, но подсеть в этой основной сети, для которой предназначен пакет, не известна, пакет отбрасывается.

Самым сложным для понимания аспектом этого правила является то, что маршрутизатор использует только маршрут по умолчанию, если крупная сеть назначения вообще не существует в таблице маршрутизации.

Это может вызвать проблемы в сети, когда удаленный участок с одной связью к остальной части сети не выполняет никаких протоколов маршрутизации, как проиллюстрировано.

Маршрутизатор удаленного сайта настраивается следующим образом:

interface Serial 0
     ip address 10. 1.2.2 255.255.255.0
   !
   interface Ethernet 0
     ip address 10.1.1.1 255.255.255.0
   !
   ip route 0.0.0.0 0.0.0.0 10.1.2.1
   !
   no ip classless

В такой конфигурации узлы на удаленном узле могут достичь назначения через Интернет (через облако 10.x.x.x), но не назначений в облаке 10.x.x.x, которое является корпоративной сетью. Поскольку удаленный маршрутизатор обладает информацией о части сети 10.0.0.0/8, двух напрямую подключенных подсетях и ничего не знает о другой подсети диапазона 10.x.x.x, то он предполагает, что таких подсетей не существует, и сбрасывает предназначенные для них пакеты. Однако трафик, направленный в Интернет, не имеет получателя в диапазоне адресов 10.x.x.x и поэтому правильно направляется по стандартному маршруту.

Настройка бесклассового IP на удаленном маршрутизаторе позволяет решить эту проблему, так как она позволяет удаленному маршрутизатору игнорировать границы класса сетей в таблице маршрутизации и выполнять маршрутизацию просто по совпадению с наибольшей длиной префикса.

В общих словах, переадресация состоит из трех наборов процессов: протоколы маршрутизации, таблица маршрутизации и процесс переадресации, который принимает решения о переадресации и коммутирует пакеты. Ниже иллюстрируются эти три набора процессов, а также их взаимосвязь.

Совпадение с наибольшей длиной префикса всегда выигрывает у маршрутов, установленных в таблице маршрутизации, в то время как протокол маршрутизации с самым коротким административным расстоянием всегда выигрывает при установке маршрутов в таблицу маршрутизации.

Таблица маршрутизации в сетях IP | Журнал сетевых решений/LAN

Представление информации о маршрутах в таблицах маршрутизации.

Структура таблицы маршрутизации стека TCP/IP, соответствуя общим принципам построения таблиц маршрутизации (см. предыдущий выпуск рубрики), зависит от конкретной реализации стека TCP/IP. В качестве примера рассмотрим несколько вариантов таблицы маршрутизации, с которыми мог бы работать маршрутизатор М1 в сети, представленной на Рисунке 1.


Рисунок 1. Пример маршрутизируемой сети.

Если в качестве маршрутизатора М1 в данной сети применяется программный маршрутизатор MPR операционной системы Microsoft Windows NT, то его таблица маршрутизации могла бы иметь такой же вид, как в Таблице 1. Если на месте маршрутизатора М1 установить аппаратный маршрутизатор NetBuil-der II компании 3Com, то его таблица маршрутизации для этой же сети может выглядеть так, как показано в Таблице 2. В Таблице 3 помещена таблица маршрутизации для маршрутизатора М1, реализованного в виде программного маршрутизатора одной из версий операционной системы UNIX.

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

ОСНОВНЫЕ ПАРАМЕТРЫ ТАБЛИЦ МАРШРУТИЗАЦИИ

Несмотря на достаточно заметные внешние различия, во всех трех таблицах присутствуют все ключевые параметры, необходимые для работы маршрутизатора, которые мы рассмотрели ранее при обсуждении концепции маршрутизации. К таким параметрам, безусловно, относятся адрес сети назначения (столбцы Destination в маршрутизаторах NetBuilder и UNIX или Network Address в маршрутизаторе MPR) и адрес следующего маршрутизатора (столбцы Gateway в маршрутизаторах NetBuilder и UNIX или Gateway Address в маршрутизаторе MPR). Третий ключевой параметр — адрес порта, на который нужно направить пакет, в одних таблицах указывается прямо (поле Interface в таблице Windows NT), а в других — косвенно. Так, в таблице UNIX-маршрутизатора вместо адреса порта задается его условное наименование — le0 для порта с адресом 198.21.17.5, le1 для порта с адресом 213.34.12.3 и lo0 для внутреннего порта с адресом 127.0.0.1.

В маршрутизаторе NetBuilder II поле, указывающее выходной порт в какой-либо форме, вообще отсутствует. Это объясняется тем, что адрес выходного порта всегда можно косвенно определить по адресу следующего маршрутизатора. Например, попробуем определить по Таблице 2 адрес выходного порта для сети 56.0.0.0. Из таблицы видно, что следующим маршрутизатором для этой сети будет маршрутизатор с адресом 213.34.12.4. Адрес следующего маршрутизатора должен принадлежать одной из непосредственно присоединенных к маршрутизатору сетей, и в данном случае это сеть 213.34.12.0. Один из портов маршрутизатора подключен к этой сети, а его адрес 213.34.12.3 мы находим в поле Gateway второй строки таблицы маршрутизации, где указывается непосредственно присоединенная сеть 213.34.12.0. Для таких сетей адресом следующего маршрутизатора всегда будет адрес собственного порта маршрутизатора. Таким образом, адрес выходного порта для сети 56.0.0 — это 213.34.12.3.

Остальные параметры, которые можно найти в представленных версиях таблицы маршрутизации, являются необязательными для принятия решения о пути следования пакета.

Наличие или отсутствие поля маски в таблице говорит о том, насколько современен данный маршрутизатор. Стандартным решением сегодня является использование поля маски в каждой записи таблицы, как это сделано в таблицах маршрутизаторов MPR Windows NT (поле Netmask) и NetBuilder (поле Mask). Отсутствие поля маски говорит о том, что либо маршрутизатор рассчитан на работу только с тремя стандартными классами адресов, либо он использует для всех записей одну и ту же маску, а это снижает гибкость маршрутизации.

Как видно из примера таблицы Unix-маршрутизатора, метрика относится к необязательным параметрам. В остальных двух таблицах это поле имеется, однако оно используется только в качестве признака непосредственно подключенной сети. Действительно, если в таблице маршрутизации каждая сеть назначения упомянута только один раз, то поле метрики не будет приниматься во внимание при выборе маршрута, так как выбор отсутствует. А вот признак непосредственно подключенной сети маршрутизатору нужен, потому что пакет для этой сети обрабатывается особым способом — он не передается следующему маршрутизатору, а отправляется узлу назначения. Поэтому метрика 0 для маршрутизатора NetBuilder или 1 для маршрутизатора MPR сообщает, что эта сеть непосредственно подключена к конкретному порту. Другое значение метрики соответствует удаленной сети. Выбор значения метрики для непосредственно подключенной сети является достаточно произвольным, главное, чтобы метрика удаленной сети отсчитывалась с учетом этого выбранного начального значения. В UNIX-маршрутизаторе используется поле признаков, где флаг G отмечает удаленную сеть, а его отсутствие — непосредственно подключенную.

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

Флаги записей присутствуют только в таблице UNIX-маршрутизатора. Они описывают характеристики записи:

U показывает, что маршрут активен и работоспособен. Аналогичный смысл имеет поле Status в маршрутизаторе NetBuilder;

H — признак специфического маршрута к определенному хосту. Маршрут ко всей сети, к которой принадлежит данный хост, может отличаться от данного маршрута;

G означает, что маршрут пакета проходит через промежуточный маршрутизатор (gateway). Отсутствие этого флага указывает на непосредственно подключенную сеть;

D означает, что маршрут получен из сообщения Redirect (перенаправление) протокола ICMP. Такой признак может присутствовать только в таблице маршрутизации конечного узла. Он означает, что конечный узел при какой-то предыдущей передаче пакета выбрал не самый рациональный следующий маршрутизатор на пути к данной сети, и этот маршрутизатор с помощью протокола ICMP сообщил, что все последующие пакеты в данную сеть нужно отправлять через другой соседний маршрутизатор. Протокол ICMP может посылать сообщения только узлу-отправителю, поэтому на промежуточном маршрутизаторе этот признак встретиться не может. Признак никак не влияет на процесс маршрутизации, он только указывает администратору источник появления записи.

В таблице UNIX-маршрутизатора используется еще два поля, имеющих справочное значение. Поле Refcnt показывает, сколько раз на данный маршрут ссылались при продвижении пакетов. Поле Use отражает количество пакетов, переданных по данному маршруту.

В таблице маршрутизатора NetBuil-der также имеются два справочных поля. Поле времени жизни TTL (Time To Live) имеет смысл для динамических записей, с ограниченным сроком жизни. Текущее значение поля показывает оставшийся срок жизни записи в секундах. Поле Source отражает источник появления записи в таблице маршрутизации. Хотя это поле присутствует не во всех таблицах маршрутизаторов, но практически для всех маршрутизаторов существует три основных источника появления записи в таблице.

ИСТОЧНИКИ И ТИПЫ ЗАПИСЕЙ В ТАБЛИЦЕ МАРШРУТИЗАЦИИ

Первым источником является программное обеспечение стека TCP/IP. При инициализации маршрутизатора это программное обеспечение автоматически заносит в таблицу несколько записей, в результате чего создается так называемая минимальная таблица маршрутизации.

Во-первых, это записи о непосредственно подключенных сетях и маршрутизаторах по умолчанию, информация о которых появляется в стеке при ручном конфигурировании интерфейсов компьютера или маршрутизатора. В приведенных примерах к ним относятся записи о сетях 213.34.12.0 и 198.21.17.0, а также о маршрутизаторе по умолчанию — default в UNIX-маршрутизаторе и 0.0.0.0 в маршрутизаторе MPR Windows NT. В рассматриваемой таблице для маршрутизатора NetBuilder маршрутизатор по умолчанию не используется, следовательно, при поступлении пакета с адресом назначения, отсутствующим в таблице, этот пакет будет отброшен.

Во-вторых, программное обеспечение автоматически заносит в таблицу маршрутизации записи об адресах особого назначения. В таблице маршрутизатора MPR Windows NT содержится наиболее полный набор записей такого рода. Несколько записей связаны с особым адресом 127.0.0.0 (loopback), который используется для локального тестирования стека TCP/IP. Пакеты, направленные в сеть с номером 127.0.0.0, не передаются протоколом IP на канальный уровень для последующего направления в сеть, а возвращаются в источник — локальный модуль IP. Записи с адресом 224.0.0.0 предназначены для обработки групповых адресов (multicast address). Кроме того, в таблицу могут быть занесены адреса для широковещательных рассылок (например, записи 8 и 11 содержат адрес отправки широковещательного сообщения в соответствующих подсетях, а последняя запись в таблице — адрес ограниченной широковещательной рассылки сообщения). Заметим, что в некоторых таблицах записи об особых адресах вообще отсутствуют.

Вторым источником появления записи в таблице является администратор, непосредственно формирующий ее с помощью некоторой системной утилиты, например программы route, имеющейся в операционных системах UNIX и Windows NT. В аппаратных маршрутизаторах также всегда поддерживается команда для ручного задания записей таблицы маршрутизации. Заданные вручную записи всегда являются статическими, т. е. не имеют срока истечения жизни. Они могут быть как постоянными, т. е. сохраняющимися при перезагрузке маршрутизатора, так и временными, хранящимися в таблице только до выключения устройства. Часто администратор вручную заносит запись default о маршрутизаторе по умолчанию. Таким же образом в таблицу маршрутизации может быть внесена запись о специфичном для узла маршруте, где вместо номера сети содержится полный IP-адрес, т. е. адрес, имеющий ненулевую информацию не только в поле номера сети, но и в поле номера узла. Для такого конечного узла маршрут должен выбираться не так, как для всех остальных узлов сети, к которой он относится. В случае, когда в таблице есть разные записи о продвижении пакетов для всей сети и ее отдельного узла, при поступлении пакета, адресованного узлу, маршрутизатор отдаст предпочтение записи с полным адресом узла.

И, наконец, третьим источником записей могут быть протоколы маршрутизации, такие, как RIP или OSPF. Данные записи всегда являются динамическими, т. е. имеют ограниченный срок жизни. Программные маршрутизаторы Windows NT и UNIX не показывают источник появления той или иной записи в таблице, а маршрутизатор NetBuilder использует для этой цели поле Source. В приведенном в Таблице 2 примере первые две записи созданы программным обеспечением стека на основании данных о конфигурации портов маршрутизатора — это показывает признак Connected. Следующие две записи обозначены как Static, что указывает на то, что их ввел вручную администратор. Последняя запись появилась в результате работы протокола RIP, поэтому в ее поле TTL имеется значение 160.

Наталья Олифер — ответственный редактор LAN. С ней можно связаться по адресу: [email protected]

Поделитесь материалом с коллегами и друзьями

Анализ таблиц маршрутизации, или зачем ещё сетевому инженеру Python / Хабр

Hello Habr! Эта моя первая статья на Хабре, и родилась она из вопроса на одном из профессиональных форумов. Выглядел вопрос, несколько перефразируя, следующим образом:

  • Имеется набор текстовых файлов, содержащих вывод таблиц маршрутизации с различных сетевых устройств;
  • Каждый файл содержит информацию с одного устройства;
  • Устройства могут иметь различный формат вывода таблицы маршрутизации;
  • Необходимо на основании имеющихся данных по запросу выводить путь до произвольной подсети или IP-адреса с каждого из устройств;
  • Вывод должен включать на каждом участке пути информацию о записи из таблицы маршрутизации, по которой будет смаршрутизирован пакет.

Задача мне показалась мне интересной и перекликалась с одной из собственных сетевых утилит, планируемых в перспективе.Поэтому в свободный вечер, поразмыслив над ее решением, написал Proof-of-Concept реализацию на Python 2.7 под формат Cisco IOS, IOS-XE и ASA, отвечающую основным требованиям.

В статье попытаюсь воспроизвести ход мысли и прокомментировать основные моменты.

Материал рассчитан на людей, уже базово знакомых с основами сетей и Python.

Всем заинтересовавшимся добро пожаловать под кат!

Дисклеймер

Автор статьи, будучи сетевым инженером, не является профессиональным разработчиком и может пока не знать отличие интерфейса от абстрактного класса, но всегда открыт конструктивной критике и обратной связи. Замечания по коду, выбранным подходам и алгоритмам от более опытных коллег приветствуются.

Весь код в данной статье распространяется под лицензией MIT, в т.ч. приведён «как есть» и не дает гарантий никакого рода.

UPD: в 2021 при переводе этой статьи на английский решение было адаптировано под Python3 и более актуальную библиотеку, реализующую префиксное дерево.

Благодаря выбранному подходу к разделению логики это потребовало минимальных изменений в коде.

Уточнение условия и выбор алгоритма решения

С учетом вводной, задачу можно разделить на две основные части: парсинг исходных файлов с таблицами маршрутизации и непосредственный поиск пути по инициализированным данным.

Подобное разделение также позволит, при необходимости, делать импорт маршрутов с устройств для поиска пути произвольным образом (к примеру, по SNMP или REST API).

Для улучшения производительности инициализацию файлов имеет смысл делать однократно при запуске скрипта.

Парсер файлов должен распознавать формат таблиц маршрутизации из различных операционных систем. Далее будет рассмотрен вариант для Cisco IOS, IOS-XE и ASA для IPv4. Поддержка других форматов и IPv6 может быть добавлена позднее.

Как известно, выбор маршрута по таблице маршрутизации делается по принципу совпадения с префиксом наибольшей длины (longest prefix match).

В качестве одного из решений для быстрого поиска такого совпадения можно по исходным данным построить префиксное дерево. Так как ограничений по внешним зависимостям у нас нет, остановимся на готовом модуле SubnetTree.

На анализируемом участке сети потенциально могут быть петли маршрутизации, они должны детектироваться и не должны влиять на работу скрипта. Кроме того, на любом из узлов может не быть маршрута до искомой подсети. Это также следует учитывать.

При наличии VRF на устройстве таблицы маршрутизации из каждого инстанса должны быть сохранены в отдельных файлах, так как с точки зрения топологии они являются отдельными маршрутизаторами.

Ограничения по производительности железа для запуска скрипта, количеству и размеру анализируемых таблиц маршрутизации в условии не заявлены, но стоит иметь их в виду.

Специфика области применения подсказывает средний лимит в 1.000.000 записей в таблице маршрутизации на одно современное устройство. На роутере с BGP Full View по состоянию на июнь 2018 фактически может быть 724.000+ маршрутов.

По грубой оценке и результатам тестов на in-memory хранение и обработку каждого 1.000.000 префиксов потребуется около 500MB RAM. Таким образом средней производительности рабочая станция с 8GB RAM (2018 год все еще держим в уме) позволит проанализировать топологию с совокупной емкостью до 14-16.000.000 маршрутов. То есть сегмент из примерно 18-20 маршрутизаторов с full view на каждом.

Для большинства случаев этого вполне достаточно, а для больших (как ударение ни ставь) сетей нужно или разбивать анализ на сегменты, или переносить логику на out-of-memory базу данных.
640КБ хватит всем.Остановимся на in-memory варианте.

Парсинг исходных файлов и выбор структур данных

Файлы с таблицами маршрутизации вынесем в отдельную суб-директорию и сделаем ее переменной:

RT_DIRECTORY = "./routing_tables"

Для Cisco IOS и IOS-XE таблица маршрутизации может выглядеть примерно так:

show ip route

S* 0.0.0.0/0 [1/0] via 10.220.88.1
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.220.88.0/24 is directly connected, FastEthernet4
L 10.220.88.20/32 is directly connected, FastEthernet4
     1.0.0.0/32 is subnetted, 1 subnets
S       1.1.1.1 [1/0] via 212.0.0.1
                [1/0] via 192.168.0.1
D EX     10.1.198.0/24 [170/1683712] via 172.16.209.47, 1w2d, Vlan910
                       [170/1683712] via 172.16.60.33, 1w2d, Vlan60
                       [170/1683712] via 10.25.20.132, 1w2d, Vlan220
                       [170/1683712] via 10.25.20.9, 1w2d, Vlan20
     4.0.0.0/16 is subnetted, 1 subnets
O E2    4.4.0.0 [110/20] via 194.0.0.2, 00:02:00, FastEthernet0/0
     5.0.0.0/24 is subnetted, 1 subnets
D EX    5.5.5.0 [170/2297856] via 10.0.1.2, 00:12:01, Serial0/0
     6.0.0.0/16 is subnetted, 1 subnets
B       6.6.0.0 [200/0] via 195.0.0.1, 00:00:04
     172.16.0.0/26 is subnetted, 1 subnets
i L2    172.16.1.0 [115/10] via 10.0.1.2, Serial0/0
     172.20.0.0/32 is subnetted, 3 subnets
O       172.20.1.1 [110/11] via 194.0.0.2, 00:05:45, FastEthernet0/0
O       172.20.3.1 [110/11] via 194.0.0.2, 00:05:45, FastEthernet0/0
O       172.20.2.1 [110/11] via 194.0.0.2, 00:05:45, FastEthernet0/0
     10.0.0.0/8 is variably subnetted, 5 subnets, 3 masks
C       10.0.1.0/24 is directly connected, Serial0/0
D       10.0.5.0/26 [90/2297856] via 10.0.1.2, 00:12:03, Serial0/0
D       10.0.5.64/26 [90/2297856] via 10.0.1.2, 00:12:03, Serial0/0
D       10.0.5.128/26 [90/2297856] via 10.0.1.2, 00:12:03, Serial0/0
D       10.0.5.192/27 [90/2297856] via 10.0.1.2, 00:12:03, Serial0/0
     192.168.0.0/32 is subnetted, 1 subnets
D       192.168.0.1 [90/2297856] via 10.0.1.2, 00:12:03, Serial0/0
O IA 195.0.0.0/24 [110/11] via 194.0.0.2, 00:05:45, FastEthernet0/0
O E2 212.0.0.0/8 [110/20] via 194.0.0.2, 00:05:35, FastEthernet0/0
C    194.0.0.0/16 is directly connected, FastEthernet0/0

В Cisco ASA формат схожий, но, вместо длин префиксов, отображается маска подсети в десятичном представлении:

show route

S    10.1.1.0 255.255.255.0 [3/0] via 10.86.194.1, outside
C    10.86.194.0 255.255.254.0 is directly connected, outside
S*   0.0.0.0 0.0.0.0 [1/0] via 10.(\S\S?\*?\s?\S?\S?)'
    + '\s+'
    + '((?P<subnet>\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)'
    + '\s?'
    + '(?P<maskOrPrefixLength>(\/\d\d?)?'
    +'|(\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)?))'
    + '\s*'
    + '(?P<viaPortion>(?:\n?\s+(\[\d\d?\d?\/\d+\])\s+'
    + 'via\s+(\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)(.*)\n?)+)',
    re.MULTILINE
)

Оба выражения содержат именованные группы (named groups) для удобства извлечения данных при поиске совпадений и поддержания кода.

В частности, из каждого маршрута нужно получить префикс (группы subnet/interface и maskOrPrefixLength) и информацию о том, куда он ведёт (группы viaPortion/interface).

Так как выражения учитывают несколько вариантов представления префикса, в группе maskOrPrefixLength может быть как маска подсети, так и длина префикса. Будем приводить это к единому формату при обработке, остановимся на длине префикса:

def convert_netmask_to_prefix_length(mask_or_pref):
    if not mask_or_pref:
        return ""
    if re." + REGEXP_IPv4_STR + "(\/\d\d?)?$")

Теперь перенесем представление нашей сети на структуры данных Python.

Полученные в результате парсинга таблиц маршрутизации префиксы будем использовать в качестве ключей в префиксном дереве. Объект префиксного дерева наследуем из модуля SubnetTree.

Результат поиска по префиксу в дереве будет возвращать список из списка next-hop’ов и полного текстового представления соответствующего маршрута из оригинального файла.

Дополнительно создадим лист локальных интерфейсов.

Каждый маршрутизатор представим словарем, в который поместим вышеперечисленные данные.

# Example data structures
route_tree = SubnetTree.SubnetTree()
route_tree[’subnet’] = ((next_hop_1, next_hop_n), raw_route_string)
interface_list = ((interface_1, ip_address_1), (interface_n, ip_address_n))
connected_networks = ((interface_1, subnet_1), (interface_n, subnet_n))
router = {
    ‘routing_table’: route_tree,
    ‘interface_list’: interface_list,
    ‘connected_networks’: connected_networks,
}

Запрос к таблице маршрутизации вынесем в отдельную функцию:

def route_lookup(destination, router):
    if destination in router['routing_table']:
        return router['routing_table'][destination]
    else:
        return (None, None)

Каждому маршрутизатору поставим в соответствие некоторый уникальный идентификатор. Назначать его можно множеством путей, в текущем примере будет допустимо и наглядно делать это на основе имени оригинального файла.

В результате будем добавлять получившиеся объекты маршрутизаторов в словарь с ключом в виде этого уникального идентификатора.

ROUTERS = {
    ‘router_id_1’: router_1,
    ‘router_id_n’: router_n,
}

Нам также необходим механизм для поиска следующего маршрутизатора по IP-адресу next-hop’а, полученного из таблицы маршрутизации во время поиска пути. Создадим для этого еще одно глобальное префиксное дерево с ключами в виде IP-адресов всех известных маршрутизаторов в топологии и возвращаемым по ним листам с идентификатором маршрутизатора и типом интерфейса.

# Example
GLOBAL_INTERFACE_TREE = SubnetTree.SubnetTree()
GLOBAL_INTERFACE_TREE[‘ip_address’] = (router_id, interface_type)

# Returns RouterID by Interface IP address which it belongs to.
def get_rid_by_interface_ip(interface_ip):
    if interface_ip in GLOBAL_INTERFACE_TREE:
        return GLOBAL_INTERFACE_TREE[interface_ip][0]

Соберём парсер для формата IOS/IOS-XE/ASA воедино. На входе передаем ему таблицу маршрутизации в текстовом виде, на выходе получаем словарь router в заданном выше формате.

def parse_show_ip_route_ios_like(raw_routing_table):
    router = {}
    route_tree = SubnetTree.SubnetTree()
    interface_list = []
    # Parse Local and Connected route strings in text.
    for raw_route_string in REGEXP_ROUTE_LOCAL_CONNECTED.finditer(raw_routing_table):
        subnet = (
            raw_route_string.group('ipaddress') 
          + convert_netmask_to_prefix_length(
                raw_route_string.group('maskOrPrefixLength')
            )
        )
        interface = raw_route_string.group('interface')
        route_tree[subnet] = ((interface,), raw_route_string.group(0))
        if raw_route_string.group('routeType') == 'L':
            interface_list.append((interface, subnet,))
    if not interface_list:
        print('Failed to find routing table entries in given output')
        return None
    # parse static and dynamic route strings in text
    for raw_route_string in REGEXP_ROUTE.finditer(raw_routing_table):
        subnet = (
            raw_route_string.group('subnet') 
          + convert_netmask_to_prefix_length(
                raw_route_string.group('maskOrPrefixLength')
            )
        )
        via_portion =  raw_route_string.group('viaPortion')
        next_hops= []
        if via_portion.count('via') > 1:
            for line in via_portion.splitlines():
                if line:
                    next_hops.append(REGEXP_VIA_PORTION.match(line).group(1))
        else:
            next_hops.append(REGEXP_VIA_PORTION.match(via_portion).group(1))
        route_tree[subnet] = (next_hops, raw_route_string.group(0))
    router = {
        'routing_table': route_tree,
        'interface_list': interface_list,
    }
    return router

Обернём парсер в еще одну функцию для возможности последующего добавления парсеров других форматов (например, NX-OS):

def parse_text_routing_table(raw_routing_table):
    """
    Parser functions wrapper.
    Add additional parsers for alternative routing table syntaxes here.
    """
    router = parse_show_ip_route_ios_like(raw_routing_table)
    if router:
        return router

Итак, остаётся пройтись по текстовым файлам в директории:

def do_parse_directory(rt_directory):
    new_routers = {}
    if not os.path.isdir(rt_directory):
        print("{} directory does not exist.".format(rt_directory)
            + "Check rt_directory variable value."
        )
        return None
    start_time = time()
    print("Initializing files...")
    for FILENAME in os.listdir(rt_directory):
        if FILENAME.endswith('.txt'):
            file_init_start_time = time()
            with open(os.path.join(rt_directory, FILENAME), 'r') as f:
                print ('Opening {}'.format(FILENAME))
                raw_table = f.read()
                new_router = parse_text_routing_table(raw_table)
                router_id = FILENAME.replace('.txt', '')
                if new_router:
                    new_routers[router_id] = new_router
                    if new_router['interface_list']:
                        for iface, addr in new_router['interface_list']:
                            GLOBAL_INTERFACE_TREE[addr]= (router_id, iface,)
                else:
                    print ('Failed to parse ' + FILENAME)
            print (FILENAME + " parsing has been completed in %s sec".format(
                   "{:.3f}".format(time() - file_init_start_time))
            )
    else:
        if not new_routers:
            print ("Could not find any valid .txt files with routing tables"
                 + " in {} directory".format(rt_directory)
            )
        else:
            print ("\nAll files have been initialized"
                 + " in {} sec".format("{:.3f}".format(time() - start_time))
            )
            return new_routers

И, разложив все файлы в упорядоченные структуры данных, можно приниматься за вторую часть задачи.

Поиск пути по обработанным таблицам маршрутизации

В целом на этом этапе задача сводится к анализу графа сети. Маршрутизаторы являются вершинами графа, L3-линки между ними — ребрами.

Словарь ROUTERS хранит в ключах идентификаторы маршрутизаторов, а в соответствующих им значениях — ссылки на IP-адреса next-hop’ов. То есть в совокупности с GLOBAL_INTERFACE_TREE, возвращающему по IP-адресу идентификаторы маршрутизаторов, для каждой искомой подсети он определяет таблицу смежности графа.

Если же провести параллели с реальными маршрутизаторами, для поиска пути нужно воспроизвести высокоуровневую логику их работы (абстрагируясь от RIB/FIB/ASIC и прочих оптимизаций) при обработке пакета от лукапа в таблицу маршрутизации до ARP-запроса (или router_id в нашем случае) и маршрутизации или дропа пакета, в зависимости от результата.

Реализуем рекурсивный поиск пути по маршрутизаторам. Каждый участок пути будет представлен листом из router_id и raw_route_string — исходной строки маршрута на нем. Текущий путь будем записывать в кортеж path. При достижении точки назначения, отсутствии маршрута в таблице маршрутизации или next-hop’а в изученной топологии текущий path будет добавляться в результирующий кортеж paths, который и возвратит функция.

def trace_route(source_router_id, target_ip, path=[]):
    if not source_router_id:
        return [path + [(None, None)]]
    current_router = ROUTERS[source_router_id]
    next_hop, raw_route_string = route_lookup(target_ip, current_router)
    path = path + [(source_router_id, raw_route_string)]
    paths = []
    if next_hop:
        if nexthop_is_local(next_hop[0]):
            return [path]
        for nh in next_hop:
            next_hop_rid = get_rid_by_interface_ip(nh)
            if not next_hop_rid in [r[0] for r in path]:
                inner_path = trace_route(next_hop_rid, target_ip, path)
                for p in inner_path:
                    paths.append(p)
            else:
                path = path + [(next_hop_rid+"<<LOOP DETECTED", None)]
                return [path]
    else:
        return [path]
    return paths

def nexthop_is_local(next_hop):
    interface_types = ('Eth', 'Fast', 'Gig', 'Ten', 'Port',
                      'Serial', 'Vlan', 'Tunn', 'Loop', 'Null'
    )
    for type in interface_types:
        if next_hop.startswith(type):
            return True

Добавим функцию для запуска поиска в интерактивном режиме после инициализации текстовых файлов:

def do_user_interactive_search():
    while True:
        print ('\n')
        target_subnet = raw_input('Enter Target Subnet or Host: ')
        if not target_subnet:
            continue
        if not REGEXP_INPUT_IPv4.match(target_subnet.replace(' ', '')):
            print ("incorrect input")
            continue
        lookup_start_time = time()
        for rtr in ROUTERS.keys():
            subsearch_start_time = time()
            result = trace_route(rtr, target_subnet)
            if result:
                print ("\n")
                print ("PATHS TO {} FROM {}".format(target_subnet, rtr))
                n = 1
                print ('Detailed info:')
                for r in result:
                    print ("Path {}:".format(n))
                    print ([h[0] for h in r])
                    for hop in r:
                        print ("ROUTER: {}".format(hop[0]))
                        print ("Matched route string: \n{}".format(hop[1]))
                    else:
                        print ('\n')
                    n+=1
                else:
                    print ("Path search on {} has been completed in {} sec".format(
                           rtr, "{:.3f}".format(time() - subsearch_start_time))
                    )
        else:
            print ("\nFull search has been completed in {} sec".format(
                   "{:.3f}".format(time() - lookup_start_time),)
            )

Финальный штрих для объединения двух частей:

def main():
    global ROUTERS
    ROUTERS = do_parse_directory(RT_DIRECTORY)
    if ROUTERS:
        do_user_interactive_search()

if __name__ == "__main__":
    main() 

И имеем готовый к работе код.(\S\S?\*?\s?\S?\S?)’
+ ‘\s+’
+ ‘((?P<subnet>\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)’
+ ‘\s?’
+ ‘(?P<maskOrPrefixLength>(\/\d\d?)?’
+’|(\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)?))’
+ ‘\s*’
+ ‘(?P<viaPortion>(?:\n?\s+(\[\d\d?\d?\/\d+\])\s+’
+ ‘via\s+(\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?)(.*)\n?)+)’,
re.MULTILINE
)

# Route string VIA portion matching.
REGEXP_VIA_PORTION = re.compile(
‘.*via\s+(\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?).*’
)

# Store for ‘router’ objects generated from input routing table files.
# Each file is represented by single ‘router’ object.
# Router is referenced by Router ID (RID).
# RID is filename by default.
# Format:
#
# ROUTERS = {
# ‘RID1’: {‘routing_table’: {}, ‘interface_list’: ()},
# ‘RID_N’: {‘routing_table’: {}, ‘interface_list’: ()},
# }
#
ROUTERS = {}

# Global search tree for Interface IP address to Router ID (RID) resolving.
# Stores Interface IP addresses as keys.
# Returns (RID, interfaceID) list.
# Interface IP addresses SHOULD be globally unique across inspected topology.
GLOBAL_INTERFACE_TREE = SubnetTree.SubnetTree()

def parse_show_ip_route_ios_like(raw_routing_table):
«»»
Parser for routing table text output.
Compatible with both Cisco IOS(IOS-XE) ‘show ip route’
and Cisco ASA ‘show route’ output format.
Processes input text file and writes into Python data structures.
Builds internal SubnetTree search tree in ‘route_tree’.
Generates local interface list for router in ‘interface_list’
Returns ‘router’ dictionary object with parsed data.
«»»
router = {}
route_tree = SubnetTree.SubnetTree()
interface_list = []
# Parse Local and Connected route strings in text.
for raw_route_string in REGEXP_ROUTE_LOCAL_CONNECTED.finditer(raw_routing_table):
subnet = (
raw_route_string.group(‘ipaddress’)
+ convert_netmask_to_prefix_length(
raw_route_string.group(‘maskOrPrefixLength’)
)
)
interface = raw_route_string.group(‘interface’)
route_tree[subnet] = ((interface,), raw_route_string.group(0))
if raw_route_string.group(‘routeType’) == ‘L’:
interface_list.append((interface, subnet,))
if not interface_list:
print(‘Failed to find routing table entries in given output’)
return None
# parse static and dynamic route strings in text
for raw_route_string in REGEXP_ROUTE.finditer(raw_routing_table):
subnet = (
raw_route_string.group(‘subnet’)
+ convert_netmask_to_prefix_length(
raw_route_string.group(‘maskOrPrefixLength’)
)
)
via_portion = raw_route_string.group(‘viaPortion’)
next_hops= []
if via_portion.count(‘via’) > 1:
for line in via_portion.splitlines():
if line:
next_hops.append(REGEXP_VIA_PORTION.match(line).group(1))
else:
next_hops.append(REGEXP_VIA_PORTION.match(via_portion).group(1))
route_tree[subnet] = (next_hops, raw_route_string.\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?$»,
mask_or_pref):
return (
«/»
+ str(sum([bin(int(x)).count(«1») for x in mask_or_pref.split(«.»)]))
)
return «»

def route_lookup(destination, router):
«»»
Performs route_tree lookup in passed router object
for passed destination subnet.
Returns list of next_hops with original route strings or (None,None)
depending on lookup result.
«»»
if destination in router[‘routing_table’]:
return router[‘routing_table’][destination]
else:
return (None, None)

def get_rid_by_interface_ip(interface_ip):
«»»Returns RouterID by Interface IP address which it belongs to.»»»
if interface_ip in GLOBAL_INTERFACE_TREE:
return GLOBAL_INTERFACE_TREE[interface_ip][0]

def nexthop_is_local(next_hop):
«»»
Check if nexthop points to local interface.
Will be True for Connected and Local route strings on Cisco devices.
«»»
interface_types = (‘Eth’, ‘Fast’, ‘Gig’, ‘Ten’, ‘Port’,
‘Serial’, ‘Vlan’, ‘Tunn’, ‘Loop’, ‘Null’
)
for type in interface_types:
if next_hop.startswith(type):
return True

def trace_route(source_router_id, target_ip, path=[]):
«»»
Performs recursive path search from source Router ID (RID) to target subnet.
Returns tuple of path tuples.
Each path tuple contains a sequence of Router IDs with matched route strings.
Multiple paths are supported.
«»»
if not source_router_id:
return [path + [(None, None)]]
current_router = ROUTERS[source_router_id]
next_hop, raw_route_string = route_lookup(target_ip, current_router)
path = path + [(source_router_id, raw_route_string)]
paths = []
if next_hop:
if nexthop_is_local(next_hop[0]):
return [path]
for nh in next_hop:
next_hop_rid = get_rid_by_interface_ip(nh)
if not next_hop_rid in [r[0] for r in path]:
inner_path = trace_route(next_hop_rid, target_ip, path)
for p in inner_path:
paths.append(p)
else:
path = path + [(next_hop_rid+»<<LOOP DETECTED», None)]
return [path]
else:
return [path]
return paths

def do_parse_directory(rt_directory):
«»»
Go through specified directory and parse all .txt files.
Generate router objects based on parse result if any.
Populate new_routers with those router objects.
Default key for each router object is FILENAME.
Return new_routers.
«»»
new_routers = {}
if not os.path.isdir(rt_directory):
print(«{} directory does not exist.».format(rt_directory)
+ «Check rt_directory variable value.»
)
return None
start_time = time()
print(«Initializing files…»)
for FILENAME in os.listdir(rt_directory):
if FILENAME.endswith(‘.txt’):
file_init_start_time = time()
with open(os.path.join(rt_directory, FILENAME), ‘r’) as f:
print (‘Opening {}’.format(FILENAME))
raw_table = f.read()
new_router = parse_text_routing_table(raw_table)
router_id = FILENAME.replace(‘.txt’, »)
if new_router:
new_routers[router_id] = new_router
if new_router[‘interface_list’]:
for iface, addr in new_router[‘interface_list’]:
GLOBAL_INTERFACE_TREE[addr]= (router_id, iface,)
else:
print (‘Failed to parse ‘ + FILENAME)
print (FILENAME + » parsing has been completed in {} sec».format(
«{:.3f}».format(time() — file_init_start_time))
)
else:
if not new_routers:
print («Could not find any valid .txt files with routing tables»
+ » in {} directory».format(rt_directory)
)
else:
print («\nAll files have been initialized»
+ » in {} sec».format(«{:.3f}».format(time() — start_time))
)
return new_routers

def do_user_interactive_search():
«»»
Provides interactive search dialog for user.
Asks user for target subnet or host in CIDR notation.
Validates input. Prints error and goes back to start for invalid input.
Executes path search to given target from each router in global ROUTERS.
Prints formatted path search result.
Goes back to start.
«»»
while True:
print (‘\n’)
target_subnet = raw_input(‘Enter Target Subnet or Host: ‘)
if not target_subnet:
continue
if not REGEXP_INPUT_IPv4.match(target_subnet.replace(‘ ‘, »)):
print («incorrect input»)
continue
lookup_start_time = time()
for rtr in ROUTERS.keys():
subsearch_start_time = time()
result = trace_route(rtr, target_subnet)
if result:
print («\n»)
print («PATHS TO {} FROM {}».format(target_subnet, rtr))
n = 1
print (‘Detailed info:’)
for r in result:
print («Path {}:».format(n))
print ([h[0] for h in r])
for hop in r:
print («ROUTER: {}».format(hop[0]))
print («Matched route string: \n{}».format(hop[1]))
else:
print (‘\n’)
n+=1
else:
print («Path search on {} has been completed in {} sec».format(
rtr, «{:.3f}».format(time() — subsearch_start_time))
)
else:
print («\nFull search has been completed in {} sec».format(
«{:.3f}».format(time() — lookup_start_time),)
)

def main():
global ROUTERS
ROUTERS = do_parse_directory(RT_DIRECTORY)
if ROUTERS:
do_user_interactive_search()

if __name__ == «__main__»:
main()

Проверка работы скрипта

Вооружимся небольшой абстрактной топологией из четырех Cisco CSR-1000v:

Они соединены попарно через интерфейсы GigabitEthernet 2 и 3. Между ними установлено соседство по EIGRP, через который анонсируются все Connected сети, включая сети на Loopback интерфейсах за каждым маршрутизатором.

Между csr1000v-01 и csr1000v-04 дополнительно поднято два GRE-туннеля, через удаленные IP-адреса которых прописаны статические маршруты на сеть 10.0.0.0/8 для тестирования петли маршрутизации.

csr1000v-01#show ip route

Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

S     10.0.0.0/8 [1/0] via 192.168.142.2
                 [1/0] via 192.168.141.2
      172.16.0.0/16 is variably subnetted, 2 subnets, 2 masks
C        172.16.114.0/24 is directly connected, GigabitEthernet2
L        172.16.114.5/32 is directly connected, GigabitEthernet2
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, GigabitEthernet1
L        192.168.2.201/32 is directly connected, GigabitEthernet1
      192.168.12.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.12.0/24 is directly connected, GigabitEthernet2
L        192.168.12.201/32 is directly connected, GigabitEthernet2
      192.168.13.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.13.0/24 is directly connected, GigabitEthernet3
L        192.168.13.201/32 is directly connected, GigabitEthernet3
D     192.168.24.0/24 [90/3072] via 192.168.12.202, 00:06:56, GigabitEthernet2
D     192.168.34.0/24 [90/3072] via 192.168.13.203, 00:06:56, GigabitEthernet3
      192.168.141.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.141.0/30 is directly connected, Tunnel141
L        192.168.141.1/32 is directly connected, Tunnel141
      192.168.142.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.142.0/30 is directly connected, Tunnel142
L        192.168.142.1/32 is directly connected, Tunnel142
      192.168.201.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.201.0/24 is directly connected, Loopback201
L        192.168.201.201/32 is directly connected, Loopback201
D     192.168.202.0/24 
           [90/130816] via 192.168.12.202, 00:05:44, GigabitEthernet2
D     192.168.203.0/24 
           [90/130816] via 192.168.13.203, 00:06:22, GigabitEthernet3
D     192.168.204.0/24 
           [90/131072] via 192.168.13.203, 00:06:56, GigabitEthernet3
           [90/131072] via 192.168.12.202, 00:06:56, GigabitEthernet2

csr1000v-02#show ip route

Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, GigabitEthernet1
L        192.168.2.202/32 is directly connected, GigabitEthernet1
      192.168.12.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.12.0/24 is directly connected, GigabitEthernet2
L        192.168.12.202/32 is directly connected, GigabitEthernet2
D     192.168.13.0/24 [90/3072] via 192.168.12.201, 00:46:17, GigabitEthernet2
      192.168.24.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.24.0/24 is directly connected, GigabitEthernet3
L        192.168.24.202/32 is directly connected, GigabitEthernet3
D     192.168.34.0/24 [90/3072] via 192.168.24.204, 00:46:15, GigabitEthernet3
D     192.168.201.0/24 
           [90/130816] via 192.168.12.201, 00:36:59, GigabitEthernet2
      192.168.202.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.202.0/24 is directly connected, Loopback202
L        192.168.202.202/32 is directly connected, Loopback202
D     192.168.203.0/24 
           [90/131072] via 192.168.24.204, 00:06:31, GigabitEthernet3
           [90/131072] via 192.168.12.201, 00:06:31, GigabitEthernet2
D     192.168.204.0/24 
           [90/130816] via 192.168.24.204, 00:37:26, GigabitEthernet3

csr1000v-03#show ip route

Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, GigabitEthernet1
L        192.168.2.203/32 is directly connected, GigabitEthernet1
D     192.168.12.0/24 [90/3072] via 192.168.13.201, 00:46:12, GigabitEthernet3
      192.168.13.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.13.0/24 is directly connected, GigabitEthernet3
L        192.168.13.203/32 is directly connected, GigabitEthernet3
D     192.168.24.0/24 [90/3072] via 192.168.34.204, 00:46:12, GigabitEthernet2
      192.168.34.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.34.0/24 is directly connected, GigabitEthernet2
L        192.168.34.203/32 is directly connected, GigabitEthernet2
D     192.168.201.0/24 
           [90/130816] via 192.168.13.201, 00:36:56, GigabitEthernet3
D     192.168.202.0/24 
           [90/131072] via 192.168.34.204, 00:05:51, GigabitEthernet2
           [90/131072] via 192.168.13.201, 00:05:51, GigabitEthernet3
      192.168.203.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.203.0/24 is directly connected, Loopback203
L        192.168.203.203/32 is directly connected, Loopback203
D     192.168.204.0/24 
           [90/130816] via 192.168.34.204, 00:37:22, GigabitEthernet2

csr1000v-04#show ip route

Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

S     10.0.0.0/8 [1/0] via 192.168.142.1
                 [1/0] via 192.168.141.1
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, GigabitEthernet1
L        192.168.2.204/32 is directly connected, GigabitEthernet1
D     192.168.12.0/24 [90/3072] via 192.168.24.202, 00:46:17, GigabitEthernet3
D     192.168.13.0/24 [90/3072] via 192.168.34.203, 00:46:19, GigabitEthernet2
      192.168.24.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.24.0/24 is directly connected, GigabitEthernet3
L        192.168.24.204/32 is directly connected, GigabitEthernet3
      192.168.34.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.34.0/24 is directly connected, GigabitEthernet2
L        192.168.34.204/32 is directly connected, GigabitEthernet2
      192.168.141.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.141.0/30 is directly connected, Tunnel141
L        192.168.141.2/32 is directly connected, Tunnel141
      192.168.142.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.142.0/30 is directly connected, Tunnel142
L        192.168.142.2/32 is directly connected, Tunnel142
D     192.168.201.0/24 
           [90/131072] via 192.168.34.203, 00:37:02, GigabitEthernet2
           [90/131072] via 192.168.24.202, 00:37:02, GigabitEthernet3
D     192.168.202.0/24 
           [90/130816] via 192.168.24.202, 00:05:57, GigabitEthernet3
D     192.168.203.0/24 
           [90/130816] via 192.168.34.203, 00:06:34, GigabitEthernet2
      192.168.204.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.204.0/24 is directly connected, Loopback204
L        192.168.204.204/32 is directly connected, Loopback204

Сохраним эти выводы show ip route в отдельные файлы в суб-директории ./routing_tables/ и запустим скрипт:

$ python2.7 traceRouteByShowIPRoute.py

$ python2.7 traceRouteByShowIPRoute.py
Initializing files...
Opening csr1000v-01.txt
csr1000v-01.txt parsing has been completed in 0.001 sec
Opening csr1000v-02.txt
csr1000v-02.txt parsing has been completed in 0.001 sec
Opening csr1000v-03.txt
csr1000v-03.txt parsing has been completed in 0.001 sec
Opening csr1000v-04.txt
csr1000v-04.txt parsing has been completed in 0.001 sec

All files have been initialized in 0.003 sec

Enter Target Subnet or Host:

Все файлы инициализированы, скрипт, как и ожидалось, запрашивает IP-адрес или подсеть для поиска пути до нее с каждого из маршрутизаторов.

Введем поочередно несколько вариантов и сверим полученный результат с информацией с самих маршрутизаторов.

Поиск пути до Loopback204 192.168.204.204 на csr1000v-04

Пути до этого IP-адреса должны быть со всех имеющихся маршрутизаторов.

Enter Target Subnet or Host: 192.168.204.204

Enter Target Subnet or Host: 192.168.204.204

PATHS TO 192.168.204.204 FROM csr1000v-04
Detailed info:
Path 1:
['csr1000v-04']
ROUTER: csr1000v-04
Matched route string: 
L        192.168.204.204/32 is directly connected, Loopback204

Path search on csr1000v-04 has been completed in 0.000 sec

PATHS TO 192.168.204.204 FROM csr1000v-03
Detailed info:
Path 1:
['csr1000v-03', 'csr1000v-04']
ROUTER: csr1000v-03
Matched route string: 
D     192.168.204.0/24 
           [90/130816] via 192.168.34.204, 00:37:22, GigabitEthernet2

ROUTER: csr1000v-04
Matched route string: 
L        192.168.204.204/32 is directly connected, Loopback204

Path search on csr1000v-03 has been completed in 0.000 sec

PATHS TO 192.168.204.204 FROM csr1000v-02
Detailed info:
Path 1:
['csr1000v-02', 'csr1000v-04']
ROUTER: csr1000v-02
Matched route string: 
D     192.168.204.0/24 
           [90/130816] via 192.168.24.204, 00:37:26, GigabitEthernet3
ROUTER: csr1000v-04
Matched route string: 
L        192.168.204.204/32 is directly connected, Loopback204

Path search on csr1000v-02 has been completed in 0.000 sec

PATHS TO 192.168.204.204 FROM csr1000v-01
Detailed info:
Path 1:
['csr1000v-01', 'csr1000v-03', 'csr1000v-04']
ROUTER: csr1000v-01
Matched route string: 
D     192.168.204.0/24 
           [90/131072] via 192.168.13.203, 00:06:56, GigabitEthernet3
           [90/131072] via 192.168.12.202, 00:06:56, GigabitEthernet2
ROUTER: csr1000v-03
Matched route string: 
D     192.168.204.0/24 
           [90/130816] via 192.168.34.204, 00:37:22, GigabitEthernet2

ROUTER: csr1000v-04
Matched route string: 
L        192.168.204.204/32 is directly connected, Loopback204

Path 2:
['csr1000v-01', 'csr1000v-02', 'csr1000v-04']
ROUTER: csr1000v-01
Matched route string: 
D     192.168.204.0/24 
           [90/131072] via 192.168.13.203, 00:06:56, GigabitEthernet3
           [90/131072] via 192.168.12.202, 00:06:56, GigabitEthernet2
ROUTER: csr1000v-02
Matched route string: 
D     192.168.204.0/24 
           [90/130816] via 192.168.24.204, 00:37:26, GigabitEthernet3
ROUTER: csr1000v-04
Matched route string: 
L        192.168.204.204/32 is directly connected, Loopback204

Path search on csr1000v-01 has been completed in 0.000 sec

Full search has been completed in 0.001 sec

Все пути найдены, маршруты выведены. Сверимся с маршрутизаторами:

csr1000v-01#show ip route 192.168.204.204

csr1000v-01#show ip route 192.168.204.204
Routing entry for 192.168.204.0/24
  Known via "eigrp 200", distance 90, metric 131072, type internal
  Redistributing via eigrp 200
  Last update from 192.168.13.203 on GigabitEthernet3, 00:02:15 ago
  Routing Descriptor Blocks:
    192.168.13.203, from 192.168.13.203, 00:02:15 ago, via GigabitEthernet3
      Route metric is 131072, traffic share count is 1
      Total delay is 5020 microseconds, minimum bandwidth is 1000000 Kbit
      Reliability 255/255, minimum MTU 1500 bytes
      Loading 1/255, Hops 2
  * 192.168.12.202, from 192.168.12.202, 00:02:15 ago, via GigabitEthernet2
      Route metric is 131072, traffic share count is 1
      Total delay is 5020 microseconds, minimum bandwidth is 1000000 Kbit
      Reliability 255/255, minimum MTU 1500 bytes
      Loading 1/255, Hops 2

На csr1000v-01 видны два equal-cost маршрута из EIGRP через csr1000v-02 и csr1000v-03.

Скрипт показал их, как и два пути: [‘csr1000v-01’, ‘csr1000v-03’, ‘csr1000v-04’] и [‘csr1000v-01’, ‘csr1000v-02’, ‘csr1000v-04’].

csr1000v-02#show ip route 192.168.204.204

csr1000v-02#show ip route 192.168.204.204
Routing entry for 192.168.204.0/24
  Known via "eigrp 200", distance 90, metric 130816, type internal
  Redistributing via eigrp 200
  Last update from 192.168.24.204 on GigabitEthernet3, 00:08:48 ago
  Routing Descriptor Blocks:
  * 192.168.24.204, from 192.168.24.204, 00:08:48 ago, via GigabitEthernet3
      Route metric is 130816, traffic share count is 1
      Total delay is 5010 microseconds, minimum bandwidth is 1000000 Kbit
      Reliability 255/255, minimum MTU 1500 bytes
      Loading 1/255, Hops 1

csr1000v-03#show ip route 192.168.204.204

csr1000v-3#show ip route 192.168.204.204
Routing entry for 192.168.204.0/24
  Known via "eigrp 200", distance 90, metric 130816, type internal
  Redistributing via eigrp 200
  Last update from 192.168.34.204 on GigabitEthernet2, 00:08:45 ago
  Routing Descriptor Blocks:
  * 192.168.34.204, from 192.168.34.204, 00:08:45 ago, via GigabitEthernet2
      Route metric is 130816, traffic share count is 1
      Total delay is 5010 microseconds, minimum bandwidth is 1000000 Kbit
      Reliability 255/255, minimum MTU 1500 bytes
      Loading 1/255, Hops 1

На csr1000v-2 и csr1000v-3 имеется по одному маршруту из EIGRP через csr1000v-4.

Вывод скрипта с этим согласуется, найдено по одному пути: [‘csr1000v-02’, ‘csr1000v-04’] и [‘csr1000v-03’, ‘csr1000v-04’] соответственно.

csr1000v-04#show ip route 192.168.204.204

csr1000v-04#show ip route 192.168.204.204
Routing entry for 192.168.204.204/32
  Known via "connected", distance 0, metric 0 (connected)
  Routing Descriptor Blocks:
  * directly connected, via Loopback204
      Route metric is 0, traffic share count is 1

На csr1000v-4 это Connnected сеть на интерфейсе Loopback204.

Скрипт показал Local маршрут и путь на самого себя: [‘csr1000v-04’].

Поиск пути до подсети 10.10.10.0/24 (отсутствует в топологии)

Enter Target Subnet or Host: 10.10.10.0/24

Enter Target Subnet or Host: 10.10.10.0/24

PATHS TO 10.10.10.0/24 FROM csr1000v-04
Detailed info:
Path 1:
['csr1000v-04', 'csr1000v-01', 'csr1000v-04<<LOOP DETECTED']
ROUTER: csr1000v-04
Matched route string: 
S     10.0.0.0/8 [1/0] via 192.168.142.1
                 [1/0] via 192.168.141.1

ROUTER: csr1000v-01
Matched route string: 
S     10.0.0.0/8 [1/0] via 192.168.142.2
                 [1/0] via 192.168.141.2

ROUTER: csr1000v-04<<LOOP DETECTED
Matched route string: 
None

Path 2:
['csr1000v-04', 'csr1000v-01', 'csr1000v-04<<LOOP DETECTED']
ROUTER: csr1000v-04
Matched route string: 
S     10.0.0.0/8 [1/0] via 192.168.142.1
                 [1/0] via 192.168.141.1

ROUTER: csr1000v-01
Matched route string: 
S     10.0.0.0/8 [1/0] via 192.168.142.2
                 [1/0] via 192.168.141.2

ROUTER: csr1000v-04<<LOOP DETECTED
Matched route string: 
None

Path search on csr1000v-04 has been completed in 0.000 sec

PATHS TO 10.10.10.0/24 FROM csr1000v-03
Detailed info:
Path 1:
['csr1000v-03']
ROUTER: csr1000v-03
Matched route string: 
None

Path search on csr1000v-03 has been completed in 0.000 sec

PATHS TO 10.10.10.0/24 FROM csr1000v-02
Detailed info:
Path 1:
['csr1000v-02']
ROUTER: csr1000v-02
Matched route string: 
None

Path search on csr1000v-02 has been completed in 0.000 sec

PATHS TO 10.10.10.0/24 FROM csr1000v-01
Detailed info:
Path 1:
['csr1000v-01', 'csr1000v-04', 'csr1000v-01<<LOOP DETECTED']
ROUTER: csr1000v-01
Matched route string: 
S     10.0.0.0/8 [1/0] via 192.168.142.2
                 [1/0] via 192.168.141.2

ROUTER: csr1000v-04
Matched route string: 
S     10.0.0.0/8 [1/0] via 192.168.142.1
                 [1/0] via 192.168.141.1

ROUTER: csr1000v-01<<LOOP DETECTED
Matched route string: 
None

Path 2:
['csr1000v-01', 'csr1000v-04', 'csr1000v-01<<LOOP DETECTED']
ROUTER: csr1000v-01
Matched route string: 
S     10.0.0.0/8 [1/0] via 192.168.142.2
                 [1/0] via 192.168.141.2

ROUTER: csr1000v-04
Matched route string: 
S     10.0.0.0/8 [1/0] via 192.168.142.1
                 [1/0] via 192.168.141.1

ROUTER: csr1000v-01<<LOOP DETECTED
Matched route string: 
None

Path search on csr1000v-01 has been completed in 0.003 sec

Full search has been completed in 0.004 sec

Результат получен.

Сверимся с маршрутизаторами:

csr1000v-01#show ip route 10.10.10.0 255.255.255.0

csr1000v-01#show ip route 10.10.10.0 255.255.255.0
Routing entry for 10.0.0.0/8
  Known via "static", distance 1, metric 0
  Routing Descriptor Blocks:
  * 192.168.142.2
      Route metric is 0, traffic share count is 1
    192.168.141.2
      Route metric is 0, traffic share count is 1

csr1000v-04#show ip route 10.10.10.0 255.255.255.0

csr1000v-04#show ip route 10.10.10.0 255.255.255.0
Routing entry for 10.0.0.0/8
  Known via "static", distance 1, metric 0
  Routing Descriptor Blocks:
    192.168.142.1
      Route metric is 0, traffic share count is 1
  * 192.168.141.1
      Route metric is 0, traffic share count is 1

На csr1000v-01 и csr1000v-04 имеются по два статических маршрута в GRE-туннели в направлении друг друга на широкую подсеть 10.0.0.0/8. То есть в сети есть петля маршрутизации.

Скрипт ее находит и прекращает поиск пути:

PATHS TO 10.10.10.0/24 FROM csr1000v-01
Path 1:
['csr1000v-01', 'csr1000v-04', 'csr1000v-01<<LOOP DETECTED']
Path 2:
['csr1000v-01', 'csr1000v-04', 'csr1000v-01<<LOOP DETECTED']

PATHS TO 10.10.10.0/24 FROM csr1000v-04
Path 1:
['csr1000v-04', 'csr1000v-01', 'csr1000v-04<<LOOP DETECTED']
Path 2:
['csr1000v-04', 'csr1000v-01', 'csr1000v-04<<LOOP DETECTED']

csr1000v-02#show ip route 10.10.10.0 255.255.255.0

csr1000v-02#show ip route 10.10.10.0 255.255.255.0
% Network not in table

csr1000v-3#show ip route 10.10.10.0 255.255.255.0

csr1000v-3#show ip route 10.10.10.0 255.255.255.0
% Network not in table

На csr1000v-02 и csr1000v-03 маршрутов до этой подсети нет. Аналогичный результат показывает и скрипт.

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

Заключение

Получившийся скрипт хоть и далек от идеала, но тем не менее успешно решает поставленную перед ним задачу с достаточной скоростью. На моем MacBook Pro с Intel Core i5 и 8GB RAM на борту инициализация одного файла с таблицей маршрутизации в 700.000+ строк занимает в среднем 6.85с (по результатам 100 запусков). В памяти он после этого занимает около 320-350МБ.

После инициализации файлов поиск любого пути занимает миллисекунды и имеет некоторое пространство для оптимизации (через многопоточную обработку или проверку уже найденных результатов).

Добавление дополнительных парсеров должно быть относительно прозрачно. IPv6 поддерживается модулем SubnetTree нативно.

Для миграции кода на Python3, навскидку, требуется поменять raw_input на input.

Помимо простого вывода путей и маршрутов, логику скрипта можно развить и доработать для произвольных проверок и действий над полученным результатом, в зависимости от потребностей в траблшутинге или анализе сети — от сверки того, «как должно быть» с тем, «как есть», до визуализации маршрутов и т.д.

Полезным дополнением также стал бы анализ Policy Based Routing (PBR) на устройствах в совокупности с таблицами маршрутизации. Впрочем, это уже совершенно другая история.

Надеюсь, кто-то найдет статью полезной для себя.

Спасибо всем, кто дочитал до конца.

ROUTE — просмотр таблицы IP маршрутизации

ROUTE — просмотр таблицы IP маршрутизации

Команда Route выводит на экран все содержимое таблицы IP-маршрутизации и изменяет записи. Запущенная без параметров, команда route выводит справку.

Синтаксис параметры утилиты ROUTE

route [-f] [-p] [команда [конечная_точка] [mask маска_сети] [шлюз] [metric метрика]] [if интерфейс]]

  • -f — Очищает таблицу маршрутизации от всех записей, которые не являются узловыми маршрутами (маршруты с маской подсети 255.255.255.255), сетевым маршрутом замыкания на себя (маршруты с конечной точкой 127.0.0.0 и маской подсети 255.0.0.0) или маршрутом многоадресной рассылки (маршруты с конечной точкой 224.0.0.0 и маской подсети 240.0.0.0). При использовании данного параметра совместно с одной из команд (таких, как add, change или delete) таблица очищается перед выполнением команды.
  • -p — При использовании данного параметра с командой add указанный маршрут добавляется в реестр и используется для инициализации таблицы IP-маршрутизации каждый раз при запуске протокола TCP/IP.
  • команда — Указывает команду, которая будет запущена на удаленной системе. Возжожна одна из следующих команд: PRINT — Печать маршрута, ADD — Добавление маршрута, DELETE — Удаление маршрута, CHANGE — Изменение существующего маршрута.
  • конечная_точка — Определяет конечную точку маршрута. Конечной точкой может быть сетевой IP-адрес (где разряды узла в сетевом адресе имеют значение 0), IP-адрес маршрута к узлу, или значение 0.0.0.0 для маршрута по умолчанию.
  • mask маска_сети — Указывает маску сети (также известной как маска подсети) в соответствии с точкой назначения. Маска сети может быть маской подсети соответствующей сетевому IP-адресу, например 255.255.255.255 для маршрута к узлу или 0.0.0.0. для маршрута по умолчанию. Если данный параметр пропущен, используется маска подсети 255.255.255.255. Конечная точка не может быть более точной, чем соответствующая маска подсети. Другими словами, значение разряда 1 в адресе конечной точки невозможно, если значение соответствующего разряда в маске подсети равно 0.
  • шлюз — Указывает IP-адрес пересылки или следующего перехода, по которому доступен набор адресов, определенный конечной точкой и маской подсети. Для локально подключенных маршрутов подсети, адрес шлюза — это IP-адрес, назначенный интерфейсу, который подключен к подсети. Для удаленных маршрутов, которые доступны через один или несколько маршрутизаторов, адрес шлюза — непосредственно доступный IP-адрес ближайшего маршрутизатора.
  • metric метрика — Задает целочисленную метрику стоимости маршрута (в пределах от 1 до 9999) для маршрута, которая используется при выборе в таблице маршрутизации одного из нескольких маршрутов, наиболее близко соответствующего адресу назначения пересылаемого пакета. Выбирается маршрут с наименьшей метрикой. Метрика отражает количество переходов, скорость прохождения пути, надежность пути, пропускную способность пути и средства администрирования.
  • if интерфейс — Указывает индекс интерфейса, через который доступна точка назначения. Для вывода списка интерфейсов и их соответствующих индексов используйте команду route print. Значения индексов интерфейсов могут быть как десятичные, так и шестнадцатеричные. Перед шестнадцатеричными номерами вводится 0х. В случае, когда параметр if пропущен, интерфейс определяется из адреса шлюза.
  • /? — Отображает справку в командной строке.

Примеры команды Route

  • Чтобы вывести на экран все содержимое таблицы IP-маршрутизации, введите команду: route print;
  • Чтобы вывести на экран маршруты из таблицы IP-маршрутизации, которые начинаются с 10., введите команду: route print 10.*;
  • Чтобы добавить маршрут по умолчанию с адресом стандартного шлюза 192.168.12.1, введите команду: route add 0.0.0.0 mask 0.0.0.0 192.168.12.1;
  • Чтобы добавить маршрут к конечной точке 10.41.0.0 с маской подсети 255.255.0.0 и следующим адресом перехода 10.27.0.1, введите команду: route add 10.41.0.0 mask 255.255.0.0 10.27.0.1;
  • Чтобы добавить постоянный маршрут к конечной точке 10.41.0.0 с маской подсети 255.255.0.0 и следующим адресом перехода 10.27.0.1, введите команду: route -p add 10.41.0.0 mask 255.255.0.0 10.27.0.1.

Видео — Работа с утилитой ROUTE

Создание, изменение или удаление таблицы маршрутов Azure



  • Чтение занимает 10 мин

В этой статье

Azure автоматически направляет трафик между подсетями Azure, виртуальными и локальными сетями.Azure automatically routes traffic between Azure subnets, virtual networks, and on-premises networks. Если нужно изменить какой-либо из стандартных маршрутов Azure, это можно сделать с помощью создания таблицы маршрутов.If you want to change any of Azure’s default routing, you do so by creating a route table. Если вы не знакомы с маршрутизацией в виртуальных сетях, см. Дополнительные сведения о маршрутизации трафика в виртуальной сети или в ходе работы с руководством.If you’re new to routing in virtual networks, you can learn more about it in virtual network traffic routing or by completing a tutorial.

Перед началомBefore you begin

Если у вас ее нет, настройте учетную запись Azure с активной подпиской.If you don’t have one, set up an Azure account with an active subscription. Создайте учетную запись бесплатно.Create an account for free. Затем выполните одну из этих задач, прежде чем запускать шаги в любом разделе этой статьи.Then complete one of these tasks before starting steps in any section of this article:

  • Пользователи портала. войдите в портал Azure с помощью учетной записи Azure.Portal users: Sign in to the Azure portal with your Azure account.

  • Пользователи PowerShell. выполните команды в Azure Cloud Shellили запустите PowerShell с компьютера.PowerShell users: Either run the commands in the Azure Cloud Shell, or run PowerShell from your computer. Azure Cloud Shell — это бесплатная интерактивная оболочка, с помощью которой можно выполнять действия, описанные в этой статье.The Azure Cloud Shell is a free interactive shell that you can use to run the steps in this article. Она включает предварительно установленные общие инструменты Azure и настроена для использования с вашей учетной записью.It has common Azure tools preinstalled and configured to use with your account. На вкладке Обозреватель Azure Cloud Shell найдите раскрывающийся список выбрать среду , а затем выберите PowerShell , если он еще не выбран.In the Azure Cloud Shell browser tab, find the Select environment dropdown list, then choose PowerShell if it isn’t already selected.

    Если вы используете PowerShell локально, используйте Azure PowerShell Module версии 1.0.0 или более поздней.If you’re running PowerShell locally, use Azure PowerShell module version 1.0.0 or later. Выполните командлет Get-Module -ListAvailable Az.Network, чтобы узнать установленную версию.Run Get-Module -ListAvailable Az.Network to find the installed version. Если вам необходимо выполнить обновление, ознакомьтесь со статьей, посвященной установке модуля Azure PowerShell.If you need to upgrade, see Install Azure PowerShell module. Также выполните команду Connect-AzAccount , чтобы создать подключение к Azure.Also run Connect-AzAccount to create a connection with Azure.

  • Пользователи интерфейса командной строки Azure (CLI). выполните команды в Azure Cloud Shellили запустите CLI с компьютера.Azure Command-line interface (CLI) users: Either run the commands in the Azure Cloud Shell, or run the CLI from your computer. Если вы используете Azure CLI локально, используйте Azure CLI версии 2.0.31 или более поздней.Use Azure CLI version 2.0.31 or later if you’re running the Azure CLI locally. Выполните командлет az --version, чтобы узнать установленную версию.Run az --version to find the installed version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.If you need to install or upgrade, see Install Azure CLI. Также выполните команду az login , чтобы создать подключение к Azure.Also run az login to create a connection with Azure.

Учетная запись, с которой выполняется вход, или подключение к Azure с помощью должны быть назначены роли «участник сети » или настраиваемой роли , которой назначены соответствующие действия, перечисленные в разделе разрешения.The account you log into, or connect to Azure with must be assigned to the Network contributor role or to a Custom role that’s assigned the appropriate actions listed in Permissions.

Создание таблицы маршрутовCreate a route table

Существует ограничение на количество таблиц маршрутов, которые можно создать для каждого расположения и подписки Azure.There’s a limit to how many route tables you can create per Azure location and subscription. Дополнительные сведения см. в разделе ограничения сети — Azure Resource Manager.For details, see Networking limits — Azure Resource Manager.

  1. На домашней странице или в меню портала Azure щелкните Создать ресурс.On the Azure portal menu or from the Home page, select Create a resource.

  2. В поле поиска введите Таблица маршрутов.In the search box, enter Route table. Когда элемент Таблица маршрутов появится в результатах поиска, выберите его.When Route table appears in the search results, select it.

  3. На странице Таблица маршрутов щелкните Создать.In the Route table page, select Create.

  4. В диалоговом окне Создание таблицы маршрутов выполните следующие действия.In the Create route table dialog box:

    1. Введите имя таблицы маршрутов.Enter a Name for the route table.
    2. Выберите свою подписку.Choose your Subscription.
    3. Выберите существующую группу ресурсов или щелкните создать , чтобы создать новую группу ресурсов.Choose an existing Resource group or select Create new to create a new resource group.
    4. Выберите расположение.Choose a Location.
    5. Если вы планируете связать таблицу маршрутов с подсетью в виртуальной сети, которая подключена к локальной сети через VPN-шлюз, и вы не хотите распространять Локальные маршруты к сетевым интерфейсам в подсети, установите для параметра распространение маршрута шлюза виртуальной сети значение отключено.If you plan to associate the route table to a subnet in a virtual network that’s connected to your on-premises network through a VPN gateway, and you don’t want to propagate your on-premises routes to the network interfaces in the subnet, set Virtual network gateway route propagation to Disabled.
  5. Выберите создать , чтобы создать новую таблицу маршрутов.Select Create to create your new route table.

Создание таблицы маршрутов — командыCreate route table — commands

Просмотр таблиц маршрутовView route tables

Перейдите на портал Azure для управления виртуальной сетью.Go to the Azure portal to manage your virtual network. Найдите и щелкните Таблицы маршрутов.Search for and select Route tables. В списке будут содержаться таблицы маршрутов, имеющиеся в вашей подписке.The route tables that exist in your subscription are listed.

Просмотр таблицы маршрутов — командыView route table — commands

Просмотр сведений о таблице маршрутовView details of a route table

  1. Перейдите на портал Azure для управления виртуальной сетью.Go to the Azure portal to manage your virtual network. Найдите и щелкните Таблицы маршрутов.Search for and select Route tables.

  2. В списке Таблица маршрутов выберите таблицу маршрутов, для которой необходимо просмотреть сведения.In the route table list, choose the route table that you want to view details for.

  3. На странице Таблица маршрутов в разделе Параметры просмотрите маршруты в таблице маршрутов или подсети , с которыми связана таблица маршрутов.In the route table page, under Settings, view the Routes in the route table or the Subnets the route table is associated to.

Дополнительные сведения об общих параметрах Azure см. ниже:To learn more about common Azure settings, see the following information:

Просмотр сведений о командах таблицы маршрутовView details of route table — commands

Изменение таблицы маршрутовChange a route table

  1. Перейдите на портал Azure для управления виртуальной сетью.Go to the Azure portal to manage your virtual network. Найдите и щелкните Таблицы маршрутов.Search for and select Route tables.

  2. В списке Таблица маршрутов выберите таблицу маршрутов, которую необходимо изменить.In the route table list, choose the route table that you want to change.

Наиболее распространенными изменениями являются Добавление маршрутов, удаление маршрутов, связывание таблиц маршрутов с подсетями или Отмена связи таблиц маршрутов с подсетями.The most common changes are to add routes, remove routes, associate route tables to subnets, or dissociate route tables from subnets.

Изменение команд таблицы маршрутовChange a route table — commands

Связывание таблицы маршрутов с подсетьюAssociate a route table to a subnet

При необходимости можно связать таблицу маршрутов с подсетью.You can optionally associate a route table to a subnet. Таблица маршрутов может быть связана с нулем или несколькими подсетями.A route table can be associated to zero or more subnets. Так как таблицы маршрутов не связаны с виртуальными сетями, необходимо связать таблицу маршрутов с каждой подсетью, которой должна быть связана таблица маршрутов.Because route tables aren’t associated to virtual networks, you must associate a route table to each subnet you want the route table associated to. Azure направляет весь трафик, исходящий из подсети, на основе маршрутов, созданных в таблицах маршрутов, маршрутах по умолчаниюи маршрутов, распространяемых из локальной сети, если виртуальная сеть подключена к шлюзу виртуальной сети Azure (EXPRESSROUTE или VPN).Azure routes all traffic leaving the subnet based on routes you’ve created within route tables, default routes, and routes propagated from an on-premises network, if the virtual network is connected to an Azure virtual network gateway (ExpressRoute or VPN). Вы можете связать таблицы маршрутов только с теми подсетями в виртуальной сети, которые находятся в том же расположении и той же подписке Azure, что и таблица маршрутов.You can only associate a route table to subnets in virtual networks that exist in the same Azure location and subscription as the route table.

  1. Перейдите на портал Azure для управления виртуальной сетью.Go to the Azure portal to manage your virtual network. Найдите и щелкните Виртуальные сети.Search for and select Virtual networks.

  2. В списке виртуальная сеть выберите виртуальную сеть, содержащую подсеть, к которой нужно связать таблицу маршрутов.In the virtual network list, choose the virtual network that contains the subnet you want to associate a route table to.

  3. В строке меню виртуальной сети выберите подсети.In the virtual network menu bar, choose Subnets.

  4. Выберите подсеть, с которой нужно связать таблицу маршрутов.Select the subnet you want to associate the route table to.

  5. В таблице маршрутов выберите таблицу маршрутов, которую необходимо связать с подсетью.In Route table, choose the route table you want to associate to the subnet.

  6. Щелкните Сохранить.Select Save.

Если виртуальная сеть подключена к VPN-шлюзу Azure, не связывайте таблицу маршрутов с подсетью шлюза , которая включает маршрут с назначением 0.0.0.0/0.If your virtual network is connected to an Azure VPN gateway, don’t associate a route table to the gateway subnet that includes a route with a destination of 0.0.0.0/0. Это может привести к неправильной работе шлюза.Doing so can prevent the gateway from functioning properly. Дополнительные сведения об использовании 0.0.0.0/0 в маршруте см. в разделе Маршрутизация трафика виртуальной сети.For more information about using 0.0.0.0/0 in a route, see Virtual network traffic routing.

Связывание команд таблицы маршрутовAssociate a route table — commands

Отмена связи таблицы маршрутов с подсетьюDissociate a route table from a subnet

При отмене связи таблицы маршрутов с подсетью Azure направляет трафик на основе своих стандартных маршрутов.When you dissociate a route table from a subnet, Azure routes traffic based on its default routes.

  1. Перейдите на портал Azure для управления виртуальной сетью.Go to the Azure portal to manage your virtual network. Найдите и щелкните Виртуальные сети.Search for and select Virtual networks.

  2. В списке виртуальная сеть выберите виртуальную сеть, содержащую подсеть, из которой необходимо отменить связь с таблицей маршрутов.In the virtual network list, choose the virtual network that contains the subnet you want to dissociate a route table from.

  3. В строке меню виртуальной сети выберите подсети.In the virtual network menu bar, choose Subnets.

  4. Выберите подсеть, с которой нужно отменить связь.Select the subnet you want to dissociate the route table from.

  5. В таблице Маршрут выберите нет.In Route table, choose None.

  6. Щелкните Сохранить.Select Save.

Отмена связи между командами таблицы маршрутовDissociate a route table — commands

Удаление таблицы маршрутовDelete a route table

Таблицу маршрутов, связанную с подсетями, удалить нельзя.You can’t delete a route table that’s associated to any subnets. Отмените связь таблицы маршрутов со всеми подсетями, а затем попытайтесь удалить ее.Dissociate a route table from all subnets before attempting to delete it.

  1. Перейдите в портал Azure , чтобы управлять таблицами маршрутов.Go to the Azure portal to manage your route tables. Найдите и щелкните Таблицы маршрутов.Search for and select Route tables.

  2. В списке Таблица маршрутов выберите таблицу маршрутов, которую нужно удалить.In the route table list, choose the route table you want to delete.

  3. Выберите Удалить, а затем в диалоговом окне подтверждения нажмите кнопку Да .Select Delete, and then select Yes in the confirmation dialog box.

Удаление таблицы маршрутов — командыDelete a route table — commands

Создание маршрутаCreate a route

Существует ограничение на количество маршрутов на одну таблицу маршрутов, которые могут быть созданы для каждого расположения и подписки Azure.There’s a limit to how many routes per route table can create per Azure location and subscription. Дополнительные сведения см. в разделе ограничения сети — Azure Resource Manager.For details, see Networking limits — Azure Resource Manager.

  1. Перейдите в портал Azure , чтобы управлять таблицами маршрутов.Go to the Azure portal to manage your route tables. Найдите и щелкните Таблицы маршрутов.Search for and select Route tables.

  2. В списке Таблица маршрутов выберите таблицу маршрутов, к которой нужно добавить маршрут.In the route table list, choose the route table you want to add a route to.

  3. В строке меню таблицы маршрутов выберите маршруты > добавить.From the route table menu bar, choose Routes > Add.

  4. Введите уникальное имя маршрута для маршрута в таблице маршрутов.Enter a unique Route name for the route within the route table.

  5. Введите префикс адреса в нотации «неклассовая Inter-Domainная маршрутизация (CIDR)», в которую нужно направить трафик.Enter the Address prefix, in Classless Inter-Domain Routing (CIDR) notation, that you want to route traffic to. Префикс не может дублироваться более чем в одном маршруте в таблице маршрутов, хотя префикс может находиться в пределах другого префикса.The prefix can’t be duplicated in more than one route within the route table, though the prefix can be within another prefix. Например, если вы определили 10.0.0.0/16 в качестве префикса в одном маршруте, вы по-прежнему можете определить другой маршрут с префиксом адреса 10.0.0.0/22 .For example, if you defined 10.0.0.0/16 as a prefix in one route, you can still define another route with the 10.0.0.0/22 address prefix. Azure выбирает маршрут трафика на основе совпадения с самым длинным префиксом.Azure selects a route for traffic based on longest prefix match. Дополнительные сведения см. в разделе как Azure выбирает маршрут.To learn more, see How Azure selects a route.

  6. Выберите тип следующего прыжка.Choose a Next hop type. Дополнительные сведения о типах следующего прыжка см. в разделе Маршрутизация трафика виртуальной сети.To learn more about next hop types, see Virtual network traffic routing.

  7. Если выбран тип виртуального устройства следующего прыжка , введите IP-адрес для адреса следующего прыжка.If you chose a Next hop type of Virtual appliance, enter an IP address for Next hop address.

  8. Щелкните ОК.Select OK.

Создание команд маршрутаCreate a route — commands

Просмотр маршрутовView routes

Таблица маршрутов содержит несколько маршрутов или не содержит их вообще.A route table contains zero or more routes. Дополнительные сведения о параметрах, перечисленных при просмотре маршрутов, см. в разделе Маршрутизация трафика виртуальной сети.To learn more about the information listed when viewing routes, see Virtual network traffic routing.

  1. Перейдите в портал Azure , чтобы управлять таблицами маршрутов.Go to the Azure portal to manage your route tables. Найдите и щелкните Таблицы маршрутов.Search for and select Route tables.

  2. В списке Таблица маршрутов выберите таблицу маршрутов, для которой нужно просмотреть маршруты.In the route table list, choose the route table you want to view routes for.

  3. В строке меню таблицы маршрутов выберите маршруты , чтобы просмотреть список маршрутов.In the route table menu bar, choose Routes to see the list of routes.

Просмотр маршрутов — командыView routes — commands

Просмотр сведений о маршрутеView details of a route

  1. Перейдите в портал Azure , чтобы управлять таблицами маршрутов.Go to the Azure portal to manage your route tables. Найдите и щелкните Таблицы маршрутов.Search for and select Route tables.

  2. В списке Таблица маршрутов выберите таблицу маршрутов, содержащую маршрут, сведения о котором необходимо просмотреть.In the route table list, choose the route table containing the route you want to view details for.

  3. В строке меню таблицы маршрутов выберите маршруты , чтобы просмотреть список маршрутов.In the route table menu bar, choose Routes to see the list of routes.

  4. Выберите маршрут, сведения о котором нужно просмотреть.Select the route you want to view details of.

Просмотр сведений о командах маршрутаView details of a route — commands

Изменение маршрутаChange a route

  1. Перейдите в портал Azure , чтобы управлять таблицами маршрутов.Go to the Azure portal to manage your route tables. Найдите и щелкните Таблицы маршрутов.Search for and select Route tables.

  2. В списке Таблица маршрутов выберите таблицу маршрутов, содержащую маршрут, который необходимо изменить.In the route table list, choose the route table containing the route you want to change.

  3. В строке меню таблицы маршрутов выберите маршруты , чтобы просмотреть список маршрутов.In the route table menu bar, choose Routes to see the list of routes.

  4. Выберите маршрут, который необходимо изменить.Choose the route you want to change.

  5. Измените имеющиеся параметры на новые, а затем нажмите кнопку Сохранить.Change existing settings to their new settings, then select Save.

Изменение команд маршрутаChange a route — commands

Удаление маршрутаDelete a route

  1. Перейдите в портал Azure , чтобы управлять таблицами маршрутов.Go to the Azure portal to manage your route tables. Найдите и щелкните Таблицы маршрутов.Search for and select Route tables.

  2. В списке Таблица маршрутов выберите таблицу маршрутов, содержащую маршрут, который необходимо удалить.In the route table list, choose the route table containing the route you want to delete.

  3. В строке меню таблицы маршрутов выберите маршруты , чтобы просмотреть список маршрутов.In the route table menu bar, choose Routes to see the list of routes.

  4. Выберите маршрут, который нужно удалить.Choose the route you want to delete.

  5. Выберите Удалить, а затем в диалоговом окне подтверждения выберите Да .Select Delete, then select Yes in the confirmation dialog box.

Удаление команд маршрутаDelete a route — commands

Просмотр действующих маршрутовView effective routes

Действующие маршруты для каждого сетевого интерфейса, подключенного к виртуальной машине, представляют собой сочетание созданных таблиц маршрутов, маршрутов Azure по умолчанию и всех маршрутов, распространяемых из локальных сетей с помощью протокол BGP (BGP) через шлюз виртуальной сети Azure.The effective routes for each VM-attached network interface are a combination of route tables that you’ve created, Azure’s default routes, and any routes propagated from on-premises networks via the Border Gateway Protocol (BGP) through an Azure virtual network gateway. Понимание принципа работы действующих маршрутов для сетевого интерфейса необходимо для устранения неполадок, связанных с маршрутизацией.Understanding the effective routes for a network interface is helpful when troubleshooting routing problems. Вы можете просмотреть действующие маршруты для любого сетевого интерфейса, подключенного к работающей виртуальной машине.You can view the effective routes for any network interface that’s attached to a running VM.

  1. Перейдите в портал Azure для управления виртуальными машинами.Go to the Azure portal to manage your VMs. Найдите и щелкните Виртуальные машины.Search for and select Virtual machines.

  2. В списке виртуальная машина выберите виртуальную машину, для которой нужно просмотреть действующие маршруты.In the virtual machine list, choose the VM you want to view effective routes for.

  3. В строке меню виртуальной машины выберите сети.In the VM menu bar, choose Networking.

  4. Выберите имя сетевого интерфейса.Select the name of a network interface.

  5. В строке меню сетевого интерфейса выберите действующие маршруты.In the network interface menu bar, select Effective routes.

  6. Просмотрите список действующих маршрутов, чтобы узнать, существует ли правильный маршрут, на который нужно направлять трафик.Review the list of effective routes to see whether the correct route exists for where you want to route traffic to. Дополнительные сведения о типах следующего прыжка, отображаемых в этом списке, см. в разделе Маршрутизация трафика виртуальной сети.Learn more about next hop types that you see in this list in Virtual network traffic routing.

Просмотр эффективных маршрутов — командыView effective routes — commands

Проверка маршрутизации между двумя конечными точкамиValidate routing between two endpoints

Вы можете определить тип следующего прыжка между виртуальной машиной и IP-адресом другого ресурса Azure, локальным ресурсом или ресурсом в Интернете.You can determine the next hop type between a virtual machine and the IP address of another Azure resource, an on-premises resource, or a resource on the Internet. Определение маршрутизации Azure эффективно при устранении неполадок, связанных с маршрутизацией.Determining Azure’s routing is helpful when troubleshooting routing problems. Для выполнения этой задачи необходимо наличие имеющегося наблюдателя за сетями.To complete this task, you must have an existing network watcher. Если у вас нет наблюдателя за сетями, создайте его, выполнив действия, описанные в разделе Создание экземпляра наблюдателя за сетями.If you don’t have an existing network watcher, create one by completing the steps in Create a Network Watcher instance.

  1. Перейдите в портал Azure , чтобы управлять наблюдателями сети.Go to the Azure portal to manage your network watchers. Найдите и выберите наблюдатель за сетями.Search for and select Network Watcher.

  2. В строке меню наблюдателя за сетями выберите следующий прыжок.In the network watcher menu bar, choose Next hop.

  3. В наблюдателе за сетями | Страница следующего прыжка :In the Network Watcher | Next hop page:

    1. Выберите подписку и группу ресурсов исходной виртуальной машины, из которой требуется проверить маршрутизацию.Choose your Subscription and the Resource group of the source VM you want to validate routing from.

    2. Выберите виртуальную машину и сетевой интерфейс , подключенный к виртуальной машине.Choose the Virtual machine and the Network interface that’s attached to the VM.

    3. Введите Исходный IP-адрес , назначенный сетевому интерфейсу, для которого требуется проверить маршрутизацию.Enter a Source IP address assigned to the network interface that you want to validate routing from.

    4. Введите конечный IP-адрес , на который требуется проверить маршрутизацию.Enter a Destination IP address that you want to validate routing to.

  4. Выберите Следующий прыжок.Select Next hop.

После короткого ожидания Azure сообщает о типе следующего прыжка и ИДЕНТИФИКАТОРе маршрута, который направляет трафик.After a short wait, Azure tells you the next hop type and the ID of the route that routed the traffic. Дополнительные сведения о типах следующего прыжка, возвращаемых при маршрутизации трафика виртуальной сети.Learn more about next hop types that you see returned in Virtual network traffic routing.

Проверка маршрутизации между двумя конечными точками — командыValidate routing between two endpoints — commands

РазрешенияPermissions

Для работы с таблицами маршрутов и маршрутами учетной записи должна быть назначена роль «участник сети » или пользовательская роль , которой назначены соответствующие действия, перечисленные в следующей таблице.To do tasks on route tables and routes, your account must be assigned to the Network contributor role or to a Custom role that’s assigned the appropriate actions listed in the following table:

ДействиеAction ИмяName
Microsoft.Network/routeTables/readMicrosoft.Network/routeTables/read Чтение таблицы маршрутов.Read a route table
Microsoft.Network/routeTables/writeMicrosoft.Network/routeTables/write Создание или обновление таблицы маршрутов.Create or update a route table
Microsoft.Network/routeTables/deleteMicrosoft.Network/routeTables/delete Удаление таблицы маршрутовDelete a route table
Microsoft.Network/routeTables/join/actionMicrosoft.Network/routeTables/join/action Связывание таблицы маршрутов с подсетьюAssociate a route table to a subnet
Microsoft.Network/routeTables/routes/readMicrosoft.Network/routeTables/routes/read Чтение маршрута.Read a route
Microsoft.Network/routeTables/routes/writeMicrosoft.Network/routeTables/routes/write Создание или обновление маршрута.Create or update a route
Microsoft.Network/routeTables/routes/deleteMicrosoft.Network/routeTables/routes/delete Удаление маршрутаDelete a route
Microsoft.Network/networkInterfaces/effectiveRouteTable/actionMicrosoft.Network/networkInterfaces/effectiveRouteTable/action Получение действующей таблицы маршрутов для сетевого интерфейса.Get the effective route table for a network interface
Microsoft.Network/networkWatchers/nextHop/actionMicrosoft.Network/networkWatchers/nextHop/action Получить следующий прыжок из виртуальной машиныGets the next hop from a VM

Дальнейшие действияNext steps

Таблица IP-маршрутизации. Категория: Локальная сеть • Разное


Таблица маршрутизации — таблица, состоящая из сетевых маршрутов и предназначенная для определения наилучшего пути передачи сетевого пакета. Каждая запись в таблице маршрутизации состоит, как правило, из таких полей:

  • адрес сети или узла назначения, либо указание, что маршрут является маршрутом по умолчанию
  • маску сети назначения (маска 255.255.255.255 позволяет указать единичный узел сети)
  • шлюз, обозначающий адрес маршрутизатора в сети, на который необходимо отправить пакет, следующий до указанного адреса
  • интерфейс, через который доступен шлюз (это может быть порядковый номер, GUID или символьное имя устройства)
  • метрику — числовой показатель, задающий предпочтительность маршрута; чем меньше, тем предпочтительнее маршрут


Шлюз по умолчанию (default gateway) — адрес маршрутизатора, на который отправляется трафик, для которого невозможно определить маршрут, исходя из таблиц маршрутизации. Шлюз по умолчанию задаётся записью в таблице маршрутизации вида «сеть 0.0.0.0 с маской сети 0.0.0.0».

Просмотр маршрутов в Windows


Команда route выводит на экран все содержимое таблицы IP-маршрутизации и позволяет изменять записи. Запущенная без параметров, команда route выводит справку:

> route

Обработка таблиц сетевых маршрутов.

ROUTE [-f] [-p] [-4|-6] <команда> [<назначение>]
                  [MASK <маска_сети>]  [<шлюз>] [METRIC <метрика>]
                  [IF <интерфейс>]

  -f           Очистка таблиц маршрутов от всех записей шлюзов. При указании
               одной из команд таблицы очищаются до выполнения команды.

  -p           При использовании с командой ADD маршрут
               сохраняется после перезагрузок системы. По умолчанию маршруты
               не сохраняются при перезагрузке. Пропускается для остальных
               команд, всегда изменяющих соответствующие постоянные маршруты.

  -4           Принудительное использование протокола IPv4.

  -6           Принудительное использование протокола IPv6.

   <команда>   Одна из следующих команд:
                 PRINT     Печать маршрута
                 ADD       Добавление маршрута
                 DELETE    Удаление маршрута
                 CHANGE    Изменение существующего маршрута
  <назначение> Задает узел.
  MASK         Далее следует значение параметра "маска_сети".
  <маска_сети> Значение маски подсети для записи данного маршрута.
               Если этот параметр не задан, по умолчанию используется
               значение 255.255.255.255.
  <шлюз>       Шлюз.
  <интерфейс>  Номер интерфейса для указанного маршрута.
  METRIC       Определение метрики, т. е. затрат для узла назначения.

Проводится поиск всех символических имен узлов в файле сетевой базы данных
NETWORKS. Проводится поиск символических имен шлюзов в файле базы данных имен
узлов HOSTS.

Для команд PRINT и DELETE можно указать узел или шлюз с помощью подстановочного
знака либо опустить параметр "шлюз".
      Если IF не задан, то производится попытка найти лучший интерфейс для
      указанного шлюза.
    > route ADD 3ffe::/32 3ffe::1

    > route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2

      Параметр CHANGE используется только для изменения шлюза или метрики.

    > route DELETE 157.0.0.0
    > route DELETE 3ffe::/32


Просмотр таблицы маршрутизации:

> route print
===========================================================================
Список интерфейсов
 21...0a 00 27 00 00 15 ......VirtualBox Host-Only Ethernet Adapter
  5...0a 00 27 00 00 05 ......VirtualBox Host-Only Ethernet Adapter #2
 20...1c 1b 0d e6 14 bd ......Realtek PCIe GbE Family Controller
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес           Маска сети      Адрес шлюза       Интерфейс  Метрика
          0.0.0.0          0.0.0.0    192.168.110.1    192.168.110.2     35
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
     172.28.128.0    255.255.255.0         On-link      172.28.128.1    281
     172.28.128.1  255.255.255.255         On-link      172.28.128.1    281
   172.28.128.255  255.255.255.255         On-link      172.28.128.1    281
     192.168.53.0    255.255.255.0         On-link      192.168.53.1    281
     192.168.53.1  255.255.255.255         On-link      192.168.53.1    281
   192.168.53.255  255.255.255.255         On-link      192.168.53.1    281
    192.168.110.0    255.255.255.0         On-link     192.168.110.2    291
    192.168.110.2  255.255.255.255         On-link     192.168.110.2    291
  192.168.110.255  255.255.255.255         On-link     192.168.110.2    291
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link      172.28.128.1    281
        224.0.0.0        240.0.0.0         On-link      192.168.53.1    281
        224.0.0.0        240.0.0.0         On-link     192.168.110.2    291
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link      172.28.128.1    281
  255.255.255.255  255.255.255.255         On-link      192.168.53.1    281
  255.255.255.255  255.255.255.255         On-link     192.168.110.2    291
===========================================================================
Постоянные маршруты:
  Отсутствует

IPv6 таблица маршрута
===========================================================================
Активные маршруты:
 Метрика   Сетевой адрес            Шлюз
  1    331 ::1/128                  On-link
 20    291 fe80::/64                On-link
  5    281 fe80::/64                On-link
 21    281 fe80::/64                On-link
 21    281 fe80::14e:9612:aea9:b378/128
                                    On-link
  5    281 fe80::61bb:3768:1294:4dc0/128
                                    On-link
 20    291 fe80::a872:bd46:b87d:7fac/128
                                    On-link
  1    331 ff00::/8                 On-link
 21    281 ff00::/8                 On-link
  5    281 ff00::/8                 On-link
 20    291 ff00::/8                 On-link
===========================================================================
Постоянные маршруты:
  Отсутствует


Команда tracert предоставляет возможность определить маршрут, по которому проходит пакет до заданного узла:

> tracert ya.ru

Трассировка маршрута к ya.ru [87.250.250.242]
с максимальным числом прыжков 30:

  1    <1 мс    <1 мс    <1 мс  192.168.110.1
  2     1 ms    <1 мс    <1 мс  78.107.125.69
  3     1 ms     1 ms     1 ms  stpert-bng1-local.msk.corbina.net [85.21.0.172]
  4     1 ms     1 ms     1 ms  10.2.254.10
  5     3 ms     3 ms     3 ms  korova-bb-be5.corbina.net [195.14.54.195]
  6     2 ms     2 ms     2 ms  85.21.224.96
  7     2 ms     2 ms     2 ms  85.21.224.54
  8     3 ms     2 ms     3 ms  m9-br-be1.corbina.net [195.14.54.79]
  9     7 ms     7 ms    12 ms  corbina-gw.dante.yandex.net [83.102.145.178]
 10     5 ms     4 ms     4 ms  ya.ru [87.250.250.242]

Трассировка завершена.

Просмотр маршрутов в Linux


Команда route выводит на экран все содержимое таблицы IP-маршрутизации и позволяет изменять записи.

$ $ route --help
Использование: route [-nNvee] [-FC] [<AF>] Отобразить таблицу маршрутизации ядра
       route [-v] [-FC] {add|del|flush} ... Изменить таблицу маршрутизации для AF.

       route {-h|--help} [<AF>] Детальное описание использование указанной AF.
       route {-V|--version} Отобразить версию/автора и выйти.

        -v, --verbose более детальный вывод
        -n, --numeric не преобразовывать адреса в имена
        -e, --extend отображать другую/больше информации
        -F, -fib отобразить информацию форвардинга базы (по умолчанию)
        -C, --cache отобразить кэш маршрутизации вместо FIB

  <AF>=Use -4, -6, '-A <af>' or '--<af>'; default: inet
  Список возможный адресных семейств (которые поддерживают маршрутизацию):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) 
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) 
    x25 (CCITT X.25)


Просмотр таблицы маршрутизации:

$ route
Таблица маршрутизации ядра протокола IP
Destination     Gateway    Genmask         Flags   Metric   Ref   Use   Iface
default         _gateway   0.0.0.0         UG      100      0     0     enp0s3
link-local      0.0.0.0    255.255.0.0     U       1000     0     0     enp0s3
192.168.110.0   0.0.0.0    255.255.255.0   U       100      0     0     enp0s3
$ route -n
Таблица маршрутизации ядра протокола IP
Destination     Gateway         Genmask         Flags   Metric   Ref   Use   Iface
0.0.0.0         192.168.110.1   0.0.0.0         UG      100      0     0     enp0s3
169.254.0.0     0.0.0.0         255.255.0.0     U       1000     0     0     enp0s3
192.168.110.0   0.0.0.0         255.255.255.0   U       100      0     0     enp0s3


Утилита traceroute предоставляет возможность определить маршрут, по которому проходит пакет до заданного узла:

$ sudo apt install traceroute
$ traceroute ya.ru
traceroute to ya.ru (87.250.250.242), 30 hops max, 60 byte packets
 1  _gateway (192.168.110.1)  0.697 ms  0.607 ms  0.584 ms
 2  78.107.125.69 (78.107.125.69)  2.050 ms  1.967 ms  1.777 ms
 3  stpert-bng1-local.msk.corbina.net (85.21.0.172)  1.679 ms  1.605 ms  1.499 ms
 4  10.2.254.10 (10.2.254.10)  2.215 ms  2.180 ms  2.167 ms
 5  korova-bb-be5.corbina.net (195.14.54.195)  3.577 ms  3.544 ms  3.824 ms
 6  85.21.224.96 (85.21.224.96)  2.645 ms  2.208 ms  2.149 ms
 7  m9-crs-be13.corbina.net (85.21.224.54)  3.762 ms  3.207 ms  3.794 ms
 8  m9-br-be3.corbina.net (195.14.62.85)  3.716 ms  3.639 ms m9-br-be1.corbina.net (195.14.54.79)  3.559 ms
 9  corbina-gw.dante.yandex.net (83.102.145.178)  6.750 ms  11.716 ms  16.226 ms
10  ya.ru (87.250.250.242)  5.330 ms  8.678 ms  8.628 ms

Поиск:
Linux • Windows • Локальная сеть • route • Маска сети • Шлюз • Маршрут • Таблица • Адрес • Команда

таблиц маршрутизации в компьютерной сети

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

Когда пакет достигает маршрутизатора, он проверяет IP-адрес получателя полученного пакета и принимает соответствующие решения о маршрутизации.Маршрутизаторы используют таблицы маршрутизации , чтобы определить, на какой интерфейс будет отправлен пакет. В таблице маршрутизации перечислены все сети, для которых известны маршруты. Таблица маршрутизации каждого маршрутизатора уникальна и хранится в оперативной памяти устройства.

Таблица маршрутизации:
Таблица маршрутизации — это набор правил, часто просматриваемых в табличном формате, который используется для определения того, куда будут направляться пакеты данных, проходящие по сети Интернет-протокола (IP). Все IP-устройства, включая маршрутизаторы и коммутаторы, используют таблицы маршрутизации.См. Ниже таблицу маршрутизации:

  Назначение   Маска подсети   Интерфейс 
 128.75.43.0 255.255.255.0 Eth0
 128.75.43.0 255.255.255.128 Eth2
 192.12.17.5 255.255.255.255 Eth4
 default Eth3 

Запись, соответствующая конфигурации шлюза по умолчанию , является сетевым адресатом 0.0.0.0 с сетевой маской (сетевой маской) 0.0.0.0. Маска подсети маршрута по умолчанию всегда 255.255.255.255.

Записи в таблице IP-маршрутизации:
Таблица маршрутизации содержит информацию, необходимую для пересылки пакета по наилучшему пути к месту назначения. Каждый пакет содержит информацию о его происхождении и назначении. Таблица маршрутизации предоставляет устройству инструкции по отправке пакета на следующий переход на его маршруте по сети.

Каждая запись в таблице маршрутизации состоит из следующих записей:

  1. Идентификатор сети:
    Идентификатор сети или пункт назначения, соответствующий маршруту.
  2. Маска подсети:
    Маска, которая используется для сопоставления IP-адреса назначения с идентификатором сети.
  3. Следующий переход:
    IP-адрес, на который пересылается пакет.
  4. Исходящий интерфейс:
    Исходящий интерфейс, пакет должен выйти, чтобы достичь сети назначения.
  5. Метрика:
    Обычно метрика используется для указания минимального количества переходов (пересекаемых маршрутизаторов) для идентификатора сети.

Записи таблицы маршрутизации могут использоваться для хранения следующих типов маршрутов:

  • Идентификаторы сети с прямым подключением
  • Идентификаторы удаленной сети
  • Маршруты хоста
  • Маршрут по умолчанию
  • Назначение

Когда маршрутизатор получает пакет , он проверяет IP-адрес назначения и просматривает свою таблицу маршрутизации , чтобы выяснить, какой интерфейсный пакет будет отправлен.

Как заполняются таблицы маршрутизации?
Есть способы поддерживать таблицу маршрутизации:

Эти таблицы маршрутизации можно поддерживать вручную или динамически.В динамической маршрутизации устройства автоматически создают и поддерживают свои таблицы маршрутизации, используя протоколы маршрутизации для обмена информацией об окружающей топологии сети. Таблицы динамической маршрутизации позволяют устройствам «прослушивать» сеть и реагировать на такие события, как сбои устройств и перегрузка сети. Таблицы для статических сетевых устройств не изменяются, если сетевой администратор не изменит их вручную.

Процесс определения маршрута (поиск идентификатора подсети с помощью таблицы маршрутизации):
Предположим, что сеть разделена на 4 подсети, как показано на рисунке выше.IP-адреса четырех подсетей:

 200.1.2.0 (подсеть a)
200.1.2.64 (Подсеть b)
200.1.2.128 (Подсеть c)
200.1.2.192 (Подсеть d) 

Тогда Таблица маршрутизации , поддерживаемая внутренним маршрутизатором, выглядит следующим образом:

5

12

Назначение Маска подсети Интерфейс
200.1.2.0 .255.192 a
200.1.2.64 255.255.255.192 b
200.1.2.128 255.255.255.192 c
200.1.2.192 255.255.255.192 d по умолчанию

Чтобы найти свою правильную подсеть (идентификатор подсети), маршрутизатор выполняет побитовое И для IP-адреса назначения, указанного в пакете данных, и все маски подсети одну за другой.

  • Если обнаружено только одно совпадение, маршрутизатор пересылает пакет данных на соответствующий интерфейс.
  • Если найдено более одного совпадения, маршрутизатор пересылает пакет данных на интерфейс, соответствующий самой длинной маске подсети.
  • Если совпадений нет, маршрутизатор пересылает пакет данных на интерфейс, соответствующий записи по умолчанию.

Пример-1: GATE-CS-2004 | Вопрос 55

Пример-2: GATE IT 2006 | Вопрос 63

Отметьте , что таблицы маршрутизации не являются специфическими для устройств Cisco. Даже в вашей операционной системе Windows есть таблица маршрутизации, которую можно отобразить с помощью команды route print

Как работает таблица маршрутизации?

В нашем последнем «объясненном» посте Как работает маршрутизатор вы ознакомились с принципом работы маршрутизатора.Итого:

  • Маршрутизаторы имеют интерфейса , которые соединяют с другими сетевыми устройствами
  • Когда пакет приходит на интерфейс, маршрутизатору необходимо найти правильный интерфейс для отправки пакета
  • Поле IP-адреса назначения пакета проверяется на соответствие информации, хранящейся в маршрутизаторе
  • Если есть совпадение, пакет отправляется через соответствующий интерфейс
  • этот процесс повторяется на каждом маршрутизаторе

Маршрутный стол

В этом посте мы сосредоточимся на следующем процессе: «поле IP-адреса назначения пакета проверяется на соответствие информации, хранящейся в маршрутизаторе» . Место, где хранится информация о маршрутизации, называется таблицей маршрутизации . Таблица маршрутизации содержит записи маршрутизации, то есть список пунктов назначения (часто называемый: список сетевых префиксов или маршрутов).

Когда запущен ПРОСМОТР МАРШРУТА:

  1. Имея IP-адрес назначения пакета, маршрутизаторы всегда выбирают наилучшее соответствие ВХОД МАРШРУТИЗАТОРА . Это означает ДЛИННОЕ СОГЛАСОВАНИЕ ПРЕФИКСА . Это означает, что в нашем случае запись: 192.168.1.20 / 32 точнее 192.168.1.0/24 при поиске 192.168.1.20.
  2. Почему этот точнее? Поскольку запись 192.168.1.20/32 соответствует ровно 32 битам нашего IP-адреса назначения, тогда как 192.168.1.0/24 соответствует только 24 битам нашего адреса. Если вам нужно понять IP-адресацию, прочтите наш пост об IP-адресации, подсетях и планировании.

И последнее, но не менее важное: как маршрутизаторы узнают правильные места назначения?

Есть два варианта:

  • Мы можем явно указать маршрутизатору, как маршрутизировать к месту назначения: например: если вы хотите перейти к C, перейдите через маршрутизатор 2.Это так называемая СТАТИЧЕСКАЯ МАРШРУТИЗАЦИЯ , где пункты назначения записываются в конфигурацию маршрутизатора статически (вручную администратором сети). На рисунке ниже оранжевые элементы необходимо ввести в маршрутизатор вручную.

А теперь представьте, что вам нужно настроить все интернет-направления, более 600 000 маршрутов! Нужно ли нам вручную предоставить более 600 тыс. Записей? Ни за что. Есть идея поумнее и называется:

  • ДИНАМИЧЕСКАЯ МАРШРУТИЗАЦИЯ .С помощью динамической маршрутизации мы можем настроить маршрутизаторы на получение IP-адресов от других маршрутизаторов, которые также участвуют в том же процессе маршрутизации.

Пример: К маршрутизатору 3 подключен портативный компьютер C, поэтому он объявляет сетевой адрес C соседним маршрутизаторам. Соседний маршрутизатор Маршрутизатор 2 получает объявление и вводит префикс C в свою таблицу маршрутизации и, в свою очередь, отправляет информацию о сети C своим соответствующим соседям (маршрутизатор 1). Таким образом, без вмешательства человека вся сеть может узнать пункты назначения и создать топологию маршрутизации.

Чтобы узнать больше о том, где использовать статическую, а где динамическую маршрутизацию, прочтите этот пост.

Чтобы узнать, как настроить статическую маршрутизацию, прочтите этот раздел дизайна и конфигурации.

Чтобы узнать о динамической маршрутизации, прочтите, например, раздел EIGRP

.

Чтобы увидеть другие сообщения по основам работы в сети и беспроводной связи, см. Наш поясненный раздел.

Чтобы подписаться на наш список рассылки для нашей онлайн-платформы, где вы можете узнать обо всем этом, посетите GrandmetricWatch.Мы сообщим вам, когда он выйдет в эфир.

Что такое таблица маршрутизации? — Определение с сайта WhatIs.com

От

Таблица маршрутизации — это набор правил, часто просматриваемых в табличном формате, который используется для определения, куда будут направляться пакеты данных, проходящие по сети Интернет-протокола (IP). Все IP-устройства, включая маршрутизаторы и коммутаторы, используют таблицы маршрутизации.

Таблица маршрутизации содержит информацию, необходимую для пересылки пакета по наилучшему пути к месту назначения.Каждый пакет содержит информацию о его происхождении и назначении. Когда пакет получен, сетевое устройство проверяет пакет и сопоставляет его с записью в таблице маршрутизации, обеспечивая наилучшее соответствие его получателю. Затем таблица предоставляет устройству инструкции по отправке пакета на следующий переход на его маршруте по сети.

Базовая таблица маршрутизации включает следующую информацию:

  • Назначение: IP-адрес конечного пункта назначения пакета
  • Следующий переход: IP-адрес, на который пересылается пакет
  • Интерфейс: исходящий сетевой интерфейс, который устройство должно использовать при пересылке пакета на следующий переход или конечный пункт назначения
  • Метрика: назначает стоимость каждому доступному маршруту, чтобы можно было выбрать наиболее экономичный путь.
  • Маршруты: включает непосредственно подключенные подсети, косвенные подсети, которые не подключены к устройству, но могут быть доступны через один или несколько переходов, а также маршруты по умолчанию для использования для определенных типов трафика или при отсутствии информации.

    Таблицы маршрутизации можно вести вручную или динамически. Таблицы для статических сетевых устройств не изменяются, если сетевой администратор не изменит их вручную. При динамической маршрутизации устройства автоматически создают и поддерживают свои таблицы маршрутизации, используя протоколы маршрутизации для обмена информацией об окружающей топологии сети. Таблицы динамической маршрутизации позволяют устройствам «прослушивать» сеть и реагировать на такие события, как сбои устройств и перегрузка сети.

Последний раз обновлялся в апреле 2007 г.


Продолжить чтение о таблице маршрутизации

Узнайте больше о сетевой инфраструктуре

Объяснение таблицы маршрутизации | CCNA

Маршрутизаторы проверяют IP-адрес получателя полученного пакета и принимают соответствующие решения о маршрутизации.Чтобы определить, на какой интерфейс будет отправлен пакет, маршрутизаторы используют таблицы маршрутизации . В таблице маршрутизации перечислены все сети, для которых известны маршруты. Таблица маршрутизации каждого маршрутизатора уникальна и хранится в оперативной памяти устройства.

Когда маршрутизатор получает пакет, который необходимо переслать на хост в другой сети, он проверяет свой IP-адрес назначения и ищет информацию о маршрутизации, хранящуюся в таблице маршрутизации. Каждая запись в таблице маршрутизации состоит из следующих записей:

  • сеть и маска подсети — указывает диапазон IP-адресов.
  • удаленный маршрутизатор — IP-адрес маршрутизатора, который используется для доступа к этой сети.
  • исходящий интерфейс — исходящий интерфейс, из которого пакет должен выйти, чтобы достичь сети назначения.

Рассмотрим следующий пример:

В приведенном выше примере у нас есть сеть из двух компьютеров и маршрутизатора. Хост A хочет связаться с хостом B. Поскольку хосты находятся в разных подсетях, хост A отправляет свой пакет на шлюз по умолчанию (маршрутизатор).Маршрутизатор получает пакет, проверяет IP-адрес назначения и просматривает свою таблицу маршрутизации, чтобы выяснить, на какой интерфейс будет отправлен пакет. Команду show ip route можно использовать для отображения таблицы маршрутизации маршрутизатора:

Это запись, которая будет использоваться для маршрутизации пакета:

Строка выше указывает, что каждый пакет, предназначенный для 10.0.0.0/8 сеть будет отправлена ​​через интерфейс Fa0 / 1 .Вот описание каждого поля:

  • C — означает подключенных . Каждая напрямую подключенная сеть автоматически добавляется в таблицу маршрутизации.
  • 10.0.0.0/8 — указывает диапазон IP-адресов, для которых будет использоваться маршрут, в данном случае все IP-адреса из следующего диапазона: 10.0.0.0 — 10.255.255.255.
  • FastEthernet0 / 1 — указывает интерфейс, на который будет отправлен пакет, чтобы достичь сети назначения.

Для заполнения таблицы маршрутизации используются методы:

  • сети с прямым подключением добавляются автоматически
  • с использованием статической маршрутизации
  • с использованием динамической маршрутизации

Обратите внимание, что таблицы маршрутизации не относятся к устройствам Cisco. Даже в вашей операционной системе Windows есть таблица маршрутизации, которую можно отобразить с помощью команды route print :

Введение в сетевую маршрутизацию Linux

В июне, когда я обсуждал базовую конфигурацию сети, я не говорил об одной вещи. идет маршрутизация.Эта статья представляет собой очень краткое введение в маршрутизацию для компьютеров Linux, предназначенное для понимания простых сред.

Каждый компьютер, подключенный к сети, требует определенных инструкций маршрутизации для сетевых пакетов TCP / IP, когда они покидают локальный хост. Обычно это очень просто, потому что большинство сетевых сред очень просты и есть только два варианта исходящих пакетов. Все пакеты отправляются либо на устройство в локальной сети, либо в другую удаленную сеть.

Давайте обязательно определим «локальную» сеть как логическую и обычно также как физическую сеть, в которой находится локальный хост. Логически это означает локальную подсеть, в которой хосту назначается один из диапазона IP-адресов локальной подсети. Физически это означает, что хост подключен к одному или нескольким коммутаторам, которые также подключены к остальной части локальной сети.

Модель сети TCP / IP

Прежде чем мы перейдем к маршрутизации, это помогает немного понять, как пакеты попадают на нужный хост в сети.Сетевая модель TCP / IP определяет пятиуровневый стек, который описывает механизмы, необходимые для перемещения пакетов данных с одного хоста на другой, независимо от того, находится ли этот хост в локальной сети или на другом конце света. Каждый из уровней в следующем описании этой модели пронумерован и также содержит имена блоков данных, которые обрабатываются этим уровнем.

5. Прикладной уровень: сообщение Этот уровень состоит из протоколов подключения, необходимых для взаимодействия различных сетевых приложений, таких как HTTP, DHCP, SSH, FTP, SMTP, IMAP и другие.Когда вы запрашиваете веб-страницу с удаленного веб-сайта, запрос на соединение отправляется на веб-сервер, и ответ отправляется обратно на ваш хост на этом уровне, а затем ваш браузер отображает веб-страницу в своем окне.

4. Транспортный уровень: сегмент TCP. Транспортный уровень предоставляет услуги сквозной передачи данных и управления потоками, которые не зависят от данных и типов передаваемых протоколов. Он использует такие порты, как 80 для HTTP и 25 для SMTP, для установления соединений между отправляющим узлом и удаленным узлом.

3. Интернет-уровень: Пакетный. Маршрутизация пакетов выполняется на уровне Интернета. Этот уровень отвечает за маршрутизацию пакетов через две или более разных сетей, чтобы достичь их конечного пункта назначения. Этот уровень использует IP-адреса и таблицу маршрутизации, чтобы определить, на какое устройство отправлять пакеты следующим образом. При отправке на маршрутизатор каждый маршрутизатор отвечает за отправку пакетов данных только следующему маршрутизатору в серии, а не за отображение всего маршрута от локального хоста к целевому хосту.Уровень Интернета в основном связан с маршрутизаторами, которые общаются с маршрутизаторами, чтобы определить следующий маршрутизатор в цепочке.

2. Уровень канала передачи данных: кадр. Канальный уровень управляет прямыми соединениями между аппаратными хостами в единой локальной логической физической сети. Этот уровень использует адреса управления доступом к среде (MAC), встроенные в карты сетевого интерфейса (NIC), для идентификации физических устройств, подключенных к локальной сети. Этот уровень не может получить доступ к хостам, которые не находятся в локальной сети.

1. Физический уровень: биты. Это аппаратный уровень, состоящий из сетевых адаптеров и физического кабеля Ethernet, а также протоколов аппаратного уровня, используемых для передачи отдельных битов, составляющих кадры данных между любыми двумя хостами или другими сетевыми узлами, подключенными локально.

Простой пример

Итак, как это выглядит, когда хост фактически отправляет данные в сеть, используя модель сети TCP / IP? Вот мое собственное вымышленное описание того, как данные перемещаются из одной сети в другую.В этом примере мой компьютер отправляет запрос на удаленный сервер для веб-страницы.

  1. На уровне приложения браузер инициирует сообщение запроса HTTP-соединения на удаленный хост, www.example.com, чтобы отправить обратно данные, составляющие содержимое веб-страницы. Это сообщение, и оно включает только IP-адрес удаленного веб-сервера.

  2. Транспортный уровень инкапсулирует сообщение, содержащее запрос веб-страницы, в дейтаграмму TCP с IP-адресом удаленного веб-сервера в качестве пункта назначения.Наряду с исходным пакетом запроса этот пакет теперь включает порт источника, из которого будет исходить запрос, обычно случайный порт с очень большим числом, так что возвращаемые данные знают, какой порт прослушивает браузер; и порт назначения на удаленном хосте, в данном случае порт 80.

  3. Уровень Интернета инкапсулирует датаграмму TCP в пакет, который также содержит IP-адреса источника и назначения.

  4. Канальный уровень данных использует протокол разрешения адресов (ARP) для определения физического MAC-адреса маршрутизатора по умолчанию и инкапсулирует Интернет-пакет в кадр, который включает MAC-адреса источника и назначения.

  5. Кадр отправляется по проводам, обычно CAT5 или CAT6, от сетевого адаптера на локальном хосте к сетевому адаптеру маршрутизатора по умолчанию.

  6. Маршрутизатор по умолчанию открывает дейтаграмму и определяет IP-адрес назначения. Маршрутизатор использует свою собственную таблицу маршрутизации для определения IP-адреса следующего маршрутизатора, который перенесет кадр на следующий этап своего пути. Затем маршрутизатор повторно инкапсулирует кадр в новую дейтаграмму, которая содержит собственный MAC-адрес в качестве источника и MAC-адрес следующего маршрутизатора, а затем отправляет его через соответствующий интерфейс.Маршрутизатор выполняет свою задачу маршрутизации на уровне 3, уровне Интернета.

Обратите внимание, что коммутаторы невидимы для всех протоколов на уровнях два и выше, поэтому они не влияют на передачу данных каким-либо логическим образом. Функция коммутаторов заключается просто в предоставлении простых средств для соединения нескольких хостов в единую физическую сеть с помощью длинного кабеля Ethernet.

Вы можете использовать команду arp [-n] для просмотра всех MAC-адресов, которые ваш хост сохранил в своей таблице arp.Это всегда хосты в локальной сети.

Таблица маршрутизации

Все сетевые устройства, будь то хосты, маршрутизаторы или другие типы сетевых узлов, такие как подключенные к сети принтеры, должны принимать решения о том, куда направлять пакеты данных TCP / IP. Таблица маршрутизации предоставляет информацию о конфигурации, необходимую для принятия этих решений. Таблица маршрутизации, аналогичная очень простой, показанной на рисунке 1, используется для определения единственного маршрута, доступного для типичного локального хоста, и для определения того, следует ли отправлять пакеты на маршрутизатор шлюза по умолчанию. .Команда route -n отображает таблицу маршрутизации; опция -n отображает результаты только как IP-адреса и не пытается выполнить поиск в DNS, который заменит IP-адрес на имена хостов, если они доступны. Команда netstat r n дает очень похожие результаты.

 

[root @ host1 ~] # route -n
Таблица IP-маршрутизации ядра
Флаги Genmask шлюза назначения Метрика Ref Использовать Iface
0.0.0.0 192.168.0.254 0.0.0.0 UG 100 0 0 eno1
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eno1

Рисунок 1. Простая таблица маршрутизации.

Шлюз по умолчанию всегда отображается с местом назначения 0.0.0.0, если используется опция -n. Если -n не используется, в столбце «Назначение» вывода появляется слово «По умолчанию». IP-адрес в столбце Gateway — это IP-адрес маршрутизатора исходящего шлюза.Сетевая маска 0.0.0.0 для шлюза по умолчанию означает, что любой пакет, не адресованный локальной сети или другому исходящему маршрутизатору дополнительными записями в таблице маршрутизации, должен быть отправлен на шлюз по умолчанию независимо от класса сети.

Столбец Iface (интерфейс) на рисунке 1 — это имя исходящей сетевой карты, в данном случае eno1. Для хостов, которые действуют как маршрутизаторы, вероятно, будут использоваться как минимум две, а иногда и больше сетевых адаптеров. Каждая сетевая карта, используемая в качестве маршрута, будет подключена к разным физическим и логическим сетям.Флаги в столбце «Флаг» указывают на то, что это маршрут «Вверх» (U) и шлюз по умолчанию (G). Также могут присутствовать другие флаги.

Решения о маршрутизации для большинства хостов довольно просты:

  • Если целевой хост находится в локальной сети, отправьте данные непосредственно на целевой хост.
  • Если целевой хост находится в удаленной сети, доступной через локальный шлюз, указанный в таблице маршрутизации, отправьте его на явно определенный шлюз.
  • Если хост назначения находится в удаленной сети и нет другой записи, определяющей маршрут к этому хосту, отправьте данные на шлюз по умолчанию.

Эти правила просто означают, что если все остальное не удается из-за отсутствия совпадения, отправьте пакет на шлюз по умолчанию.

Таблица маршрутизации на рисунке 2 ниже немного сложнее, потому что она принадлежит хосту Linux, действующему как маршрутизатор, который подключается к трем сетям, одна из которых ведет в Интернет. Каждая локальная сеть класса C, 192.168.0.0/24 на интерфейсе eth2, 192.168.25.0/24 на eth3, имеет записи в таблице, а также маршрут по умолчанию, который ведет к остальному миру на eth0.

 

[root @ host2 ~] # route -n
Таблица IP-маршрутизации ядра
Флаги Genmask шлюза назначения Метрика Ref Использование Iface
192.168.1.24 0.0.0.0 255.255.255.252 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
192.168.25.0 0.0.0.0 255.255.255.0 U 0 0 0 eth3
0.0.0.0 192.168.1.25 0.0.0.0 UG 0 0 0 eth0

Рисунок 2: Более сложная таблица маршрутизации с несколькими сетями.

Обратите внимание, что по-прежнему существует только один шлюз по умолчанию, и он находится на интерфейсе eth0. Однако, помимо записи маршрута по умолчанию, которая указывает непосредственно на IP-адрес маршрутизатора на стороне LAN, существует также запись для сети 192.168.1.24/30 в целом. Эта сеть содержит только два используемых IP-адреса: один 192.168.1.25/30 для стороны LAN маршрутизатора и один 192.168.1.26/30 для самого хоста.

Конфигурация маршрутизации

Так как же настраивается таблица маршрутизации? Для хостов, подключенных к сети с помощью DHCP, DHCP-сервер предоставляет эту информацию о конфигурации для маршрута по умолчанию вместе с DNS, IP-адресом хоста и, возможно, другой информацией, такой как IP-адрес для NTP-сервера.Для статических конфигураций это обычно просто, но иногда может быть немного сложнее.

В большинстве случаев добавление маршрута по умолчанию в файл / etc / sysconfig / network заставляет сеть настраивать маршрут по умолчанию в таблице маршрутизации. Эта запись похожа на образец на рисунке 3.

 

Рисунок 3: Запись шлюза в сетевом файле.

С помощью сетевого файла можно настроить только шлюз по умолчанию.

Другой метод настройки шлюза по умолчанию в статически настроенной среде — добавить его в соответствующий файл конфигурации интерфейса в каталоге / etc / sysconfig / network-scripts.Чтобы добавить шлюз в файл конфигурации интерфейса для интерфейса eth0, вы должны добавить ту же строку, что и на рисунке 3 выше, в файл ifcfg-eth0. Если вы это сделаете, вам следует удалить эту запись из сетевого файла.

В более сложной среде, например, когда хост-компьютер подключен к нескольким сетям с использованием нескольких сетевых адаптеров, и когда есть по крайней мере два и, возможно, больше маршрутов, которые необходимо ввести в таблицу маршрутизации, вам следует рассмотреть возможность использования файла маршрута в / etc / sysconfig / network-scripts.Для сетевой карты enp7s1 этот файл будет route-enp7s1, и он будет содержать запись, показанную на рисунке 4.

 

по умолчанию через 192.168.0.1 dev enp7s1

Рисунок 4. Запись маршрута по умолчанию для enp7s1.

Параметры шлюза по умолчанию в файлах интерфейса маршрутов имеют приоритет над любыми параметрами, которые могут быть перечислены в сетевом файле.

Конечно, вы всегда можете добавить маршруты из командной строки с помощью команды route . Это может занять некоторое время, если вам нужно делать это каждый раз при загрузке системы, поэтому вы можете рассмотреть возможность использования описанных выше методов или создания сценария, который запускается во время загрузки.У меня есть сценарий для одной из моих систем, который содержит следующие две строки, как показано на рисунке 5.

 

маршрут по умолчанию
маршрут добавить по умолчанию gw 192.168.0.1

Рисунок 5: Команды для установки маршрута по умолчанию из командной строки.

Обратите внимание, что имя устройства является необязательным во всех этих командах и не используется на рисунке 5.

Заключение

В маршрутизации может быть намного больше, чем показано в этих довольно простых примерах, которые довольно часто встречаются.Информация здесь должна помочь вам начать работу. Для более сложных сред вы можете обратиться к Inside TCP / IP, Second Edition или TCP / IP Network Administration by Craig Hunt. Вы также можете обратиться к документации вашего дистрибутива для получения дополнительной информации; для дистрибутивов на основе rpm, таких как Fedora и CentOS, хорошим ориентиром является руководство по развертыванию Red Hat Enterprise Linux 7.

Таблица маршрутизации

— Сетевая энциклопедия

Определение таблицы маршрутизации в сетевой энциклопедии.

Что такое таблица маршрутизации?

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

Таблица маршрутизации

Платформы Microsoft Windows автоматически создают свои собственные таблицы маршрутизации, которые используются для определения того, следует ли пересылать определенные пакеты по адресу:

  • Сегмент локальной сети
  • Интерфейс ближнего маршрутизатора
  • Шлюз по умолчанию для сегмента

Для просмотра внутренней таблицы маршрутизации TCP / IP на компьютере под управлением Windows 2000, Windows NT, Windows 98 или Windows 95 введите в командной строке route print .

Типичная таблица маршрутизации выглядит следующим образом:

 Активные маршруты: 
Сетевой адрес Маска сети Адрес шлюза Метрика интерфейса
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
172.16.8.0 255.255.255.0 172.16.8.50 172.16.8.50 1
172.16.8.50 255.255.255.255 127.0.0.1 127.0.0.1 1
172.16.255.255 255.255.255.255 172.16.8.50 172.16.8.50 1
224.0.0.0 224.0.0.0 172.16.8.50 172.16.8.50 1
255.255.255.255 255.255.255.255 172.16.8.50 172.16.8.50 1

Этот компьютер имеет одну сетевую карту (NIC) с адресом 172.16.8.50. Столбцы этой таблицы следующие:

  • Сетевой адрес: Сетевой адрес назначения в сети
  • Сетевая маска: Часть сетевого адреса, которая должна совпадать для использования этого маршрута
  • Адрес шлюза: Где должен быть пакет перенаправлено (локальная сетевая карта или интерфейс локального маршрутизатора)
  • Интерфейс: Адрес сетевой карты, через которую должен быть отправлен пакет
  • Метрика: Количество переходов в сеть назначения

Таблица пересылки

Таблицы маршрутизации обычно не используются напрямую для пересылки пакетов в современных архитектурах маршрутизаторов; вместо этого они используются для генерации информации для меньшей таблицы пересылки.Эта таблица пересылки содержит только маршруты, выбранные алгоритмом маршрутизации в качестве предпочтительных маршрутов для пересылки пакетов. Часто это сжатый или предварительно скомпилированный формат, оптимизированный для аппаратного хранения и поиска.

Эта архитектура маршрутизатора отделяет функцию плоскости управления таблицы маршрутизации от функции плоскости пересылки таблицы пересылки. Такое разделение управления и пересылки обеспечивает бесперебойную работу.

Статическая маршрутизация

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

Динамическая маршрутизация

Динамическая маршрутизация — это механизм маршрутизации, управляемый протоколом маршрутизации, таким как протокол информации о маршрутизации (RIP) или протокол OSPF, который динамически обменивается информацией маршрутизации между маршрутизаторами в объединенной сети.Маршрутизаторы, использующие этот метод, называются динамическими маршрутизаторами.

Таблица маршрутизации в Microsoft Exchange

В Microsoft Exchange Server таблица маршрутизации — это внутренняя таблица, которая определяет, как сообщения могут быть перенаправлены на другие сайты в организации Exchange и во внешние почтовые системы через установленные соединители и шлюзы. Эта таблица маршрутизации обычно известна как таблица маршрутизации адресов шлюза (GWART).

См. Также:
Таблица маршрутизации объяснена в видео

Проект документации Linux

Информация о LDP

FAQ

Манифест / лицензия

История

Волонтеры / сотрудники

Должностные инструкции

Списки рассылки

IRC

Обратная связь

Автор / внесите свой вклад

Руководство для авторов LDP

Внести свой вклад / помочь

Ресурсы

Как отправить

Репозиторий GIT

Загрузок

Контакты

Спонсор сайта LDP
Мастерская

LDP Wiki : LDP Wiki — это отправная точка для любой незавершенной работы
Члены |
Авторы |
Посетители
Документы


HOWTO
:
тематическая справка
последние обновления |
основной индекс |
просматривать по категориям


Руководства
:
более длинные, подробные книги
последние обновления / основной указатель


Часто задаваемые вопросы
:
Часто задаваемые вопросы
последние обновления / основной указатель


страницы руководства
:
справка по отдельным командам (20060810)

Бюллетень Linux
:
Интернет-журнал
Поиск / Ресурсы

Ссылки

Поиск OMF

Объявления / Разное

Обновления документов
Ссылка на HOWTO, которые были недавно обновлены.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *