Hlavní navigace

LLDP a CDP aneb kde se v síti schovává tučňák

1. 10. 2014
Doba čtení: 5 minut

Sdílet

Ne každá síť je dobře zdokumentovaná a každý důležitý kabel či optický spoj popsán. U větších sítí pak může nastat situace, že nikdo neví, co je kam zapojené. Někde v síti je třeba linuxový server a k němu teď potřebujeme dotáhnout další VLAN. Jenže ke kterému přepínači je server připojený? Který port je uplink?

Asi nejznámější jsou protokoly CDP (Cisco Discovery Protocol) a LLDP (Link Layer Discovery Protocol). Jak název prvního napovídá, jedná se o proprietární protokol firmy Cisco. Dnes je ale podporován (alespoň částečně) i dalšími výrobci, např. Mikrotik nebo HP. Mikrotik používá i vlastní protokol MNDP (MikroTik Neighbor Discovery Protocol), kterým se ale zabývat nebudeme. LLDP je otevřený a je specifikován specifikován v IEEE 802.1AB. Proto je také podporován více výrobci, např. již zmiňovaným HP nebo Juniper. Samozřejmě existuje i softwarová implementace, kterou můžeme nainstalovat na Linux/Unix nebo i Windows.

Protože se v případě CDP a LLDP jedná o podobné protokoly, uvedu zde proto pouze jeden popis a zmíním rozdíly. Jedná se o protokoly druhé vrstvy a slouží ke zjišťování informací o přímo připojených zařízeních. Zařízení vysílá pomocí multicastu periodicky (typicky 30 nebo 60 vteřin) přes svá síťová rozhraní oznámení. Jedná se o jednosměrnou komunikaci, nedochází k žádnému potvrzování přijatého oznámení.

V oznámení může být poměrně dost informací, povinné jsou:

  • ID zařízení (MAC adresa)
  • ID portu, přes které bylo oznámení odeslané
  • TTL – doba platnosti

Dále se mohou posílat informace o názvu zařízení, verzi softwaru, IP, VLAN apod.

Každý záznam má časově omezenou platnost. Po přijetí nového oznámení se platnost prodlouží. Pokud oznámení přestane přicházet, tak je po vypršení času takové zařízení zapomenuto. Oznámení se může rozesílat nejen periodicky, ale i při nějaké změně na zařízení nebo jeho portu, a tím dříve se protistrana dozví o změně.

Okolní zařízení tato oznámení poslouchají a udržují si informace z nich získané. Protože zaznamenávají i informaci, přes který port které oznámení přišlo, můžeme zjistit, co je kam v nejbližším okolí zapojené a jaké má vlastnosti. Tyto informace o zjištěných sousedech zařízení nikam dále nešíří, pouze může vysílat informace samo o sobě stejným způsobem. Protokol se tedy o žádné sbírání a zpracovávání dat z celé sítě nestará, k tomu potřebujeme další software.

Slíbil jsem praktickou ukázku, takže si nainstalujeme nějaké nástroje na LLDP na Linux a FreeBSD a ukážeme si základní příkazy na Ciscu a HP prvcích. V Linuxu lze použít program lldpd. Nenechte se zmást názvem, démon podporuje i CDP. Instalace v Ubuntu je snadná:

pm@pm-desktop:~$ sudo apt-get install lldpd

Výchozí konfigurace postačuje, spustíme:

pm@pm-desktop:~$ sudo service lldpd start

A na aktivním prvku můžeme za chvíli vidět podobný výpis:

LLDP neighbor-information of port 112[Ethernet3/0/8]:
  Neighbor index   : 1
  Update time      : 255 days,15 hours,38 minutes,55 seconds
  Chassis type     : MAC address
  Chassis ID       : 5404-a648-cd36
  Port ID type     : MAC address
  Port ID          : 5404-a648-cd36
  Port description : eth0
  System name        : pm-desktop
  System description : Ubuntu 14.04 LTS Linux 3.13.0-34-generic #60-Ubuntu SMP Wed Aug 13 15:45:27 UTC 2014 x86_64
  System capabilities supported : Bridge,WlanAccessPoint,Router
  System capabilities enabled   :

  Management address type           : ipV4
  Management address                : 192.168.222.52
  Management address interface type : IfIndex
  Management address interface ID   : 2
  Management address OID            :

  Auto-negotiation supported : Yes
  Auto-negotiation enabled   : Yes
  OperMau                    : speed(100)/duplex(Full)

  Link aggregation supported : Yes
  Link aggregation enabled   : No
  Aggregation port ID        : 0

Výpis okolí v Linuxu provedeme příkazem lldpctl:

pm@pm-desktop:~$ lldpctl
-------------------------------------------------------------------------------
LLDP neighbors:
-------------------------------------------------------------------------------
Interface:    eth0, via: LLDP, RID: 1, Time: 0 day, 00:02:24
  Chassis:
    ChassisID:    mac 00:12:a9:8d:d1:c0
    SysName:      5500-EI
    SysDescr:     Switch 5500-EI
    MgmtIP:       192.168.222.11
    Capability:   Bridge, on
    Capability:   Router, on
  Port:
    PortID:       ifname Ethernet3/0/8
    PortDescr:    Ethernet3/0/8
    MFS:          1522
    PMD autoneg:  supported: yes, enabled: yes
      Adv:          10Base-T, HD: yes, FD: yes
      Adv:          100Base-T4
      Adv:          1000Base-X, HD: yes, FD: yes
      MAU oper type: 100BaseTXFD - 2 pair category 5 UTP, full duplex mode
    MDI Power:    supported: no, enabled: no, pair control: no
      Device type:  PD
      Power pairs:  signal
      Class:        class 0
  VLAN:         1, pvid: yes VLAN 0001
  PPVID:        1, supported: yes, enabled: no
-------------------------------------------------------------------------------

Jak vidíte z obou výpisů, dozvíme se poměrně dost informací o Linuxu i přepínači.

Ve FreeBSD je možné použít Openlldp:

root@gate # cd /usr/ports/net-mgmt/openlldp
root@gate ports # make install

Do /etc/rc.conf přidat spouštění démona a zvolit síťovou kartu, na které má pracovat:

lldpd_enable="YES"
lldpd_flags="-i em0"

A spustit

root@gate ports /usr/local/etc/rc.d/lldpd start

Příkazem lldpneighbors získáme podobný výsledek jako u Linuxu.

Konfigurace na straně přepínačů už nechám na čtenářích. Jak na to najdete u Cisca a u HP/H3C.

Jak tedy informace získávat a dále je zpracovávat? To, co jsme si ukázali, nám může pomoci ke zjištění, kde je co zapojené, když ale začneme sbírat informace ze všech prvků, teoreticky můžeme zjistit topologii celé sítě. Bohužel tak jednoduché to vždy není. Problém mohou způsobit třeba přepínače bez managementu nebo vypnutý discovery protokol na zařízení. Lze také nastavit, zda má třeba jen poslouchat nebo naopak vysílat.

Informace o stavu LLDP protokolu jsou dostupné přes SNMP. Nic nám tedy nebrání si informace (nejčastěji z přepínačů) zjistit. Potřebná OID:

  • MAC adresa zařízení – 1.0.8802.1.1.2.1.3.2.0
  • Tabulka lokálních portů – 1.0.8802.1.1.2.1.3.7
  • Tabulka nalezených zařízení – 1.0.8802.1.1.2.1.4

Informací je samozřejmě více (je uložená i konfigurace, statistiky…). Co vše můžete zjistit, se dozvíte třeba na mibdepot.com.

Ukázka údajů vyčtených ze SNMP: toto jsou protistrany, vidíte MAC adresy zařízení, názvy portů a zařízení.

root_podpora

iso.0.8802.1.1.2.1.4.1.1.4.672033169.19.1 = INTEGER: 4
iso.0.8802.1.1.2.1.4.1.1.4.672033181.18.1 = INTEGER: 4
iso.0.8802.1.1.2.1.4.1.1.4.1770055068.14.1 = INTEGER: 4
iso.0.8802.1.1.2.1.4.1.1.4.2185294313.11.1 = INTEGER: 4
iso.0.8802.1.1.2.1.4.1.1.5.672033169.19.1 = Hex-STRING: 00 12 A9 8D D1 C0
iso.0.8802.1.1.2.1.4.1.1.5.672033181.18.1 = Hex-STRING: 00 12 A9 8D D1 C0
iso.0.8802.1.1.2.1.4.1.1.5.1770055068.14.1 = Hex-STRING: 00 1B 21 6D 76 20
iso.0.8802.1.1.2.1.4.1.1.5.2185294313.11.1 = Hex-STRING: 2C 41 38 28 A8 82
iso.0.8802.1.1.2.1.4.1.1.6.672033169.19.1 = INTEGER: 5
iso.0.8802.1.1.2.1.4.1.1.6.672033181.18.1 = INTEGER: 5
iso.0.8802.1.1.2.1.4.1.1.6.1770055068.14.1 = INTEGER: 5
iso.0.8802.1.1.2.1.4.1.1.6.2185294313.11.1 = INTEGER: 3
iso.0.8802.1.1.2.1.4.1.1.7.672033169.19.1 = STRING: "GigabitEthernet1/0/25"
iso.0.8802.1.1.2.1.4.1.1.7.672033181.18.1 = STRING: "GigabitEthernet2/0/25"
iso.0.8802.1.1.2.1.4.1.1.7.1770055068.14.1 = STRING: "em0"
iso.0.8802.1.1.2.1.4.1.1.7.2185294313.11.1 = Hex-STRING: 2C 41 38 28 A8 82
iso.0.8802.1.1.2.1.4.1.1.8.672033169.19.1 = STRING: "GigabitEthernet1/0/25"
iso.0.8802.1.1.2.1.4.1.1.8.672033181.18.1 = STRING: "GigabitEthernet2/0/25"
iso.0.8802.1.1.2.1.4.1.1.8.1770055068.14.1 = STRING: "em0"
iso.0.8802.1.1.2.1.4.1.1.8.2185294313.11.1 = STRING: "Port 1"
iso.0.8802.1.1.2.1.4.1.1.9.672033169.19.1 = STRING: "5500-EI"
iso.0.8802.1.1.2.1.4.1.1.9.672033181.18.1 = STRING: "5500-EI"
iso.0.8802.1.1.2.1.4.1.1.9.1770055068.14.1 = STRING: "gate.kostax.cz."
iso.0.8802.1.1.2.1.4.1.1.9.2185294313.11.1 = STRING: "H3C-wifi AP 1 p>-CN32B011BZ"
iso.0.8802.1.1.2.1.4.1.1.10.672033169.19.1 = STRING: "Switch 5500-EI"
iso.0.8802.1.1.2.1.4.1.1.10.672033181.18.1 = STRING: "Switch 5500-EI"

LLDP a CDP využívají i některé programy, např. HP iMC nebo Cisco network administrator. Patrně existuje i nějaký open-source software, který se tomuto věnuje, ale nemám s žádným zkušenost. Pokud ji máte vy, podělte se v diskusi pod článkem.

Kvůli bezpečnosti není vhodné oznámení odesílat mimo naši síť. Špatně nastavený směrovač o sobě může do internetu říkat svou IP adresu a verzi software a tím usnadnit útočníkovi práci. V případě linuxového lldpd je možné nastavit, jaké informace se budou posílat a třeba verzi systému a jádra je možné vynechat nebo změnit. Discovery protokoly toho umí ještě o trochu více, o tom třeba někdy příště.

Byl pro vás článek přínosný?

Autor článku

Petr Macek studoval aplikovanou informatiku na Jihočeské univerzitě, pracuje jako síťový specialista ve firmě Kostax, s. r. o. Baví ho především FreeBSD, sítě a monitoring Cacti.