Назад | Перейти на главную страницу

Маршрутизация с Quagga и OpenVPN

Мы планируем соединить серверы в двух стойках между собой. Предположим, у нас есть 5 серверов в каждой стойке, подключенных к быстрому коммутатору. Каждый сервер имеет восходящий канал Интернет на 1 Гбит.

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

Мы создаем несколько подключений OpenVPN (см. Прикрепленное изображение, «синие облака» - это сети VPN), потому что мы хотим использовать полное соединение 1 ГБит между ними. Но если один сервер выходит из строя, нам по-прежнему требуется рабочее соединение между двумя стойками.

Итак, что мы сделали: 1. Настроили OpenVPN между каждым сервером S [1-5] и C [1-5], создав виртуальную сеть 10.0.5x.0 / 24. (Это уже работает) 2. Установите и настройте Quagga с OSPF для объявления маршрутов. Мы сделали это для каждого узла, поэтому каждый может быть маршрутизатором для кого-то другого (нам не нужен только один-единственный шлюз, потому что это ограничит соединение между стойками только 1 ГБит, верно ?!)
3. Quagga теперь объявляет маршруты, и каждый может пинговать всех остальных (тоже работает)

Теперь игра начинается: мы снимаем C4, и маршруты обновляются соответствующим образом (говоря об OSPF и quagga). Но что произойдет сейчас, если мы попытаемся выполнить эхо-запрос с S4 на C5, потребуется некоторый путь, который, по мнению C5, не является лучшим (это мое понимание сетевой настройки rp_filter linux равной 1). В tcpdump мы видим маршрут S4 -> S3 -> C3 -> C5. Лучшим маршрутом будет S4 -> S5 -> C5.

Если мы установим rp_filter на 2, пинг будет работать, но вы считаете неправильным разрешать неоптимальные маршруты? Мы думали, что OSPF - это лучший (самый короткий) путь? Но мы предполагаем, что мы неправильно настроили Quagga / OSPFd.

Вот изображение топологии, которую мы имеем в виду: топология

Ospfd.conf выглядит так

interface eth0
interface bond0
interface tun0

router ospf
  router-id 10.0.1.4
  network 10.0.1.0/24 area 0
  network 10.0.54.0/24 area 1
  redistribute static

zebra.conf:

interface bond0
  link-detect
interface tun0
  link-detect

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