Mudanças entre as edições de "Data Center IPv6-only com SIIT-DC e Jool"

De Wiki BPF
Ir para: navegação, pesquisa
Linha 1: Linha 1:
 +
  
 
=== Introdução ===
 
=== Introdução ===
Linha 11: Linha 12:
  
 
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.
 
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.
 +
 +
[[Arquivo:Topologia SIIT-DC.png|miniaturadaimagem|Figura 1 — Topologia SIIT-DC (Fonte: Site Jool)]]
  
 
Figura 1 — Topologia SIIT-DC (Fonte: jool.mx)
 
Figura 1 — Topologia SIIT-DC (Fonte: jool.mx)
Linha 140: Linha 143:
  
 
</pre>
 
</pre>
 
  
  

Edição das 12h03min de 12 de janeiro de 2023


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.

Figura 1 — Topologia SIIT-DC (Fonte: Site Jool)

Figura 1 — Topologia SIIT-DC (Fonte: jool.mx)

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 .

Figura 2 - Parte do arquivo de log do Apache Server.

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