# Bond интерфейсы (Link Aggregation) в VyOS

> Настройка Bond интерфейсов в VyOS для агрегации каналов - режимы LACP, round-robin, active-backup, балансировка нагрузки и отказоустойчивость в облаке

Source: https://opennix.org/docs/vyos/interfaces/vyos-bond/



Bond (bonding) объединяет несколько физических сетевых интерфейсов в один логический интерфейс для увеличения пропускной способности и обеспечения отказоустойчивости.

## Обзор

Bond обеспечивает:
- **Увеличение пропускной способности** - агрегация каналов
- **Отказоустойчивость** - автоматический failover
- **Балансировка нагрузки** - распределение трафика
- **Redundancy** - резервирование каналов

**Также известен как**:
- Link Aggregation
- Port Channel
- EtherChannel (Cisco)
- LAG (Link Aggregation Group)
- NIC Teaming

## Режимы Bonding

### 802.3ad (LACP)

**IEEE 802.3ad Dynamic Link Aggregation** - стандартный протокол агрегации.

```
set interfaces bonding bond0 mode '802.3ad'
commit
```

**Характеристики**:
- Требует поддержки LACP на коммутаторе
- Автоматическое обнаружение и конфигурация
- Балансировка нагрузки
- Failover при отказе канала
- Использует все активные каналы

**Когда использовать**:
- Современные управляемые коммутаторы
- Нужна стандартная агрегация
- Требуется динамическая конфигурация

### active-backup

Активен только один интерфейс, остальные в резерве.

```
set interfaces bonding bond0 mode 'active-backup'
commit
```

**Характеристики**:
- Простейший режим
- Не требует поддержки от коммутатора
- Только failover (без балансировки)
- Быстрое переключение при отказе

**Когда использовать**:
- Коммутатор не поддерживает агрегацию
- Нужна только отказоустойчивость
- Простая конфигурация

### balance-rr (Round-Robin)

Последовательная передача пакетов через все интерфейсы.

```
set interfaces bonding bond0 mode 'balance-rr'
commit
```

**Характеристики**:
- Балансировка нагрузки
- Failover
- Может вызывать переупорядочивание пакетов
- Не требует поддержки от коммутатора

**Когда использовать**:
- Локальное соединение (без коммутатора)
- Тестирование

### balance-xor

Балансировка на основе хеша (MAC, IP).

```
set interfaces bonding bond0 mode 'balance-xor'
set interfaces bonding bond0 hash-policy 'layer2+3'
commit
```

**Характеристики**:
- Балансировка по хешу
- Failover
- Предсказуемое распределение
- Не требует LACP

**Когда использовать**:
- Коммутатор без LACP
- Нужна балансировка без протокола

### broadcast

Передача на все интерфейсы одновременно.

```
set interfaces bonding bond0 mode 'broadcast'
commit
```

**Характеристики**:
- Дублирование трафика
- Максимальная отказоустойчивость
- Нет увеличения пропускной способности
- Потребляет больше ресурсов

**Когда использовать**:
- Критичные системы
- Специфичные требования

### balance-tlb (Transmit Load Balance)

Балансировка исходящего трафика без протокола.

```
set interfaces bonding bond0 mode 'balance-tlb'
commit
```

**Характеристики**:
- Балансировка TX
- Failover
- Не требует поддержки от коммутатора
- RX на одном интерфейсе

**Когда использовать**:
- Больше исходящего трафика
- Коммутатор без агрегации

### balance-alb (Adaptive Load Balance)

Балансировка входящего и исходящего трафика.

```
set interfaces bonding bond0 mode 'balance-alb'
commit
```

**Характеристики**:
- Балансировка TX и RX
- Использует ARP negotiation
- Не требует поддержки от коммутатора
- Только для IPv4

**Когда использовать**:
- Двусторонняя балансировка
- Коммутатор без LACP
- Только IPv4 трафик

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

### Создание bond интерфейса

```
set interfaces bonding bond0 mode '802.3ad'
set interfaces bonding bond0 member interface eth1
set interfaces bonding bond0 member interface eth2
commit
```

### IP-адресация

```
set interfaces bonding bond0 address 192.168.1.1/24
set interfaces bonding bond0 address 2001:db8::1/64
commit
```

### Описание

```
set interfaces bonding bond0 description 'Bonded uplink to core switch'
commit
```

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

### Member Interfaces

Добавление физических интерфейсов:

```
set interfaces bonding bond0 member interface eth0
set interfaces bonding bond0 member interface eth1
set interfaces bonding bond0 member interface eth2
commit
```

Все member интерфейсы должны иметь одинаковые параметры (speed, duplex).

### Hash Policy

Алгоритм распределения трафика (для 802.3ad, balance-xor):

```
set interfaces bonding bond0 hash-policy 'layer2+3'
commit
```

Опции:
- **layer2** - использует MAC адреса (по умолчанию)
- **layer2+3** - использует MAC + IP адреса
- **layer3+4** - использует IP + порты (TCP/UDP)

Рекомендация: `layer2+3` или `layer3+4` для лучшей балансировки.

### LACP Rate

Частота LACP пакетов (только для 802.3ad):

```
set interfaces bonding bond0 lacp-rate 'fast'
commit
```

Значения:
- **slow** - LACP каждые 30 секунд (по умолчанию)
- **fast** - LACP каждую секунду (быстрое обнаружение отказов)

Рекомендация: `fast` для критичных систем.

### Minimum Links

Минимальное количество активных каналов:

```
set interfaces bonding bond0 min-links 1
commit
```

Bond будет UP только если активно минимум указанное количество member интерфейсов.

### Primary Interface

Предпочтительный интерфейс (для active-backup):

```
set interfaces bonding bond0 mode 'active-backup'
set interfaces bonding bond0 primary eth0
commit
```

### ARP Monitoring

Мониторинг доступности через ARP:

```
set interfaces bonding bond0 arp-monitor interval 100
set interfaces bonding bond0 arp-monitor target 192.168.1.254
commit
```

Параметры:
- **interval** - интервал проверки в миллисекундах
- **target** - IP адрес для мониторинга

Альтернатива MII monitoring (по умолчанию).

### System MAC

MAC адрес bond интерфейса:

```
set interfaces bonding bond0 mac '00:50:56:00:00:01'
commit
```

По умолчанию использует MAC первого member интерфейса.

## VLAN на Bond

Bond может содержать VLAN sub-interfaces:

```
set interfaces bonding bond0 vif 10 address 192.168.10.1/24
set interfaces bonding bond0 vif 10 description 'VLAN 10 - Management'

set interfaces bonding bond0 vif 20 address 192.168.20.1/24
set interfaces bonding bond0 vif 20 description 'VLAN 20 - Data'

commit
```

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

### Базовый 802.3ad (LACP) bond

Агрегация двух портов с LACP:

```
set interfaces bonding bond0 mode '802.3ad'
set interfaces bonding bond0 hash-policy 'layer2+3'
set interfaces bonding bond0 lacp-rate 'fast'
set interfaces bonding bond0 member interface eth0
set interfaces bonding bond0 member interface eth1
set interfaces bonding bond0 address 10.0.0.1/24
set interfaces bonding bond0 description 'Uplink to core switch'
commit
```

### Active-backup для отказоустойчивости

```
set interfaces bonding bond0 mode 'active-backup'
set interfaces bonding bond0 primary eth0
set interfaces bonding bond0 member interface eth0
set interfaces bonding bond0 member interface eth1
set interfaces bonding bond0 address 192.168.1.1/24
commit
```

### Bond с 4 интерфейсами

```
set interfaces bonding bond0 mode '802.3ad'
set interfaces bonding bond0 hash-policy 'layer3+4'
set interfaces bonding bond0 lacp-rate 'fast'
set interfaces bonding bond0 member interface eth0
set interfaces bonding bond0 member interface eth1
set interfaces bonding bond0 member interface eth2
set interfaces bonding bond0 member interface eth3
set interfaces bonding bond0 min-links 2
set interfaces bonding bond0 address 10.0.0.1/24
commit
```

### Bond с VLANs

```
# Bond интерфейс
set interfaces bonding bond0 mode '802.3ad'
set interfaces bonding bond0 hash-policy 'layer2+3'
set interfaces bonding bond0 member interface eth0
set interfaces bonding bond0 member interface eth1

# VLANs на bond
set interfaces bonding bond0 vif 100 address 192.168.100.1/24
set interfaces bonding bond0 vif 100 description 'VLAN 100 - Servers'

set interfaces bonding bond0 vif 200 address 192.168.200.1/24
set interfaces bonding bond0 vif 200 description 'VLAN 200 - Workstations'

commit
```

### Bond в Bridge

Bond как member bridge для виртуализации:

```
# Bond
set interfaces bonding bond0 mode '802.3ad'
set interfaces bonding bond0 member interface eth0
set interfaces bonding bond0 member interface eth1

# Bridge с bond
set interfaces bridge br0 member interface bond0
set interfaces bridge br0 address 192.168.1.1/24

commit
```

### Dual uplink с ARP monitoring

```
set interfaces bonding bond0 mode 'active-backup'
set interfaces bonding bond0 primary eth0
set interfaces bonding bond0 member interface eth0
set interfaces bonding bond0 member interface eth1
set interfaces bonding bond0 arp-monitor interval 100
set interfaces bonding bond0 arp-monitor target 10.0.0.254
set interfaces bonding bond0 address 10.0.0.1/24
commit
```

## Конфигурация коммутатора

### Cisco IOS/IOS-XE

```
interface Port-channel1
 switchport mode trunk
 switchport trunk allowed vlan 10,20,30

interface GigabitEthernet1/0/1
 switchport mode trunk
 switchport trunk allowed vlan 10,20,30
 channel-group 1 mode active

interface GigabitEthernet1/0/2
 switchport mode trunk
 switchport trunk allowed vlan 10,20,30
 channel-group 1 mode active
```

### Juniper Junos

```
set interfaces ae0 aggregated-ether-options lacp active
set interfaces ae0 unit 0 family inet address 10.0.0.2/24

set interfaces ge-0/0/0 ether-options 802.3ad ae0
set interfaces ge-0/0/1 ether-options 802.3ad ae0
```

### Arista EOS

```
interface Port-Channel1
   switchport mode trunk
   switchport trunk allowed vlan 10,20,30

interface Ethernet1
   channel-group 1 mode active

interface Ethernet2
   channel-group 1 mode active
```

### HP/Aruba

```
trunk 1-2 trk1 lacp
vlan 10 tagged trk1
vlan 20 tagged trk1
```

## Операционные команды

### Просмотр bond интерфейсов

Все bond интерфейсы:
```
show interfaces bonding
```

Конкретный bond:
```
show interfaces bonding bond0
```

Детальная информация:
```
show interfaces bonding bond0 detail
```

Пример вывода:
```
bond0: <BROADCAST,MULTICAST,MASTER,UP> mtu 1500 state UP
    address: 00:0c:29:ab:cd:ef
    mode: 802.3ad
    hash-policy: layer2+3
    lacp-rate: fast
    min-links: 1

    member interfaces:
        eth0: <SLAVE,UP> speed 1000 duplex full
        eth1: <SLAVE,UP> speed 1000 duplex full
```

### LACP информация

```
show interfaces bonding bond0 lacp
```

### Статус slave интерфейсов

```
show interfaces bonding bond0 slaves
```

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

### Проверка LACP negotiation

```
show interfaces bonding bond0 lacp detail
```

Проверьте:
- Actor и Partner system ID
- LACP активность
- Aggregator ID одинаковый для всех портов

### Проверка балансировки

```
show interfaces bonding bond0 statistics
```

Трафик должен распределяться между member интерфейсами.

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

Отключите один member интерфейс:
```
set interfaces ethernet eth0 disable
commit
```

Проверьте bond:
```
show interfaces bonding bond0
```

Включите обратно:
```
delete interfaces ethernet eth0 disable
commit
```

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

### Bond не поднимается

Проверьте member интерфейсы:
```
show interfaces
```

Все member интерфейсы должны быть UP.

Проверьте конфигурацию:
```
show configuration interfaces bonding bond0
```

### LACP не работает

Проверьте коммутатор:
- LACP включен на портах
- Порты в одном port-channel
- LACP mode: active или passive

Проверьте LACP на VyOS:
```
show interfaces bonding bond0 lacp
```

### Нет балансировки трафика

Проверьте hash-policy:
```
show configuration interfaces bonding bond0 hash-policy
```

Попробуйте другой hash-policy:
```
set interfaces bonding bond0 hash-policy 'layer3+4'
commit
```

Убедитесь что есть разнообразие в hash (разные IP, MAC, порты).

### Частые failover

Проверьте кабели и интерфейсы:
```
show interfaces ethernet eth0 physical
```

Увеличьте LACP rate (если используется slow):
```
set interfaces bonding bond0 lacp-rate 'fast'
commit
```

### Несоответствие MTU

Установите одинаковый MTU на всех member интерфейсах и bond:
```
set interfaces bonding bond0 mtu 9000
commit
```

Member интерфейсы наследуют MTU от bond.

## Производительность

### Максимальная пропускная способность

Bond увеличивает aggregate bandwidth:
- 2x1G ports = ~2 Gbps
- 4x1G ports = ~4 Gbps
- 2x10G ports = ~20 Gbps

**Важно**: Один поток (одна TCP сессия) не превысит скорость одного member интерфейса из-за хеширования.

### Hash Policy для лучшей балансировки

- **layer2** - хорошо для разных MAC
- **layer2+3** - лучше для разных IP
- **layer3+4** - лучше всего для множества TCP/UDP соединений

### Jumbo Frames

Для высокопроизводительных сетей:
```
set interfaces bonding bond0 mtu 9000
commit
```

Все member интерфейсы и коммутатор должны поддерживать jumbo frames.

## Безопасность

### MAC Spoofing Protection

Bond использует один MAC адрес для всех member интерфейсов.

### LACP Authentication

VyOS не поддерживает LACP authentication (802.1X). Используйте физическую безопасность и port security на коммутаторе.

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

1. **Используйте 802.3ad (LACP)** - стандартный и надежный
2. **Одинаковые интерфейсы** - одинаковый speed/duplex для всех members
3. **LACP fast mode** - для быстрого failover
4. **Min-links** - установите минимум активных каналов
5. **Hash-policy layer3+4** - для лучшей балансировки
6. **Мониторинг** - отслеживайте статус member интерфейсов
7. **Резервное копирование** - сохраняйте конфигурацию
8. **Тестируйте failover** - проверяйте переключение
9. **Одинаковый MTU** - на всех members
10. **Документируйте** - какие порты в каком bond

## Ограничения

- Максимум пропускная способность ограничена суммой member интерфейсов
- Одно TCP соединение не превысит скорость одного интерфейса
- LACP требует поддержки от коммутатора
- Не все режимы поддерживают балансировку RX

## Миграция с single interface на bond

1. Создайте bond с новым именем
2. Перенесите конфигурацию IP на bond
3. Добавьте member интерфейсы
4. Тестируйте
5. Удалите старую конфигурацию

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

- [Bridge](/docs/vyos/interfaces/vyos-bridge/) - использование bond в bridge
- [VLAN](/docs/vyos/interfaces/vyos-vlan/) - VLANs на bond
- [High Availability](/docs/vyos/ha/) - bond для HA
- [Firewall](/docs/vyos/firewall/) - защита bond трафика

