среда, 20 марта 2019 г.

Cumulus Linux | Базовый OSPF


Привет подписчики...

Сегодня прям маленькая заметочка. В прошлом посте разобрались как вообще начать играться с Cumulus. В целом, все классно, vagrant прекрасен и позволяет автоматизировать огромную долю рутинной работы по настройке окружения. Но мне, конечно, хочется все настроить руками с нуля. Попробуем настроить простую OSPF сеть. 
У меня для таких случаев уже есть эталонная схема. Использовал ее уже много раз, например вот тут

Схема довольно проста и понятная, попробуем настроить всю целиком, но посмотрим на сколько нам это позволит Cumulus. Как видно, у нас 4 зоны всех возможных типов, vitual link до одной из них, несколько внешних E1/E2 маршрутов (а значит редистрибуция), авторизация и многое другое.

Строить будем на голом ESXi, по классике. Важное замечание, я стремлюсь пощупать именно L3 функционал, поэтому все что касается L2 остается на совести ESXi. В следующем посте собираюсь прицельно поиграться с L2 функционалом. Плюс, не стоит ожидать чего-то сверх сложного, это просто настройка OSPF на Cumulus. Мне OSPF знаком, поэтому так проще знакомится с сетевым оборудованием.

Итак, 8 ненастроеных хостов соединеных vswitch'ами кушают всего около 5Гб оперативной памяти, что прям шикарно. Почему-то в прошлом посте на Virtualbox ситуация была намного хуже...


Базовая настройка

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

Разберем на примере О2. Прописываем hostname, указываем адреса на портах в сторону area0 и area1. Не забываем и про loopback, которые будем анонсировать в OSPF потом. Все адреса берем со схемы.

cumulus@cumulus:~$ net add hostname cmlsO2
cumulus@cumulus:~$ net add interface swp1 ip address 10.10.0.2/24
cumulus@cumulus:~$ net add interface swp2 ip address 10.10.1.1/30
cumulus@cumulus:~$ net add loopback lo ip address 10.0.10.2/32
cumulus@cumulus:~$ net add loopback lo ip address 10.12.0.0/16

Далее делаем net pending для проверки наших изменений и net commit для применения. Наблюдаем длинный diff, где подробно расписано что и где мы меняем.


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


Как видно, базовая настройка проста и легко автоматизируется. Нужен простой jinja темплэйт команд и что-то, что будет раскидывать его по хостам. Второй вариант, который демонстрировал нам Cumulus в своем репозитории - просто подменять файлы конфигураций и рестартовать сервисы. Заострять на этом внимания пока что не будем, сегодня меня интересует не автоматизация. )

В общем, в результате мы имеем IP связность на линковых адресах. Все эти команды есть не что иное, как правка файлов конфигурации. Если мы взглянем на известный /etc/network/interfaces, то увидим как наши команды трансформировались в текстовый конфиг.

auto lo
iface lo inet loopback
    # The primary network interface
    address 10.0.10.1/32
    address 10.11.0.0/16

auto eth0
iface eth0 inet dhcp

auto swp1
iface swp1
    address 10.10.0.1/24

OSPF

Приступим к базовой настройке OSPF. В качестве "бэкэнда" Cumulus использует FRR, что является развитием Quagga. Кто теперь скажет, что Quagga для бедняков?

Здесь Cumulus представляет нам выбор. OSPF можно настроить напрямую через FRR средствами cisco-like модели конфигурации. Можно подсунуть файлы в нужные места и рестартануть ospfd. Можно пользоваться cli от Cumulus. Им я еще не пользовался для настройки OSPF, поэтому остановимся на нем.

Итак, базовый конфиг выглядит примерно так:
cumulus@cmlsO1:~$ net add ospf router-id 10.0.10.1
cumulus@cmlsO1:~$ net add ospf network 10.10.0.0/24 area 0.0.0.0
cumulus@cmlsO1:~$ net add ospf network 10.0.10.0/32 area 0.0.0.0
cumulus@cmlsO1:~$ net add ospf network 10.11.0.0/16 area 0.0.0.0

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


Как видно, ospf это просто процесс в системе, который является частью FRR.


Можно даже frr.conf конфиг посмотреть.


Базовая редистрибуция

На нашей схеме два роутера добавляют в топологию внешние маршруты.
На О1 применяем:
cumulus@cmlsO1:~$ net add routing route 192.168.0.0/24 null0
cumulus@cmlsO1:~$ net add ospf redistribute static metric 100
cumulus@cmlsO1:~$ net add ospf redistribute static metric-type 1

На 07:
cumulus@cmlsO7:~$ net add routing route 172.16.0.0/24 null0
cumulus@cmlsO7:~$ net add ospf redistribute static metric 100
cumulus@cmlsO7:~$ net add ospf redistribute static metric-type 2

Посмотрим на это дело со стороны О6. Два внешних маршрута появились.


Тупики

По "дизайну" у нас тут ворох тупиковых зон - Stub, Totally Stub и NSSA.

Totally stub

Ладно, сделаем из O6 totally stub зону. Со стороны O3 нужно добавить ключ no-summary. Обо всем этом подробнее я рассказывал здесь и здесь.

cumulus@cmlsO3:~$ net add ospf area 2 stub no-summary
cumulus@cmlsO6:~$ net add ospf area 2 stub

По какой-то причине внешние маршруты очень долго не хотели пропадать из ospf database O6, но в итоге мы наблюдаем типичную для "ваще тупиковой" зоны картину. Два LSA первого типа (router), один LSA второго типа (network) и LSA Type3  (summary) который обеспечивает выход из зоны. Ни записей о других зонах, ни тем более внешних префиксов.


NSSA

Тут же нас поджидает первый сюрприз. Я не нашел поддержку NSSA в Cumulus NCLI.  Причем, я говорю именно о NCLI. Да, через нее видимо настроить этот функционал не получится, но ничто не мещает нам настроить это напрямую через Quagga FRR. Для этого понадобится vtysh, который в cisco-like режиме позволяет настроить все что нужно.


После симметричной настройки на О7, соседство поднимается. В ospf database теперь чуть скучней...

Есть у нас еще и stub зона, правда с ней еще рано разбираться, ведь она "изолирована" от backbone области. Несите костыли...

Virtual Link

Вторая особенность, Cumulus NCLI не поддерживает настройку virtual-link. Снова воспользуемся vtysh от FRR.

На стороне O2 добавляем одну строку напрямую через vtysh (консоль FRR). Cisco-like, а значит проблем с ситанксисом возникнуть не должно.


На О5 производим полностью симметричную манипуляцию, меняя только адрес на 10.0.10.2. После чего "линк" до 10.0.10.2 поднимается.


Теперь О8 должен стать обычным OSPF маршрутизатором со всеми нужными маршрутами.


Authentication

Последнее о чем стоит поговорить в этой "заметке". Настроим md5 между О3 и О6. Делается это буквально в две команды. Естественно, все работает.


Заключение

В общем-то все ясно. Конечно же в базовом функционале в лабе все работает. Однако нравится мне Cumulus, вот прям нравится. Как уже говорил, он находится прям на стыке интересных мне областей - сети, автоматизация, Linux. Еще мне нравится в нем то, что он, как и многие другие продукты, выводят Linux на совсем другие высоты. Раньше, как мне кажется, было стыдно роутить на Quagga, теперь же это наоборот "стильно, модно, молодежно".

В следующем посте планирую быстро пробежаться по L2. Темка эта будет поинтереснее, чем L3. Далее посмотрим, либо MPLS, либо засосет в подготовку к RHCE. Да, вроде решил сдавать.

Комментариев нет:

Отправить комментарий