Sunday, March 29, 2015

N +1 HA

Uma das coisas que eu mais prezo em minha vida profissional é minha 'curva de aprendizagem'. E  acredito que podemos e devemos mantê-la o mais íngreme possível.
Em meu trabalho anterior, por uns dois anos, minha curva era quase uma reta vertical. Eu sabia pouco de Cisco, quase nada. Após um período a  reta foi ficando curva e a curva cada vez mais transformando em uma reta, só que agora horizontal. A mudança de emprego não foi exatamente por isso mas é muito bom sentir que estou novamente tendo a oportunidade de aprender muito a cada dia.
 Mantendo o propósito do blog, aqui vai mais algumas 'lessons learned'. O primeiro desafio que encontrei foi realmente inusitado. Algo que pode nunca vir a ocorrer novamente. Como eu tive que fazer um downgrade em um WLC (Wireless Lan Controller) da versão 7.6.130 para a versão 7.4.121, para manter a mesma versão das demais WLC. Quando eu fui jogar o software na WLC, recebi o seguinte erro:
" 
Transfer failure : Upgrade from LDPE to non LDPE software is not allowed.For DTLS encryption support, 
DTLS license should be applied.Please download AIR-CT5500-LDPE-K9-x-x-x-x.aes image instead
 "
Eu não tinha visto esse log ainda e certamente é pouco provavel que veja tão logo. LDPE WLC´s não deveriam estar aqui no Brasil. Na verdade em nenhum outro lugar além da Rússia. Se olharmos na página de download da Cisco, essa mensagem fica bem clara:


O motivo pelo qual essa WLC veio parar em minhas mãos pode ser muitos e foge do escopo. O fato é que eu tive que lidar com isso.

Essa diferença fica bem evidente se olharmos através de um comando:

(Cisco Controller) >show sysinfo

Manufacturer's Name.............................. Cisco Systems Inc.
Product Name..................................... Cisco Controller
Product Version.................................. 7.4.121.0
Bootloader Version............................... 1.0.20
Field Recovery Image Version..................... 7.6.95.16
Firmware Version................................. FPGA 1.7, Env 1.8, USB console 2.2
Build Type....................................... DATA + WPS + LDPE




(Cisco Controller) >show sysinfo

Manufacturer's Name.............................. Cisco Systems Inc.
Product Name..................................... Cisco Controller
Product Version.................................. 7.4.121.0
Bootloader Version............................... 1.0.20
Field Recovery Image Version..................... 7.6.101.1
Firmware Version................................. FPGA 1.7, Env 1.8, USB console 1.27
Build Type....................................... DATA + WPS

Podemos ver que no primeiro exemplo, temos a presença de LDPE, enquanto que no segundo não vemos.
Vale salientar que é possível converter um device LDPE para um não-LDPE e eu tentei fazê-lo mas sem sucesso. Porém, no meu caso, se tratava de um HA-SKU. Esse tipo de WLC é usada exclusivamente para backupe e não possui licenças, talvez por isso não tenha conseguido.
 Como existe outra forma de lidar com isso, não perdi muito tempo tentando converter. Vale lembrar que todos esses procedimentos não ocorreram em LAB e sim em ambientes reais e com um tempo determinado de janela.
  Enquanto você não contorna o problema, um segundo erro é mostrado nos logs:

*Mar 26 18:37:20.000: %CAPWAP-5-DTLSREQSEND: DTLS connection request sent peer_ip: x.x.x.x peer_port: 5246
*Mar 26 18:37:21.512: %CAPWAP-5-DTLSREQSUCC: DTLS connection created sucessfully peer_ip: x.x.x.x peer_port: 5246
*Mar 26 18:37:21.513: %CAPWAP-5-SENDJOIN: sending Join Request to x.x.x.x

*Mar 26 15:36:42.000: %CAPWAP-5-DTLSREQSEND: DTLS connection request sent peer_ip: x.x.x.x peer_port: 5246
*Mar 26 15:37:12.000: DTLS_CLIENT_ERROR: ../capwap/base_capwap/dtls/base_capwap_dtls_connection_db.c:2051 Max retransmission count reached!
*Mar 26 15:37:41.999: %DTLS-5-SEND_ALERT: Send FATAL : Close notify Alert to x.x.x.x:5246
*Mar 26 15:37:42.000: %CAPWAP-3-ERRORLOG: Go join a capwap controller.

 Para resolver o problema,  vá em Security > AP Policies é possível desmarcar a opção Accept Self Signed Certificate. Isso deverá resolver o problema.



Uma última dica importante. Não esqueça de ativar a licença. Ainda que uma WLC SKU-HA não possui licenças definitivas, elas possui licença temporária e precisa ser ativada, do contrário os APs não irão se associar e mostrará o seguinte erro:

"Refusing Discovery Request from AP - limit for maximum APs supported 0 reached"

Para ativar a licenças basta ir em Management >Software Activation:



É possível entrar em cada licença e ativá-la. Quando ela ainda não está ativa, será mostrado "EULA not Accepted" em  status.


É preciso estabelecer uma prioridade e clicar em set priority. Será mostrado um pop up para que seja realizado o aceite do EULA e consequentemente, será ativado a licença.

A configuração do N + 1 HA em si é extremamente simples. Na WLC primária, é preciso fazer o apontamento da WLC secundária:


É preciso preencher os campos Backup Primary Controller name e IP address. É possível inserir uma segunda WLC de Backup.

 Na WLC de Backup, é preciso colocá-la como Secundária com SSO em disable:


Não é preciso configurar nenhum endereçamento IP, apesar de aparecer um pop up reclamando.
Apenas mais uma configuração é recomendada. Em cada AP é importante estabelecer em High Availability, as WLC disponíveis em termos de Primary,Secondary e Tertiary:


E encerramos por aqui. Como podem ver, a configuração de N + 1 HA é muito simples. Com um pouco de sorte é possível encontrar situações como essas que encontrei.
 Espero que essas informações como sempre possa auxiliar alguém.



Wednesday, March 18, 2015

Multicast PIM-Sparse Mode


 Estou me preparando para a minha segunda prova do CCNP Wireless: 642-742 IUWVN. Ainda não vi o conteúdo das outras duas provas, mas arrisco dizer que essa é a mais difícil.
 Dois assuntos presentes nessa etapa estão na minha pauta para conhecer mais profundamente faz algum tempo: Multicast e QoS. Desta forma, estou realizando um estudo mais profundo desses dois assuntos. Inciando por Multicast, vou escrever um artigo extenso sobre o assunto. Além da parte teórica, vou apresentar um LAB que configurei com stream de áudio e vídeo real passando por uma rede OSPF e sob a adminstração de uma das modalidades de Multicast, a mais comum, também chamada de Sparse Mode.
 Multicast é parecido com Broadcast, porém,menos limitado.Broadcast é enviado para todos os hosts dentro de um domínio de broadcast. Em Layer 2 um endereço de broadcast segue o padrão FF:FF:FF:FF:FF:FF. Já em Layer 3 o endereço é 255.255.255.255.
 Não há muito mais para dizer sobre Broadcast. Ele é usado por muitas aplicações conhecidas como o DHCP.
 Multicast é um pouco mais elaborado. Ele também possui um endereçamento específico tanto para Layer 2 quanto para Layer 3, porém, obedece algumas regras. Multicast também possui comportamentos diferenciados, dependendo do ambiente. Ele pode se comportar tanto para One-to-Many,Many-to-many e Many-to-One.  Entretando, assim como Broadast, Multicast não é roteável e precisa que os devices sejam preparados para tal.
 O orgão responsável pela distribuição dos endereçamentos reservou a faixa que vai de 224.0.0.1 até 239.255.255.255, sendo que existem subdivisões. Por exemplo, os range de 224.0.0.1/24 (224.0.0.1 até 224.0.0.254) é reservado aos protocolos de roteamento. De 224.0.1.0 até 238.255.255.255 são usado globalmente. Enquanto que o range de 239.0.0.0 ate 239.255.255.255 são usado em redes locais.Por exemplo, os endereços 239.0.1.39 e 239.0.1.40 são usados dentro de uma rede Multicast para fins que veremos a seguir.
 Para fins didáticos, vamos organizar os endereçamentos da seguinte forma:

224.0.0.1 - 239.255.255.255 - Range reservados para Multicast em geral
224.0.0.1 - 224.0.0.254        - Protocolo de Roteamento
224.0.1.0 - 238.255.255.255- Endereços Globais
239.0.0.0 - 239.255.255.255.Enderelis Loais

A nível de layer 2, existe um padrão que advêm da relação com o layer 3. Como o range reservado pela IANA é de 224.x.x.x, os 4 primeiros dígitos são fixos: 1110. Desta forma, esses digitos terão sempre essa configuração.
 Os últimos 23 dígitos são usados para compor o endereço layer 2. Logo, 5 dígitos não serão mapeados. Esse mapeamento resulta que um endereço layer 2 pode ser mapeado para vários endereços Layer 3, até 32 mais especificamente.
 Por exemplo, os endereços 224.130.0.1, 225.130.0.1, 226.130.0.1 são mapeados para o mesmo endereço 01-00-5e-02-00-01.
  Isso é o suficiente em termos de endereçamento de Multicast. Existe um outro protocolo que é usado pelo Multicast para que os hosts se juntem a um grupo multicast. O IGMP (Internet Group Management Protocol). IGMP possui 3 versões a saber:
IGMP v1: Router envia queries a cada 60 segundos para todos os routers através do endereço 224.0.0.1 (All hosts). Os hosts, por sua vez, respondem a essas queries no endereço 224.0.0.2 informando quais os grupos ou qual o grupo eles pretendem associar.
 Não existe solicitação para deixar o grupo, é usado timeout após 180 segundos caso o hosts não responda.
 Na sua versão 2, o processo se torna um pouco mais inteligente. Agora os hosts podem tomar a iniciativa. Por sua vez, os routers pode responder ao host ao inves de responder para o endereço 224.0.0.2.
 Não é dificil de perceber que na versão 2 temos uma utilização muito mais otimizada do link e uma convergência muito mais rápida dos elementos que compõe o multicast.
 IGMP version 3 adiciona a capacidade do host indicar de qual origem ele quer receber informação e os endereço "All Hosts" passa de 224.0.0.2 para 224.0.0.22.
 Existe um problema em se  tratar multicast a nível de switches. A razão é simples. Os Switches são originalmente dispositivos de Layer 2 e como tal analisa apenass endereços MAC dos quadros. Ele observa o quadro quando sai por uma porta e associa o MAC address àquela porta. Ora, Multicast usa um MAC address "virtual" que pode estar associado a vários outros endereços de Layer 3. Desta forma, o método convencional usado pelo Switch não funciona.
 Devido a esse problema, foi desenvolvido pela Cisco o CGMP e, posteriormente o IGMP para ser aplicado aos demais vendors. O IGMP passou a ser padrão, inclusive para Cisco.
 Ao habilitar o IGMP o Switch passa a analisar a camada 7 de um pacote. Assim ele passa a ter conciência das transações de Multicast.
  O título do artigo faz mensão a PIM-Sparse mode. Porém, até agora falamos de Multicast sem mencionar nada além disso. Mas o Multicast existem em duas formas: Dense Mode e Sparse Mode.
 Dense mode é um método mais simplificado e consequentemente menos eficiente de implementação do Multicast. Ele opera muito parecido com o seu parente Broadcast enviando um query para dos os segmentos da rede. A cada 3 minutos a rede é inundada com queries enviadas pelos routers e uma mensagem de resposta chamada de prune retornada pelos hosts que não fazem parte de nenhum grupo. Com essas mensagens é montada a rede Multicast Dense mode.
  Assim como o IGMP v1, Dense mode não prioriza economia no consumo de banda. Outro método de Multicast, mais inteligente, foi proposto: Sparse Mode.
  Multicast Sparse Mode funciona,de certa forma, um pouco parecido com o protocolo de roteamento OSPF. Assim como o OSPF elege um Router Designado, Sparse Mode elege um Router com um nome estranho chamado Rendezvous (Em ingles se pronuncia "rondevú"). Uma das definições em ingles para o termo Rendezvous é "A meeting at a prearranged time and place". Traduzindo, "Um encontro em um horário e lugar pré determinado". Mas a palavra nitidamente vem do Francês e significa "Encontro".
 Os significados são precisos em relação a função desse Router.  Quando um hosts quer se comunicar com um grupo de Multicast ele envia, através de IGMP, uma requisição para seu gateway. O Gateway,por sua vez, direciona essa requisição para o Rendezvous Point, passaremos a chamar de RD. Ao receber essa requisição, o RD encaminha uma resposta para o Router e Host que fez a solicitação, indicando como alcançar o grupo solicitado. O caminho inicialmente passará pelo RD mas será adaptado assim que o fluxo for estabelecido. Veremos isso na prática em nosso LAB.
 Para realizar essas validações de origem e destino, routers usam um protocolo chamado de PIM ou Protocol Independent Multicast.
 O envio de pacote em unicast é realizado com base no endereço de destino mas o envio de Multicast é feito baseado no endereço de origem. O PIM, em conjunto com o RFP (Reverse Path Forwarding), tem como objetivo evitar loops de roteamento. Caso seja verificado que um pacote entrou por uma interface e está tentando voltar por outra interface, o RFP irá dropar o pacote para evitar loops.
 PIM não é exclusivo de Sparse Mode, ele atua também em Dense Mode. Inclusive, a Cisco disponibiliza o comando ip pim { dense-mode | sparse-mode | sparse-dense-mode }, fazendo que o Router consiga funcionar dos dois modos.
  Para iniciar sua rede Multicast é preciso que o protocolo seja habilitado em todos os  Routers que farão parte da rede através do comando ip multicast-routing. Após habilitar o Multicast, será preciso definir qual o papel de cada Router na rede.
 Além do Rendezvous Point, temos outro Router com papel específico chamado Mapping Agent. Como é possível existir diferentes RP em uma rede responsáveis por diferentes grupos Multicast, a função dos Mapping Agents é 'mapear' os RP através de enúncios Groupo-To-RP. Desta forma, os routers possuem uma orientação de para quem solicitar quando precisar se associar a um grupo.
  Mapping Agents usam o IP 224.0.1.39 e enviam Group-To-RP para o endereço 224.0.1.40.
 
Bem, após essa parte teórica sobre Multicast, vamos para uma parte prática. Abaixo apresento a topologia criada no GNS3:

Essa LAB foi feito baseado no LAB presente no Blog Multicasting with GNS3 and Virtualbox. No LAB apresentado no referido Blog, a origem do Stream foi gerado em um Ubuntu, no meu caso estou usando Wimdows XP para ambos com o VLC para gerar e abrir o Stream. A princípio funcionou perfeirtamente.
  Ainda por recomendação do Blog foi usado roteadores 7200 e foi mantido os endereçamentos da núvem de roteadores. Apenas as bordas estão diferentes. No meu caso também é possível ver um servidor de monitoração  em baixo a direita. Isso faz parte de um outro LAB que estou fazendo em paralelo para testar uma solução que estou emplementando em um cliente com software ClearView da RedLine. Talvez no futuro eu apresente algo aqui.
  A rede é composta de 6 roteadores com OSPF divulgando todas as rede,inclusive Loopback.
 
!
interface Loopback1
 ip address 1.1.X.1 255.255.255.255
 ip pim sparse-mode
!
Todos os Routers possuem essa configuração de Loopback, sendo que o terceiro octeto é o número do roteador.
 Também é preciso configurar OSPF em todos os Routers:

router ospf 1
 log-adjacency-changes
 network 0.0.0.0 255.255.255.255 area 0

Basta que sejam executados esses comandos em todos os Routers.

Os endereçamentos das interfaces está exposto na topologia. Não preocupei em criar uma outra. O importante em se dizer aqui é que TODOS os Routers precisam ter o comando :

!
ip multicast-routing
!
Outra configuração necessária é habilitar em todas as interfaces o seguinte comando:
 ip pim sparse-mode

Além dessas configurações comuns a todos os Routers, é preciso definir o Rendezvous Point e o Mapping Agent. Isso é feito com os seguintes comandos respectivamente:

!
ip pim send-rp-announce lo1 scope 15
!

!
ip pim send-rp-discovery lo1 scope 15
!

Como Multicast obedece a mesma regra do Broadcast e não é roteador automaticamente, um último comando é necessário em todos os Routers

!
ip pim autorp listener
!
Após realizar todas essas configurações, valide sua rede. Efetue ping de todos lugar para todo lugar. Conexão de rede precisa estar 100%.
 Uma dificuldade que algumas pessoas podem encontrar é em como integrar as máquinas virtuais com o GNS3.
 Se você também usa Virtualbox, isso é possível fazer diretamente através dessa future presente no GNS3:

Uma dica aqui. Caso você click em VM list e a lista apareça vazia, impossibilitando o mapeamento da VM, basta clicar em "Refresh VM List" que todas as VM instaladas no Virtualbox irão aparecer. Escolha áquelas que serão usadas e click em "Save".
 Após isso, vá para o Dashboard do Virtualbox e adicione-as como qualquer outro host.

Ocorre as vezes dessa integração,por vezes prática, não funcionar como o esperado. Uma outra forma de faz isso é através de núvem mapeando para a interface de rede do Virtualbox. Seria como integrar com Loopback  do próprio Windows.



A configuração da interface de rede das VMs não tem nenhum segredo:



Uma vez validada a conectividade do LAB e adicionado as VMs, basta ligar os XPs e instalar o software VLC em cada uma.
 A frente vou mostrar as configurações em cada um.


Acima temos a configuração do Server. É preciso mapear na máquina o arquivo que queremos reproduzir no Client.
 Veja que na parte inferior escolhemos a opção "Fluxo".

A próxima Janela apenas mostra a url da fonte do arquivo, no caso nossa máquina. Basta clicar em "Próximo".


Essa janela também precisa apenas de um "Próximo".   


                                                             
Clicando em "Próximo", podemos configurar o IP para onde será enviado o fluxo e a porta. 


Na janela acima, temos uma configuração que lhe salvará de passar, como eu passei, dois dias fazendo troubleshooting no seu LAB. Na verdade eu não posso exatamente reclamar porque eu consegui aprender muito mais. Eu li 'n' materiais sobre troubleshooting e aprendi muitos comandos tentando descobrir porque o fluxo não chegava ao meu Client passando pela minha rede Multicast.
No fim, descobri que precisa do parâmetro acima indicado pela seta vermelha. Essa parâmetro não vem e é necessário. Após isso, basta clicar em "Fluxo" e pronto, teremos a janela abaixo.                


E por último, temos nosso client apresentando o vídeo.                                                                       


O sentido do fluxo é apresentado abaixo. Inicialmente, o fluxo passará pelo "ponto de encontro", Rendzvous e irá sentido Client. A topologia foi criada intensionalmente para que o tráfego se adapte ao ambiente assim que o protocolo PIM validar a topologia e garantir através do RFP que não há risco de loop. Logo o tráfego se adaptará à rede usando o percurso de melhor performance para a rede. Isso poderá ser observado através do Wireshark:                                                                         




A princípio não haveria nenhuma razão para que o fluxo passasse no ponto indicado na topologia.   Em uma situação convencional, o fluxo passaria por R3 diretamente. Vamos colocar outro ponto de captura abaixo de R1,onde o fluxo passaria em uma situação normal.
                              
                                                                                 

Se observarmos em um segundo ponto:



Vamos observar que já houve uma convergência na rede e o fluxo passa inteiramente pelo menor percurso. Para que haja essa mudança no tráfego, O RP envia pacotes de Register-Stop como abaixo:


Após isso, vamos o fluxo passando pelo caminho mais curto de forma contínua:



Assim encerramos esse  artigo. Multicast é um assunto muito interessante e muito importante. Acredito que esse artigo é profundo o suficiente para que alguém que esteja iniciando com o assunto possa ter uma boa idéia de como esse protocolo funciona. A forma que é apresentado a parte prática é muito interessante por mostrar uma situação real de transmissão de vídeo. Os testes com icmp são possíveis mas não mostram a complexidade do protocolo. É possível afirmar que se adicionarmos mais um Client na rede, ele poderá receber o mesmo fluxo. Porém, o mais importante de se dizr é que o fluxo não precisar vir do Server. O gateway é capaz de duplicar o fluxo e envia-lo para mais de um destino possibilitando uma enorme economia de banda e possibilitando um serviço de muito melhor qualidade.                                                                                                                                                













Tuesday, March 3, 2015

Multi Hop SSH Tunnel with Putty


Have you ever needed to access a server or something through a SSH Tunnel ? I did and not through one but two of them. It turns that a customer allows me access its WLC using SSH Tunnel. It is not that difficult to setup but I admit I have had some trouble getting things done. All the time I get some difficult doing something I put it on my Blog.

Bellow I'll show my scenario:


I need to setup one tunnel with the server present on my network first. Then, I need to setup another tunnel to a server stated on the Customer´s network. Then, I can use the same logic to access WLC´s on the customer side;
 We can realize that, althouth the communication inside the SSH tunnel is very security, this technique allows us to overcome firewall filter. In the place of Customer´s WLC, we could have not filtered machine. Could be our home machine for example.
 Therefore, for this post, I'm gonna focus on Tunnel setup only.
Although this might look a litle bit complex and it is at the first sight, you´ll gonna see that actualy the setup is pretty straightforward.
 Bellow I am gonna show you some prints:
First we are gonna create a access session with our local server 192.168.1.1:


Here we have the accesss session  to our first server 192.168.1.1. You can and should save this session. Name it to facilitate future access.

 In the same session, in Tunnels, under SSH, you must point to the second server on SSH port. Just like we did above.
 Here is where the second tunnel begins. You can see that the result of this setup is:
Source Porte: 2222
Source IP Address: 127.0.0.1
Destination Port: 22
Destination IP Address: 172.16.1.1
 We are creating a tunnel begining on the local host and ending on the server 172.16.1.1 passing through 192.168.1.1.
 Click Add and save the session.

 Now, to access the second server, we just need to point a new session to our local machine and using the port 2222. This port is supposed to be opened and pointing to the second server.



Once the second session is ok, we can create a Tunnel to the IP address we want to access behind the second server.



That's it. Fisrt start the connection to the first server, let the windows opened, then start the connection to the second server and finally you can access any resource by the other side. Of course, considering that all the necessary ports were opened like our example above.