IP Source Routing Uma opção para teste de caminho 18/10/2013
Motivação Possibilidade de testar circuitos contingentes e redundante por dentro Problema: perceber erros em redes circuitos redundantes/contingentes com repetição na camada de enlace. Alternativas no mercado: IPSLA, RPM, Routing Timers e BFD (usado pelos protocolos de roteamento e VRRP) Outra opção: usar o IP Source Routing
Topologia
IP Options Previsto na RFC791 (isto mesmo!) Capacidade em estender o pacote com mais 44 bytes. Sinalização da presença de IP Options (no IPv4) se o IHL for maior que cinco (20bytes) Várias aplicações para o IPOPT, entre elas: IP Source Routing Strict (SSRR) IP Source Routing Loose (LSRR) Record Routing (RR)
RR RR está presente! Em todos os roteadores! Ex.: ping R <ip nome> Nos sistemas que implementam o BSD, pelo menos.
RR
IP Source Routing Mecanismo de troca de endereços de destino na medida que o pacote encontra um roteador com IP Source Routing habilitado (loose); Troca de endereço a cada salto ou descarte (strict); Roteadores obrigam que o pacote volte pela interface de saída, alterando o next hop da volta
O cabeçalho estendido Apenas para SSRR, LSRR e RR!! Figura de W. Richard Stevens, Unix Network Programming,! 3th edition, volume 1.!
Como utilizar? Alterando as aplicações (especialmente as aplicações GNU... Ex: ping...) ou criando uma própria. Não é complexo. Em um sistema com uma pilha BSD, é basicamente composto por três etapas extras (na transmissão): 1º - Montar a extensão do cabeçalho com os IP s da rota definida na origem e ajustar o tipo de envio (SSRR ou LSRR); 2º - Alterar a opção do socket, para habilitar o IP_OPTIONS e passar a extensão para o kernel; 3º - Enviar e receber os pacotes 4º - Obter o IP_OPTIONS na recepção (com a rota de retorno)
1º passo char *next_hops[]={"10.1.1.2","10.2.1.3","10.3.3.4"}; int hops=3, i=0; in_addr_t ip; char ipopt[44]; bzero(ipopt,44); for (i=0; i < hops; i++) { } ip=inet_addr(next_hops[i]); bcopy(&ip, &ipopt[i*4 + 1], 4); ipopt[0]=0; ipopt[1]=0x83; //ou 0x89 para strict; ipopt[2]=3 + 4*hops; ipopt[3]=4; //ponteiro.
2º passo Considerando que já temos a extensão pronta (na variável ipopt, com tamanho de (hops+1)*4, então, basta int size = (hops+1) * 4; setsockopt(socket, IPPROTO_IP, IP_OPTIONS, NULL,0); setsockopt(socket, IPPROTO_IP, IP_OPTIONS, ipopt, size);
3º e 4º passos 3º passo depende da aplicação (send, sendto, recv, recfrom, ou um raw socket para o caso do ICMP). 4º Ao receber char ip_c[17], *ptr, ipoptrx[44]; getsockopt(socket, IPPROTO_IP, IP_OPTIONS, ipoptrx, &size); for(i=0; i < (size)/4-1;i++) { } bzero(ip_c,17); ptr=ipoptrx+4; inet_ntop(af_inet,ptr,ip_c,4); ptr=ptr+4; printf("passou na volta por %s\n",ip_c);
Source Routing na Prática ping alterado para uso do IP Source Routing
Traceroute convencional
Testes
Resultados Encaminhamento feito por caminho alternativo, apesar do roteamento indicar o contrário (não é necessário mexer nas políticas de roteamento), com teste para Cisco, Juniper SSRR, requer IP SR em todos os roteadores, conforme o padrão e possui limite de 10 saltos. LSRR, melhor opção: basta habilitar em locais estratégicos
Vantagens IP SLA / RPM / BFD Alterar configuração do roteador, por interface. Mesmo roteador dos dois lados (IPSLA e RPM) Sobrecarga nos roteadores Limite de tráfego ou de temporização. IP Source Routing Não requer alterações por interface (habilitar por roteador) Qualquer coisa em qualquer lado Não pesa nos roteadores Sem limite de tráfego. Teste feito de um único ponto central
Tem mais Não é necessário implantar em todos os roteadors (modelo loose!) Não oferece risco para o próprio roteador Leve. Possibilidade de verificar roteamento assimétrico.
Segurança e IP Source Routing Habilitado por default, mas desabilitado amplamente... Alerta feito por Cheswick, Bellovin e Rubin, no Firewalls and Internet Security, 2th ed.,2003... Com recomendação para desabilitar esta funcionalidade nos roteadores Qual é a vulnerabilidade? IP Source Address Spoofing, especialmente para aplicações que autenticam usuários pelo IP (rloging, rshell,...) Tais aplicações não são mais usadas (ou não deveriam). De qualquer forma, deve-se observar a RFC 6274 (Security Assessment of the IPv4)
Perguntas... Rogério F. da Cunha roger@petrobras.com.br