Data Center IPv6-only com SIIT-DC e Jool
Introdução
Esse breve artigo prático pretende demonstrar o uso do mecanismo SIIT-DC proposto na RFC 7755, desabilitando o IPv4 nas configurações dos serviços e aplicações de um Data Center, simplificando a gerência e a resolução de problemas na rede, sem deixar de atender os clientes externos que ainda estão em IPv4 e necessitam consumir os serviços oferecidos pelo seu portal Web, por exemplo, somente com IPv6 configurado. Será utilizado o software de código aberto Jool, desenvolvido pela equipe de analistas do NIC México. Este estudo faz parte de um trabalho realizado na Universidade Estadual de Campinas (UNICAMP) para promover o uso do IPv6-only na rede do Data Center.
Além disso esse artigo é um convite a todos parar facilitarem a administração dos serviços providos num Data Center rumo ao IPv6-only. Há anos, digo desde a década de 90, trabalhar somente com o IPv4 em uma rede é o que estávamos acostumados até o aparecimento do IPv6. Atualmente temos a necessidade de conviver com duas versões no modelo chamado pilha dupla (dual-stack) nessa fase de transição de versões IPv4 para IPv6 que estamos vivendo e esperamos que em breve será concluído. Porém a modalidade dual-stack tem suas desvantagens e não devemos nos acostumar com ela ou não avançar para o modelo de um único protocolo IP na rede, no caso o IPv6. Você terá que realizar tudo em dobro, uma dupla configuração de regras (ACLs), duplo gerenciamento e monitoramento, duas tabelas de roteamento, o que aumenta a atenção e o trabalho diário.
A ferramenta Jool
A ferramenta Jool, de código aberto, pode ser instalada em qualquer distribuição Linux moderna. É uma ferramenta que possui uma comunidade ativa, atualizações e correções de problemas frequentes e é principalmente mantida pela equipe de desenvolvedores do NIC México. É uma ferramenta estável, simples, fácil de usar, possui um bom desempenho e não exige muita CPU e Memória RAM. Outro detalhe que chama atenção é com relação aos logs de tradução gerado com detalhes, importante hoje em dia durante uma análise de incidentes de segurança. A documentação completa e detalhada pode ser acessada no site do Jool.
O que é o SIIT-DC?
O uso da tradução SIIT (Stateless IP/ICMP Translation Algorithm) em ambiente de Data Center (DC) é uma maneira fácil de avançar com os projetos de transição para uma rede somente IPv6 e que não requer mudanças de infraestrutura ou alterações do núcleo (core) da rede, retirando simplesmente do ambiente ou "desligando" o protocolo IPv4 dos serviços e aplicativos. Clientes com IPv6 em suas máquinas não passam por essa tradução e acessam os serviços de um Data Center diretamente, restaurando a conexão fim a fim. Clientes que ainda estão em IPv4 passam por um mecanismo de tradução em um novo elemento adicionado na topologia da rede chamado Border Relay (BR). Podemos compreender melhor o funcionamento do SIIT-DC com a ilustração da Figura 1.
As traduções dos prefixos ocorrem de forma bidirecionais pela ferramenta Jool seguindo a RFC 6052. Uma tabela de mapeamentos de endereços chamada EAMT (Explicit Address Mapping Specification) proposto na RFC 7757 deverá ser criada no Border Relay sendo composta de prefixos IPv4 e IPv6 que informam como a tradução deverá ocorrer. O endereço IPv4 de origem é mapeado 1:1 dentro de um prefixo IPv6 96-bit. Exemplo:
# jool_siit eamt display +---------------------------------------------+--------------------+ | IPv6 Prefix | IPv4 Prefix | +---------------------------------------------+--------------------+ | 2801:8a:c040:fca0::245/128 | 177.220.17.8/32 | | 2801:8a:c040:fca0::241/128 | 177.220.17.7/32 | | 2801:8a:c040:fca0::242/128 | 177.220.17.6/32 | | 2801:8a:c040:fca0::244/128 | 177.220.17.5/32 | +---------------------------------------------+--------------------+
A tradução realizada pelo mecanismo SIIT-DC não guarda nenhum estado associado as conexões (stateless) alcançando assim uma alta disponibilidade e desempenho. Com isso o Border Relay pode ser configurado em uma máquina virtual ou até num Raspberry Pi. Caso haja uma falha o tráfego pode ser direcionado para outro BR facilmente sem maiores impactos na rede. Há possibilidade de se trabalhar com vários BR de forma balanceada, o que é recomendado. Com relação a melhor localização de se instalar um BR na topologia da rede do Data Center, o ideal é que fique o mais próximo do caminho dos serviços IPv6, entre os Firewalls, IDS e balanceadores de carga.
Mas como fica a parte de rastreabilidade ou auditoria durante a tradução? O cliente e algumas ferramentas podem não perceber que o servidor destino tem somente um endereço IPv6 configurado em sua interface. Uma das mágicas que acontece durante a tradução é que o endereço IPv4 de origem não é perdido. Isso é ótimo para uma auditoria em logs de um servidor Web. Na Figura 2, temos o exemplo de uma parte do arquivo de access.log .
Podemos inclusive perceber nesse log de exemplo os IP de origens em IPv6 direto (destaque em vermelho) e os IPv4 que sofreram tradução (destaque em verde). Fazendo a conversão do IP 64:ff9b::175f:648d para decimal, podemos chegar ao IPv4 de origem 23.95.100.141 .
É importante relembrar que como estaremos configurando apenas um endereço global IPv6 na interface de rede, caso o servidor inicie uma conexão IPv6 ele conseguirá apenas acessar destinos com IPv6. Isso não é problema para o servidor atualmente, pois temos hoje tanto os repositórios de atualizações Linux e Windows em IPv6, caso a atualização do Sistema Operacional seja necessário. O problema acontece quando o servidor tenta iniciar uma conexão com um destino IPv4. Dessa forma o servidor passa a ter um comportamento de cliente e não irá conseguir acessar diretamente, sendo necessária uma combinação de técnicas NAT64/DNS64 + SIIT-DC.
Configurando o Border Relay
A distribuição Linux utilizada na máquina virtualizada é o Oracle Linux 8, Kernel 5.4.17, CPU 1 Core Intel Xeon, 2GB RAM, 1 interface de Rede Intel PRO/1000. Não abordaremos aqui a instalação e configuração do Oracle Linux 8 como também as configurações dos IPs nas interfaces de rede e o roteamento. O software Jool pode ser encontrado no site do Jool em sua última versão. O download pode ser feito tanto no formato tarballs como pelo repositório Github.
# wget https://jool.mx/download/jool-4.1.7.tar.gz ou # git clone https://github.com/NICMx/Jool/tree/v4.1.7
A instalação dos módulos do Jool devem ser feitas através do suporte de módulo de kernel Dinâmico (DKMS), fazendo com que a cada nova versão do Kernel atualizado, todos os módulos DKMS são recompilados automaticamente. A instalação do Jool devem ser realizadas em ambas as VM. Após o download executar o comando:
# /sbin/dkms install jool-4.1.7/
Os arquivos executáveis da aplicação Jool devem ser instaladas de forma separada aos do módulo do Kernel executando para isso a sequência de comandos:
# cd jool-4.1.7/ # ./configure # make # make install
O módulo do Jool deve ser carregado no kernel.
# modprobe jool_siit
Uma tabela de mapeamento de endereços chamada EAMT, como já citamos, descreve como diferentes endereços devem ser traduzidos. No Jool todos os registros são bidirecionais e para executarmos devemos informar o prefixo pool6 para tradução de endereços IPv4 para IPv6 a serem utilizados conforme o cenário proposto, executando os comandos:
# sysctl -w net.ipv4.conf.all.forwarding=1 # sysctl -w net.ipv6.conf.all.forwarding=1 # # jool_siit instance add --netfilter --pool6 64:ff9b::/96 # jool_siit eamt add 2801:8a:c040:fca0::241 177.220.17.7 # jool_siit eamt add 2801:8a:c040:fca0::242 177.220.17.6 # jool_siit eamt add 2801:8a:c040:fca0::244 177.220.17.5 # jool_siit eamt add 2801:8a:c040:fca0::245 177.220.17.8
O Jool permite utilizar um arquivo de configuração no formato JSON como uma maneira prática de guardar as configurações atuais podendo ser adicionados como um script de inicialização e a cada reboot iniciá-lo automaticamente.
{ "comment": "SIIT Configuracao", "instance": "default", "framework": "netfilter", "global": { "pool6": "64:ff9b::/96" }, "eamt": [ { "ipv6 prefix": "2801:8a:c040:fca0::244", "ipv4 prefix": "177.220.17.5" } , { "ipv6 prefix": "2801:8a:c040:fca0::242", "ipv4 prefix": "177.220.17.6" } , { "ipv6 prefix": "2801:8a:c040:fca0::241", "ipv4 prefix": "177.220.17.7" } , { "ipv6 prefix": "2801:8a:c040:fca0::245", "ipv4 prefix": "177.220.17.8" } ] }
Para executar o arquivo de configuração JSON use o comando:
# jool_siit file handle /etc/jool.conf
Para facilitar a execução do Jool como serviço do systemd no Linux devemos criar o arquivo jool.service em /usr/lib/systemd/system e adicionar as linhas:
[Unit] Description=Jool Service ConditionPathExists=/etc/jool.conf After=network.target [Service] Type=forking RemainAfterExit=yes ExecStartPre=/sbin/modprobe jool_siit ExecStart=/usr/local/bin/jool_siit file handle /etc/jool.conf ExecStop=/usr/local/bin/jool_siit -f /etc/jool.conf instance remove [Install] WantedBy=multi-user.target
Conclusão
Não temos como escapar, o IPv6 já está circulando na sua rede e pode ser que você não tenha percebido e isso. Além disso, já está na hora de começarmos a pensar sobre a retirada do IPv4 da rede. Essa é a proposta e o desafio deste artigo simples e prático. Com o uso do mecanismo SIIT-DC, podemos finalmente avançar um pouco mais na transição para um mundo IPv6-only, reduzindo a quantidade de endereços IPv4 no Data Center, podendo ser remanejado para outras operações onde ainda tenham dispositivos legados ou quem sabe até devolvendo o bloco para o seu RIR.
Podemos citar como vantagens:
- Não se perde o endereço IPv4 de origem (auditoria). Controle de acesso e firewalls sem alterações.
- Alto desempenho (kernel). Atrasos desprezíveis no Border Relay.
- Simplicidade no gerenciamento e configuração do Data Center.
- Evita a complexidade no uso de duas versões do protocolo IP em Aplicações e Servidores.
- Tendência mundial (Facebook, AWS, Google, Microsoft, …)
E quando o IPv4 morrer de vez e não for mais necessário, apenas remova o registro IN A no DNS e desligue o seu SIIT-DC (Border Relay). Bye bye IPv4.
Espero com esse tutorial, no qual manterei sempre atualizado, ter auxiliado e incentivado a adoção do IPv6-only nos serviços de um Data Center, com ajuda da ferramenta Jool como um software simples de configurar na prática. Qualquer dúvida, sugestões, críticas, estou a disposição. Linkedin
Autor: Henri A. Godoy
Referências
- Documentação Completa do Jool | NIC.MX
- Implementando SIIT/NAT64 usando Jool | Webinar LACNIC
- Jool, una herramienta que facilita el camino a IPv6 | LACNIC News - Abril 2019
- Tutorial de Operação de Redes IPv6 | LACNIC 36 | Uesley Correa
- RFC 7755 - SIIT-DC: Stateless IP/ICMP Translation for IPv6 Data Center Environments
- RFC 6052 - IPv6 Addressing of IPv4/IPv6 Translators
- RFC 8200 - Internet Protocol, Version 6 (IPv6) Specification
- Internet-Draft - IPv6-only Terminology Definition
- Internet-Draft - IPv6 Deployment Status
- Internet-Draft - Pros and Cons of IPv6 Transition Technologies for IPv4aaS