Домашній інтернет маршрутизація двох (і більше) провайдерів на основі Bird Routing Daemon
Напевно, багато користувачів домашнього інтернету стикалися з тим, як розпаралелити два та більше інтернет-каналів у домашній мережі. Цю проблему можна вирішити і хардварно (використовуючи будь-яке дешеве або дороге обладнання) та софтверно. Яку модель маршрутизації вибрати? Відразу можна відкинути RIP/OSPF/BGP, так як це домашній інтернет і більше ніж впевнений (у моєму випадку і перевірено), що вам не захочуть підтримувати сторону провайдера безкоштовно. Зупинив вибір на bird.
Отже, вихідна позиція:
- Домашній раутер із Debian GNU/Linux 6.0.5 (squeeze) на борту
- 2 інтернет канали (ISP1 та ISP2)
- 2 прямі руки
- горнятко кави
- eth0 - Провайдер 'ISP1':
- IP: 10.10.10.106
- Netmask: 255.255.255.0
- Gateway: 10.10.10.1
Я любитель apt, але виявилося, що в апті лежить досить застаріла версія bird (1.2.5-1) і там немає підтримки multipath. Доведеться зібрати це руками. Наперед навмисно опускаю всякий флейм, як не перетворити debian на slackware.
Стартап-скрипт готовий, додаємо в авто-запуск:
Створимо директорію для логфайлу:
Тепер приступаємо до конфігурування самого bird.
Для початку бакапимо оригінальний конфіг і створюємо новий:
Потім відкриваємо його на редагування:
Тепер створюємо директорію для мануальних конфігів і для прикладу вносимодеякі маршрути:
Все, налаштування bird закінчене. Тепер переходимо до налаштування таблиць маршрутизації.
Додаємо таблиці до /etc/iproute2/rt_tables:
Тепер потрібно зробити так, щоб при запиті з мережі ISP1 пакети йшли назад в ISP1, а не за іншим інтерфейсом. Для цього потрібно додати ip rule(s): Для цього створюємо скрипти iprules:
Ставимо прапорець +x:
Тепер все ребутімзапускаємо:
Щоб не копіпастити команди, зробимо хитрішими:
Тепер висмикуємо шнурок відключаємо мережевий кабель від ISP1 (eth0), дивимося, що змінилося:
Тобто, якщо один з провайдерів випадково відключився, трафік піде через інший, відключений провайдер моніториться кожні 20 секунд (див. опцію scan time 20 в протоколах kernel) і при появі автоматично прибере 'dead'.
На закінчення: таким же чином можна додати і 10 провайдерів.
Хардкорна конфа за С++. Ми запрошуємо лише профі.