IP
Source Routing
Uma opção para teste de
caminho
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)
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.
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
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);
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
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
Perguntas...
Rogério F. da Cunha [email protected]