Exercício 7 - SDN e Openflow.
Critérios para entrega do exercício
- Este exercício é em dupla ou individual.
- A resolução do exercício deve ser enviada em um arquivo .pdf para william@ic.unicamp.br até o dia 26/11/2019. O nome do arquivo deve ser "raXXXXXX_e_raYYYYYY_exercicio6", onde XXXXXX e YYYYYY deve ser substituído pelo número do RA dos membros da dupla;
- O material a ser entregue no arquivo será referente aos passos deste laboratório.
- O assunto da mensagem deve ser "[MC833] Exercício 7".
Atividade
Passos:
Vamos utilizar a instância vm-netlabs para hospedar a seguinte topologia:
- Instalar e habilitar o OpenVSwitch.
# iptables -F
# dnf -y install openvswitch
# systemctl start openvswitch
- Instalar e habilitar o Docker para iniciarmos o controlador SDN.
# systemctl start docker
- Vamos criar a topologia para realizarmos os testes de um controlador SDN utilizando OpenFlow.
NS-VM1 ---> ovsbr0 <--- NS-VM2
Para criar uma bridge utilizando OpenVSwitch execute os seguinte comando:
# ovs-vsctl add-br ovsbr0
Criar os namespace com as interfaces veth:
# ip netns add ns-vm1
# ip netns add ns-vm2
# ip link add vethHost1 type veth peer name vethNS1
# ip link add vethHost2 type veth peer name vethNS2
# ip link set vethNS1 netns ns-vm1
# ip link set vethNS2 netns ns-vm2
# ip netns exec ns-vm1 ifconfig lo up
# ip netns exec ns-vm2 ifconfig lo up
# ip netns exec ns-vm1 ifconfig vethNS1 10.0.0.10/24 up
# ip netns exec ns-vm2 ifconfig vethNS2 10.0.0.20/24 up
Precisamos incluir as interfaces na bridge ovsbr0 e habilitar.
# ovs-vsctl add-port ovsbr0 vethHost1
# ovs-vsctl add-port ovsbr0 vethHost2
# ifconfig vethHost1 up
# ifconfig vethHost2 up
# ifconfig ovsbr0 up
-
Vamos criar nosso controlador SDN utilizando docker.
# docker pull opendaylight/odl
# docker run -it --network host --name sdncontrol opendaylight/odl /opt/opendaylight/bin/karaf
No console do sdncontrol do docker realize a seguinte configuração.
opendaylight-user@root> feature:install odl-restconf odl-l2switch-switch odl-l2switch-switch-ui odl-dlux-core odl-dluxapps-nodes
opendaylight-user@root> shutdown -f
Reinicie novamente o container docker para reinicia-lo.
# docker start -ai sdncontrol
-
Em outro terminal vamos conectar a ovsbr0 com o controlador.
# ovs-vsctl set bridge ovsbr0 protocols=OpenFlow13
# ovs-vsctl set-controller ovsbr0 tcp:127.0.0.1:6633
# ovs-vsctl set controller ovsbr0 connection-mode=out-of-band
# ovs-vsctl list controller
Abra no browser a seguinte URL http://127.0.0.1:8181/index.html
Utilize admin como usuário e senha para acessar o ambiente.
Abra a URL a seguir e responda http://127.0.0.1:8181/index.html#/topology
Que elemento podemos visualizar em topology do controlador SDN ?
Entre na pilha de rede da ns-vm1 e teste a comunicação até ns-vm2, existe comunicação entre ns-vm1 e ns-vm2 ?
- Vamos realizar a seguinte configuração via REST API no controlador SDN.
Abra a seguinte URL: http://127.0.0.1:8181/apidoc/explorer/index.html
Navegue até arp-handler-config e clique em PUT /config/arp-handler-config:arp-handler-config
No campo (config)arp-handler-config inclua o seguinte conteudo.
{
"arp-handler-config":
{
"is-proactive-flood-mode":false
}
}
Clique em [Try it out!]
Teste a comunicação novamente entre ns-vm1 e ns-vm2, existe comunicação entre ns-vm1 e ns-vm2 ?
Verifique a topologia novamente no controlador via browser, e descreva o que mudou.
- Navegue até http://127.0.0.1:8181/index.html e clique em [nodes].
Que informações podemos obter nesta seção ?