# UDP Broadcast Relay

> UDP Broadcast Relay на VyOS - перенаправление UDP broadcast-пакетов между сетями, DHCP relay, SONOS discovery и Wake-on-LAN

Source: https://opennix.org/docs/vyos/services/vyos-udp-broadcast-relay/


UDP Broadcast Relay - сервис для перенаправления UDP broadcast-пакетов между различными сетевыми сегментами и VLAN.

## Обзор

UDP Broadcast Relay решает проблему изоляции broadcast-доменов, позволяя сервисам, использующим UDP broadcast для обнаружения, работать через границы сетей.

### Основные возможности

- Перенаправление UDP broadcast между интерфейсами и VLAN
- Поддержка до 99 независимых relay-конфигураций
- Фильтрация по портам UDP
- Защита от broadcast-штормов
- Возможность указания source IP для исходящих пакетов
- Независимое включение/отключение relay без удаления конфигурации

### Типичные сценарии использования

1. **DHCP Relay** - перенаправление DHCP-запросов между подсетями
2. **NETBIOS/WINS** - обнаружение сетевых ресурсов Windows
3. **Wake-on-LAN (WoL)** - удаленное включение компьютеров через VLAN
4. **SONOS/UPnP/SSDP** - обнаружение медиа-устройств в мультикаст-сетях
5. **Сетевое оборудование** - обнаружение принтеров, IP-камер, точек доступа
6. **Игровые консоли** - обнаружение игр и устройств в локальной сети

### Как работает

1. VyOS прослушивает UDP broadcast на указанных интерфейсах
2. При получении broadcast-пакета на указанном порту, ретранслирует его на все остальные интерфейсы в группе
3. Пакет отправляется как broadcast на каждый интерфейс
4. Механизм защиты предотвращает циклические ретрансляции

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

### Структура команд

```
set service broadcast-relay id <relay-id>
  ├── description <text>
  ├── interface <interface>
  ├── port <udp-port>
  └── address <source-ip>
```

### Минимальная конфигурация

Простейший relay между двумя интерфейсами:

```
set service broadcast-relay id 1 interface eth0
set service broadcast-relay id 1 interface eth1
set service broadcast-relay id 1 port 9
commit
```

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

#### Relay ID

Уникальный идентификатор relay-группы (1-99):

```
set service broadcast-relay id 1
```

Можно создать до 99 независимых relay-конфигураций.

#### Интерфейсы

Интерфейсы для ретрансляции broadcast-пакетов:

```
set service broadcast-relay id 1 interface eth0
set service broadcast-relay id 1 interface eth1
set service broadcast-relay id 1 interface eth0.10
set service broadcast-relay id 1 interface eth0.20
```

Поддерживаются:
- Физические интерфейсы (eth0, eth1)
- VLAN интерфейсы (eth0.10, eth0.100)
- Bridge интерфейсы (br0)
- Bonding интерфейсы (bond0)

#### UDP порт

Указание UDP порта для фильтрации:

```
set service broadcast-relay id 1 port 67
```

Relay будет обрабатывать только broadcast на указанном UDP порту.

#### Описание

Текстовое описание relay-группы:

```
set service broadcast-relay id 1 description 'DHCP Relay between VLANs'
```

#### Source Address (опционально)

Указание source IP для исходящих пакетов:

```
set service broadcast-relay id 1 address 192.168.1.1
```

Полезно для контроля источника пакетов в маршрутизируемых сетях.

#### Отключение без удаления

Временное отключение relay:

```
set service broadcast-relay id 1 disable
```

Конфигурация сохраняется, но relay не активен.

## Типовые конфигурации

### DHCP Relay

Перенаправление DHCP-запросов (порты 67/68) между VLAN:

```
# DHCP Server Request (port 67)
set service broadcast-relay id 1 description 'DHCP Relay'
set service broadcast-relay id 1 interface eth0.10
set service broadcast-relay id 1 interface eth0.20
set service broadcast-relay id 1 interface eth0.30
set service broadcast-relay id 1 port 67
commit
```

**Важно**: Для полноценного DHCP relay рекомендуется использовать встроенный `service dhcp-relay`:
```
set service dhcp-relay interface eth0.10
set service dhcp-relay interface eth0.20
set service dhcp-relay server 192.168.1.1
```

### NETBIOS Name Service

Обнаружение Windows-ресурсов (порт 137):

```
set service broadcast-relay id 2 description 'NETBIOS Name Service'
set service broadcast-relay id 2 interface eth0
set service broadcast-relay id 2 interface eth1
set service broadcast-relay id 2 interface eth2
set service broadcast-relay id 2 port 137
commit
```

### Wake-on-LAN (WoL)

Перенаправление magic packets для удаленного включения (порт 9):

```
set service broadcast-relay id 3 description 'Wake-on-LAN'
set service broadcast-relay id 3 interface eth0.10
set service broadcast-relay id 3 interface eth0.20
set service broadcast-relay id 3 interface eth0.30
set service broadcast-relay id 3 port 9
commit
```

Также поддерживается порт 7 (некоторые реализации WoL):
```
set service broadcast-relay id 4 description 'Wake-on-LAN (port 7)'
set service broadcast-relay id 4 interface eth0.10
set service broadcast-relay id 4 interface eth0.20
set service broadcast-relay id 4 port 7
commit
```

### SONOS Discovery

Обнаружение SONOS аудиосистем (порт 1900 - SSDP):

```
set service broadcast-relay id 5 description 'SONOS Discovery'
set service broadcast-relay id 5 interface eth3
set service broadcast-relay id 5 interface eth4
set service broadcast-relay id 5 interface eth5
set service broadcast-relay id 5 port 1900
commit
```

### UPnP/SSDP

Universal Plug and Play discovery (порт 1900):

```
set service broadcast-relay id 6 description 'UPnP/SSDP Discovery'
set service broadcast-relay id 6 interface eth0.100
set service broadcast-relay id 6 interface eth0.200
set service broadcast-relay id 6 port 1900
commit
```

### Chromecast Discovery

Google Chromecast использует mDNS (порт 5353):

```
set service broadcast-relay id 7 description 'Chromecast mDNS'
set service broadcast-relay id 7 interface eth0.10
set service broadcast-relay id 7 interface eth0.20
set service broadcast-relay id 7 port 5353
commit
```

### Принтеры и сканеры

Обнаружение сетевых принтеров (SNMP trap - порт 161):

```
set service broadcast-relay id 8 description 'Network Printers'
set service broadcast-relay id 8 interface eth0.50
set service broadcast-relay id 8 interface eth0.60
set service broadcast-relay id 8 port 161
commit
```

## Практические сценарии

### Сценарий 1: Корпоративная сеть с VLAN

**Задача**: Обеспечить работу DHCP и Wake-on-LAN между VLAN отделов.

**Топология**:
- VLAN 10 - Management (192.168.10.0/24)
- VLAN 20 - Development (192.168.20.0/24)
- VLAN 30 - Production (192.168.30.0/24)
- DHCP сервер: 192.168.10.5

**Конфигурация**:

```
# DHCP Relay между всеми VLAN
set service broadcast-relay id 1 description 'Corporate DHCP Relay'
set service broadcast-relay id 1 interface eth0.10
set service broadcast-relay id 1 interface eth0.20
set service broadcast-relay id 1 interface eth0.30
set service broadcast-relay id 1 port 67

# Wake-on-LAN между VLAN
set service broadcast-relay id 2 description 'Corporate WoL'
set service broadcast-relay id 2 interface eth0.10
set service broadcast-relay id 2 interface eth0.20
set service broadcast-relay id 2 interface eth0.30
set service broadcast-relay id 2 port 9

commit
```

### Сценарий 2: Домашняя мультимедийная сеть

**Задача**: SONOS, Chromecast и Smart TV должны обнаруживаться между гостевой и домашней сетью.

**Топология**:
- VLAN 100 - Home (192.168.100.0/24)
- VLAN 200 - Guest (192.168.200.0/24)
- VLAN 300 - IoT (192.168.300.0/24)

**Конфигурация**:

```
# SONOS Discovery
set service broadcast-relay id 10 description 'SONOS Audio'
set service broadcast-relay id 10 interface eth0.100
set service broadcast-relay id 10 interface eth0.300
set service broadcast-relay id 10 port 1900

# Chromecast mDNS
set service broadcast-relay id 11 description 'Chromecast'
set service broadcast-relay id 11 interface eth0.100
set service broadcast-relay id 11 interface eth0.200
set service broadcast-relay id 11 interface eth0.300
set service broadcast-relay id 11 port 5353

# UPnP для Smart TV
set service broadcast-relay id 12 description 'Smart TV UPnP'
set service broadcast-relay id 12 interface eth0.100
set service broadcast-relay id 12 interface eth0.300
set service broadcast-relay id 12 port 1900

commit
```

### Сценарий 3: Дата-центр с изолированными зонами

**Задача**: Обеспечить централизованное управление через Wake-on-LAN и PXE boot.

**Топология**:
- VLAN 500 - Management (10.0.0.0/24)
- VLAN 501 - DMZ Servers (10.0.1.0/24)
- VLAN 502 - Internal Servers (10.0.2.0/24)
- VLAN 503 - Database Zone (10.0.3.0/24)

**Конфигурация**:

```
# Wake-on-LAN для всех серверных зон
set service broadcast-relay id 20 description 'Datacenter WoL'
set service broadcast-relay id 20 interface eth0.500
set service broadcast-relay id 20 interface eth0.501
set service broadcast-relay id 20 interface eth0.502
set service broadcast-relay id 20 interface eth0.503
set service broadcast-relay id 20 port 9
set service broadcast-relay id 20 address 10.0.0.1

# TFTP для PXE Boot
set service broadcast-relay id 21 description 'PXE Boot TFTP'
set service broadcast-relay id 21 interface eth0.500
set service broadcast-relay id 21 interface eth0.501
set service broadcast-relay id 21 interface eth0.502
set service broadcast-relay id 21 port 69
set service broadcast-relay id 21 address 10.0.0.1

commit
```

### Сценарий 4: Множественные офисы через VPN

**Задача**: Relay broadcast между VPN интерфейсами для обнаружения сетевых ресурсов.

**Топология**:
- Local LAN - eth1 (192.168.1.0/24)
- VPN Office 1 - wg0 (10.10.1.0/24)
- VPN Office 2 - wg1 (10.10.2.0/24)

**Конфигурация**:

```
# NETBIOS между офисами
set service broadcast-relay id 30 description 'Inter-Office NETBIOS'
set service broadcast-relay id 30 interface eth1
set service broadcast-relay id 30 interface wg0
set service broadcast-relay id 30 interface wg1
set service broadcast-relay id 30 port 137

# Wake-on-LAN между офисами
set service broadcast-relay id 31 description 'Inter-Office WoL'
set service broadcast-relay id 31 interface eth1
set service broadcast-relay id 31 interface wg0
set service broadcast-relay id 31 interface wg1
set service broadcast-relay id 31 port 9

commit
```

## Общие UDP порты для Relay

| Порт | Протокол/Сервис | Описание |
|------|----------------|----------|
| 7 | Echo / WoL | Wake-on-LAN (альтернативный) |
| 9 | Discard / WoL | Wake-on-LAN (основной) |
| 67 | DHCP Server | DHCP запросы от клиентов |
| 68 | DHCP Client | DHCP ответы от сервера |
| 69 | TFTP | Trivial File Transfer Protocol |
| 137 | NETBIOS-NS | NetBIOS Name Service |
| 138 | NETBIOS-DGM | NetBIOS Datagram Service |
| 161 | SNMP | Simple Network Management Protocol |
| 427 | SLP | Service Location Protocol |
| 1900 | SSDP | Simple Service Discovery Protocol (UPnP) |
| 5353 | mDNS | Multicast DNS (Bonjour/Avahi) |
| 6969 | BitTorrent | BitTorrent tracker discovery |
| 10001 | Ubiquiti | Ubiquiti device discovery |

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

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

Все relay:
```
show service broadcast-relay
```

Конкретный relay:
```
show service broadcast-relay id 1
```

Текущая конфигурация в CLI-формате:
```
show configuration commands | grep broadcast-relay
```

### Мониторинг трафика

Просмотр UDP broadcast на интерфейсе:
```
monitor traffic interface eth0 filter "udp and broadcast"
```

Мониторинг конкретного порта:
```
monitor traffic interface eth0 filter "udp port 67"
```

Подробный вывод с содержимым пакетов:
```
monitor traffic interface eth0.10 filter "udp port 9" verbose
```

### Логи

Системные логи relay:
```
show log | grep broadcast
```

Мониторинг в реальном времени:
```
monitor log | grep broadcast
```

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

Проверка broadcast-пакетов на интерфейсе:
```
show interfaces ethernet eth0 statistics
```

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

Отправка Wake-on-LAN с роутера:
```
generate wol interface eth0 mac 00:11:22:33:44:55
```

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

### Broadcast-пакеты не перенаправляются

**Проверка 1**: Убедитесь, что relay активен:
```
show service broadcast-relay id 1
```

Если показывает `disabled`, включите:
```
configure
delete service broadcast-relay id 1 disable
commit
```

**Проверка 2**: Проверьте, что интерфейсы up:
```
show interfaces
```

**Проверка 3**: Убедитесь, что broadcast достигает интерфейса:
```
monitor traffic interface eth0 filter "udp port 67"
```

**Проверка 4**: Проверьте firewall правила:
```
show firewall
```

Убедитесь, что UDP broadcast не блокируется:
```
set firewall ipv4 forward filter rule 100 action accept
set firewall ipv4 forward filter rule 100 protocol udp
set firewall ipv4 forward filter rule 100 destination port 67
commit
```

### DHCP relay не работает

**Проблема**: Клиенты не получают адреса через relay.

**Решение**: Используйте специализированный DHCP relay вместо broadcast relay:

```
delete service broadcast-relay id 1
set service dhcp-relay interface eth0.10
set service dhcp-relay interface eth0.20
set service dhcp-relay server 192.168.1.1
commit
```

DHCP relay поддерживает DHCP-specific функции (giaddr, relay agent information).

### Wake-on-LAN не пробуждает устройства

**Проверка 1**: Убедитесь, что устройство поддерживает WoL:
- BIOS/UEFI настройка включена
- Сетевая карта поддерживает WoL
- ОС настроена на WoL

**Проверка 2**: Проверьте порт:
Некоторые реализации используют порт 7, другие - порт 9:
```
set service broadcast-relay id 3 port 7
commit
```

**Проверка 3**: Тестируйте из той же подсети сначала:
```
generate wol interface eth0.10 mac 00:11:22:33:44:55
```

**Проверка 4**: Убедитесь, что broadcast адрес правильный:
- 255.255.255.255 (limited broadcast)
- 192.168.1.255 (subnet broadcast для 192.168.1.0/24)

### SONOS/Chromecast не обнаруживаются

**Проблема**: Устройства в разных VLAN не видят друг друга.

**Решение 1**: Добавьте mDNS relay (порт 5353):
```
set service broadcast-relay id 10 description 'mDNS Relay'
set service broadcast-relay id 10 interface eth0.100
set service broadcast-relay id 10 interface eth0.200
set service broadcast-relay id 10 port 5353
commit
```

**Решение 2**: Используйте специализированный mDNS repeater:
```
set service mdns repeater interface eth0.100
set service mdns repeater interface eth0.200
commit
```

mDNS repeater более эффективен для multicast DNS.

### Broadcast storm

**Проблема**: Циклическая ретрансляция вызывает перегрузку сети.

**Объяснение**: Встроенная защита VyOS предотвращает это, но проверьте топологию:

**Проверка**: Убедитесь, что нет петель на L2:
```
show spanning-tree
```

**Решение**: Включите STP на bridge интерфейсах:
```
set interfaces bridge br0 stp
commit
```

### High CPU usage

**Проблема**: Высокая нагрузка на CPU из-за relay.

**Причина**: Слишком много broadcast-трафика.

**Решение 1**: Фильтруйте relay только на необходимых портах.

**Решение 2**: Ограничьте количество интерфейсов в relay группе.

**Решение 3**: Используйте специализированные протоколы вместо broadcast relay:
- DHCP relay вместо broadcast relay
- mDNS repeater вместо broadcast relay для mDNS

## Безопасность и лучшие практики

### 1. Минимизируйте broadcast-домены

Используйте relay только когда необходимо. Не создавайте большие broadcast-домены без причины.

### 2. Фильтруйте по портам

Всегда указывайте конкретные UDP порты:
```
set service broadcast-relay id 1 port 67
```

Не используйте relay для всех портов.

### 3. Ограничивайте интерфейсы

Добавляйте в relay только необходимые интерфейсы:
```
set service broadcast-relay id 1 interface eth0.10
set service broadcast-relay id 1 interface eth0.20
```

Не добавляйте WAN интерфейсы в relay!

### 4. Используйте описания

Документируйте назначение каждого relay:
```
set service broadcast-relay id 1 description 'DHCP for Office VLANs 10-30'
```

### 5. Контролируйте source address

Для маршрутизируемых сетей указывайте source:
```
set service broadcast-relay id 1 address 192.168.1.1
```

### 6. Защита firewall

Ограничьте broadcast relay firewall правилами:
```
set firewall ipv4 forward filter rule 100 action accept
set firewall ipv4 forward filter rule 100 protocol udp
set firewall ipv4 forward filter rule 100 source address 192.168.0.0/16
set firewall ipv4 forward filter rule 100 destination port 67
```

### 7. Мониторинг

Регулярно проверяйте broadcast трафик:
```
show interfaces statistics
```

### 8. Альтернативы broadcast relay

Используйте специализированные протоколы где возможно:
- DHCP relay для DHCP
- mDNS repeater для mDNS/Bonjour
- IGMP proxy для multicast

### 9. Разделение relay групп

Не объединяйте разные сервисы в один relay:
```
# Хорошо - отдельные relay
set service broadcast-relay id 1 port 67  # DHCP
set service broadcast-relay id 2 port 9   # WoL

# Плохо - один relay для всего
set service broadcast-relay id 1 port 67
set service broadcast-relay id 1 port 9   # Невозможно!
```

### 10. Тестирование перед продакшеном

Всегда тестируйте relay в лабораторной среде перед развертыванием.

## Интеграция с другими сервисами

### DHCP Server + Broadcast Relay

Комбинация для централизованного DHCP:

```
# DHCP Server на роутере
set service dhcp-server shared-network-name LAN subnet 192.168.10.0/24 subnet-id 10
set service dhcp-server shared-network-name LAN subnet 192.168.10.0/24 option default-router '192.168.10.1'
set service dhcp-server shared-network-name LAN subnet 192.168.10.0/24 range 0 start '192.168.10.100'
set service dhcp-server shared-network-name LAN subnet 192.168.10.0/24 range 0 stop '192.168.10.200'

# Relay от других VLAN к DHCP серверу
set service dhcp-relay interface eth0.20
set service dhcp-relay interface eth0.30
set service dhcp-relay server 192.168.10.1
```

### mDNS Repeater + Broadcast Relay

Для полной совместимости Apple/Android устройств:

```
# mDNS repeater для Bonjour/Avahi
set service mdns repeater interface eth0.100
set service mdns repeater interface eth0.200

# Broadcast relay для других discovery протоколов
set service broadcast-relay id 10 description 'SSDP/UPnP'
set service broadcast-relay id 10 interface eth0.100
set service broadcast-relay id 10 interface eth0.200
set service broadcast-relay id 10 port 1900
```

### DNS Forwarding

Интеграция с локальным DNS:

```
# DNS forwarding для резолва локальных имен
set service dns forwarding listen-address 192.168.1.1
set service dns forwarding listen-address 192.168.2.1

# Broadcast relay для NETBIOS
set service broadcast-relay id 5 description 'NETBIOS'
set service broadcast-relay id 5 interface eth0
set service broadcast-relay id 5 interface eth1
set service broadcast-relay id 5 port 137
```

## Сравнение с альтернативами

### Broadcast Relay vs DHCP Relay

**Broadcast Relay (Generic)**:
- Преимущества: универсальный, простой
- Недостатки: нет DHCP-specific функций

**DHCP Relay (Specialized)**:
- Преимущества: поддержка giaddr, relay agent info, более эффективный
- Недостатки: только для DHCP

**Рекомендация**: Используйте DHCP relay для DHCP.

### Broadcast Relay vs mDNS Repeater

**Broadcast Relay (UDP port 5353)**:
- Преимущества: простая конфигурация
- Недостатки: не понимает mDNS-specific протокол

**mDNS Repeater**:
- Преимущества: оптимизирован для mDNS, понимает протокол
- Недостатки: только для mDNS

**Рекомендация**: Используйте mDNS repeater для Bonjour/Avahi.

### Broadcast Relay vs IGMP Proxy

**Broadcast Relay**:
- Только для UDP broadcast
- Не подходит для multicast

**IGMP Proxy**:
- Для multicast групп
- Требует IGMP membership

**Рекомендация**: Используйте IGMP proxy для IPTV, multicast streaming.

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

1. **Только UDP**: Relay работает только с UDP протоколом
2. **Только broadcast**: Не работает с unicast или multicast (используйте IGMP proxy)
3. **Производительность**: Большое количество broadcast может повлиять на CPU
4. **TTL**: Broadcast не проходит через роутеры (TTL=1), relay позволяет обойти это
5. **Не для WAN**: Никогда не используйте relay на WAN интерфейсах

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

- [DHCP Server](/docs/vyos/services/vyos-dhcp) - настройка DHCP сервера
- [DHCP Relay](/docs/vyos/services/vyos-dhcp-relay) - специализированный DHCP relay
- [DNS Forwarding](/docs/vyos/services/vyos-dns/) - локальный DNS
- [mDNS Repeater](/docs/vyos/services/vyos-mdns-repeater/) - multicast DNS
- [Firewall](/docs/vyos/firewall/) - контроль broadcast трафика
- [VLAN](/docs/vyos/interfaces/vyos-vlan) - настройка VLAN интерфейсов

