Просмотр Исходного

{toc}

h2. Зачем это настраивать?

Начиная с версии 8.01.03 доступна возможность в контейнере bgp_blackhole настроить OSPF для получения маршрутов до абонентов.

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

Обычно такая настройка полезна в случае, если в сети провайдера используется несколько маршрутизаторов занимающихся подключением пользователей по VPN. Маршрутизаторы доступны Carbon Reductor напрямую, но без OSPF он будет слать пакеты с редиректами в маршрут по умолчанию, в результате увеличивается число промежуточных узлов.

h2. Примечания

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

Поэтому при настройке необходимо явно отключить интеграцию BGP, включив при этом сам контейнер BGP Blackhole.

h2. Как настроить

Для начала помимо самого редуктора, требуется(ются) роутер(ы), с которыми будут созданы OSPF-"соседства".

В случае с Linux, потребуется установка и настройка Quagga (или её альтернатив).


Запускаем команду menu, выбираем BGP Blackhole:

!Снимок экрана 2017-08-17 в 17.14.34.png|border=1!

Заходим в настройки BGP Blackhole.

Выключим анонсирование маршрутов ("Включить интеграцию по BGP"), включенное по умолчанию для обратной совместимости и включим контейнер ("Включить BGP Blackhole").

!Снимок экрана 2017-08-17 в 17.14.56.png|border=1!

Дальше идём в настройки OSPF:

!Снимок экрана 2017-08-17 в 17.14.41.png|border=1!

И настраиваем его (описание опций под картинкой):

!Снимок экрана 2017-08-17 в 17.14.44.png|border=1!

Все эти параметры используются для генерации конфига ospfd.

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

{code}
hostname {{hostname - подхватывается из переменной окружения $HOSTNAME}}
password {{ospfd_password - Пароль ospfd}}
enable password {{ospfd_password - Пароль ospfd}}
log file /var/log/quagga/ospfd.log
service password-encryption
no banner motd
{% for interface in ospfd_interfaces - Интерфейсы ospfd %}interface {{interface}}
{% endfor %}
{% if ospfd_auth_key - Ключ аутентификации%} ip ospf authentication
ip ospf authentication-key {{ospfd_auth_key - Ключ аутентификации}}
{% endif %}
router ospf
ospf router-id {{ospfd_router_id - Router ID (reductor)}}
{% if ospfd_end_user_networks - Сети абонентов (через пробел) %}
redistribute kernel route-map end_user_routes
redistribute connected route-map end_user_routes
{% endif %}
passive-interface default
{% for interface in ospfd_interfaces - Интерфейсы ospfd %} no passive-interface {{ interface }}
{% endfor %}
network {{ospfd_router_network - Сеть маршрутизаторов}} area {{ospfd_area - Зона }}
{% for neighbor in neighbors - Соседи (через пробел) %} neighbor {{neighbor}}
{% endfor %}
access-list localhost permit 127.0.0.1/32
access-list localhost deny any
{% if ospfd_end_user_networks - Сети абонентов (через пробел) %}
{% for seq, network in ospfd_end_user_networks - Сети абонентов (через пробел) %}!
ip prefix-list end_users seq {{seq}} permit {{network}}
{% endfor %}!
ip prefix-list end_users seq {{ospfd_end_user_networks_count + 1}} deny any
route-map end_user_routes permit 10
match ip address prefix-list end_users
{% endif %}
line vty
access-class localhost
{code}

h3. Подробнее об опциях

*Обязательные*:

Раздел BGP:

* *Включить BGP-Blackhole* в BGP

Раздел OSPF:

* *Включить интеграцию по OSPF*
*  
* *Router ID* \- обычно, это IP-адрес сетевого интерфейса, на котором поднимается OSPF-сессия с другими маршрутизаторами (например 10.0.1.5)
* *Интерфейсы ospfd* \- список сетевых интерфейсов, подключенных к OSPF-соседям (например eth1 eth2)
* *Сеть маршрутизаторов* \- IP адрес сети, в которой находятся OSPF-соседи (например 10.0.1.0/24).
* *Зона* (area в терминологии OSPF) - должна совпадать между всеми OSPF-соседями (например 0.0.0.2)

*Необязательные* (тоже в разделе OSPF)*:*
* *Ключ аутентификации* \- пароль, по которому будут проверяться подключенные OSPF-соседи. Нужно для целей обеспечения безопасности, чтобы потенциальный злоумышленник не мог отправлять некорректные маршруты на ваше оборудование (например Aa1234).
* *Сети абонентов* \- будут приниматься только маршруты до адресов, находящихся в подсетях, перечисленных в этой опции (например 10.0.2.0/24 10.0.3.0/24).
* *Соседи* \- если требуется, чтобы редуктор настраивал соседство только с явно указанными маршрутизаторами, можно ограничить его этим списком их IP адресов. Может потребоваться для безопасности, подстраховки от собственных ошибок или уменьшения нагрузки (например 10.0.1.2 10.0.1.3).
* *Шаблон конфига ospfd* \- если есть настройки на сети, которые не соотносятся с нашими стандартными, то шаблон можно скопировать, отредактировать и указать путь до него в этой опции. Используется шаблонизатор jinja2. Лучше предварительно проконсультироваться с технической поддержкой, возможно будет правильнее добавить необходимые Вам опции в продукт. (например /cfg/ospfd.conf.j2)

После выполнения всех условий, требуется "Сохранить и применить настройки".


Проверить работу можно из CLI quagga:

{code}
chroot /app/bgp_blackhole
vtysh
show ip ospf neighbor
{code}

Этого достаточно для минимально рабочего сценария. Пример вывода в случае правильно настроенного OSPF:

{code}
reductor# sh ip ospf neighbor

Neighbor ID Pri State Dead Time Address Interface RXmtL RqstL DBsmL
10.0.0.2 1 2-Way/DROther 34.019s 10.0.0.2 eth3:10.0.0.3 0 0 0
{code}

h2. Кастомизация конфига

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

{code}
cp -a /app/bgp_blackhole/usr/local/share/ospfd.conf.j2 /app/bgp_blackhole/cfg/ospfd.conf.j2
{code}

Исправьте его под свои нужды в удобном вам текстовом редакторе и укажите в меню в поле "Шаблон конфига ospfd":

{code}
/cfg/ospfd.conf.j2
{code}

Конфиг генерируется с помощью jinja2.

Как запустить генерацию всех конфигов:

{code}
chroot /app/bgp_blackhole/
/genconfig
{code}

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