How can we help?
Для того, чтобы 2 роутера увидели друг друга и обменялись маршрутами нужно:
- анонсировать те сети, по которым они соединены друг с другом. При этом они установят ТОЛЬКО СОСЕДСТВО.
- анонсировать те сети, про которые мы хотим рассказать соседу. Только тогда второй роутер увидит сеть «за спиной» первого роутера
Общая конфигурация:
Router(config)# | router ospf 1 | перейти в режим настройки ospf экземпляра 1 |
Router(config)# | router—id 0.0.0.32 | назначить id роутеру |
Router(config-router)# | network 192.168.0.0 0.0.255.255 area 0 | Анонсировать сеть 192.168.0.0 0.0.255.255 в регион 0 |
Router(config-router)# | passive-interface fa0/0.2 | не посылать hellow пакеты по интерфейсу fa0/0.2 (используется в интерфейсах, смотрящих на пользователей, за которыми точно нет роутеров) |
Router(config-router)# | auto-cost reference-bandwith | 10000 — изменить рефересную полосу пропуская (в мегабитах) (нужно делать на всех роутерах) |
Router# | clear ip ospf 1 pro | сбросить маршрутную информацию |
Router(config-if)# | ip ospf hellow-interval 8 | посылать hellow-пакеты каждые 8 скунд |
Router(config-if)# | ip ospf dead-interval 30 | признавать соседа недоступным, если мы от него не получили hellow пакет через 30 секунд |
Router(config-if)# | ip ospf priority 100 | изменить приоритет для OSPF на интерфейсе (влияет на выбор DR/BDR) |
Router(config-if)# | ip mtu 1400 | изменить размер MTU (необходимо выполнять на всех роутерах в одной канальной среде) |
Диагностика:
Router# | show ip ospf database | показать LSA от соседних роутеров |
Router# | show ip ospf database router 1.1.1.1 | Показать детальное содержимое LSA, которую сгенерировал роутер с ID 1.1.1.1 |
Router# | show ip protocols | показать конфигурацию динамических протоколов (по какой сети работают, какой id имеют и так далее) |
Router# | show ip ospf database router (summary) 172.16.3.50 | показать содержание самой LSA типа router (summary) с id 172.16.3.50 |
Router# | show ip ospf interface (brief) | показать интерфейсы, на которых работает OSPF (brief выводит сокращенную информацию, но в PacketTracer не работает), кроме того, выводит информацию о стоимости интерфейса |
Router# | show ip ospf neighbor | показать соседние роутеры, с которыми наш роутер обменивается маршрутами |
Router# | show ip ospf route | показать список маршрутов, которые получил ospf и должен был передать в таблицу маршрутизации. Внимание! Не путать со следующей командой |
Router# | show ip route ospf | показать таблицу маршрутизации и сделать выборку по тем маршрутам, которые попали в таблицу маршрутизации |
Router# | show ip route 192.168.3.2 | показать детальную информацию по маршруту к 192.168.3.2 |
Дополнительно:
Router(config)# | int e0/1 | заходим на нужный интерфейс |
Router(config-if)# | ip ospf cost 12 | устанавливаем стоимость интерфейса равной 12 |
Router(config-router)# | auto-cost reference-bandwidth 100000000 | изменить рефересную стоимость полосы пропускания (для правильного расчета стоимости маршрутов свыше 100 мегабит) |
Внимание! Эта настройка должна быть одинакова у всех роутеров. Стоимость маршрута определяется по простой формуле:
рефересная полоса пропуская (reference bandwidth) / скорость интерфейса (interface bandwidth).
Указывается в килобитах. По умолчанию рефересная полоса пропускания равна 100000
Кроме того, можно поменять расчетную скорость интерфейса (reference bandwidth). Указывается в килобитах:
Router(config-router)# | bandwidth 10000 | установить расчетную скорость интерфейса в 10000 килобит |
Это может использоваться в сценарии, когда физический интерфейс 10 гигабит (данные взяты для примера), а скорость на нем только 45 мегабит (сценарий подключение к провайдеру). И вот для того, чтобы маршрут оценивался адекватно (по фактической скорости а не по скорости интерфейса) и используется функция, описанная выше.
Фильтрация маршрутов
Задача 1:
запретить анонс сетей 10.0.1.0 10.0.2.0 10.0.3.0 …. из региона Area 0 (они в нем зародились) в регион Area 1 (а по умолчанию в регион Area 1 попадает все то, что есть в регионе Area 0)
Решение:
Решение идет от обратного — мы разрешаем те сети, которые хотим анонсировать из региона 0 в регион 1, а все остальные по умолчанию будут запрещены.
Router(config)# | ip prefix-list OSPF permit 192.168.0.0/16 | создаем prefix-list и разрешаем подсеть 192.168.0.0/16 |
Router(config-router)# | area <area-id> filter-list prefix <prefix-name> <in | out> | применяем этот фильтр на ABR роутер |
in — фильтрация сетей, которые передаются в указанную зону
out — фильтрация сетей, которые передаются из указанной зоны
Таким образом, на роутере из региона 1 мы уже не увидим сетей 10.0.1.0, 10.0.2.0, 10.0.3.0….., а у видим только разрешенную — 192.168.0.0.
Внимание! Это не распространяется на дефолтный маршрут 0.0.0.0 — он все равно попадет на другой роутер. Представим ситуацию — мы развернули туннель с удаленным филиальным роутером и установили OSPF соседство с ним. В этой ситуации филиальный роутер будет ходить в интернет не через обычный маршрут, а через этот туннель, поскольку наш роутер в главном филиале по OSPF анонсирует ему дефолтный маршрут 0.0.0.0. Для того, чтобы исправить эту ситуацию можно ухудшить метрику для внешних ospf маршрутов:
Fil_Edge_Router1(config-router)# | distance ospf external 255 | установить метрику для внешних ospf маршрутов равной 255 |
Благодаря этому, в таблице маршрутизации филиального роутера Fil_Edge_Router1 останется статический дефолтный маршрут, а дефолтный маршрут пришедший от роутера в главном офисе будет проигнорирован.
Задача 2: разрешить роутеру из региона 1 увидеть еще одну подсеть 10.0.2.0. Для этого на ABR роутере добавляем:
Router (config)# | ip prefix-list OSPF permit 10.0.2.0/16 | создаем prefix-list и разрешаем еще одну подсеть 10.0.2.0/16 |
В итоге на роутере из Area 1 мы увидим 2 маршрута:
до 192.168.0.0
и до 10.0.2.0
Альтернативный способ фильтрации маршрутов:
Задача:
Нам нужно разрешить роутеру вбрасывать в свою таблицу маршрутизации только определенные маршруты, чтобы злоумышленники не могли вбросить какой-либо неверный маршрут. Для этого создадим ACL:
Fil_Edge_Router(config)# | access-list 3 permit 172.10.0.0 0.0.255.255 | создаем access-list 3 и разрешаем подсеть 172.10.0.0 0.0.255.255 |
Fil_Edge_Router(config)# | access-list 3 permit 30.0.0.0 0.0.255.255 | создаем access-list 3 и разрешаем подсеть 30.0.0.0 0.0.255.255 |
Fil_Edge_Router(config)# | access-list 3 permit 20.0.0.0 0.0.255.255 | создаем access-list 3 и разрешаем подсеть 20.0.0.0 0.0.255.255 |
Fil_Edge_Router(config)# | access-list 3 permit 192.168.0.0 0.0.255.255 | создаем access-list 3 и разрешаем подсеть 192.168.0.0 0.0.255.255 |
Fil_Edge_Router(config)# | router ospf 1 | заходим в контекст конфигурации ospf |
Fil_Edge_Router(config-router)# | distribute-list 3 in | применяем созданными нами ACL к движку ospf |
Таким образом, в таблицу маршрутизации филиального роутера Fil_Edge_Router попадут только указанные маршруты в ACL 3.
Разница между первым и вторым способом – в первом случае мы запрещали одному роутеру анонсировать маршруты другому роутеру. Во втором случае мы запрещаем роутеру получать маршруты.
*Маршрутизатор фильтрует маршруты, которые помещаются в таблицу маршрутизации, но LSDB остается неизменной.
Фильтрация маршрутов при редистрибуции:
Router (config)# | ip prefix-list FILT permit 172.10.2.0/16 | создаем prefix-list и разрешаем (deny — запрещаем) подсеть 10.0.2.0/16, которую будем вбрасывать в OSPF |
ip prefix-list FILT permit 172.10.2.0 le 16 | указываются все подсети маска которых меньше или равна 16 | |
ip prefix-list FILT permit 172.10.2.0 ge 16 | указываются все подсети маски которых больше или равна 16 | |
ip prefix-list FILT 0.0.0.0 ge 24 le 24 | здесь в таблицу маршрутизации попадут все маршруты до сетей имеющих маску 24 (в ACL можно фильтровать только по конкретной маске) | |
ip prefix-list deny 172.10.2.0/24 ip prefix-list permit any | разрешит все кроме указанной подсети | |
Router (config)# | router ospf 1 | переходим к контекст настройки протокола ospf экземпляра 1 |
Router (config-router)# | redistrubute eigrp 1 subnets | включаем редистрибуцию из eigrp в ospf |
Router (config-router)# | destribute-list prefix FILT out eigrp 1 | применяем prefix-list на маршруты, которые из EIGRP вбрасываются в OSPF |
Суммаризация маршрутов
На ABR роутере:
Router(config-router)# | area 1 range 192.168.0.0 255.255.0.0 | разослать в другие регионы суммированный маршрут 192.168.0.0 за регион 1 |
На ASBR роутере:
Router(config-router)# | summary-address 192.168.0.0 255.255.0.0 | разослать от ASBR суммированный маршрут 192.168.0.0 |
Редистрибуция маршрутов
Способ 1: разослать все роутером дефолтный маршрут. То есть по всем неизвестным ip адресам все роутеры будут идти к нам:
Router(config-router)# | default-information originate always | metric | metric-type | route-map | вбрасываем всем соседям дефолтный маршрут до нас (через нас можно ходить в интернет). Делается на ASBR. Для того, чтобы эта команда сработала, на ASBR роутере нужно прописать статический маршрут 0.0.0.0 0.0.0.0 и замкнуть его на любой интерфейс, либо к команде default-information originate добавить always |
Способ 2: разослать всем роутерам все маршруты до всех внешних сетей которые мы сами знаем. Нельзя использовать если сетей очень много (нельзя в OSPF вбрасывать BGP)
Router(config-router)# | redistribute connected (static,eigrp, bgp и т.д) subnets | вбросить в OSPF коннектед-сетки (статические маршруты, маршруты eigrp, bgp и т.д) ASBR роутера. Аналогично выполняется и для EIGRP |
Router(config-router)# | redistrubute eigrp 1 metric-type 1 subnets | вбросить в OSPF маршруты из EIGRP с учетом стоимости транзита по сети OSPF |
Изменение административного расстояния:
Router(config-router)# | distance ospf external | inter-area | intra-area 1-255 | изменить административное расстояние для всех OSPF маршрутов |
Router(config-router)# | distance 1-255 172.20.0.0 0.0.255.255 | изменить административное расстояние только для одного маршрута 172.20.0.0 с перевернутой маской 0.0.255.255 |
Регионы OSPF
Регион stub:
Если вбросить маршруты способом 2, то можно в некоторые регионы посылать не все маршруты, а заменить их дефолтным маршрутом. Это делает ABR роутер.
Для этого регион помечаем как stub. Например:
Router(config-router)# | area 1 stub | пометить регион 1 как stub |
Это делается на всех роутерах, входящих в регион 1. Таким образом, все другие регионы получат полноценные маршруты в интернет (зародившиеся на роутере ASBR), а регион 1 получит маршрут-восьми нулёвку. Другими словами, роутеры из региона 1 начинают получать LSA не 5-того типа, а LSA 3-го типа
Регионы Stub и Totally Stubby Area:
Этот режим заменяет LSA 3-го типа и LSA 5-го типа одним единственным дефолтным маршрутом. Для включения этого режима необходимо роутер из одного региона включить просто как stub, а на ABR роутере задать режим stub no-summary. Например:
Router(config-router)# | area 2 stub | помечаем регион 2 как stub (на роутере второго региона) |
Router(config-router)# | area 2 stub no-summary | или помечаем регион как Totally Stubby Area |
Таким образом, на роутерах из второго региона вброшенные маршруты от роутера ASBR (LSA 5-го типа) и внутренние маршруты из других регионов (LSA 3-го типа) будут в таблице маршрутизации замещены одним единственным дефолтным маршрутом.
Изменение стоимости маршрута для регионов:
Мы можем изменить стоимость дефолтного маршрута для определенного stub региона. Это может быть полезно если у нас есть два ABR роутера и мы хотим пропускать трафик больше через первого, чем через второго. На самом деле, поскольку OSPF не умеет балансировать трафик по маршрутам неравной стоимости (в отличие от EIGRP), трафик будет ходить только через тот ABR, который анонсировал маршрут меньшей стоимости
На ABR роутере:
Router(config-router)# | area 2 default-cost 50 | определяем стоимость маршрута для региона 2 в 50 |
Внимание! По умолчанию, ASBR может находится только в нормальном регионе (не stub)
Однако есть обход этого запрета — stub регион нужно сделать типа NSSA. В таком случае, ASBR находящийся в NSSA регионе будет порождать не LSA 5-го типа, а LSA 7-го типа, которая на ABR будет преобразовываться в LSA 5-го типа.
На ABR роутере:
Router(config-router)# | area 2 NSSA (no-autosammary) | помечаем регион 2 как область NSSA (если добавить команду no-autosammary, то регион будет не просто NSSA, а еще и Totally Stubby Area) |
И на всех роутерах 2-го региона
Router(config-router)# | area 2 NSSA (no-autosammary) | помечаем регион 2 как область NSSA (и Totally Stubby Area при задании команды no-autosammary) |
Дополнительные функции
Дополнительно:
В случае работы по frame-relay у нас отсутствуют бродкасты и мультикасты. Поэтому соседей нужно прописывать вручную (они не могут друг друга автоматически обнаружить разослав мультикастовый hellow-пакет):
Router(config-router)# | neighbor 10.0.2.1 | указываем соседа с ip адресом 10.0.2.1 |
Кроме того, в случае с frame-relay, необходимо так же указывать канальный адрес соседа (если не работает InverseARP). Поскольку схема frame-relay point to multipoint сложна, (там нужно отключать защиту от петель), лучше использовать систему point-to-point с помощью суб интерфейсов, настраивать InversARP и тогда OSPF будет работать почти как в ethernet.
Защита OSPF. Настройка аутентификации:
Router(config)# | int e0/1 | переходим на интерфейс ethernet 0/1. Данный интерфейс смотрит на соседний роутер с включенным ospf. |
Router(config-if)# | ip ospf authentication message-digest | включаем аутентификацию ospf с алгоритмом хеширования message-digest |
Router(config-if)# | ip ospf message-digest-key 1 md5 cisco | задаем ключ аутентификации. В нашем случае Cisco |
Router# | show ip ospf int e0/1 | посмотреть включена ли аутентификация на интерфейсе |