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í.
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ě.