Как настроить систему маршрутизации в глобальных сетях
Перейти к содержимому

Как настроить систему маршрутизации в глобальных сетях

  • автор:

Name already in use

Computer-networks-lessons-in-Russian / content / pr7-staticheskaya-marshrutizatsiya.md

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink
  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

Практическая работа №7. Статическая маршрутизация

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

Маршрутизация бывает 2-х видов: статические и динамическая. При этом, статическая маршрутизация обладает следующими преимуществами:

маршруты не объявляются в сети – лучшая безопасность;

меньшее потребление ресурсов сети и ЦП по сравнению с динамическими протоколами;

маршрут заранее известен.

Но конфигурация статических маршрутов сложнее и тяжело масштабируема – вероятность ошибки при настройке гораздо выше. Обычно, статическая маршрутизация используется в маленьких сетях, при необходимости жёстко задать маршрут (к Интернет-провайдеру, например), при резервировании маршрутов (на случай отказа какого-либо узла связи). Различают 4 типа статических маршрутов:

  1. Стандартный;
  2. По умолчанию;
  3. Суммарный;
  4. «Плавающий».

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

Router(config)# ip route network-address subnet-mask < ip-address | interface-type interface-number [ ip-address ]>[ distance ] [namename ] [permanent] [tagtag ]

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

Router(config)# ip route 192.168.2.0 255.255.255.0 GigabitEthernet 0/1

Рекомендуется проводить конфигурацию полного маршрута (адрес и интерфейс) либо с указанием по крайней мере адреса следующего узла:

Router(config)# ip route 192.168.2.0 255.255.255.0 GigabitEthernet 0/1 192.168.2.1

Router(config)# ip route 192.168.2.0 255.255.255.0 192.168.2.1

Для проверки статических маршрутов выполняется:

Router# show ip route static

Можем просматривать также маршруты только определённых сетей

Router# show ip route 192.168.2.1

Маршруты по умолчанию совпадают со всеми адресами. Если какой-либо из маршрутов не совпадает с записями в таблице маршрутизации, то пакеты посылаются по маршруту по умолчанию через «шлюз последней надежды» (gateway of last resort):

Router(config)# ip route 0.0.0.0 0.0.0.0

Обычно такие маршруты прописываются на пограничных/тупиковых узлах (uplinkк провайдеру).

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

172.22.1.128:10101100.00010110.00000001.10000000

172.22.1.160:10101100.00010110.00000001.10100000

pr7sum.png

«Плавающие» маршруты (floating route) настраиваются в целях резервирования. Например, если основный маршрут станет недоступным, «плавающий» маршрут активируется. Обычно, такие маршруты резервируют динамически изученные маршруты (OSPG,EIGRP). Это достигается за счет установки административного расстояния большего, чем у основного. Административное расстояние показывает насколько авторитетным является тот или иной способ получения маршрута (меньше значение – больше авторитетность), например, статические маршруты к одним и тем же сетям обладают меньшим административным расстоянием, чем любой динамический маршрут. Примеры административных расстояний у динамических протоколов: EIGRP = 90, IGRP = 100, OSPF = 110, IS-IS = 115, RIP = 120. Для конфигурации подобного маршрута, наряду с обычным параметрами указывается:

В целях диагностики маршрутов (трассировка промежуточных узлов) выполняются следующие команды:

Router# tracerouteip-address %на устройстве Cisco

C:\>tracert ip-address %Windows

Задание

  1. Собрать сеть как на Рисунке ниже. Для этого необходимо выключить роутеры и добавить по модулю HWIC-2T и заново включить.!

pr7topo.png

2. Подключить и настроить интерфейсы роутеров в соответствии с планом адресации из Таблицы:

Посчитать суммарный маршрут для домена сети с VLAN. Примечание: хотя адреса сетей в этом домене не смежные, в целях обучения это допускается.

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

Проверить доступность ПК в сети командой ping.

Проверить таблицы маршрутизации на роутерах.

Описать маршрут пакетов (названиями узлов) при выполнении команды tracert на ПК1 до ПК7.

ОСНОВЫ МАРШРУТИЗАЦИИ: RIP И OSPF

Основы

Крупные сети, такие как Internet, организованы как множество автономных систем (autonomous system – AS). Каждая из них обычно администрируется как отдельная сетевая структура, поэтому использование одного протокола маршрутизации в таких сетях маловероятно. Как мы уже знаем маршрутизатор, исходя из IP-адреса, указанного в заголовке пакета, в соответствии с своей таблицей маршрутизации определяет путь для передаваемых данных.
Таблицы маршрутизации задаются как вручную (статическая маршрутизация), так и динамически (динамическая маршрутизация).

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

Так как статические маршруты настраиваются вручную, то любые изменения сетевой топологии требуют участия администратора для корректировки таблиц маршрутизации. В рамках маленькой сети такие изменения незначительны и происходят крайне редко. И наоборот, в крупных сетях корректировка таблиц маршрутизации может потребовать огромных затрат времени.
Если доступ к сети может быть получен только по одному направлению, то указание статического маршрута может оказаться вполне достаточным. Такой тип сети носит название тупиковой сети (stub network). Для настройки статической маршрутизации на роутере необходимо внести запись о сети, которую может достигнуть пакет, отправленный в определенный интерфейс.
Для этого необходимо в конфигурационном режиме ввести команду ip route, в которой указываем IP-адрес и маску сети назначения, тип и номер интерфейса, через который эта сеть может быть достигнута

R1(config)# ip route [destination network] [mask] [interface: type and number]

Пример: Для сети, изображенной на рисунке необходимо настроить маршрутизацию таким образом, чтобы роутер (R1) пересылал пакеты в сети 92.154.228.0/22 и 92.154.232.0/22

Решением будет указанием 2 команд:

R1(config)# ip route 92.154.228.0 255.255.252.0 Se 1/0
R1(config)# ip route 92.154.232.0 255.255.252.0 Se 1/0

Для проверки конфигурации набираем команду show ip route

R1# show ip route
Codes: C — connected, S — static, I — IGRP, R — RIP, M — mobile,
D — EIGRP, EX — EIGRP external, O — OSPF,
92.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
C 92.154.224.0/22 is directly connected, FastEthernet0/0
S 92.154.228.0/22 is directly connected, Serial1/0
S 92.154.232.0/22 is directly connected, Serial1/0
C 92.154.252.0/30 is directly connected, Serial1/0

Как видно из вывода команды кроме подсоединенных сетей появились 2 записи по которым роутер будет все пришедшие к нему пакеты для сетей 92.154.228.0/22 и 92.154.232.0/22 маршрутизировать на интерфейс Serial1/0.

Для того чтобы пакеты из этих сетей уходили обратно необходимо подобным образом настроить роутеры R2 и R3

R2(config)# ip route 92.154.224.0 255.255.252.0 serial 1/0
R2(config)# ip route 92.154.232.0 255.255.252.0 serial 1/1

R3(config)# ip route 92.154.224.0 255.255.252.0 serial 1/0
R3(config)# ip route 92.154.228.0 255.255.252.0 serial 1/0

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

R1(config)# ip route 92.154.228.0 255.255.252.0 92.154.252.2

R1(config)# ip route 92.154.232.0 255.255.252.0 92.154.252.2

R1# show ip route static
92.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
S 92.154.228.0/22 [1/0] via 92.154.252.2
S 92.154.232.0/22 [1/0] via 92.154.252.2

Для отмены статического маршрута используется команда no ip route

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

При динамической маршрутизации происходит обмен маршрутной информацией между соседними маршрутизаторами, в ходе которого они сообщают друг другу, какие сети в данный момент доступны через них. Информация обрабатывается и помещается в таблицу маршрутизации. К наиболее распространенным внутренним протоколам маршрутизации относятся:
RIP (Routing Information Protocol) — протокол маршрутной информации
OSPF (Open Shortest Path First) — протокол выбора кратчайшего маршрута
EIGRP (Enhanced Interior Gateway Routing Protocol) — усовершенствованный протокол маршрутизации внутреннего шлюза
IGRP (Interior Gateway Routing Protocol) — протокол маршрутизации внутреннего шлюза

Протокол динамической маршрутизации выбирается исходя из множества предпосылок (скорость конвергенции, размер сети, задействование ресурсов, внедрение и сопровождение и др.) поэтому прежде всего, во внимание принимаются такие характеристики, как размер сети, доступная полоса пропускания, аппаратные возможности процессоров маршрутизирующих устройств, модели и типы маршрутизаторов.
Большинство алгоритмов маршрутизации может быть отнесено к одной из двух категорий: дистанционно-векторные протоколы (RIPv1, RIPv2, RIPng, IGRP, EIGRP, EIGRP for IPv6) и протоколы с учетом состояния канала (OSPFv2, OSPFv3, IS-IS, IS-IS for IPv6).

Routing Information Protocol (RIP)

Протокол RIP является дистанционно-векторным протоколом маршрутизации. Протоколы динамической маршрутизации определяют оптимальный путь к необходимой сети на основании значения, которое называется метрикой. В качестве метрики в протоколе RIP используется количество транзитных устройств или переходов (hop count – прыжок пакета) из одной сетевой структуры в другую. Максимальное число таких переходов равно 15. А все сети, число переходов до которых превышает 15, считаются недостижимыми. Маршрутизаторы, на которых настроен протокол RIP, периодически (по умолчанию каждые 30 с) пересылают полные анонсы маршрутов, в которых содержится информация обо всех известных им сетях.

Работа протокола RIP

Рассмотрим процесс обработки маршрутизатором R1 маршрута к сети 172.30.22.0 Протокол RIP настроен на обоих роутерах R1 и R2 во все непосредственно подсоединенные сети.

Сеть 172.30.22.0 напрямую подключена к маршрутизатору R2, поэтому счетчик переходов для нее равен 0
Когда R2 пересылает анонс маршрута к такой сети, он устанавливает значение счетчика равным 1. Получив анонс от R2, маршрутизатор R1 заносит маршрут к сети 172.30.22.0 в свою таблицу маршрутизации и считает этот маршрут оптимальным, поскольку других маршрутов у него нет.
В качестве исходящего интерфейса для нового маршрута R1 использует S0/0, поскольку анонс был получен через него.
В качестве адреса следующего транзитного устройства на маршруте использует 172.30.1.2, поскольку анонс маршрутизации был получен от отправителя с этим IP-адресом.

Из анонсов маршрутов исключаются некоторые маршруты для того чтобы исключить кольцевые маршруты и зацикливание пакетов. Кольцевой маршрут образуется когда два или более маршрутизаторов пересылают друг другу пакеты по замкнутому пути при котором пакеты не достигают нужного получателя. Кольцевой маршрут будет действовать до тех пор, пока маршрутизаторы в сети не обновят свои таблицы маршрутизации. Для избежания кольцевых маршрутов, маршрутизаторы рассылают информацию об отказавшем маршруте со специальной метрикой, равной бесконечности (для протокола RIP это значение равно 16). Такая рассылка называется корректировкой маршрута.
Еще один механизм предотвращения кольцевых маршрутов – таймер хранения информации. Когда устройство получает откорректированный маршрут (с максимальной метрикой), свидетельствующий о том, что этот маршрут недоступен, запускается таймер для такого маршрута. Стандартное значение таймера хранения информации равно 180 с. До тех пор пока не истечет таймер, новая информация о маршруте не принимается устройством, но информация от соседнего маршрутизатора, который ранее анонсировал исчезнувший маршрут, принимается и обрабатывается до истечения таймера хранения информации.

Пример сети и ее настройки с использованием протокола RIP

Для настройки на маршрутизаторе протокола RIP необходимо ввести команду router rip. Далее в режиме конфигурирования протокола маршрутизации нужно ввести команду network, содержащую номер сети, подключенной непосредственно к роутеру, информацию о которой следует разглашать в рассылках. Если используется бесклассовая адресация, необходимо включить 2 версию протокола RIP командой version 2

Router1(config)# router rip
Router1(config-router)# network 92.154.224.0
Router1(config-router)# network 92.154.252.0
Router1(config-router)# version 2

Router2(config)# router rip
Router2(config-router)# network 92.154.252.0
Router2(config-router)# network 92.154.252.4
Router2(config-router)# network 92.154.228.0
Router2(config-router)# version 2

Router3(config)# router rip
Router3(config-router)# network 92.154.252.4
Router3(config-router)# network 92.154.232.0
Router3(config-router)# version 2

Проверяем таблицу маршрутизации командой

Router1# show ip route rip

92.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
R 92.154.228.0/22 [120/1] via 92.154.252.2, 00:00:20, Serial1/0
R 92.154.232.0/22 [120/2] via 92.154.252.2, 00:00:20, Serial1/0
R 92.154.252.4/30 [120/1] via 92.154.252.2, 00:00:20, Serial1/0

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

Протокол OSPF является протоколом маршрутизации с учетом состояния каналов. В этом классе протоколов в качестве метрики используется стоимость маршрута, которая рассчитывается на основе пропускной способности каждого канала на пути от маршрутизатора до необходимой сети. Поэтому процесс работы протокола OSPF условно можно разделить на три этапа: обнаружение соседних маршрутизаторов, обмен базами маршрутов и расчет оптимальных маршрутов.
Устройства, подключенные к одному каналу и участвующие в процессе обмена информацией протокола OSPF называются соседними маршрутизаторами. Для обнаружения OSPF-устройств маршрутизаторы рассылают многоадресатные Hello-пакеты через все интерфейсы, на которых настроен протокол OSPF. В запросе содержится следующая информация:
идентификатор маршрутизатора-отправителя Router ID – RID,
идентификатор зоны OSPF Area ID,
Hello-интервал,
интервал обнаружения неработоспособности устройства (dead interval),
приоритет маршрутизатора (router priority),
идентификатор RID выделенного маршрутизатора (designated router DR),
идентификатор RID резервного выделенного маршрутизатора (backup designated router BDR)
список соседних устройств, обнаруженных маршрутизатором-отправителем.

Каждому маршрутизатору присваивается уникальный номер – идентификатор маршрутизатора RID. Он представляет собой 32-битное число, поэтому для удобства в качестве идентификатора используют IP-адрес. Протоколом автоматически выбирается самый старший IP-адрес из всех адресов на интерфейсах устройства (в т.ч. виртуальных).

Например, маршрутизатор «А» получает Hello-сообщение от маршрутизатора «Б». Устройству «А» нужно уведомить маршрутизатор «Б» о том, что сообщение было получено, поэтому маршрутизатор «А» добавляет идентификатор RID маршрутизатора «Б» в свое следующее (и все последующие) Hello-сообщение. Аналогично, когда маршрутизатор «Б» получит Hello-сообщение, он добавит идентификатор RID устройства «А» в свои последующие Hello-сообщения.
Когда маршрутизатор обнаруживает свой идентификатор RID во входящем Hello-сообщении, он считает, что со смежным устройством был установлен двусторонний канал. После этого маршрутизаторы проверяют базовые настройки протокола друг у друга, содержащиеся в Hello-сообщениях: IP-адрес, маску подсети, интервал рассылки Hello-сообщений, интервал обнаружения неработоспособности соседнего устройства (dead interval), идентификатор зоны OSPF (area ID) и др. Настройки должны совпадать, иначе протокол работать не будет.
После проверки, если настройки совпадают, маршрутизаторы могут обмениваться анонсами состояния каналов (Link-State Advertisements – LSA).
После установления двустороннего канала маршрутизаторы продолжают периодически обмениваться Hello-сообщениями. Если связь отсутствуют в течение времени, которое определяется dead-интервалом, то считается, что связь с соседним устройством потеряна. Стандартно в протоколе OSPF интервал рассылки Hello-сообщений равен 10 с, dead-интервал – 40 с.
В анонсах LSA содержится подробная информация о топологии сети. Процесс рассылки этих анонсов называется лавинной рассылкой (flooding), при которой маршрутизаторы пересылают анонсы LSA своим соседям, которые, в свою очередь, рассылают их своим соседям, и так до тех пор, пока все устройства в сети не получат информацию из анонса. Анонсы LSA рассылаются периодически (по умолчанию один раз в 30 мин). По окончании процесса рассылки у всех маршрутизаторов в домене маршрутизации появится общая одинаковая информация о сети. Информация хранится в виде структуры, называемой базой данных состояния каналов link-state database – LSDB.
Когда у каждого маршрутизатора в домене маршрутизации есть идентичная копия базы LSDB, то используется технология протоколов маршрутизации с учетом состояния каналов. Устанавливаются маршруты в таблицу IP-маршрутизации: создаются записи, содержащие адрес подсети, маску, выходной интерфейс и адрес следующего транзитного устройства (next-hop). Для выполнения данной задачи используется алгоритм поиска первого кратчайшего пути Дейкстры.
Протокол OSPF выбирает маршрут между маршрутизатором и какой-либо сетью с наименьшей стоимостью. С каждым интерфейсом на маршруте связано некоторое значение стоимости. Стоимость всех интерфейсов (каналов), через которые пролегает путь к сети, суммируется и выбирается путь, стоимость которого минимальна. Таким образом, каждый маршрутизатор строит маршруты подобно древовидной структуре, в корне которой ставит себя.
Для настройки протокола OSPF используются команда router ospf, которая содержит 16-битный идентификатор процесса от 1 до 65535 и команда network, содержащая номер сети, инверсную маску (wildcard mask) и идентификатор зоны.

Рассмотрим пример настройки протокола OSPF для сети, изображенной выше.

Router1(config)# route ospf 1
Router1(config-router)# network 92.154.252.0 0.0.0.3 area 0
Router1(config-router)# network 92.154.224.0 0.0.3.255 area 0

Router2(config)# router ospf 1
Router2(config-router)# network 92.154.252.0 0.0.0.3 area 0
Router2(config-router)# network 92.154.252.4 0.0.0.3 area 0
Router2(config-router)# network 92.154.228.0 0.0.3.255 area 0

Router3(config)# router ospf 1
Router3(config-router)# network 92.154.252.4 0.0.0.3 area 0
Router3(config-router)# network 92.154.232.0 0.0.3.255 area 0

Проверяем результаты командой Router1# show ip route ospf

92.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
O 92.154.228.0/22 [110/65] via 92.154.252.2, 00:00:26, Serial1/0
O 92.154.232.0/22 [110/846] via 92.154.252.2, 00:00:26, Serial1/0
O 92.154.252.4/30 [110/845] via 92.154.252.2, 00:00:26, Serial1/0

Для просмотра списка соседних маршрутизаторов на которых настроен протокол OSPF, и информации о них используется команда show ip ospf neighbor

Router1#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
92.154.252.5 0 FULL/ — 00:00:37 92.154.252.2 Serial1/0

Для функционирования протокола OSPF важно чтобы хотя бы один интерфейс маршрутизатора, включенный в таблицу маршрутизации протокола OSPF, должен находиться в поднятом (up) состоянии. В противном случае OSPF отключится и последующее включение возможно будет только вручную. Для избежания такой проблемы в сети необходимо настроить и включить в протокол OSPF виртуальный интерфейс loopback.
Для настройки интерфейса loopback используется команда interface loopback, после указывается номер виртуального интерфейса, например:

Router(config)# interface loopback 0
Router(config-if)# ip add 1.1.1.1 255.255.255.255

Типы маршрутизаторов OSPF

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

Общее описание маршрутизаторов OSPF

Граничные маршрутизаторы области

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

Граничные маршрутизаторы автономной системы

Маршрутизаторы ASBR соединены с несколькими автономными системами и обмениваются маршрутной информацией с маршрутизаторами, находящимися в другой автономной системе. В маршрутизаторах ASBR одновременно эксплуатируются протокол OSPF и другой маршрутизирующий протокол, такой как RIP или ВGР. Маршрутизаторы ASBR обрабатывают информацию о внешних маршрутах.

Маршрутизаторы опорной области

Маршрутизаторами опорной области (Backbone Router — BR) называются маршрутизаторы, интерфейсы которых соединяют их только с опорной областью. Они не имеют интерфейсов, подключенных к другим областям OSPF.

Основы статической маршрутизации в Mikrotik RouterOS

Маршрутизация — процесс поиска оптимального пути для передачи пакетов в сетях TCP/IP. Любой устройство подключенное к сети IPv4 содержит процесс и таблицы маршрутизации.

Данная статья не является HOWTO, она описывает на примерах статическую маршрутизацию в RouterOS, я намеренно опускал остальные настройки (например srcnat для доступа в сеть интернет), поэтому для понимания материала требуется определенный уровень знания по сетям и RouterOS.

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

Основы статической маршрутизации в Mikrotik RouterOS

Коммутация — процесс обмена пакетами в пределах одного Layer2 сегмента (Ethernet, ppp, …). Если устройство видит, что получатель пакета находится с ним в одной Ethernet подсети, оно узнает mac адрес по протоколу arp и передает пакет напрямую, минуя маршрутизатор. У ppp (point-to-point) соединения может быть только два участника и пакет всегда отправляется на один адрес 0xff.

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

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

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

Маршрутизация в RouterOS и PacketFlow

Практически весь функционал относящийся к статической маршрутизации находится в пакете system. Пакет routing добавляет поддержку алгоритмов динамической маршрутизации (RIP, OSPF, BGP, MME), Routing Filters и BFD.

Основное меню для настройки маршрутизации: [IP]->[Route] . Сложные схемы могут потребовать предварительную маркировку пакетов маршрутной меткой в: [IP]->[Firewall]->[Mangle] (цепочки PREROUTING и OUTPUT ).

На PacketFlow можно выделить три места, где принимаются решения о маршрутизации IP пакетов:
Основы статической маршрутизации в Mikrotik RouterOS

  1. Маршрутизация пакетов поступивших на роутер. На данном этапе решается уйдет пакет локальному процессу или будет отправлен дальше в сеть. Транзитные пакеты получают Output Interface
  2. Маршрутизация локальных исходящих пакетов. Исходящие пакеты получают Output Interface
  3. Дополнительный этап маршрутизации для исходящих пакетов, позволяет изменить решение о маршрутизации в [Output|Mangle]
  • Путь пакета в блоках 1, 2 зависит от правил в [IP]->[Route]
  • Путь пакета в пунктах 1, 2 и 3 зависит от правил в [IP]->[Route]->[Rules]
  • На путь пакета в блоках 1, 3 можно повлиять используя [IP]->[Firewall]->[Mangle]

RIB, FIB, Routing Cache

Основы статической маршрутизации в Mikrotik RouterOS

Routing Information Base
База в которой собираются маршруты от протоколов динамической маршрутизации, маршруты от ppp и dhcp, статические и подключенные (connected) маршруты. Данная база содержит все маршруты, за исключением отфильтрованных администратором.

Условно, можно считать что [IP]->[Route] отображает RIB.

Forwarding Information Base
Основы статической маршрутизации в Mikrotik RouterOS

База в которой собираются наилучшие маршруты из RIB. Все маршруты в FIB являются активными и используются для пересылки пакетов. Если маршрут становится неактивным (отключен администратором (системой), или интерфейс через который должен отправляться пакет не активен) маршрут удаляется из FIB.

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

  • Source Address
  • Destination Address
  • Source Interface
  • Routing mark
  • ToS (DSCP)

Попадая в FIB пакет проходит следующие стадии:

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

    Условно, можно считать что [IP]->[Route Active=yes] отображает FIB.

    Routing Cache
    Механизм кэширования маршрутов. Маршрутизатор запоминает куда были отправлены пакеты и если встречаются похожие (предположительно из одного соединения) пускает их по тому-же маршруту, без проверки в FIB. Кэш маршрутов периодически очищается.

    Для администраторов RouterOS не сделали средств просмотра и управления Routing Cache, но при его можно отключить в [IP]->[Settings] .

    Данный механизм был удален из ядра linux 3.6, но в RouterOS до сих пор используется kernel 3.3.5, возможно Routing cahce — одна из причин.

    Диалог добавления маршрута

    [IP]->[Route]->[+]
    Основы статической маршрутизации в Mikrotik RouterOS

    1. Подсеть для которой необходимо создать маршрут (по умолчанию: 0.0.0.0/0)
    2. IP шлюза или интерфейс на который будет отправлен пакет (может быть несколько, см. ниже ECMP)
    3. Проверка доступности шлюза
    4. Тип записи
    5. Дистанция (метрика) для маршрута
    6. Таблица маршрутизации
    7. IP для локальных исходящих пакетов через данный маршрут
    8. Про назначение Scope и Target Scope написано в конце статьи

    Флаги маршрутов
    Основы статической маршрутизации в Mikrotik RouterOS

    • X — Маршрут отключен администратором ( disabled=yes )
    • A — Маршрут используется для передачи пакетов
    • D — Маршрут добавлен динамически (BGP, OSPF, RIP, MME, PPP, DHCP, Connected)
    • C — Подсеть подключена непосредственно к маршрутизатору
    • S — Статический маршрут
    • r,b,o,m — Маршрут добавлен одним из протоколов динамической маршрутизации
    • B,U,P — Фильтрующий маршрут (отбрасывает пакеты вместо передачи)

    Что указывать в gateway: ip-адрес или интерфейс?

    Система позволяет указывать и то, и другое, при этом не ругается и не дает подсказок, если вы что-то сделали неправильно.

    IP адрес
    Адрес шлюза должен быть доступен по Layer2. Для Ethernet это означает, что роутер должен иметь на одном из активных интерфейсов ip адрес из той же подсети, для ppp — что адрес gateway указан на одном из активных интерфейсов в качестве адреса подсети.
    Если условие доступности по Layer2 не выполняется — маршрут считается неактивным и не попадает в FIB.

    Интерфейс
    Все сложнее и поведение маршрутизатора зависит от типа интерфейса:

    • PPP (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN*) соединение предполагает наличие только двух участников и пакет всегда будет направлен шлюзу для передачи, если шлюз обнаружит, что получателем является он сам, то передаст пакет своему локальному процессу.
      Основы статической маршрутизации в Mikrotik RouterOS
    • Ethernet предполагает наличие множества участников и будет отправлять на интерфейс arp запросы с адресом получателя пакета, это ожидаемое и вполне нормальное поведение для connected маршрутов.
      Но при попытке использовать интерфейс в качестве маршрута для удаленной подсети вы получите следующую ситуацию: маршрут активен, ping до шлюза проходит, но не доходят до получателя из указанной подсети. Если посмотрите на интерфейс через сниффер, то увидите arp запросы с адресами из удаленной подсети.
      Основы статической маршрутизации в Mikrotik RouterOS

    Основы статической маршрутизации в Mikrotik RouterOS

    Старайтесь указывать ip адрес в качестве gateway всегда когда это возможно. Исключение — connected маршруты (создаются автоматически) и PPP (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN*) интерфейсы.

    OpenVPN не содержит PPP заголовка, но можно использовать имя OpenVPN интерфейса для создания маршрута.

    More Specific Route

    Основное правило маршрутизации. Маршрут описывающий более маленькую подсеть (с наибольшей маской подсети) имеет больший приоритет при принятии решения о маршрутизации пакета. Положение записей в таблице маршрутизации не имеет отношения к выбору — основное правило More Specific.

    Основы статической маршрутизации в Mikrotik RouterOS

    Все маршруты из указанной схемы активны (находятся в FIB), т.к. указывают на различные подсети и не конфликтуют между собой.

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

    Маршруту с подсетью 0.0.0.0/0 иногда придают особое значение и называют «Маршрут по умолчанию» (Default Route) или «Шлюз последней надежды» (gateway of last resort). На самом деле в нем нет ничего магического и он просто включает все возможные адреса IPv4, но данные названия хорошо описывают его задачу — он указывает на шлюз, куда пересылать пакеты для которых нет других, более точных, маршрутов.

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

    Понимание More Specific Route является фундаментальным для любых устройств работающих с TCP/IP.

    Distance

    Дистанции (или Метрики) необходимы для административной фильтрации маршрутов до одной подсети доступной через несколько шлюзов. Маршрут с меньшей метрикой считается приоритетным и попадет в FIB. Если маршрут с меньшей метрикой перестанет быть активным, то в FIB он будет заменен на маршрут с большей метрикой.
    Основы статической маршрутизации в Mikrotik RouterOS

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

    Метрика может принимать значение от 0 до 255:
    Основы статической маршрутизации в Mikrotik RouterOS

    • 0 — Метрика для подключенных (connected) маршрутов. Дистанция 0 не может быть выставлена администратором
    • 1-254 — Метрики доступные администратору для установки маршрутам. Метрики с меньшим значением имеют больший приоритет
    • 255 — Метрика доступная администратору для установки маршрутам. В отличии от 1-254, маршрут с метрикой 255 всегда остается неактивным и не попадает в FIB
    • Особые метрики. У маршрутов полученных от протоколов динамической маршрутизации, есть стандартные значения метрик

    Check gateway

    Check gateway — расширение MikroTik RoutesOS для проверки доступности шлюза по icmp или arp. Раз в 10 секунд (изменить нельзя) на шлюз отправляется запрос, если дважды не приходит ответ маршрут считается недоступным и удаляется из FIB. Если check gateway отключил маршрут проверки продолжается и маршрут снова станет активным после одной успешной проверки.
    Основы статической маршрутизации в Mikrotik RouterOS

    Check gateway отключает запись, в которой он настроен и все остальные записи (во всех таблицах маршрутизации и ecmp маршрутах) с указанным шлюзом.

    В целом check gateway работает нормально, если не возникает проблем с потерей пакетов до шлюза. Check gateway не знает, что происходит со связью за пределами проверяемого шлюза, для этого необходимы дополнительные инструменты: скрипты, рекурсивная маршрутизация, протоколы динамической маршрутизации.

    Большинство VPN и туннельных протоколов содержат встроенные средства для проверки активности соединения, включать для них check gateway — это дополнительная (но очень маленькая) нагрузка на сеть и производительность устройства.

    ECMP маршруты

    Equal-Cost Multi-Path — отправка пакетов до получателя используя одновременно несколько шлюзом с перебором по алгоритму Round Robin.

    ECMP маршрут создается администратором, путем указания нескольких gateway для одной подсети (либо автоматический, при наличии двух равноценных маршрутов OSPF).
    Основы статической маршрутизации в Mikrotik RouterOS

    ECMP используется для балансировки нагрузки между двумя каналами, в теории, если в ecmp маршруте два канала, то для каждого пакета исходящий канал должен отличаться. Но механизм Routing cache отправляет пакеты из соединения по маршруту, которым пошел первый пакет, в итоге получаем подобие балансировки на базе соединений (per-connection loading balancing).

    Если отключить Routing Cache, то пакеты в ECMP маршруте будут делиться правильно, но возникает проблема с NAT. Правило NAT обрабатывает только первый пакет из соединения (остальные обрабатываются автоматически) и получается ситуация, что с различных интерфейсов уходят пакеты с одним адресом источника.
    Основы статической маршрутизации в Mikrotik RouterOS

    В ECMP маршрутах не работает check gateway (баг RouterOS). Но можно обойти это ограничение, если создать дополнительные маршруты для проверки, которые будут отключать записи в ECMP.

    Фильтрация средствами Routing

    Опция Type определяет, что сделать с пакетом:

    • unicast — отправить на указанный шлюз (интерфейс)
    • blackhole — отбросить пакет
    • prohibit, unreachable — отбросить пакет и отправить icmp сообщение отправителю

    Фильтрацию обычно используют, когда нужно обезопасить отправку пакетов не по тому пути, конечно можно фильтровать подобное через firewall.

    Пара примеров

    Для закрепления базовых вещей о маршрутизации.

    Типичный домашний роутер
    Основы статической маршрутизации в Mikrotik RouterOS

    1. Статический маршрут до 0.0.0.0/0 (default route)
    2. Connected маршрут на интерфейсе с провайдером
    3. Connected маршрут на интерфейсе с локальной сетью

    Типичный домашний роутер с PPPoE
    Основы статической маршрутизации в Mikrotik RouterOS

    1. Статический маршрут до default route, добавлен автоматически т.к. это указано в свойствах подключения
    2. Connected маршрут для PPP соединения
    3. Connected маршрут на интерфейсе с локальной сетью

    Типичный домашний роутер с двумя провайдерами и резервированием
    Основы статической маршрутизации в Mikrotik RouterOS

    1. Статический маршрут до default route через первого провайдера с метрикой 1 и проверкой доступности шлюза
    2. Статический маршрут до default route через второго провайдера с метрикой 2
    3. Connected маршруты

    Трафик до 0.0.0.0/0 идет через 10.10.10.1, пока данный шлюз доступен, иначе переключается на 10.20.20.1

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

    Типичный домашний роутер с двумя провайдерами, резервированием и ECMP
    Основы статической маршрутизации в Mikrotik RouterOS

    1. Статические маршруты для проверки chack gateway
    2. Маршрут ECMP
    3. Connected маршруты

    Маршруты для проверки синего цвета (цвет неактивных маршрутов), но это не мешает работе check gateway. В текущей версии (6.44) RoS автоматический приоритет отдается ECMP маршруту, но лучше добавить проверочные маршруты в другие таблицы маршрутизации (опция routing-mark )

    На Speedtest и прочих подобных сайтах прироста скорости не будет (ECMP делит трафик по соединениям, а не по пакетам), но p2p приложения должны загружать быстрее.

    Фильтрация через Routing
    Основы статической маршрутизации в Mikrotik RouterOS

    1. Статический маршрут до default route
    2. Статический маршрут до 192.168.200.0/24 через ipip туннель
    3. Запрещающий статический маршрут до 192.168.200.0/24 через маршрутизатор провайдера

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

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

    Выглядит это примерно так:
    Основы статической маршрутизации в Mikrotik RouterOS

    Пример (наипростейший) как получить подобный результат:
    Основы статической маршрутизации в Mikrotik RouterOS

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

    Policy Base Routing и дополнительные таблицы маршрутизации

    При выборе маршрута, роутер использует только одно поле из заголовка пакета (Dst. Address) — это базовая маршрутизация. Маршрутизация на базе других условий, например адреса источника, типа трафика (ToS), балансировка без ECMP, относится к Policy Base Routing (PBR) и использует дополнительные таблицы маршрутизации.

    Основы статической маршрутизации в Mikrotik RouterOS

    More Specific Route является основным правилом выбора маршрута, в пределах таблицы маршрутизации.

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

    Пример с распределением через Firewall:
    Основы статической маршрутизации в Mikrotik RouterOS

    • 192.168.100.10 -> 8.8.8.8
      1. Трафик от 192.168.100.10 получает метку via-isp1 в [Prerouting|Mangle]
      2. На этапе Routing в таблице via-isp1 производится поиск маршрута до 8.8.8.8
      3. Маршрут найден, трафик отправляется на шлюз 10.10.10.1
    • 192.168.200.20 -> 8.8.8.8
      1. Трафик от 192.168.200.20 получает метку via-isp2 в [Prerouting|Mangle]
      2. На этапе Routing в таблице via-isp2 производится поиск маршрута до 8.8.8.8
      3. Маршрут найден, трафик отправляется на шлюз 10.20.20.1
    • Если один из шлюзов (10.10.10.1 или 10.20.20.1) станет недоступным, то пакет уйдет в таблицу main и будет искать подходящий маршрут там

    Проблемы терминологии

    В RouterOS есть определенные проблемы с терминологией.
    При работе с правилами в [IP]->[Routes] указывается таблица маршрутизации, хотя и написано что метка:
    Основы статической маршрутизации в Mikrotik RouterOS

    В [IP]->[Routes]->[Rule] все правильно, в условии метки в действии таблицы:
    Основы статической маршрутизации в Mikrotik RouterOS

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

    RouterOS дает несколько инструментов:

    • Правила в [IP]->[Routes]->[Rules]
    • Маршрутные метки ( action=mark-routing ) в [IP]->[Firewall]->[Mangle]
    • VRF

    Правила [IP]->[Route]->[Rules]
    Правила обрабатываются последовательно, если пакет совпал с условиями правила он не проходит дальше.

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

    Основы статической маршрутизации в Mikrotik RouterOS

    Правила состоят из условий и действия:

    • Условия. Практически повторяют список признаков по которым пакет проверяется в FIB, отсутствует только ToS.
    • Действия
      • lookup — отправить пакет в таблицу
      • lookup only in table — запереть пакет в таблице, если маршрут не будет найден пакет не уйдет в таблицу main
      • drop — отбросить пакет
      • unreacheable — отбросить пакет с уведомлением отправителя

      В FIB трафик до локальных процессов обрабатывается в обход правил [IP]->[Route]->[Rules] :
      Основы статической маршрутизации в Mikrotik RouterOS

      Маркировка [IP]->[Firewall]->[Mangle]
      Маршрутные метки позволяют устанавливать шлюз для пакета используя практически любые условия Firewall:
      Основы статической маршрутизации в Mikrotik RouterOS

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

      Основы статической маршрутизации в Mikrotik RouterOS

      Маркировать пакет можно двумя способами:

      • Сразу ставить routing-mark
      • Сначала ставить connection-mark, потом на основе connection-mark ставить routing-mark

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

      Примеры использования

      Переходим к примерам использования Policy Base Routing, на них гораздо проще показать зачем все это нужно.

      MultiWAN и ответный исходящий (Output) трафик
      Распространенная проблема, при MultiWAN конфигурации: Mikrotik доступен из сети интернет только по «активному» провайдеру.
      Основы статической маршрутизации в Mikrotik RouterOS

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

      Еще один интересный момент. Если на интерфейсе ether1 настроен «простой» source nat: /ip fi nat add out-interface=ether1 action=masquerade пакет уйдет в сеть с src. address=10.10.10.100, что еще больше усугубит ситуацию.

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

      Использование [IP]->[Route]->[Rules]
      Указываем таблицу маршрутизации которая будет использована для пакетов с указанными Source IP.
      Основы статической маршрутизации в Mikrotik RouterOS

      Можно использовать action=lookup , но для локального исходящего трафика указанный вариант полностью исключает соединения с неправильного интерфейса.

      • Система генерирует ответный пакет с Src. Address: 10.20.20.200
      • На этапе Routing Decision(2) происходит проверка [IP]->[Routes]->[Rules] и пакет отправляется в таблицу маршрутизации over-isp2
      • В соответствии с таблицей маршрутизации пакет должен быть отправлен на шлюз 10.20.20.1 через интерфейс ether2

      Основы статической маршрутизации в Mikrotik RouterOS

      Данный способ не требует рабочий Connection Tracker, в отличии от использования таблицы Mangle.

      Использование [IP]->[Firewall]->[Mangle]
      Соединение начинается со входящего пакета, поэтому маркируем его ( action=mark-connection ), для исходящих пакетов от маркированного соединения устанавливаем маршрутную метку ( action=mark-routing ).
      Основы статической маршрутизации в Mikrotik RouterOS

      Если на одном интерфейсе настроено несколько ip, можно добавить в условие dst-address для уточнения.

      • На интерфейс ether2 поступает пакет открывающий соединение. Пакет попадает в [INPUT|Mangle] где говорится маркировать все пакеты из соединения как from-isp2
      • Система генерирует ответный пакет с Src. Address: 10.20.20.200
      • На этапе Routing Decision(2) пакет в соответствии с таблицей маршрутизации отправляется на шлюз 10.20.20.1 через интерфейс ether1. Можете убедиться в этом залогировав пакеты в [OUTPUT|Filter]
      • На этапе [OUTPUT|Mangle] происходит проверка на наличие метки соединения from-isp2 и пакет получает маршруткую метку over-isp2
      • На этапе Routing Adjusment(3) происходит проверка на наличие маршрутной метки и отправка в соответствующую таблицу маршрутизации
      • В соответствии с таблицей маршрутизации пакет должен быть отправлен на шлюз 10.20.20.1 через интерфейс ether2

      Основы статической маршрутизации в Mikrotik RouterOS

      MultiWAN и ответный dst-nat трафик

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

      Суть проблемы будет та же, решение похоже на вариант с Firewall Mangle, только будут использоваться другие цепочки:
      Основы статической маршрутизации в Mikrotik RouterOS

      Основы статической маршрутизации в Mikrotik RouterOS
      На схеме не отображен NAT, но думаю и так все понятно.

      MultiWAN и исходящие соединения

      Можно использовать возможности PBR для создания нескольких vpn (в примере SSTP) соединений с разных интерфейсов роутера.

      Основы статической маршрутизации в Mikrotik RouterOS

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

      Простые правила NAT, иначе пакет уйдет с интерфейса с неправильным Src. Address:

      • Роутер создает три процесса SSTP
      • На этапе Routing Decision (2) для данных процессов выбирается маршрут, исходя из таблицы маршрутизации main. От этого же маршрута пакет получает Src. Address привязанный к интерфейсу ether1
      • В [Output|Mangle] пакеты от разных соединений получают разные метки
      • Пакеты попадают в соответствующие меткам таблицы на этапе Routing Adjusment и получает новый маршрут для отправки пакетов
      • Но у пакетов все еще остается Src. Address от ether1, на этапе [Nat|Srcnat] адрес подменяется в соответствии с интерфейсом

      Интересно, что на роутере вы увидите следующую таблицу соединений:
      Основы статической маршрутизации в Mikrotik RouterOS

      Connection Tracker отрабатывает раньше [Mangle] и [Srcnat] , поэтому все соединения идут от одного адреса, если посмотреть подробнее то в Replay Dst. Address будут адреса после NAT:
      Основы статической маршрутизации в Mikrotik RouterOS

      На VPN сервере (на тестовом стенде он у меня один) можно увидеть что все соединения происходят с правильных адресов:
      Основы статической маршрутизации в Mikrotik RouterOS

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

      Но такие маршруты будут влиять не только на исходящий но и на транзитный трафик. Плюс, если вам не нужно чтобы трафик на vpn сервера уходил через неподходящие каналы связи, то придется добавить еще 6 правил в [IP]->[Routes] с type=blackhole . В предыдущем варианте — 3 правила в [IP]->[Route]->[Rules] .

      Распределение соединений пользователей по каналам связи

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

      Используя [IP]->[Route]->[Rules]
      Основы статической маршрутизации в Mikrotik RouterOS

      Если использовать action=lookup , то при отключении одного из каналов трафик уйдет в таблицу main и пойдет по рабочему каналу. Нужно это или нет — зависит от задачи.

      Используя маркировки в [IP]->[Firewall]->[Mangle]
      Простой пример со списками ip адресов. В принципе можно использовать практически любые условия. Единственное предостережение layer7, даже в паре с метками соединений, может показаться что всё работает правильно, но часть трафика всеравно уйдет не туда.
      Основы статической маршрутизации в Mikrotik RouterOS

      «Запереть» пользователей в одной таблице маршрутизации можно через [IP]->[Route]->[Rules] :

      Либо через [IP]->[Firewall]->[Filter] :

      Отступление про dst-address-type=!local
      Дополнительное условие dst-address-type=!local необходимо чтобы трафик от пользователей доходил до локальных процессов роутера (dns, winbox, ssh, …). Если к роутеру подключено несколько локальных подсетей, необходимо предусмотреть чтобы трафик между ними не уходил в интернет, например используя dst-address-table .

      В примере с использованием [IP]->[Route]->[Rules] подобных исключений нет, но трафик до локальных процессов доходит. Дело в том, что попадая в FIB пакет промаркированный в [PREROUTING|Mangle] имеет маршрутную метку и уходит в таблицу маршрутизации отличную от main, где нет локального интерфейса. В случае с Routing Rules, сначала проверяется предназначен ли пакет локальному процессу и только на этапе User PBR он уходит в заданную таблицу маршрутизации.

      Используя [IP]->[Firewall]->[Mangle action=route]
      Данное действие работает только в [Prerouting|Mangle] и позволяет направлять трафик на указанный шлюз без использования дополнительных таблиц маршрутизации, указывая адрес шлюза напрямую:

      Действие route имеет более низкий приоритет чем правила маршрутизации ( [IP]->[Route]->[Rules] ). В случае с маршрутными метками все зависит от положения правил, если правило с action=route стоит выше чем action=mark-route , то будет использовано оно (вне зависимости от флага passtrough ), иначе маркировка маршрута.
      На wiki очень мало информации про данное действие и все выводы получены эксперементальным путем, в любом случае я не нашел варианты когда применение данного варианта дает приимущества перед другими.

      Динамическая балансировка на основе PPC

      Per Connection Classificator — является более гибким аналогом ECMP. В отличии от ECMP делит трафик по соединениям более строго (ECMP ничего про соединения не знает, но в паре с Routing Cache получается нечто похожее).

      PCC берет указанные поля из ip заголовка, преобразует их в 32-битное значение и делит на знаменатель. Остаток от деления сравнивается с указанным остатком и если они совпадают, то применяется указанное действие. Подробнее . Звучит дико, но работает.
      Основы статической маршрутизации в Mikrotik RouterOS

      Пример с тремя адресами:

      Пример динамического распределения трафика по src.address между тремя каналами:
      Основы статической маршрутизации в Mikrotik RouterOS

      При маркировке маршрутов есть дополнительное условие: in-interface=br-lan , без него под action=mark-routing попадет ответный трафик из интернета и в соответствии с таблицами маршрутизации уйдет обратно к провайдеру.

      Переключение каналов связи

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

      Обычно используются скрипты, которые через определенный канал связи проверяют доступность ip адреса в сети интернет, при этом выбирается что то надежное, например google dns: 8.8.8.8. 8.8.4.4. Но в сообществе Mikrotik для этого приспособили более интересный инструмент.

      Пара слов про рекурсивную маршрутизацию
      Рекурсивная маршрутизация необходима при построении Multihop BGP пиринга и в статью про основы статической маршрутизации попала только за счет ушлых пользователей MikroTik, которые придумали как использовать рекурсивный маршруты в паре с check gateway для переключение каналов связи без дополнительных скриптов.

      Пришло время в общих чертах разобраться с опциями scope/target scope и каким образом маршрут привязывается к интерфейсу:
      Основы статической маршрутизации в Mikrotik RouterOS

      1. Маршрут ищет интерфейс для отправки пакета исходя из своего значения scope и всех записей в таблице main с меньшими или равными значениями target scope
      2. Из найденных интерфейсов выбирается тот, через который можно отправить пакет указанному шлюзу
      3. Интерфейс найденной connected записи выбирается для отправки пакета на шлюз

      При наличии рекурсивного маршрута происходит все тоже самое, но в два этапа:
      Основы статической маршрутизации в Mikrotik RouterOS

      • 1-3 К connected маршрутам добавляется еще один, через который можно достичь указанного шлюза
      • 4-6 Поиск маршрута connected маршрута для «промежуточного» шлюза

      Все манипуляции с рекурсивным поиском происходят в RIB, а в FIB передается только итоговый результат: 0.0.0.0/0 via 10.10.10.1 on ether1 .

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

      Конфигурация:
      Основы статической маршрутизации в Mikrotik RouterOS

      Можно проверить, что пакеты будут отправляться на 10.10.10.1:
      Основы статической маршрутизации в Mikrotik RouterOS

      Check gateway ничего не знает про рекурсивную маршрутизацию и просто отправляет ping’и на адрес 8.8.8.8, который (исходя из таблицы main) доступен через шлюз 10.10.10.1.

      Если происходит потеря связи между 10.10.10.1 и 8.8.8.8, то происходит отключение маршрута, но пакеты (включая проверочные ping) до 8.8.8.8 продолжают идти через 10.10.10.1:
      Основы статической маршрутизации в Mikrotik RouterOS

      Если происходит потеря линка на ether1, то получается неприятная ситуация, когда пакеты до 8.8.8.8 пойдут через второго провайдера:
      Основы статической маршрутизации в Mikrotik RouterOS

      Это проблема, если вы используете NetWatch для запуска скриптов при недоступности 8.8.8.8. При обрыве линка NetWatch просто отработает по резервному каналу связи и будет считать что все нормально. Решается добавлением дополнительного фильтрующего маршрута:

      Основы статической маршрутизации в Mikrotik RouterOS

      На хабре есть статья , где ситуация с NetWatch рассмотрена более детально.

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

      Пара слов про Virtual Routing and Forwarding (VRF)

      Технология VRF предназначена для создания нескольких виртуальных маршрутизаторов внутри одного физического, данная технология широко применяется у операторов связи (обычно в связке с MPLS) для предоставления услуги L3VPN клиентам с пересекающимися адресами подсетей:
      Основы статической маршрутизации в Mikrotik RouterOS

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

      Пример конфигурации vrf:
      Основы статической маршрутизации в Mikrotik RouterOS

      С устройства подключенного к ether2 видим, что проходит ping до адреса роутера из другого vrf (и это проблема), при этом ping в интернет не уходит:
      Основы статической маршрутизации в Mikrotik RouterOS

      Для доступа в интернет необходимо прописать дополнительный маршрут обращающийся к таблице main (в терминологии vrf это называется route leaking):
      Основы статической маршрутизации в Mikrotik RouterOS

      Тут показано два способа route leaking: используюя таблицу маршрутизации: [email protected] и используя имя интерфейса: 172.17.0.1%wlan1 .

      И настроить маркировку для ответного трафика в [PREROUTING|Mangle] :
      Основы статической маршрутизации в Mikrotik RouterOS

      Основы статической маршрутизации в Mikrotik RouterOS

      Подсети с одинаковой адресацией
      Организация доступа до подсетей с одинаковой адресацией на одном роутере используя VRF и netmap:
      Основы статической маршрутизации в Mikrotik RouterOS

      Правила маршрутизации для возвратного трафика:

      Добавление маршрутов полученных по dhcp в заданную таблицу маршрутизации
      VRF может быть интересен, если необходимо автоматически добавить динамический маршрут (например от dhcp client) в определенную таблицу маршрутизации.

      Добавление интерфейса в vrf:

      Правила для отправки трафика (исходящего и транзитного) через таблицу over-isp1:

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

      Этот маршрут необходим только чтобы локальные исходящие пакеты могли пройти через Routing decision (2) до [OUTPUT|Mangle] и получить маршрутную метку, если на маршрутизаторе есть другие активные маршруты до 0.0.0.0/0 в таблице main оно не требуется.
      Основы статической маршрутизации в Mikrotik RouterOS

      Цепочки connected-in и dynamic-in в [Routing] -> [Filters]

      Фильтрация маршрутов (входящий и исходящих) — это инструмент который обычно используется вместе с протоколами динамической маршрутизации (поэтому доступен только после установки пакета routing), но во входящих фильтрах есть две интересные цепочки:

      • connected-in — фильтрация connected маршрутов
      • dynamic-in — фильтрация динамических маршрутов полученных PPP и DCHP

      Фильтрация позволяет не только отбрасывать маршруты, но и изменять ряд опций: distance, routing-mark, comment, scope, target scope, …

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

      Установка Routing Mark для динамических маршрутов
      Пример с домашнего маршрутизатора. У меня настроено два VPN соединения и трафик в них должен заворачиваться в соответствием с таблицами маршрутизации. При этом я хочу что-бы маршруты создавались автоматически при активации интерфейса:

      Не знаю почему, наверное баг, но если создать vrf для ppp интерфейса, то маршрут до 0.0.0.0/0 всеравно попадет в таблицу main. Иначе всё было бы еще проще.

      Отключение Connected маршрутов
      Иногда требуется и такое:

      Сети для самых маленьких. Часть 3. Статическая маршрутизация

      Итак, поворотный момент в истории компании “Лифт ми Ап”. Руководство понимает, что компания, производящая лифты, едущие только вверх, не выдержит борьбы на высококонкурентном рынке. Необходимо расширять бизнес. Принято решение о покупке двух заводов: в Санкт-Петербурге и Кемерово.

      Нужно срочно организовывать связь до новых офисов, а у вас ещё даже локалка не заработала.

      Сегодня:

      1. Настраиваем маршрутизацию между вланами в нашей сети (InterVlan routing)
      2. Пытаемся разобраться с процессами, происходящими в сети, и что творится с данными
      3. Планируем расширение сети (IP-адреса, вланы, таблицы коммутации)
      4. Настраиваем статическую маршрутизацию и разбираемся, как она работает
      5. Используем L3-коммутатор в качестве шлюза

      Содержание:

      InterVlan Routing

      Чуточку практики для взбадривания.

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

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

      Схема сети компании

      Процесс настройки маршрутизатора очень прост:

      0) Сначала закончим с коммутатором msk-arbat-dsw1. На нём нам нужно настроить транковый порт в сторону маршрутизатора, чего мы не сделали в прошлый раз.

      1) Назначаем имя маршрутизатора командой hostname, а для развития хорошего тона, надо упомянуть, что лучше сразу же настроить время на устройстве. Это поможет вам корректно идентифицировать записи в логах.

      Желательно время на сетевые устройства раздавать через NTP (любую циску можно сделать NTP-сервером, кстати)

      2) Далее переходим в режим настройки интерфейса, обращённого в нашу локальную сеть и включаем его, так как по умолчанию он находится в состоянии Administratively down.

      3) Создадим виртуальный интерфейс или иначе его называют подинтерфейс или ещё сабинтерфейс (sub-interface).

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

      4) Теперь вспомним о стандарте 802.1q, который описывает тегирование кадра меткой влана. Следующей командой вы обозначаете, что кадры, исходящие из этого виртуального интерфейса будут помечены тегом 2-го влана. А кадры, входящие на физический интерфейс FastEthernet0/0 с тегом этого влана будут приняты виртуальным интерфейсом FastEthernet0/0.2.

      5) Ну и как на обычном физическом L3-интерфейсе, определим IP-адрес. Этот адрес будет шлюзом по умолчанию (default gateway) для всех устройств в этом влане.

      Аналогичным образом настроим, например, 101-й влан:

      и теперь убедимся, что с компьютера из сети ПТО мы видим сеть управления:

      ping

      Работает и отлично, настройте пока все остальные интерфейсы. Проблем с этим возникнуть не должно.

      Физика и логика процесса межвланной маршрутизации

      Что происходит в это время с вашими данными? Мы рассуждали в прошлый раз, что происходит, если вы пытаетесь связаться с устройством из той же самой подсети, в которой находитесь вы. Под той же самой подсетью мы понимаем следующее: например, на вашем компьютере настроено следующее:

      • IP: 172.16.3.2
      • Mask: 255.255.255.0
      • GW: 172.16.3.1

      Все устройства, адреса которых будут находиться в диапазоне 172.16.3.1-172.16.3.254 с такой же маской, как у вас, будут являться членами вашей подсети. Что происходит с данными, если вы отправляете их на устройство с адресом из этого диапазона? Повторим это с некоторыми дополнениями.

      Для отправки данных они должны быть упакованы в Ethernet-кадр, в заголовок которого должен быть вставлен MAC-адрес удалённого устройства. Но откуда его взять?

      Для этого ваш компьютер рассылает широковещательный ARP-запрос. В качестве IP-адреса узла назначения в IP-пакет с этим запросом будет помещён адрес искомого хоста. Сетевая карта при инкапсуляции указывает MAC-адрес FF:FF:FF:FF:FF:FF — это значит, что кадр предназначен всем устройствам. Далее он уходит на ближайший коммутатор и копии рассылаются на все порты нашего влана (ну, кроме, конечно, порта, из которого получен кадр). Получатели видят, что запрос широковещательный и они могут оказаться искомым хостом, поэтому извлекают данные из кадра. Все те устройства, которые не обладают указанным в ARP-запросе IP-адресом, просто игнорируют запрос, а вот устройство-настоящий получатель ответит на него и вышлет первоначальному отправителю свой MAC-адрес. Отправитель (в данном случае, наш компьютер) помещает полученный MAC в свою таблицу соответствия IP и MAC адресов ака ARP-кэш. Как выглядит ARP-кэш на вашем компьютере прямо сейчас, вы можете посмотреть с помощью команды arp -a .

      Вывод команды arp -a Вывод команды arp -a

      Потом ваши полезные данные упаковываются в IP-пакет, где в качестве получателя ставится тот адрес, который вы указали в команде/приложении, затем в Ethernet-кадр, в заголовок которого помещается полученный ARP-запросом MAC-адрес. Далее кадр отправляется на коммутатор, который, согласно своей таблице MAC-адресов, решает, в какой порт его переправить дальше.

      Но что происходит, если вы пытаетесь достучаться до устройства в другом влане? ARP-запрос ничего не вернёт, потому что широковещательные L2 сообщения кончаются на маршрутизаторе(т.е., в пределах широковещательного L2 домена), нужная сеть находится за ним, а коммутатор не пустит кадры из одного влана в порт другого. И вот для этого нужен шлюз по умолчанию (default gateway) на вашем компьютере. То есть, если устройство-получатель в вашей же подсети, кадр просто отправляется в порт с мак-адресом конечного получателя. Если же сообщение адресовано в любую другую подсеть, то кадр отправляется на шлюз по умолчанию, поэтому в качестве MAC-адреса получателя подставится MAC-адрес маршрутизатора.

      Проследим за ходом событий.

      1) ПК с адресом 172.16.3.2/24 хочет отправить данные компьютеру с адресом 172.16.4.5.

      route

      Он видит, что адрес из другой подсети, следовательно, данные должны уйти на шлюз по умолчанию. Но в таком случае, ПК нужен MAC-адрес шлюза. ПК проверяет свой ARP-кэш в поисках соответствия IP-адрес шлюза — MAC-адрес и не находит нужного.

      arp

      2) ПК отправляет широковещательный ARP-запрос в локальную сеть. Структура ARP-запроса:

      • на канальном уровне в качестве получателя — широковещательный адрес (FF:FF:FF:FF:FF:FF), в качестве отправителя — MAC-адрес интерфейса устройства, пытающегося выяснить IP;
      • на сетевом — собственно ARP запрос, в нем содержится информация о том, какой IP и кем ищется.

      3) Коммутатор, на который попал кадр, рассылает его копии во все порты этого влана (того, которому принадлежит изначальный хост), кроме того, откуда он получен.

      4) Все устройства, получив этот кадр и, видя, что он широковещательный, предполагают, что он адресован им.

      5) Распаковав кадр, все хосты, кроме маршрутизатора, видят, что в ARP-запросе не их адрес. А маршрутизатор посылает unicast’овый ARP-ответ со своим MAC-адресом.

      6) Изначальный хост получает ARP-ответ, теперь у него есть MAC-адрес шлюза. Он формирует пакет из тех данных, что ему нужно отправить на 172.16.4.5. В качестве MAC-адреса получателя ПК ставит адрес шлюза. При этом IP-адрес получателя в пакете остаётся 172.16.4.5.

      arp

      7) Кадр посылается в сеть, коммутаторы доставляют его на маршрутизатор.

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

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

      10) Маршрутизатор отправляет ARP-запрос с этого сабинтерфейса — узнаёт MAC-адрес получателя.

      11) Изначальный IP-пакет, не изменяясь инкапсулируется в новый кадр, при этом:

      • в качестве MAC-адреса источника указывается адрес интерфейса шлюза
      • IP-адрес источника — адрес изначального хоста (в нашем случае 172.16.3.2)
      • в качестве MAC-адреса получателя указывается адрес конечного хоста
      • IP-адрес получателя — адрес конечного хоста (в нашем случае 172.16.4.5)

      и отправляется в сеть с сабинтерфейса FastEthernet0/0.102, получая при этом метку 102-го влана.

      12) Кадр доставляется коммутаторами до хоста-получателя.

      Планирование расширения

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

      Будет она вот такой:

      Расширение сети Расширение сети

      То есть прибавляются две точки в Санкт-Петербурге: небольшой офис на Васильевском острове и сам завод в Озерках — и одна в Кемерово в районе Красная горка. Для простоты у нас будет один провайдер “Балаган Телеком”, который на выгодных условиях предоставит нам L2VPN до обеих точек. В одном из следующих выпусков мы тему различных вариантов подключения раскроем в красках. А пока вкратце: L2VPN — это, очень грубо говоря, когда вам провайдер предоставляет влан от точки до точки (можно для простоты представить, что они включены в один коммутатор).

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

      Ну вот к примеру, скажем, что для офисов в других городах это будет так:

      ip адреса

      Это весьма упрощённый регламент, но теперь мы во всяком случае точно знаем, что у шлюза всегда будет 1-й адрес, до 12-го мы будем выдавать коммутаторам и всяким wi-fi-точкам, а все сервера будем искать в диапазоне 172.16.х.13-172.16.х.23. Разумеется, по своему вкусу вы можете уточнять регламент вплоть до адреса каждого сервера, добавлять в него правило формирования имён устройств, доменных имён, политику списков доступа и т.д. Чем точнее вы сформулируете правила и строже будете следить за их выполнением, тем проще разбираться в структуре сети, решать проблемы, адаптироваться к ситуации и наказывать виновных. Это примерно, как схема запоминания паролей: когда у вас есть некое правило их формирования, вам не нужно держать в голове несколько десятков сложнозапоминаемых паролей, вы всегда можете их вычислить. Вот так же и тут. Я некогда работал в средних размеров холдинге и знал, что если я приеду в офис где-нибудь в забытой коровами деревне, то там точно x.y.z.1 — это циска, x.y.z.2 — дистрибьюшн-свитч прокурва, а x.y.z.101 — компьютер главного бухгалтера, с которого надо дать доступ на какой-нибудь контур-экстерн. Другой вопрос, что надо это ещё проверить, потому что местные ИТшники такого порой наворотят, что слезами омываешься сквозь смех.

      IP-план

      Теперь нам было бы весьма кстати составить IP-план. Будем исходить из того, что на всех трёх точках мы будем использовать стандартную сеть с маской 24 бита (255.255.255.0) Это означает, что в них может быть 254 устройства.

      Почему это так? И как вообще понять все эти маски подсетей? В рамках одной статьи мы не сможем этого рассказать, иначе она получится длинная, как палуба Титаника и запутанная, как одесские катакомбы. Крайне рекомендуем очень плотно познакомиться с такими понятиями, как IP-адрес, маска подсети, их представления в двоичном виде и CIDR (Classless InterDomain Routing) самостоятельно. Мы же далее будем только аргументировать выбор конкретного размера сети. Как бы то ни было, полное понимание придёт только с практикой.

      Вообще, очень неплохо эта тема раскрыта в этой статье: http://habrahabr.ru/post/129664/

      В данный момент (вспомним нулевой выпуск) у нас в Москве использованы адреса 172.16.0.0-172.16.6.255. Предположим, что сеть может ещё увеличиться здесь, допустим, появится офис на Воробьёвых горах и зарезервируем ещё подсети до 172.16.15.0/24 включительно.
      Все эти адреса: 172.16.0.0-172.16.15.255 — можно описать так: 172.16.0.0/20. Эта сеть (с префиксом /20) будет так называемой суперсетью, а операция объединения подсетей в суперсети называется суммированием подсетей (суммированием маршрутов, если быть точным, route summarization)

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

      Теперь обратимся к Питеру. В данный момент в этом прекрасном городе у нас 2 точки и на каждой из них подсети /24. Допустим это будут 172.16.16.0/24 и 172.16.17.0/24. Зарезервируем адреса 172.16.18.0-172.16.23.255 для возможного расширения сети.

      172.16.16.0-172.16.23.255 можно объединить в 172.16.16.0/21 — в общем-то исходя именно из этого мы и оставляем в резерв именно такой диапазон.

      В Кемерово нам нет смысла оставлять такие огромные запасы /21, как в Питере (2048 адресов или 8 подсетей /24), или тем более /20, как в Москве (4096 или 16 подсетей /24). А вот 1024 адреса и 4 подсети /24, которым соответствует маска /22 вполне рационально.

      Таким образом сеть 172.16.24.0/22 (адреса 172.16.24.0-172.16.27.255) будет у нас для Кемерово.

      Дополнение в IP план Дополнение в IP план

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

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

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

      Поясним на примере Санкт-Петербурга. При настройке статической маршрутизации мы могли бы делать так:

      Это 8 команд и 8 записей в таблице. Но при этом пришедший на маршрутизатор пакет в любую из сетей 172.16.16.0/21 в любом случае будет отправлен на устройство с адресом 172.16.2.2.

      Вместо этого мы поступим так:

      И вместо восьми возможных сравнений будет только одно.

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

      Теперь ещё несколько слов о линковых сетях. В среде сетевых администраторов так называются сети точка-точка (Point-to-Point) между двумя маршрутизаторами.

      Вот опять же в примере с Питером. Два маршрутизатора (в Москве и в Петербурге) соединены друг с другом прямым линком (неважно, что у провайдера это сотня коммутаторов и маршрутизаторов — для нас это просто влан). То есть кроме вот этих 2-х устройств здесь не будет никаких других. Мы знаем это наверняка. В любом случае на интерфейсах обоих устройств (смотрящих в сторону друг друга) нужно настраивать IP-адреса. И нам точно незачем назначать на этом участке сеть /24 с 254 доступными адресами, ведь 252 в таком случае пропадут почём зря. В этом случае есть прекрасный выход — бесклассовая IP-адресация.

      Почему она бесклассовая? Если вы помните, то в нулевой части мы говорили о трёх классах подсетей: А, В и С. По идее только их вы и могли использовать при планировании сети. Бесклассовая междоменная маршрутизация (CIDR) позволяет очень гибко использовать пространство IP-адресов.

      Мы просто берём сеть с самой маленькой возможной маской — 30 (255.255.255.252) — это сеть на 4 адреса. Почему мы не можем взять сеть с ещё более узкой маской? Ну 32 (255.255.255.255) по понятными причинам — это вообще один единственный адрес, сеть 31 (255.255.255.254) — это уже 2 адреса, но один из них (первый) — это адрес сети, а второй (последний) — широковещательный. В итоге на адреса хостов у нас и не осталось ничего. Поэтому и берём маску 30 с 4 адресами и тогда как раз 2 адреса остаются на наши два маршрутизатора.

      Вообще говоря, самой узкой маской для подсетей в cisco таки является /31. При определённых условиях их можно использовать на P-t-P-линках.

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

      Именно так мы и поступим. Для этого, собственно, в нулевой части мы и оставили сеть 172.16.2.0/24 — её мы будем дробить на мелкие сетки /30. Всего их получится 64 штуки, соответственно можно назначить их на 64 линка.

      Разделение на подсети для линков Разделение на подсети для линков

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

      Принципы маршрутизации

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

      Рассмотрим такую сеть:

      Пример сети Пример сети

      Вот к примеру с компьютера ПК1 — 172.16.3.2 я хочу подключиться по telnet к L3-коммутатору с адресом 172.16.17.1.

      Как мой компьютер узнает что делать? Куда слать данные?

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

      2) По уже известной вам схеме компьютер с помощью ARP-запроса добывает MAC-адрес маршрутизатора.

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

      4) А сам кадр при этом попадает сначала на коммутатор, где решается его судьба согласно таблице MAC-адресов. А потом достигает маршрутизатора RT1.

      5) Поскольку маршрутизатор ограничивает широковещательный домен — здесь жизнь этого кадра и заканчивается. Циска просто откидывает заголовок канального уровня — он уже не пригодится — извлекает из него IP-пакет.

      6) Теперь маршрутизатор должен принять решение, что с ним делать дальше. Разумеется, отправить его на какой-то свой интерфейс. Но на какой?
      Для этого существует таблица маршрутизации, которая есть на любом рутере. Выяснить, что у нас в данный момент находится в таблице маршрутизации, можно с помощью команды show ip route :

      Каждая строка в ней — это способ добраться до той или иной сети.

      Вот к примеру, если пакет адресован в сеть 172.16.17.0/24, то данные нужно отправить на устройство с адресом 172.16.2.2.

      Таблица маршрутизации формируется из:

      • непосредственно подключенных сетей (directly connected) — это сети, которые начинаются непосредственно на нём. В примере 172.16.3.0/24 и 172.16.2.0/30. В таблице они обозначаются буквой C;
      • статический маршруты — это те, которые вы прописали вручную командой ip route . Обозначаются буквой S;
      • маршруты, полученные с помощью протоколов динамической маршрутизации (OSPF, EIGRP, RIP и других).

      7) Итак, данные в сеть 172.16.17.0 (а мы хотим подключиться к устройству 172.16.17.1) должны быть отправлены на следующий хоп — следующий прыжок, которым является маршрутизатор 172.16.2.2. Причём из таблицы маршрутизации видно, что находится следующий хоп за интерфейсом FE0/1.4 (подсеть 172.16.2.0/30).

      8) Если в ARP-кэше циски нет MAC-адреса, то надо снова выполнить ARP-запрос, чтобы узнать MAC-адрес устройства с IP-адресом 172.16.2.2. RT1 посылает широковещательный кадр с порта FE0/1.4. В этом широковещательном домене у нас два устройства, и соответственно только один получатель. RT2 получает ARP-запрос, отбрасывает заголовок Ethernet и, понимая из данных протокола ARP, что искомый адрес принадлежит ему отправляет ARP-ответ со своим MAC-адресом.

      9) Изначальный IP-пакет, пришедший на RT1 не меняется, он инкапсулируется в совершенно новый кадр и отправляется в порт FE0/1.4, получая при этом метку 4-го влана.

      10) Полностью аналогичные действия происходят на следующем маршрутизаторе. И на следующем и следующем (если бы они были), пока пакет не дойдёт до последнего, к которому и подключена нужная сеть.

      11) Последний маршрутизатор (коим является L3-коммутатор) видит, что искомый адрес принадлежит ему самому, а извлекая данные транспортного уровня, понимает, что это телнет и передаёт все данные верхним уровням.

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

      Настройка

      Каким образом мы организуем каналы связи? Как мы уже сказали выше, в нашем офисе на Арбате есть некий провайдер Балаган-Телеком. Он обещает нам предоставить всё, что мы только захотим почти задарма. И мы заказываем у него две услуги L2VPN, то есть он отдаст нам два влана на Арбате в Москве, и по одному в Питере и Кемерово.

      Вообще говоря, номера вланов вам придётся согласовывать с вашим провайдером по той простой причине, что у него они могут быть просто заняты. Поэтому вполне возможно, что у вас будет влан, например, 2912 или 754. Но предположим, что нам повезло, и мы вольны сами выбирать номер.

      Москва. Арбат

      На циске в Москве у нас два интерфейса, к одному — FE0/0 — уже подключена наша локальная сеть, а второй (FE0/1)мы будем использовать для выхода в интернет и для подключения удалённых офисов.

      Как и в самом начале создадим саб-интерфейсы. Выделим для Санкт-Петербурга и Кемерова 4 и 5-й вланы соответственно. IP-адреса берём из нового IP-плана.

      Провайдер

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

      Тут всё просто: принимаем транком линк с Арбата в один порт и с двух других портов отдаём их на удалённые узлы. Ещё раз хотим подчеркнуть, что все эти 3 порта не принадлежат одному коммутатору — они разнесены на сотни километров, между ними сложная MPLS-сеть с кучей коммутаторов.

      Настраиваем “эмулятор провайдера”:

      Санкт-Петербург. Васильевский остров

      Теперь обратимся к нашему spb-vsl-gw1. Тут у нас тоже 2 порта, но решим вопрос нехватки портов иначе: добавим сюда плату. Плата с двумя FastEthernet-портам и двумя слотами для WIC вполне подойдёт.

      Добавление дополнительной платы

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

      Сеть в СПб

      Здесь вы можете увидеть отличие в нумерации портов и понять их смысл.

      FastEthernet — это тип порта (Ethernet, Fastethernet, GigabitEthernet, POS, Serial или другие)

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

      Но мы уже настроили транк, поэтому соответствующим образом настраиваем порт на циске:

      Добавим ещё локальную сеть:

      Вернёмся в Москву. С msk-arbat-gw1 мы можем увидеть адрес 172.16.2.2:

      Но так же не видим 172.16.16.1:

      Опять же, потому что маршрутизатор не знает, куда слать пакет:

      Исправим это недоразумение:

      Теперь пинг появляется:

      Вот, казалось бы оно — счастье, но проверим связь с компьютера:

      ping fail

      Компьютер знает, куда отправлять пакет — на свой шлюз 172.16.3.1, маршрутизатор тоже знает — на хост 172.16.2.2. Пакет уходит туда, принимается spb-vsl-gw1, который знает, что пингуемый адрес 172.16.16.1 принадлежит ему. А обратно нужно отправить пакет на адрес 172.16.3.3, но в сеть 172.16.3.0 у него нет маршрута. А пакеты, сеть назначения которых неизвестна, просто дропятся — отбрасываются.

      Но, почему же, спросите вы, с msk-arbat-gw1 до 172.16.16.1 пинг был? Какая разница 172.16.3.1 или 172.16.3.2? Всё просто.

      Из таблицы маршрутизации всем видно, что следующий хоп — 172.16.2.2, при этом адрес из 172.16.2.1 принадлежит интерфейсу этого маршрутизатора, поэтому он и ставится в заголовок в качестве IP-адреса отправителя, а не 172.16.3.1. Пакет отправляется на spb-vsl-gw1, тот его принимает, передаёт данные приложению пинг, которое формирует echo-reply. Ответ инкапсулируется в IP-пакет, где в качестве адреса получателя фигурирует 172.16.2.1, а 172.16.2.0/30 — непосредственно подключенная к spb-vsl-gw1 сеть, поэтому без проблем пакет доставляется по назначению. То етсь в сеть 172.16.2.0/30 маршрут известен, а в 172.16.3.0/24 нет.

      Для решения этой проблемы мы можем прописать на spb-vsl-gw1 маршрут в сеть 172.16.3.0, но тогда придётся прописывать и для всех других сетей. Для всех сетей в Москве, потом в Кемерово, потом в других городах — очень большой объём настройки. Тут стоить заметить, что по сути у нас только один выход в мир — через Москву. Узел в Озерках — тупиковый, а других нет. То есть в основном все данные будут уходить в Москву, где большая часть подсетей и будет выход в интернет. Чем нам это может помочь? Есть такое понятие — маршрут по умолчанию, ещё он носит романтическое название шлюз — последней надежды. И второму есть объяснение. Когда маршрутизатор решает, куда отправить пакет, он просматривает всё таблицу маршрутизации и, если не находит нужного маршрута, пакет отбрасывается — это если у вас не настроен шлюз последней надежды, если же настроен, то сиротливые пакеты отправляются именно туда — просто не глядя, предоставляя право уже следующему хопу решать их дальнейшую судьбу. То есть если некуда отправить, то последняя надежда — маршрут по умолчанию.

      Настраивается он так:

      И теперь тадааам:

      ping success

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

      Санкт-Петербург. Озерки

      Теперь озаботимся Озерками. Здесь мы поставим L3-коммутатор. Допустим, связаны они у нас будут арендованным у провайдера волокном (конечно, это идеализированная ситуация для маленькой компании, но можно же помечтать). Использование коммутаторов третьего уровня весьма удобно в некоторых случаях. Во-первых, интервлан роутинг в этом случае делается аппаратно и не нагружает процессор, в отличие от маршрутизатора. Кроме того, один L3-коммутатор обойдётся вам значительно дешевле, чем L2-коммутатор и маршрутизатор по отдельности. Правда, при этом вы лишаетесь ряда функций, естественно. Поэтому при выборе решения будьте аккуратны.

      Настроим маршрутизатор на Васильевском острове, согласно плану:

      Поскольку мы уже запланировали сеть для Озерков 172.16.17.0/24, то можем сразу прописать туда маршрут:

      В качестве некст хопа ставим адрес, который мы выделили для линковой сети на Озерках — 172.16.2.6

      Теперь перенесёмся в сами Озерки:

      Подключим кабель в уже настроенный порт fa1/1 на стороне Васильевского острова и в 24-й порт 3560 в Озерках. По умолчанию все порты L3-коммутатора работают в режиме L2, то есть это обычные “свитчёвые” порты, на которых мы можем настроить вланы. Но любой из них мы можем перевести в L3-режим, сделав портом маршрутизатора. Тогда на нём мы сможем настроить IP-адрес:

      Настроим ещё локальную сеть. Напомним, что Cisco и другие производители и не только производители не рекомендуют использовать 1-й влан, поэтому, мы воспользуемся 2-м:

      После этого все устройства во втором влане будут иметь шлюзом 172.16.17.1

      Сеть СПб Озерки

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

      Таким образом мы включим возможность маршрутизации.

      Никаких других маршрутов, кроме как по умолчанию нам тут не надо:

      Связь до spb-vsl-gw1 есть:

      А до Москвы нет:

      Опять же дело в отсутствии маршрута. Вообще удобный инструмент для нахождения примерного места расположения проблемы traceroute:

      Как видите, что от spb-vsl-gw1 ответ приходит, а дальше глухо. Это означает, как правило, что или на хопе с адресом 172.16.2.5 не прописан маршрут в нужную сеть (вспоминаем, что у нас настроен там маршрут по умолчанию, которого достаточно) или на следующем нету маршрута обратно:

      Действительно маршрута в подсеть 172.16.17.0/24 нет. Мы можем прописать его, вы это уже умеете, а можем вспомнить, что целую подсеть 172.16.16.0/21 мы выделили под Питер, поэтому вместо того, чтобы по отдельности добавлять маршрут в каждую новую сеть, мы пропишем агрегированный маршрут:

      Но странной неожиданностью для вас может стать то, что с spb-ozerki-gw1 вы не увидите Москву по-прежнему:

      Но при этом, если в качестве адреса-источника мы укажем 172.16.17.1:

      И даже с компьютера 172.16.17.26 связь есть:

      ping

      Как же так? Ответ, вы не поверите, так же прост — проблемы с маршрутизацией.

      Дело в том, что msk-arbat-gw1 о подсети 172.16.17.0/24 знает, а о 172.16.2.4/30 нет. А именно адрес 172.16.2.6 — адрес ближайшего к адресату интерфейса (или интерфейса, с которого отправляется IP-пакет) подставляет по умолчанию в качестве источника. Об этом забывать не нужно.

      Ещё интересный опыт: а что если адрес на маршрутизаторе на Васильевском острове маршрут в подсеть 172.16.3.0/24 пропишем на Озерки, а не в Москву? Ну чисто для интереса. Что произойдёт в этом случае?

      В РТ вы этого не увидите, почему-то, но в реальной жизни получится кольцо маршрутизации. Сети 172.16.3.0/24 и 172.16.16.0/21 не будут видеть друг друга: пакет идущий с spb-ozerki-gw1 в сеть 172.16.3.0 попадает в первую очередь на spb-vsl-gw1, где сказано: “172.16.3.0/24 ищите за 172.16.2.6”, а это снова spb-ozerki-gw1, где сказано: “172.16.3.0/24 ищите за 172.16.2.5” и так далее. Пакет будет шастать туда-обратно, пока не истечёт значение в поле TTL.

      Дело в том, что при прохождении каждого маршрутизатора поле TTL в IP-заголовке, изначально имеющее значение 255, уменьшается на 1. И если вдруг окажется, что это значение равно 0, то пакет погибает, точнее маршрутизатор, увидевший это, задропит его. Таким образом обеспечивается стабильность сети — в случае возникновения петли пакеты не будут жить бесконечно, нагружая канал до его полной утилизации. Кстати, в Ethernet такого механизма нет и если получается петля, то коммутатор только и будет делать, что плодить широковещательные запросы, полностью забивая канал — это называется широковещательный шторм (эта проблема решается с помощью специальной технологии\протокола STP – об этом в следующем выпуске).

      В общем, если вы пускаете пинг из сети 172.16.17.0 на адрес 172.16.3.1, то ваш IP-пакет будет путешествовать между двумя маршрутизаторами, пока не истечёт срок его жизни, пройдя при этом по линку между Озерками и Васильевским островом 254 раза. Кстати, следствием из работы этого механизма является то, что не может существовать связная сеть, где между узлами больше 255 маршрутизаторов. Впрочем это и не очень актуальная потребность. Сейчас даже самый долгий трейс занимает пару-тройку десятков хопов.

      Кемерово. Красная горка

      Рассмотрим последний небольшой пример — маршрутизатор на палочке (router on a stick). Название навеяно схемой подключения:

      маршрутизатор на палочке (router on a stick)

      Маршрутизатор связан с коммутатором лишь одним кабелем и по разным вланам внутри него передаётся трафик и локальной сети, и внешний. Делается это, как правило, для экономии средств (на маршрутизаторе только один порт и не хочется покупать дополнительную плату). Подключим следующим образом:

      сеть в Кемерово

      Настройка коммутатора уже не должна для вас представлять проблем. На UpLink-интерфейсе настраиваем оговоренный с провайдером 5-й влан транком:

      В качестве влана для локальной сети выберем vlan 2 и это ничего, что он уже используется и в Москве и в Питере — если они не пересекаются и вы это можете контролировать, то номера могут совпадать. Тут каждый решает сам: вы можете везде использовать, например, 2-й влан, в качестве влана локальной сети или напротив разработать план, где номера вланов уникальны во всей сети.

      Транк в сторону маршрутизатора, где 5-ым вланом будут тегироваться кадры внешнего трафика, а 2-м — локального.

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

      Дополнительно

      В случае, если с маршрутизацией не всё в порядке для траблшутинга вам понадобятся две команды: traceroute и show ip route .

      У первой бывает полезным, как вы видели, задать адрес источника. А последнюю можно применять с параметрами, например:

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

      И ещё хотелось бы повторить самые важные вещи:

      • Когда блок данных попадает на маршрутизатор, заголовок Ethernet полностью отбрасывается и при отправке формируется совершенно новый кадр. Но IP-пакет остаётся неизменным
      • Каждый маршрутизатор в случае статической маршрутизации принимает решение о судьбе пакета исключительно самостоятельно и не знает ничего о чужих таблицах
      • Поиск в таблице идёт НЕ до первой попавшейся подходящей записи, а до тех пор, пока не будет найдено самое точное соответствие (самая узкая маска). Например, если у вас таблица маршрутизации выглядит так: И вы передаёте данные на 172.16.10.5, то он не пойдёт ни по маршруту через 172.16.2.22 ни через 172.16.2.26, а выберет самую узкую маску (самую длинную) /30 через 172.16.2.30
      • Если IP-адресу получателя не будет соответствовать ни одна запись в таблице маршрутизации и не настроен маршрут по умолчанию (шлюз последней надежды), пакет будет просто отброшен.

      На этом первое знакомство с маршрутизацией можно закончить. Нам кажется, что читатель сам видит, сколько сложностей поджидает его здесь, может предположить, какой объём работы предстоит ему, если сеть разрастётся до нескольких десятков маршрутизаторов. Но надо сказать, что в современном мире статическая маршрутизация, не то чтобы не используется, конечно, ей есть место, но в подавляющем большинстве сетей, крупнее районного пионер-нета внедрены протоколы динамической маршрутизации. Среди них OSPF, EIGRP, IS-IS, RIP, которым мы посвятим отдельный выпуск и, скорее всего, не один. Но настройка статической маршрутизации в значительной степени поможет вашему общему пониманию маршрутизации. В качестве самостоятельного задания попробуйте настроить маршрутизацию между Москвой и Кемерово и ответить на вопрос, почему не пингуются устройства из сети управления.

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

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