Форум русскоязычного сообщества Ubuntu


Автор Тема: iproute2. Демоны машрутизации и отказоустйчивость.  (Прочитано 6971 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1708
  • חתול המדען
    • Просмотр профиля
Всем, кто сталкивался с задачей балансировки двух и более каналов, практически всегда приходилось решать задачу отказоустойчивости. На хабре есть замечательная статья на эту тему, которая даёт хорошее представление о том как это работает.
Собственно статья родилась из этого треда, как бы в пример того как могут применяться демоны маршрутизации.

I. Выбор программного обеспечения.
Для решения задачи необходимы следующие требования к ПО:
- Поддержка нескольких таблиц маршрутизации
- Поддержка mutliroute
По этим критериям знаменитая quagga отправляется в утиль, потому как ни того, ни другого она не умеет. Её предшественник Zebra похоронен ещё в 2005-м году.
Единственный проект, который не только подходит к требованиям, но и активно развивается - чешский BIRD, домашняя страница http://bird.network.cz/
Кроме того, что BIRD умеет всяческие протоколы динамической маршрутизации, он умеет работать как демон RA в IPv6 сетях, хочется попробовать использовать его вместо деревянного radvd , а так же отлично работает со статической маршрутизацией. Именно последний вариант будет рассмотрен.

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

III. Пример условия:
vlan3 - первый провайдер. 172.16.0.2/24 GW 172.16.0.1
vlan4 - второй провайдер. 10.0.0.2/24 GW 10.0.0.1
vlan5 - локальная сеть. 192.168.0.1/24
Оба провайдера выдают статические адреса. Конфигурация TCP/IP на интерфейсах - статическая.
Код: (bash) [Выделить]
# file /etc/network/interfaces
auto lo eth0 vlan3 vlan4 vlan5
iface lo inet loopback
iface eth0 inet manual
iface vlan3 inet static
address 172.16.0.2
netmask 255.255.255.0
up ip rule add from 172.16.0.2 table ISP1
down ip rule del from 172.16.0.2 table ISP1
vlan-raw-device eth0
iface vlan4 inet static
address 10.0.0.2
netmask 255.255.255.0
up ip rule add from 10.0.0.2 table ISP2
down ip rule del from 10.0.0.2 table ISP2
vlan-raw-device eth0
iface vlan5 inet static
address 192.168.0.1
netmask 255.255.255.0
vlan-raw-device eth0
Можно увидеть, что параметра gateway нет ни в одной секции.

IV. iproute 2.
Чтобы демон корректно работал в таких условиях, необходимо объявить нужные таблицы маршрутизации ISP1 и ISP2. Например:
Код: (bash) [Выделить]
# file: /etc/iproute2/rt_tables
255     local
254     main
253     default
252     ISP1
251     ISP2
0       unspec

V. Демон маршрутизации BIRD.
Для уходящего LTS - Lucid Lynx, демон необходимо бэкпортировать из более новых веток репазитария, либо собрать самому, скачав исходные тексты с сайта проекта, а так же подключив репазитарий на Launchpad. Причина - старая версия демона, которая не поддерживает multiroute. Я использовал версию 1.3.7

Код: (text) [Выделить]
apt-add-repository ppa:cz.nic-labs/bird
aptitude update
aptitide install bird
Ниже представлен пример конфигурации файла /etc/bird.conf c комментариями.
Код: (bash) [Выделить]
# Объявляем лог-файл демона
log "/var/log/bird.log" all;
# Объявляем таблицы маршрутизации
table birdISP1;
table birdISP2;
table birddefault;

# Проверяем наличие интерфейсов
protocol device {
        scan time 20;
}

# Объявляем маршрутизацию таблицы birdISP1
# Проверяем линк на "живучесть"
protocol static {
table birdISP1;
        check link on;
route 172.16.0.0/24 via "vlan3";
route 192.168.0.0/24 via "vlan5";
route 0.0.0.0/0 via 172.16.0.1;
}

# Объявляем маршрутизацию таблицы birdISP2
# Проверяем линк на "живучесть"
protocol static {
table birdISP2;
        check link on;
route 10.0.0.0/24 via "vlan4";
route 192.168.0.0/24 via "vlan5";
route 0.0.0.0/0 via 10.0.0.1;
}

# Объявляем таблицу birddefault
# Вес каналов будет одинаковым - 1
# Для изменения веса можно указать
# route prefix multipath via ip [weight num] [via ...]
protocol static {
table birddefault;
route 0.0.0.0/0 multipath
via 172.16.0.1
via 10.0.0.1;
}

# Связываем таблицу маршрутизации  birdISP1 с таблицей iproute2 - ISP1
protocol kernel {
table birdISP1;
scan time 20;
        export all;
        kernel table 252;
}

# Связываем таблицу маршрутизации  birdISP2 с таблицей iproute2 - ISP2
protocol kernel {
table birdISP2;
scan time 20;
        export all;
        kernel table 251;
}

# Связываем таблицу маршрутизации  birddefault с таблицей iproute2 - main
protocol kernel {
table birddefault;
scan time 20;
        export all;
        kernel table 254;
}

Такая конфигурация по задумке обеспечивает проверку валидности каналов каждые 20 секунд, в случае проблем с одним из линков переключает на рабочий.
« Последнее редактирование: 26 Апрель 2012, 01:07:13 от KT315 »
OpenWrt 19.07

Оффлайн djrust

  • Активист
  • *
  • Сообщений: 861
    • Просмотр профиля
Познавательная статья!Спасибо!

А как быть если
eth0 первый провайдер
eth1 второй
eth2 локалка

vlan не случайно ведь?

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1708
  • חתול המדען
    • Просмотр профиля
Быть точно так же. Просто в примере используется vlan.
OpenWrt 19.07

Оффлайн djrust

  • Активист
  • *
  • Сообщений: 861
    • Просмотр профиля
Попробовал ничего не получилось(

eth0 пров 1
eth1 локалка
eth2 пров 2

У вас в interfaces ошибка?Указано два одинаковых table ISP1

cat interfaces
(Нажмите, чтобы показать/скрыть)

cat /etc/bird.conf
(Нажмите, чтобы показать/скрыть)

cat /etc/iproute2/rt_tables
#
# reserved values
#
255     local
254     main
253     default
252     SP2
251     SP1
0       unspec
#
# local
#
#1      inr.ruhep


sudo /etc/init.d/networking restart
 * Reconfiguring network interfaces...                                                                                                                                                       Error: argument "ISP1" is wrong: invalid table ID

Failed to bring up eth0.
ssh stop/waiting
ssh start/running, process 4002
Error: argument "ISP2" is wrong: invalid table ID

Failed to bring up eth2.

Что я сделал не так?


+ Интересует вопрос,как сделать на основе этого балансировку раздачи интернета на локальную сеть?
« Последнее редактирование: 26 Апрель 2012, 00:13:24 от djrust »

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1708
  • חתול המדען
    • Просмотр профиля
Скорее опечатка. Однако спасибо.
А у Вас, по-видимому, тоже опечатка: в iproute обозначены таблицы SP1 и SP2, а в interfaces, другие ID.
« Последнее редактирование: 26 Апрель 2012, 00:18:11 от KT315 »
OpenWrt 19.07

Оффлайн djrust

  • Активист
  • *
  • Сообщений: 861
    • Просмотр профиля
Цитировать
А у Вас, по-видимому, тоже опечатка: в iproute обозначены таблицы SP1 и SP2, а в interfaces, другие ID.
чОрт))))Точно)))))

Тока пока ничего не пингуется)))))

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1708
  • חתול המדען
    • Просмотр профиля
Таки давайте разбирать, что пингуется.
Код: (text) [Выделить]
ip r s t all p bird
sudo birdc show route table birdISP1
sudo birdc show route table birdISP2
sudo birdc show route table mainbird
ip rule
OpenWrt 19.07

Оффлайн djrust

  • Активист
  • *
  • Сообщений: 861
    • Просмотр профиля
первая команда ничего не выводит!
sudo birdc show route table birdISP1
Unable to connect to server control socket (/var/run/bird.ctl): Connection refused
sudo birdc show route table mainbird
Unable to connect to server control socket (/var/run/bird.ctl): Connection refused
sudo ip rule
0:      from all lookup local
32764:  from 192.168.100.150 lookup ISP1
32765:  from 192.168.140.150 lookup ISP2
32766:  from all lookup main
32767:  from all lookup default
в resolv.conf что должно быть?

syslog
Apr 26 00:38:05 mail kernel: [  255.867705] ADDRCONF(NETDEV_UP): eth2: link is not ready
Apr 26 00:38:05 mail kernel: [  255.870072] e1000: eth2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
Apr 26 00:38:05 mail kernel: [  255.870601] ADDRCONF(NETDEV_CHANGE): eth2: link becomes ready
Apr 26 00:38:05 mail ntpdate[1877]: name server cannot be used, reason: Temporary failure in name resolution
Apr 26 00:38:05 mail init: ssh main process (1825) terminated with status 255
Apr 26 00:38:05 mail postfix/master[1023]: reload -- version 2.7.0, configuration /etc/postfix
Apr 26 00:38:15 mail kernel: [  265.988110] eth2: no IPv6 routers present
Apr 26 00:38:15 mail kernel: [  266.140098] eth1: no IPv6 routers present
Apr 26 00:38:15 mail kernel: [  266.296137] eth0: no IPv6 routers present

« Последнее редактирование: 26 Апрель 2012, 00:42:46 от djrust »

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1708
  • חתול המדען
    • Просмотр профиля
Понятно, что ничего не выводит. Зато вторая говорит, что демон не запущен. Почему - см. лог. В resolv.conf dns'ы, полагаю я, должны быть.
added: уточняю - лог демона bird.
« Последнее редактирование: 26 Апрель 2012, 00:45:02 от KT315 »
OpenWrt 19.07

Оффлайн djrust

  • Активист
  • *
  • Сообщений: 861
    • Просмотр профиля
Цитировать
added: уточняю - лог демона bird.
Там пусто...вообще

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1708
  • חתול המדען
    • Просмотр профиля
Вероятно, его (демон) стоит  запустить, как думаете?
sudo service bird start ?
OpenWrt 19.07

Оффлайн djrust

  • Активист
  • *
  • Сообщений: 861
    • Просмотр профиля
Цитировать
Вероятно, его стоит (демон), как думаете?
Что?
Я как то не подумал что его можно перезапустить(((
sudo service bird start

bird: /etc/bird.conf, line 62: Table name expected

sudo service bird restart
* Restarting Internet routing daemon bird                                                                                                                                                   bird: /etc/bird.conf, line 62: Table name expected


странно конечно!

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1708
  • חתול המדען
    • Просмотр профиля
Вот и нашлась вторая опечатка в моем примере, еще раз спасибо - писал не с рабочего конфига.
Код: (text) [Выделить]
-62:      table defaultbird;
Код: (text) [Выделить]
+62:      table birddefault;
Пользователь решил продолжить мысль 26 Апрель 2012, 01:00:28:
странно конечно!
А вот это пожалуй стоит оставить на совести сборщика пакета, почему не проверяет валидность конфигурации при перезапуске...
« Последнее редактирование: 26 Апрель 2012, 01:01:10 от KT315 »
OpenWrt 19.07

Оффлайн djrust

  • Активист
  • *
  • Сообщений: 861
    • Просмотр профиля
Вот и славно)

Тока у меня опять ничего не пингуется)))))

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1708
  • חתול המדען
    • Просмотр профиля
ответ №6
OpenWrt 19.07

 

Страница сгенерирована за 0.108 секунд. Запросов: 25.