Load Balancing - Балансировка нагрузки WAN

Load Balancing - Балансировка нагрузки WAN

Load Balancing в VyOS - это функция распределения сетевого трафика между множественными WAN-подключениями для повышения отказоустойчивости и эффективного использования пропускной способности.

Обзор

Load Balancing используется для:

  • WAN Redundancy: Автоматический failover при отказе основного канала
  • Bandwidth Aggregation: Суммирование пропускной способности нескольких каналов
  • Traffic Distribution: Распределение нагрузки между провайдерами
  • Cost Optimization: Эффективное использование множественных каналов
  • High Availability: Непрерывность работы при отказе оборудования или канала

Типы балансировки

VyOS поддерживает несколько методов балансировки:

МетодОписаниеИспользование
Round-robinПо очереди между каналамиРавномерное распределение
WeightedПропорционально весу каналаРазная пропускная способность
Source-basedПо IP источникаSticky sessions
Destination-basedПо IP назначенияСпецифичные маршруты

Архитектура

Load Balancing в VyOS работает через:

  • Health monitoring: Проверка доступности каналов (ping, TTL)
  • Failover: Автоматическое переключение на рабочие каналы
  • Sticky connections: Сохранение маршрута для существующих сессий
  • Rule-based routing: Policy-based routing для балансировки

Базовая конфигурация

Dual WAN с автоматическим failover

# Настройка интерфейсов
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 description 'WAN1 - Primary ISP'

set interfaces ethernet eth1 address dhcp
set interfaces ethernet eth1 description 'WAN2 - Backup ISP'

set interfaces ethernet eth2 address 192.168.1.1/24
set interfaces ethernet eth2 description 'LAN'

# Load balancing группа
set load-balancing wan interface-health eth0 nexthop dhcp
set load-balancing wan interface-health eth0 test 10 type ping
set load-balancing wan interface-health eth0 test 10 target 8.8.8.8

set load-balancing wan interface-health eth1 nexthop dhcp
set load-balancing wan interface-health eth1 test 10 type ping
set load-balancing wan interface-health eth1 test 10 target 1.1.1.1

# Правило балансировки
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0 weight 1
set load-balancing wan rule 1 interface eth1 weight 1

# NAT для обоих каналов
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade

set nat source rule 101 outbound-interface name eth1
set nat source rule 101 source address 192.168.1.0/24
set nat source rule 101 translation address masquerade

commit
save

Active-Backup (Primary-Failover)

# Primary канал с большим весом
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0 weight 100  # Primary
set load-balancing wan rule 1 interface eth1 weight 1    # Backup only

commit
save

Health monitoring с множественными тестами

# Множественные тесты для надежности
set load-balancing wan interface-health eth0 nexthop dhcp
set load-balancing wan interface-health eth0 test 10 type ping
set load-balancing wan interface-health eth0 test 10 target 8.8.8.8
set load-balancing wan interface-health eth0 test 20 type ping
set load-balancing wan interface-health eth0 test 20 target 1.1.1.1

# Failure count - сколько раз тест должен провалиться
set load-balancing wan interface-health eth0 failure-count 3

commit
save

Расширенная конфигурация

Weighted балансировка (разная пропускная способность)

# WAN1: 100 Mbps (вес 2)
# WAN2: 50 Mbps (вес 1)

set load-balancing wan interface-health eth0 nexthop dhcp
set load-balancing wan interface-health eth0 test 10 type ping
set load-balancing wan interface-health eth0 test 10 target 8.8.8.8

set load-balancing wan interface-health eth1 nexthop dhcp
set load-balancing wan interface-health eth1 test 10 type ping
set load-balancing wan interface-health eth1 test 10 target 1.1.1.1

# Правило с весами 2:1
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0 weight 2
set load-balancing wan rule 1 interface eth1 weight 1

commit
save

Source-based балансировка (sticky sessions)

# Балансировка по IP источника (один клиент - один канал)
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0
set load-balancing wan rule 1 interface eth1
set load-balancing wan rule 1 per-packet-balancing disable  # Sticky sessions

commit
save

Исключения из балансировки

# Основное правило балансировки
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0
set load-balancing wan rule 1 interface eth1

# Исключение: VPN трафик только через WAN1
set load-balancing wan rule 10 inbound-interface eth2
set load-balancing wan rule 10 interface eth0
set load-balancing wan rule 10 destination port 500  # IKE
set load-balancing wan rule 10 protocol udp

set load-balancing wan rule 11 inbound-interface eth2
set load-balancing wan rule 11 interface eth0
set load-balancing wan rule 11 destination port 4500  # NAT-T
set load-balancing wan rule 11 protocol udp

commit
save

Балансировка по протоколу/порту

# HTTP/HTTPS через оба канала
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0
set load-balancing wan rule 1 interface eth1
set load-balancing wan rule 1 destination port 80,443
set load-balancing wan rule 1 protocol tcp

# Email только через WAN1 (для белого IP)
set load-balancing wan rule 10 inbound-interface eth2
set load-balancing wan rule 10 interface eth0
set load-balancing wan rule 10 destination port 25,587
set load-balancing wan rule 10 protocol tcp

# Все остальное через оба канала
set load-balancing wan rule 100 inbound-interface eth2
set load-balancing wan rule 100 interface eth0
set load-balancing wan rule 100 interface eth1

commit
save

TTL-based health check

# TTL test (альтернатива ping)
set load-balancing wan interface-health eth0 nexthop dhcp
set load-balancing wan interface-health eth0 test 10 type ttl
set load-balancing wan interface-health eth0 test 10 target 8.8.8.8
set load-balancing wan interface-health eth0 test 10 ttl-limit 1  # Минимальный TTL

commit
save

Flush connections при failover

# Сброс существующих соединений при failover
set load-balancing wan flush-connections

commit
save

Примеры конфигураций

Пример 1: Dual WAN с равномерной балансировкой

# WAN интерфейсы
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 description 'ISP1'

set interfaces ethernet eth1 address dhcp
set interfaces ethernet eth1 description 'ISP2'

# LAN интерфейс
set interfaces ethernet eth2 address 192.168.1.1/24
set interfaces ethernet eth2 description 'LAN'

# Health monitoring
set load-balancing wan interface-health eth0 nexthop dhcp
set load-balancing wan interface-health eth0 test 10 type ping
set load-balancing wan interface-health eth0 test 10 target 8.8.8.8
set load-balancing wan interface-health eth0 failure-count 3

set load-balancing wan interface-health eth1 nexthop dhcp
set load-balancing wan interface-health eth1 test 10 type ping
set load-balancing wan interface-health eth1 test 10 target 1.1.1.1
set load-balancing wan interface-health eth1 failure-count 3

# Load balancing rule (50/50)
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0 weight 1
set load-balancing wan rule 1 interface eth1 weight 1
set load-balancing wan rule 1 per-packet-balancing disable

# NAT
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade

set nat source rule 101 outbound-interface name eth1
set nat source rule 101 source address 192.168.1.0/24
set nat source rule 101 translation address masquerade

commit
save

Пример 2: Primary-Backup конфигурация

# WAN интерфейсы
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 description 'Primary ISP (100 Mbps)'

set interfaces ethernet eth1 address dhcp
set interfaces ethernet eth1 description 'Backup ISP (50 Mbps)'

set interfaces ethernet eth2 address 192.168.1.1/24

# Health monitoring
set load-balancing wan interface-health eth0 nexthop dhcp
set load-balancing wan interface-health eth0 test 10 type ping
set load-balancing wan interface-health eth0 test 10 target 8.8.8.8

set load-balancing wan interface-health eth1 nexthop dhcp
set load-balancing wan interface-health eth1 test 10 type ping
set load-balancing wan interface-health eth1 test 10 target 1.1.1.1

# Primary-Backup (вес 100:1)
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0 weight 100
set load-balancing wan rule 1 interface eth1 weight 1

# NAT
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade

set nat source rule 101 outbound-interface name eth1
set nat source rule 101 source address 192.168.1.0/24
set nat source rule 101 translation address masquerade

commit
save

Пример 3: Weighted балансировка с исключениями

# WAN интерфейсы (100 Mbps и 50 Mbps)
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth1 address dhcp
set interfaces ethernet eth2 address 192.168.1.1/24

# Health monitoring
set load-balancing wan interface-health eth0 nexthop dhcp
set load-balancing wan interface-health eth0 test 10 type ping
set load-balancing wan interface-health eth0 test 10 target 8.8.8.8

set load-balancing wan interface-health eth1 nexthop dhcp
set load-balancing wan interface-health eth1 test 10 type ping
set load-balancing wan interface-health eth1 test 10 target 1.1.1.1

# VPN всегда через WAN1 (для стабильного IP)
set load-balancing wan rule 10 inbound-interface eth2
set load-balancing wan rule 10 interface eth0
set load-balancing wan rule 10 protocol esp

set load-balancing wan rule 11 inbound-interface eth2
set load-balancing wan rule 11 interface eth0
set load-balancing wan rule 11 destination port 500,4500
set load-balancing wan rule 11 protocol udp

# Основной трафик: weighted балансировка 2:1
set load-balancing wan rule 100 inbound-interface eth2
set load-balancing wan rule 100 interface eth0 weight 2
set load-balancing wan rule 100 interface eth1 weight 1

# NAT
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade

set nat source rule 101 outbound-interface name eth1
set nat source rule 101 source address 192.168.1.0/24
set nat source rule 101 translation address masquerade

commit
save

Пример 4: Triple WAN

# Три WAN канала
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 description 'ISP1 - Fiber 200 Mbps'

set interfaces ethernet eth1 address dhcp
set interfaces ethernet eth1 description 'ISP2 - Cable 100 Mbps'

set interfaces ethernet eth3 address dhcp
set interfaces ethernet eth3 description 'ISP3 - LTE 50 Mbps (Backup)'

set interfaces ethernet eth2 address 192.168.1.1/24

# Health monitoring для всех каналов
set load-balancing wan interface-health eth0 nexthop dhcp
set load-balancing wan interface-health eth0 test 10 type ping
set load-balancing wan interface-health eth0 test 10 target 8.8.8.8

set load-balancing wan interface-health eth1 nexthop dhcp
set load-balancing wan interface-health eth1 test 10 type ping
set load-balancing wan interface-health eth1 test 10 target 1.1.1.1

set load-balancing wan interface-health eth3 nexthop dhcp
set load-balancing wan interface-health eth3 test 10 type ping
set load-balancing wan interface-health eth3 test 10 target 9.9.9.9

# Weighted балансировка 4:2:1 (200 Mbps : 100 Mbps : 50 Mbps)
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0 weight 4
set load-balancing wan rule 1 interface eth1 weight 2
set load-balancing wan rule 1 interface eth3 weight 1

# NAT для всех
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade

set nat source rule 101 outbound-interface name eth1
set nat source rule 101 source address 192.168.1.0/24
set nat source rule 101 translation address masquerade

set nat source rule 102 outbound-interface name eth3
set nat source rule 102 source address 192.168.1.0/24
set nat source rule 102 translation address masquerade

commit
save

Интеграция с облачными платформами

Yandex Cloud

При развертывании Load Balancing в Yandex Cloud учитывайте особенности платформы:

Dual WAN с Yandex Cloud Internet Gateway:

# Основной канал через Yandex Cloud NAT Gateway
set interfaces ethernet eth0 address 10.0.1.10/24
set interfaces ethernet eth0 description 'Yandex Cloud NAT Gateway'

# Резервный канал через Elastic IP
set interfaces ethernet eth1 address 10.0.2.10/24
set interfaces ethernet eth1 description 'Elastic IP Backup'

# LAN
set interfaces ethernet eth2 address 192.168.1.1/24

# Health monitoring с Yandex Cloud DNS
set load-balancing wan interface-health eth0 nexthop 10.0.1.1
set load-balancing wan interface-health eth0 test 10 type ping
set load-balancing wan interface-health eth0 test 10 target 77.88.8.8  # Yandex DNS

set load-balancing wan interface-health eth1 nexthop 10.0.2.1
set load-balancing wan interface-health eth1 test 10 type ping
set load-balancing wan interface-health eth1 test 10 target 8.8.8.8

# Primary-Backup балансировка
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0 weight 100
set load-balancing wan rule 1 interface eth1 weight 1

# Cloud Logging интеграция
set system syslog host 10.0.0.10 facility daemon level info

commit

Мониторинг с Yandex Monitoring:

#!/bin/bash
# /config/scripts/yc-monitoring.sh

# Send metrics to Yandex Monitoring
WAN1_STATUS=$(show load-balancing wan interface-health eth0 | grep -c "reachable")
WAN2_STATUS=$(show load-balancing wan interface-health eth1 | grep -c "reachable")

# Export metrics via Unified Agent
echo "wan1_status $WAN1_STATUS" > /tmp/metrics.txt
echo "wan2_status $WAN2_STATUS" >> /tmp/metrics.txt

VK Cloud

Интеграция Load Balancing с VK Cloud (Mail.ru Cloud Solutions):

Dual WAN с VK Cloud:

# Primary через VK Cloud NAT
set interfaces ethernet eth0 address 10.0.1.10/24
set interfaces ethernet eth0 description 'VK Cloud Primary'

# Backup через Floating IP
set interfaces ethernet eth1 address 10.0.2.10/24
set interfaces ethernet eth1 description 'VK Cloud Backup'

set interfaces ethernet eth2 address 192.168.1.1/24

# Health check с VK Cloud metadata service
set load-balancing wan interface-health eth0 nexthop 10.0.1.1
set load-balancing wan interface-health eth0 test 10 type ping
set load-balancing wan interface-health eth0 test 10 target 169.254.169.254
set load-balancing wan interface-health eth0 test 20 type ping
set load-balancing wan interface-health eth0 test 20 target 8.8.8.8

set load-balancing wan interface-health eth1 nexthop 10.0.2.1
set load-balancing wan interface-health eth1 test 10 type ping
set load-balancing wan interface-health eth1 test 10 target 8.8.8.8

# Weighted балансировка
set load-balancing wan rule 1 inbound-interface eth2
set load-balancing wan rule 1 interface eth0 weight 2
set load-balancing wan rule 1 interface eth1 weight 1

commit

Мониторинг и диагностика

Просмотр статуса load balancing

# Показать статус load balancing
show load-balancing wan

# Вывод включает:
# - Статус каждого интерфейса (active/inactive)
# - Последний результат health check
# - Текущий nexthop
# - Статистика использования

Проверка health checks

# Детальная информация о health checks
show load-balancing wan interface-health

# Статус тестов для конкретного интерфейса
show load-balancing wan interface-health eth0

Просмотр правил

# Конфигурация load balancing
show configuration load-balancing wan

# Показать правила
show configuration load-balancing wan rule

Статистика балансировки

# Счетчики пакетов/байтов по интерфейсам
show interfaces ethernet eth0 statistics
show interfaces ethernet eth1 statistics

# Conntrack для проверки распределения
sudo conntrack -L | wc -l

Тестирование failover

# Отключить интерфейс для теста
set interfaces ethernet eth0 disable
commit

# Проверить статус
show load-balancing wan

# Включить обратно
delete interfaces ethernet eth0 disable
commit

Логирование

# Логи load balancing
show log | match "wan lb"
show log | match "load-balancing"

# Real-time мониторинг
monitor log | match "wan lb"

Устранение неполадок

Проблема: Health check постоянно fail

Диагностика:

# Проверка статуса
show load-balancing wan interface-health eth0

# Ручная проверка ping
ping 8.8.8.8 interface eth0 count 5

# Проверка routing
show ip route

# Проверка firewall
show firewall

Решение:

# Изменить target для health check
delete load-balancing wan interface-health eth0 test 10 target
set load-balancing wan interface-health eth0 test 10 target 1.1.1.1

# Увеличить failure count
set load-balancing wan interface-health eth0 failure-count 5

# Использовать TTL вместо ping
set load-balancing wan interface-health eth0 test 10 type ttl

commit
save

Проблема: Балансировка не работает

Диагностика:

# Проверка статуса
show load-balancing wan

# Проверка rules
show configuration load-balancing wan rule

# Проверка NAT
show nat source rules

Решение:

# Убедиться, что NAT настроен для всех WAN
set nat source rule 100 outbound-interface name eth0
set nat source rule 101 outbound-interface name eth1

# Проверить inbound-interface в rules
show configuration load-balancing wan rule 1

# Flush connections для обновления
set load-balancing wan flush-connections

commit
save

Проблема: Sticky sessions не работают

Причина: Per-packet balancing включен.

Решение:

# Отключить per-packet balancing
set load-balancing wan rule 1 per-packet-balancing disable

commit
save

Проблема: VPN не работает после failover

Причина: VPN требует стабильного IP.

Решение:

# Исключить VPN из балансировки
set load-balancing wan rule 10 inbound-interface eth2
set load-balancing wan rule 10 interface eth0  # Только primary WAN
set load-balancing wan rule 10 protocol esp

set load-balancing wan rule 11 inbound-interface eth2
set load-balancing wan rule 11 interface eth0
set load-balancing wan rule 11 destination port 500,4500
set load-balancing wan rule 11 protocol udp

commit
save

Лучшие практики

  1. Правильный выбор метода балансировки
# Active-Backup - для надежности
set load-balancing wan rule 1 interface eth0 weight 100
set load-balancing wan rule 1 interface eth1 weight 1

# Round-robin - для равномерного использования
set load-balancing wan rule 1 interface eth0 weight 1
set load-balancing wan rule 1 interface eth1 weight 1

# Weighted - для разной пропускной способности
set load-balancing wan rule 1 interface eth0 weight 2
set load-balancing wan rule 1 interface eth1 weight 1
  1. Надежный health monitoring
set load-balancing wan interface-health eth0 test 10 type ping
set load-balancing wan interface-health eth0 test 10 target 8.8.8.8
set load-balancing wan interface-health eth0 test 20 type ping
set load-balancing wan interface-health eth0 test 20 target 1.1.1.1
set load-balancing wan interface-health eth0 failure-count 3
  1. Sticky sessions для стабильности
set load-balancing wan rule 1 per-packet-balancing disable
  1. Исключения для критичных сервисов
# VPN всегда через один канал
set load-balancing wan rule 10 interface eth0
set load-balancing wan rule 10 protocol esp
  1. NAT для всех WAN
set nat source rule 100 outbound-interface name eth0
set nat source rule 101 outbound-interface name eth1
  1. Мониторинг и алерты
set system task-scheduler task wan-monitor interval '*/5 * * * *'
set system task-scheduler task wan-monitor executable path '/config/scripts/monitor-wan.sh'
  1. Flush connections при failover
set load-balancing wan flush-connections
  1. Документирование конфигурации
set interfaces ethernet eth0 description 'ISP1 - Primary - 100 Mbps'
set interfaces ethernet eth1 description 'ISP2 - Backup - 50 Mbps'
  1. Тестирование failover
set interfaces ethernet eth0 disable
# Проверить работу через WAN2
delete interfaces ethernet eth0 disable
  1. Логирование
set system syslog file wan-lb.log facility daemon level info

Дополнительные ресурсы

Следующие шаги