LLDP (Link Layer Discovery Protocol) в VyOS
LLDP (Link Layer Discovery Protocol) - это стандартный протокол канального уровня (IEEE 802.1AB), используемый для автоматического обнаружения соседних сетевых устройств и обмена информацией о конфигурации. LLDP позволяет сетевым устройствам анонсировать свою идентификацию, возможности и соседей в локальной сети.
Обзор
LLDP используется для:
- Автоматического обнаружения топологии сети: Определение физического подключения устройств
- Документирования инфраструктуры: Автоматический сбор информации о соседних устройствах
- Диагностики: Проверка корректности подключения кабелей
- Мониторинга: Интеграция с системами мониторинга для визуализации топологии
- Инвентаризации: Сбор информации о моделях, версиях ПО, серийных номерах
Как работает LLDP
LLDP работает путем передачи специальных Ethernet-фреймов (multicast) на адрес 01:80:c2:00:00:0e:
- Устройство периодически отправляет LLDP-пакеты на все активные интерфейсы
- Соседние устройства принимают эти пакеты и сохраняют информацию
- Информация хранится в течение определенного времени (TTL)
- Устройства также слушают LLDP-пакеты от соседей
Передаваемая информация
LLDP может передавать следующие типы данных (TLVs - Type-Length-Value):
- Chassis ID: Уникальный идентификатор устройства (MAC-адрес, серийный номер)
- Port ID: Идентификатор порта/интерфейса
- TTL: Время жизни записи (обычно 120 секунд)
- System Name: Имя устройства (hostname)
- System Description: Описание системы (модель, версия ОС)
- System Capabilities: Возможности устройства (router, switch, bridge)
- Management Address: IP-адрес для управления
- Port Description: Описание порта
- Port VLAN ID: VLAN на порту (опционально)
- Link Aggregation: Информация о link aggregation (опционально)
LLDP vs CDP
| Характеристика | LLDP | CDP (Cisco Discovery Protocol) |
|---|---|---|
| Стандарт | IEEE 802.1AB (открытый) | Cisco proprietary |
| Поддержка | Все производители | Только Cisco |
| Multicast адрес | 01:80:c2:00:00:0e | 01:00:0c:cc:cc:cc |
| Интервал отправки | 30 секунд (по умолчанию) | 60 секунд |
| Рекомендация | Предпочтительно | Для Cisco-only сетей |
Базовая конфигурация
Включение LLDP
# Включить LLDP глобально
set service lldp
commit
saveПосле включения LLDP будет работать на всех интерфейсах по умолчанию.
Просмотр соседей LLDP
# Показать всех соседей
show lldp neighbors
# Детальная информация о соседях
show lldp neighbors detail
# Соседи на конкретном интерфейсе
show lldp neighbors interface eth0Пример вывода:
Interface Device ID Port ID Capability
--------- --------- ------- ----------
eth0 switch-core-01 Gi1/0/1 Bridge,Router
eth1 switch-access-02 Gi2/0/24 BridgeНастройка параметров LLDP
# Включить LLDP
set service lldp
# Интервал отправки LLDP-пакетов (в секундах)
set service lldp legacy-protocols cdp # Опционально: для совместимости с CDP
# Management address (для доступа к устройству)
set service lldp management-address 192.168.1.1
commit
saveРасширенная конфигурация
Настройка LLDP на конкретных интерфейсах
# Включить LLDP
set service lldp
# Отключить LLDP на конкретном интерфейсе
set service lldp interface eth2 disable
# Включить обратно (удалить disable)
delete service lldp interface eth2 disable
commit
saveНастройка описания для соседей
# Включить LLDP
set service lldp
# Установить location (физическое расположение)
set service lldp snmp location "DataCenter-1, Rack-15, RU-42"
commit
saveНастройка legacy protocols (CDP)
Для совместимости с Cisco устройствами можно включить CDP:
# Включить LLDP с поддержкой CDP
set service lldp
set service lldp legacy-protocols cdp
commit
saveПримечание: CDP - это проприетарный протокол Cisco, но VyOS может слушать CDP-пакеты для совместимости.
SNMP интеграция
# Включить LLDP
set service lldp
# Установить SNMP location для LLDP
set service lldp snmp location "Building-A, Floor-3, Room-301"
# Включить SNMP для доступа к LLDP MIB
set service snmp community public authorization ro
set service snmp listen-address 0.0.0.0
commit
saveLLDP MIB (LLDP-MIB) доступен через SNMP:
- OID базовый:
1.0.8802.1.1.2 - Локальная информация:
1.0.8802.1.1.2.1.3 - Удаленная информация:
1.0.8802.1.1.2.1.4
Примеры конфигураций
Пример 1: Базовая конфигурация LLDP
# Включить LLDP на всех интерфейсах
set service lldp
# Установить management address
set service lldp management-address 192.168.1.1
# Установить location
set service lldp snmp location "Main Office, Network Closet A"
commit
saveПроверка:
show lldp neighbors
show lldp neighbors detailПример 2: LLDP в среде с Cisco устройствами
# Включить LLDP с CDP compatibility
set service lldp
set service lldp legacy-protocols cdp
# Management address
set service lldp management-address 10.0.0.1
commit
saveПроверка Cisco соседей:
show lldp neighbors
# Или на Cisco стороне:
# show cdp neighborsПример 3: Селективное включение LLDP
# Включить LLDP глобально
set service lldp
# Отключить на интерфейсах к конечным пользователям (security)
set service lldp interface eth2 disable
set service lldp interface eth3 disable
# Оставить включенным на uplink интерфейсах (eth0, eth1)
commit
saveПример 4: LLDP для документирования ЦОДа
# Включить LLDP
set service lldp
# Детальная информация о расположении
set service lldp snmp location "DC1, Pod-3, Rack-15, RU-42, Row-G"
# Management address
set service lldp management-address 10.255.255.1
# SNMP для мониторинга
set service snmp community monitoring authorization ro
set service snmp community monitoring network 10.0.0.0/8
commit
saveПример 5: LLDP с автоматизацией (Ansible)
Конфигурация VyOS:
# Включить LLDP
set service lldp
set service lldp management-address 192.168.1.1
commit
saveAnsible playbook для сбора LLDP информации:
- name: Collect LLDP information from VyOS routers
hosts: vyos_routers
gather_facts: no
tasks:
- name: Get LLDP neighbors
vyos.vyos.vyos_command:
commands:
- show lldp neighbors detail
register: lldp_output
- name: Display LLDP neighbors
debug:
var: lldp_output.stdout_lines
- name: Save to file
copy:
content: "{{ lldp_output.stdout[0] }}"
dest: "./lldp_{{ inventory_hostname }}.txt"Пример 6: LLDP мониторинг с LibreNMS
VyOS конфигурация:
# LLDP
set service lldp
set service lldp management-address 192.168.1.1
# SNMP для LibreNMS
set service snmp community librenms authorization ro
set service snmp community librenms network 192.168.1.0/24
set service snmp listen-address 0.0.0.0
commit
saveLibreNMS автоматически обнаружит LLDP соседей и построит карту топологии.
Мониторинг и диагностика
Просмотр LLDP соседей
# Все соседи (краткий формат)
show lldp neighbors
# Детальная информация о всех соседях
show lldp neighbors detail
# Соседи на конкретном интерфейсе
show lldp neighbors interface eth0
# Информация о конкретном соседе
show lldp neighbors interface eth0 detailПримеры вывода
Краткий формат:
Capability Codes: R - Router, B - Bridge, W - Wlan r - Repeater, S - Station
D - Docsis, T - Telephone, O - Other
Interface Local Remote Remote Capability
Port ID Chassis ID Port ID
--------- ------- -------------- ------------------- ----------
eth0 eth0 00:1b:21:d4:d0 GigabitEthernet1/0/1 B,R
eth1 eth1 00:1b:21:d4:d1 GigabitEthernet2/0/5 BДетальный формат:
Interface: eth0
Chassis ID: 00:1b:21:d4:d0:00
System Name: switch-core-01
System Description: Cisco IOS Software, Version 15.2(4)E
Port ID: GigabitEthernet1/0/1
Port Description: Uplink to VyOS Router
Capability: Bridge, Router
Management Address: 192.168.1.10
Time to Live: 120 secondsПроверка локальной информации
# Локальная информация LLDP
show lldp interface
# Детали локального интерфейса
show lldp interface eth0Отладка LLDP
# Проверка работы LLDP демона
show log | match lldp
# Проверка процесса lldpd
ps aux | grep lldpd
# Restart LLDP service (если необходимо)
sudo systemctl restart lldpd
# Статус сервиса
sudo systemctl status lldpdМониторинг LLDP пакетов
# Захват LLDP пакетов на интерфейсе
sudo tcpdump -i eth0 -vv ether proto 0x88cc
# Или с использованием multicast адреса
sudo tcpdump -i eth0 ether dst 01:80:c2:00:00:0eSNMP мониторинг LLDP
# Получение LLDP информации через SNMP
snmpwalk -v2c -c public 192.168.1.1 LLDP-MIB::lldpRemTable
# Локальная информация
snmpwalk -v2c -c public 192.168.1.1 LLDP-MIB::lldpLocPortTable
# Удаленные устройства
snmpwalk -v2c -c public 192.168.1.1 LLDP-MIB::lldpRemChassisIdУстранение неполадок
Проблема: LLDP соседи не обнаруживаются
Диагностика:
# 1. Проверка, что LLDP включен
show configuration service lldp
# 2. Проверка интерфейса (не disabled ли)
show configuration service lldp interface
# 3. Проверка статуса интерфейса
show interfaces
# 4. Захват трафика LLDP
sudo tcpdump -i eth0 ether proto 0x88cc
# 5. Проверка логов
show log | match lldpРешение:
# Включить LLDP, если отключен
set service lldp
# Убедиться, что интерфейс не disabled
delete service lldp interface eth0 disable
# Проверить, что интерфейс up
show interfaces ethernet eth0
commit
save
# Перезапуск LLDP daemon (если необходимо)
sudo systemctl restart lldpdПроблема: LLDP работает, но не передается нужная информация
Причина: Некоторая информация может не передаваться по умолчанию.
Решение:
# Убедиться, что установлен management address
set service lldp management-address 192.168.1.1
# Установить location
set service lldp snmp location "Building-A, Floor-2"
commit
saveПроблема: LLDP не работает с Cisco устройствами
Причина: Cisco может использовать CDP вместо LLDP.
Решение:
На VyOS:
# Включить CDP compatibility
set service lldp legacy-protocols cdp
commit
saveНа Cisco:
# Включить LLDP (если не включен)
lldp run
# На интерфейсах
interface GigabitEthernet1/0/1
lldp transmit
lldp receiveПроблема: LLDP соседи появляются и исчезают
Причина: TTL (Time To Live) истекает быстрее, чем приходят новые пакеты.
Диагностика:
# Проверка TTL в детальной информации
show lldp neighbors detail
# Мониторинг исчезновений
watch -n 5 'show lldp neighbors'Решение:
Проблема обычно на стороне соседа. Проверить:
- Интервал отправки LLDP-пакетов на соседнем устройстве
- Нагрузка на процессор соседнего устройства
- Проблемы с кабелем или портом
Проблема: LLDP показывает неправильную информацию
Причина: Кэшированная информация от старого соседа.
Решение:
# Перезапуск LLDP для очистки кэша
sudo systemctl restart lldpd
# Подождать 30-60 секунд для получения новых LLDP-пакетов
sleep 60
# Проверка
show lldp neighborsПроблема: SNMP не возвращает LLDP информацию
Диагностика:
# Проверка SNMP конфигурации
show configuration service snmp
# Тест SNMP доступа
snmpwalk -v2c -c public localhost SNMPv2-MIB::sysDescr
# Проверка LLDP MIB
snmpwalk -v2c -c public localhost LLDP-MIB::lldpLocChassisIdРешение:
# Убедиться, что SNMP включен
set service snmp community public authorization ro
set service snmp listen-address 0.0.0.0
commit
save
# Перезапуск SNMP
sudo systemctl restart snmpdИнтеграция с системами мониторинга
LibreNMS
LibreNMS автоматически обнаруживает и визуализирует LLDP топологию.
Конфигурация VyOS:
set service lldp
set service lldp management-address 192.168.1.1
set service snmp community librenms authorization ro
set service snmp listen-address 0.0.0.0
commit
saveВ LibreNMS:
- Добавить устройство через Web UI или CLI
- LibreNMS автоматически обнаружит LLDP соседей
- Карта топологии будет построена автоматически (Map → Topology)
Observium
Конфигурация VyOS:
set service lldp
set service lldp management-address 192.168.1.1
set service snmp community observium authorization ro
set service snmp listen-address 0.0.0.0
commit
saveObservium использует LLDP MIB для построения карты сети.
Zabbix
Конфигурация VyOS:
set service lldp
set service lldp management-address 192.168.1.1
set service snmp community zabbix authorization ro
set service snmp v3 user zabbix auth type sha
set service snmp v3 user zabbix auth plaintext-password 'AuthPassword123!'
set service snmp v3 user zabbix privacy type aes
set service snmp v3 user zabbix privacy plaintext-password 'PrivPassword123!'
commit
saveZabbix template для LLDP мониторинга использует SNMP discovery для автоматического обнаружения соседей.
Netbox
Netbox может импортировать LLDP данные через API или скрипты.
Скрипт для экспорта LLDP в JSON:
#!/bin/bash
# Получение LLDP neighbors в JSON формате
vtysh -c "show lldp neighbors detail json" > /tmp/lldp_neighbors.json
# Отправка в Netbox через API
curl -X POST https://netbox.example.com/api/dcim/cables/ \
-H "Authorization: Token YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d @/tmp/lldp_neighbors.jsonGrafana + Prometheus
LLDP данные можно экспортировать через SNMP exporter для Prometheus.
Prometheus SNMP exporter config:
modules:
lldp:
walk:
- 1.0.8802.1.1.2 # LLDP-MIB
metrics:
- name: lldpRemSysName
oid: 1.0.8802.1.1.2.1.4.1.1.9
type: DisplayStringЛучшие практики
1. Всегда включать LLDP
Включайте LLDP на всех сетевых устройствах для автоматического документирования:
set service lldp
set service lldp management-address <mgmt-ip>2. Установка информативного location
Используйте детальное описание физического расположения:
set service lldp snmp location "DC-Moscow, Building-2, Floor-3, Rack-A15, RU-42"3. Отключение LLDP на untrusted интерфейсах
Отключайте LLDP на портах, доступных конечным пользователям (security):
set service lldp interface eth2 disable # User-facing port
set service lldp interface eth3 disable # Guest network4. CDP compatibility для смешанных сред
В сетях с Cisco оборудованием включайте CDP:
set service lldp legacy-protocols cdp5. SNMP интеграция для мониторинга
Всегда настраивайте SNMP для доступа к LLDP MIB:
set service snmp community monitoring authorization ro6. Регулярная проверка топологии
Периодически проверяйте LLDP соседей для обнаружения изменений:
show lldp neighborsИспользуйте автоматизацию (Ansible, Python) для регулярного аудита.
7. Документирование через описания интерфейсов
Используйте описания интерфейсов в сочетании с LLDP:
set interfaces ethernet eth0 description "Uplink to switch-core-01 Gi1/0/1"8. Мониторинг изменений топологии
Настройте алерты на изменения LLDP соседей в системах мониторинга для обнаружения:
- Неавторизованных подключений
- Замены оборудования
- Проблем с кабелями
9. Использование management VLAN
Настройте management address из выделенного management VLAN:
set interfaces ethernet eth0 vif 99 address 10.255.255.1/24
set service lldp management-address 10.255.255.110. Резервное копирование LLDP данных
Периодически сохраняйте вывод LLDP для документации:
show lldp neighbors detail > /config/lldp-backup-$(date +%Y%m%d).txtПолезные команды
# Показать всех LLDP соседей
show lldp neighbors
# Детальная информация
show lldp neighbors detail
# Соседи на конкретном интерфейсе
show lldp neighbors interface eth0
# Локальная информация LLDP
show lldp interface
# Конфигурация LLDP
show configuration service lldp
# Логи LLDP
show log | match lldp
# Захват LLDP пакетов
sudo tcpdump -i eth0 ether proto 0x88cc
# SNMP запрос LLDP данных
snmpwalk -v2c -c public localhost LLDP-MIB::lldpRemTable
# Статус LLDP демона
sudo systemctl status lldpd
# Перезапуск LLDP
sudo systemctl restart lldpd
# Сохранение LLDP информации в файл
show lldp neighbors detail > /tmp/lldp-neighbors.txtИнтеграция с автоматизацией
Python скрипт для сбора LLDP данных
#!/usr/bin/env python3
import subprocess
import json
import re
def get_lldp_neighbors():
"""Получение LLDP соседей с VyOS роутера"""
try:
# Выполнение команды через SSH или локально
result = subprocess.run(
['vtysh', '-c', 'show lldp neighbors detail'],
capture_output=True,
text=True
)
# Парсинг вывода
neighbors = []
current = {}
for line in result.stdout.splitlines():
if line.startswith('Interface:'):
if current:
neighbors.append(current)
current = {'interface': line.split(':')[1].strip()}
elif 'System Name:' in line:
current['system_name'] = line.split(':')[1].strip()
elif 'Port ID:' in line:
current['port_id'] = line.split(':')[1].strip()
elif 'Management Address:' in line:
current['mgmt_address'] = line.split(':')[1].strip()
if current:
neighbors.append(current)
return neighbors
except Exception as e:
print(f"Error: {e}")
return []
if __name__ == '__main__':
neighbors = get_lldp_neighbors()
print(json.dumps(neighbors, indent=2))Ansible playbook для LLDP аудита
- name: LLDP Topology Audit
hosts: vyos_routers
gather_facts: no
tasks:
- name: Collect LLDP neighbors
vyos.vyos.vyos_command:
commands:
- show lldp neighbors detail
register: lldp_data
- name: Parse and validate topology
set_fact:
lldp_neighbors: "{{ lldp_data.stdout[0] | parse_lldp }}"
- name: Check for unexpected neighbors
debug:
msg: "WARNING: Unexpected neighbor detected!"
when: "'unknown' in lldp_neighbors"
- name: Generate topology report
template:
src: topology_report.j2
dest: "./reports/{{ inventory_hostname }}_lldp.html"Заключение
LLDP (Link Layer Discovery Protocol) - это важный инструмент для автоматического обнаружения и документирования сетевой топологии. VyOS предоставляет полную поддержку LLDP с дополнительной совместимостью с Cisco CDP.
Основные преимущества LLDP:
- Автоматическое обнаружение соседних устройств
- Стандартизированный протокол (IEEE 802.1AB)
- Интеграция с системами мониторинга через SNMP
- Упрощение документирования инфраструктуры
- Диагностика проблем подключения
Рекомендации для production:
- Включайте LLDP на всех сетевых устройствах
- Отключайте LLDP на untrusted портах для безопасности
- Используйте детальные location descriptions
- Интегрируйте с системами мониторинга (LibreNMS, Zabbix, Observium)
- Регулярно аудируйте топологию через LLDP данные
- Документируйте изменения в топологии
LLDP в VyOS обеспечивает надежное обнаружение топологии и интегрируется со всеми современными системами мониторинга, делая управление сетевой инфраструктурой более эффективным.