segunda-feira, 8 de fevereiro de 2016

Mininet - SDN na prática



Bom pessoal, SDN é um assunto bem polêmico e quer queira ou não ele veio pra ficar e você analista/administrador de redes como eu vai acabar se deparando com essa tecnologia logo logo.

 Essa dica é para você que como eu não conhece nada ou quase nada de SDN, Mininet é um emulador que cria uma rede virtual rodando um kernel real com switches, hosts e controladoras tudo dentro de uma única VM:

 http://mininet.org/

 Sem muito papo, vamos a parte prática da coisa:

 - Baixe a VM do site (Virtual Box, VMWorkstation, KVM ou VMFusion):

 http://mininet.org/download/

Direto da fonte:

git clone git://github.com/mininet/mininet

Ou via apt-get:

#sudo apt-get install mininet

Bom eu como sou preguiçoso baixei a VM e instalei no Virtual Box (requer 1 processador e 1GB de RAM), agora antes de iniciar a VM, adicione a placa de rede de sua preferência (para ter acesso via terminal):


Acesse a console e use as seguintes credenciais:

user: mininet
password: mininet



Para começar digite o seguinte comando:

$sudo mn

A topologia inicial é o que eles chamam de "minimal"  com 2 hosts, 1 switch e 1 controladora, feito isso você tem uma serie de comandos pra já começar a brincar:

Mostrar os comandos da CLI:
mininet> help

Mostrar os nodes:
mininet> nodes

Mostrar os links:
mininet> net

Mostrar as informações de todos os nodes:
mininet> dump

Pingar todos os hosts:
mininet> pingall

Para verificar as configurações das interfaces, você deve colocar o nome do host/switch/controller antes do comando:

Exemplo de Host:

mininet> h1 ifconfig -a
h1-eth0   Link encap:Ethernet  HWaddr 46:b4:7a:09:76:96
          inet addr:10.0.0.1  Bcast:10.255.255.255  Mask:255.0.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Exemplo no Switch 1:

mininet> s1 ifconfig -a
eth0      Link encap:Ethernet  HWaddr 08:00:27:65:98:ee
          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:280 errors:0 dropped:0 overruns:0 frame:0
          TX packets:231 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:26953 (26.9 KB)  TX bytes:32712 (32.7 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:9639 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9639 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:496844 (496.8 KB)  TX bytes:496844 (496.8 KB)

ovs-system Link encap:Ethernet  HWaddr d2:bb:c1:1a:24:1c
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

s1        Link encap:Ethernet  HWaddr 76:b3:5a:77:3b:4c
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

s1-eth1   Link encap:Ethernet  HWaddr 4e:26:36:33:e5:3c
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

s1-eth2   Link encap:Ethernet  HWaddr ba:c0:ed:12:a6:7e
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Exemplo na controller 1:

mininet> c0 ifconfig -a
eth0      Link encap:Ethernet  HWaddr 08:00:27:65:98:ee
          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:350 errors:0 dropped:0 overruns:0 frame:0
          TX packets:278 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:32661 (32.6 KB)  TX bytes:40008 (40.0 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:9675 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9675 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:498908 (498.9 KB)  TX bytes:498908 (498.9 KB)

ovs-system Link encap:Ethernet  HWaddr d2:bb:c1:1a:24:1c
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

s1        Link encap:Ethernet  HWaddr 76:b3:5a:77:3b:4c
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

s1-eth1   Link encap:Ethernet  HWaddr 4e:26:36:33:e5:3c
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

s1-eth2   Link encap:Ethernet  HWaddr ba:c0:ed:12:a6:7e
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


Agora um teste básico de comunicação, vamos pingar do Host 1 para o Host 2:

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=3.33 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.474 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.060 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.055 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=0.054 ms
64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=0.056 ms
64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=0.318 ms
^C
--- 10.0.0.2 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6004ms
rtt min/avg/max/mdev = 0.054/0.621/3.331/1.117 ms
mininet>

 Topologias

Para verificar as topologias pré-existentes use:

mininet@mininet-vm:~$ sudo mn --help

--topo=TOPO           linear|minimal|reversed|single|torus|tree[,param=value
                        ...] linear=LinearTopo
                        reversed=SingleSwitchReversedTopo tree=TreeTopo
                        single=SingleSwitchTopo torus=TorusTopo
                        minimal=MinimalTopo

mininet@mininet-vm:~$ sudo mn --topo=linear,5

- Minimal - Topologia default com 1 Switch e 2 hosts:




- Linear - Topologia Simples em que os Switches se conectam entre eles e com os hosts:

Agora vamos complicar um pouco mais a nossa topologia, primeiro de um exit na topologia criada, em seguida abra novamente porém vamos utilizar 5 Switches e 5 hosts em modo linear:

mininet@mininet-vm:~$ sudo mn --topo=linear,5

Verifique que foram adicionados 5 SWs e 5 Hosts:

mininet> nodes
available nodes are:
c0 h1 h2 h3 h4 h5 s1 s2 s3 s4 s5

mininet> links
h1-eth0<->s1-eth1 (OK OK)
h2-eth0<->s2-eth1 (OK OK)
h3-eth0<->s3-eth1 (OK OK)
h4-eth0<->s4-eth1 (OK OK)
h5-eth0<->s5-eth1 (OK OK)
s2-eth2<->s1-eth2 (OK OK)
s3-eth2<->s2-eth3 (OK OK)
s4-eth2<->s3-eth3 (OK OK)
s5-eth2<->s4-eth3 (OK OK)

mininet> pingall
*** Ping: testing ping reachability
h1 -> h2 h3 h4 h5
h2 -> h1 h3 h4 h5
h3 -> h1 h2 h4 h5
h4 -> h1 h2 h3 h5
h5 -> h1 h2 h3 h4
*** Results: 0% dropped (20/20 received)

mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s2-eth1
h3 h3-eth0:s3-eth1
h4 h4-eth0:s4-eth1
h5 h5-eth0:s5-eth1
s1 lo:  s1-eth1:h1-eth0 s1-eth2:s2-eth2
s2 lo:  s2-eth1:h2-eth0 s2-eth2:s1-eth2 s2-eth3:s3-eth2
s3 lo:  s3-eth1:h3-eth0 s3-eth2:s2-eth3 s3-eth3:s4-eth2
s4 lo:  s4-eth1:h4-eth0 s4-eth2:s3-eth3 s4-eth3:s5-eth2
s5 lo:  s5-eth1:h5-eth0 s5-eth2:s4-eth3
c0

- Tree - Topologia em arvore com diversas ramificações:

mininet@mininet-vm:~$ sudo mn --topo=tree,4

Obs. o Número 4 significa as camadas da topologia.

mininet> net
h1 h1-eth0:s4-eth1
h2 h2-eth0:s4-eth2
h3 h3-eth0:s5-eth1
h4 h4-eth0:s5-eth2
h5 h5-eth0:s7-eth1
h6 h6-eth0:s7-eth2
h7 h7-eth0:s8-eth1
h8 h8-eth0:s8-eth2
h9 h9-eth0:s11-eth1
h10 h10-eth0:s11-eth2
h11 h11-eth0:s12-eth1
h12 h12-eth0:s12-eth2
h13 h13-eth0:s14-eth1
h14 h14-eth0:s14-eth2
h15 h15-eth0:s15-eth1
h16 h16-eth0:s15-eth2
s1 lo:  s1-eth1:s2-eth3 s1-eth2:s9-eth3
s2 lo:  s2-eth1:s3-eth3 s2-eth2:s6-eth3 s2-eth3:s1-eth1
s3 lo:  s3-eth1:s4-eth3 s3-eth2:s5-eth3 s3-eth3:s2-eth1
s4 lo:  s4-eth1:h1-eth0 s4-eth2:h2-eth0 s4-eth3:s3-eth1
s5 lo:  s5-eth1:h3-eth0 s5-eth2:h4-eth0 s5-eth3:s3-eth2
s6 lo:  s6-eth1:s7-eth3 s6-eth2:s8-eth3 s6-eth3:s2-eth2
s7 lo:  s7-eth1:h5-eth0 s7-eth2:h6-eth0 s7-eth3:s6-eth1
s8 lo:  s8-eth1:h7-eth0 s8-eth2:h8-eth0 s8-eth3:s6-eth2
s9 lo:  s9-eth1:s10-eth3 s9-eth2:s13-eth3 s9-eth3:s1-eth2
s10 lo:  s10-eth1:s11-eth3 s10-eth2:s12-eth3 s10-eth3:s9-eth1
s11 lo:  s11-eth1:h9-eth0 s11-eth2:h10-eth0 s11-eth3:s10-eth1
s12 lo:  s12-eth1:h11-eth0 s12-eth2:h12-eth0 s12-eth3:s10-eth2
s13 lo:  s13-eth1:s14-eth3 s13-eth2:s15-eth3 s13-eth3:s9-eth2
s14 lo:  s14-eth1:h13-eth0 s14-eth2:h14-eth0 s14-eth3:s13-eth1
s15 lo:  s15-eth1:h15-eth0 s15-eth2:h16-eth0 s15-eth3:s13-eth2
c0

Fica mais ou menos assim:



Cuidado para não exagerar nas camadas pois a VM não aguenta kkkk tentei com 10 camadas e travou tudo.

O bacana disso tudo é pra começar a ter uma ideia de como serão as redes no futuro, assim que eu conseguir integrar com o Wireshark direitinho posto mais coisas sobre a ferramenta.

Abraços

Ajude o Café com Redes:

2 comentários:

  1. Boa tarde Diego,
    É possivel integrar a rede criada no mininet com outros hots da rede real? ou integrar a rede do mininet às máquinas criadas no virtualbox? Se sim, como é feito esse procedimento?

    ResponderExcluir
  2. Você conseguiu integrar com o Wireshark? Se sim, poderia informar como?
    Desde já, muito obrigada!

    ResponderExcluir