Malá učebnice OpenFlow (9) – blokování stanice a ACL

Část 9 z celkových 15 v seriálu Malá učebnice OpenFlow

Aplikace blokující uživatele

Stáhněte si Python skript blocknode.py a zjistíte, že celé je to velmi jednoduché. Využijeme login.py z předchozích kapitol a také vyhledávání stanice tak, jak jsme to dělali minule (využíváme služeb kontroleru, který si drží přehled o topologii a o tom, kde je která stanice připojena). Pak už jeden naprogramujeme do správného prvku pravidlo, které nebude mát žádnou akci, což způsobuje zahození paketu přímo v hardware (drop). Najdeme tedy správný prvek a řekneme mu, ať pro provoz přicházející z konkrétního portu a IP adresy způsobí jeho zahození v hardware. Nastavíme si také hard idle time, takže pravidlo bude mít efekt jen omezenou dobu, pak ho prvek sám vymaže.

Protože kontroler je nastaven pro hybridní režim, v prvcích je výchozí pravidlo OUTPUT NORMAL. Prvek se tedy chová naprosto klasicky. My na zadaný počet vteřin přidáme pravidlo s vyšší prioritou, ale jakmile vyprší, vrátí se ke slovu OUTPUT NORMAL. Tím jsme si v praxi krásně vyzkoušeli výhody hybridního SDN – nemusíme se starat o celé chování sítě – můžeme ho nechat klasické, ale přes OpenFlow dělat něco jinak.

Podobného výsledku jak má tato aplikace byste samozřejmě mohli dosáhnout i klasicky. Nejdříve byste museli projít LLDP tabulky všech prvků, abyste pochopili, jak je sestavena topologie (co je krajní port a co port mezi prvky). Pak byste prošli ARP a MAC tabulky ve všech prvcích a tím byste našli port, ve kterém je stanice připojena. Pak musíte vytvořit ACL s blokací a toto aplikovat na daný port. Pokud prvek nepodporuje časové ACL tak musíte měřit čas a ve správný okamžik ho odkonfigurovat. Ano, obejte se bez SDN, ale implementace s SDN je o tolik jednodušší. A představte si jaký rozdíl to udělá, když se pustíte do něčeho opravdu složitého.

Test v Mininet prostředí

Spusťe si Mininet prostředí a vyzkoušejte ping mezi dvěma hosty.

mn --controller remote,ip=10.10.10.201 --topo tree,depth=2 --switch ovs,protocols=OpenFlow13

mininet> h1 ping h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.205 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.047 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.048 ms
^C
--- 10.0.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.047/0.100/0.205/0.074 ms

Funguje, že?

Spustíme náš skript na blokování (mimochodem zobrazuje i statistiku).

hp@ubuntu:~$ python blocknode.py --ip 10.0.0.1 --timeout 10
Success !
Flow statistics. Press CTRL+C to exit.
Matched 10 packets and 980 bytes for 10 seconds
Rule no longer exist

hp@ubuntu:~$


mininet> h1 ping h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
^C
--- 10.0.0.2 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 6010ms

A takhle to celé vypadá v minutovém videu.

Blokování na skutečném prvku

Udělejme teď totéž v prvku, který je skutečný a je propojený do vaší firemní sítě.

hp@ubuntu:~$ python blocknode.py --ip 16.21.166.137 --vlan 111
Success !
Flow statistics. Press CTRL+C to exit.
Matched 21 packets and 0 bytes for 31 seconds

Všimněte si, že tentokrát čitač ukazuje pakety, ale ne byty. To je dané omezením některého hardware, který nedokáže počítat přenesená data pro jednotlivá flow. Například 2920 a 5500 EI to neumí, ale třeba 5900 ano (ale platíte daň – jakmile pravidlo bude provádět i accounting, spotřebuje TCAM zdroje navíc).

Switch1-2920(openflow)# show openflow instance OF flows source-ip 16.21.166.137


OpenFlow Flow Table

Flow 1
Match
  Incoming Port : 1/21                  Ethernet Type    : IP
  Source MAC    : Any                   Destination MAC  : Any
  Destination MAC Mask      : 000000-000000
  VLAN ID       : Any                   VLAN priority    : Any
  Source IP Address         : 16.21.166.137/32
  Destination IP Address    : Any
  IP Protocol   : Any
  IP ECN        : Any                   IP DSCP          : Any
  Source Port   : Any                   Destination Port : Any
Attributes
  Priority      : 50000                 Duration         : 7 seconds
  Hard Timeout  : 60 seconds            Idle Timeout     : 0 seconds
  Byte Count    : NA                    Packet Count     : 1
  Flow Table ID : 100                   Controller ID    : 1
  Cookie        : 0x1234
  Hardware Index: 0
Instructions
    Drop

Switch1-2920(openflow)#

A takhle vypadá pravidlo na Comware prvku

dis openflow instance 1 flow-table
Instance 1 flow table information:

Table 0 information:
Table Type: Extensibility, flow entry count: 6, total flow entry count: 6

MissRule Flow entry information:
cookie: 0xffff000000000000, priority: 0, hard time: 0, idle time: 0, flags:
flow_send_rem, byte count: --, packet count: 12243
Match information: any
Instruction information:
Write actions:
  Output interface: Normal
...
Flow entry 6 information:
cookie: 0x1234, priority: 50000, hard time: 60, idle time: 0, flags: none,
byte count: --, packet count: 50
Match information:
Input interface: GE1/0/21
Ethernet type: 0x0800
IPv4 source address: 16.21.166.137, mask: 255.255.255.255
Instruction information:
Write actions:
  Drop

V dnešním díle jsme použili už skutečné programování prvků, ale současně nám kontroler poskytl cenné informace o topologii a pozici klientského počítače. Příště se podíváme teoreticky na to, co se dá vlastně programovat za pravidla. Že to nebylo nic složitého?

Series Navigation<< Malá učebnice OpenFlow (8) – topologie a staniceMalá učebnice OpenFlow (10) – flow pravidla >>
Similar posts
  • L3 a kontejnery bez overlay: Project ... Část 6 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • L3 a kontejnery bez overlay: Project ... Část 5 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • HPE Networking na GitHub – skri... Zaměstnanci HPE publikovali zajímavé skripty a celé knihovny jako open source v licenci Apache2, tedy k volnému použití včetně jakýchkoli modifikací. https://github.com/HPENetworking/scriptsonly Obsah se bude jistě dost rozšiřovat… přidejte si záložku [...]
  • L3 a kontejnery bez overlay: Project ... Část 4 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • L3 a kontejnery bez overlay: Project ... Část 3 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]

No Comments Yet

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *