Как настроить резервирование шлюза, используя VRRP, на простой и доступной основе?

Допустим, в локальной сети у вас есть несколько шлюзов (gw1, gw2, gw3). Как можно реализовать что-то похожее на VRRP, но с максимально простой настройкой? Например, создать виртуальный шлюз (pseudo-gw), который будет перенаправлять на эти шлюзы. Существуют ли готовые решения для этой задачи? Также желательно, чтобы была возможность использовать собственные методы или скрипты для проверки работоспособности шлюзов. Обратите внимание, что специализированного оборудования нет, есть только сервер в локальной сети с установленным VirtualBox.
  • 24 сентября 2024 г. 12:43
Ответы на вопрос 3
Чтобы реализовать резервирование шлюза, используя VRRP или аналогичные методы, с минимальными усилиями и доступными инструментами, вы можете воспользоваться виртуализированным подходом, используя как VirtualBox, так и программное обеспечение для маршрутизации.

Вот простой план реализации:

### 1. Подготовка среды
1. **Создайте виртуальные машины** в VirtualBox для шлюзов (gw1, gw2, gw3). Каждая из них должна иметь два сетевых интерфейса: один для локальной сети, другой для внутренней сети VirtualBox (например, с NAT или внутренней сетью).
2. **Настройте IP-адреса** на каждом шлюзе. Например:
   - `gw1`: 192.168.1.2
   - `gw2`: 192.168.1.3
   - `gw3`: 192.168.1.4

3. **Создайте виртуальный шлюз** (pseudo-gw), который будет использоваться клиентами для выхода в интернет. Виртуальный шлюз должен иметь IP-адрес, который будет маршрутизироваться на доступные шлюзы.

### 2. Настройка VRRP
1. Выберите систему, которая поддерживает VRRP. Например, можно использовать Linux с `keepalived`. Установите `keepalived` на каждую из виртуальных машин (gw1, gw2, gw3):
   ```bash
   sudo apt-get install keepalived
   ```
2. Настройте `keepalived` на каждой VM, создавая конфигурационные файлы `/etc/keepalived/keepalived.conf`.

   Пример конфигурации для `gw1`:
   ```plaintext
   vrrp_instance VI_1 {
       state MASTER
       interface eth0
       virtual_router_id 51
       priority 100
       advertisement_interval 1
       virtual_ipaddress {
           192.168.1.100  # виртуальный IP
       }
   }
   ```

   Пример конфигурации для `gw2`:
   ```plaintext
   vrrp_instance VI_1 {
       state BACKUP
       interface eth0
       virtual_router_id 51
       priority 90
       advertisement_interval 1
       virtual_ipaddress {
           192.168.1.100
       }
   }
   ```

   Аналогично настройте `gw3` с приоритетом ниже (например, 80).

### 3. Проверка работоспособности
1. **Скрипты для проверки состояния**:
   Вы можете добавить пользовательские проверки (например, проверку доступности шлюза) в конфигурацию `keepalived`:
   ```plaintext
   track_script {
       chk_hv {
           script "/usr/local/bin/check_gw.sh"
           interval 2
       }
   }
   ```

   Создайте `check_gw.sh`, который будет проверять доступность внешнего ресурса (например, пинг до 8.8.8.8):
   ```bash
   #!/bin/bash
   if ping -c 1 8.8.8.8 > /dev/null 2>&1; then
       exit 0
   else
       exit 1
   fi
   ```

   Не забудьте сделать скрипт исполняемым:
   ```bash
   sudo chmod +x /usr/local/bin/check_gw.sh
   ```

### 4. Тестирование и запуск
1. **Запустите `keepalived`** на всех шлюзах:
   ```bash
   sudo systemctl start keepalived
   ```
   
2. Убедитесь, что виртуальный IP-адрес назначен на одном из шлюзов (отправьте пинг на 192.168.1.100).
3. Проверьте, что при отключении основного шлюза виртуальный IP перемещается к резервному.

### Завершение
Этот подход позволяет вам настроить резервирование шлюзов с использованием VRRP на виртуальных машинах, что очень удобно для тестирования и разработки. `keepalived` обеспечит автоматическую переносимость IP-адреса на активно работающий шлюз, и вы сможете интегрировать свои проверки состояния через скрипты.
Берёте keepalived и натягиваете на него нужные скрипты с модификацией маршрутов.
При такой формулировке вопроса - только поставить перед ними внешний балансировщик
Похожие вопросы