Mudanças entre as edições de "464XLAT utilizando a ferramenta Jool"

De Wiki BPF
Ir para: navegação, pesquisa
(38 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
 
=== Introdução ===
 
=== Introdução ===
  
Este breve artigo tem como objetivo demonstrar o uso do mecanismo de transição 464XLAT através da ferramenta de código aberto Jool, desenvolvido pela equipe do [https://www.nicmexico.mx/ NIC México]. Serão abordados conceitos e comandos básicos que podem ser utilizados tanto para Provedores de Acesso a Internet (ISP), Universidades, Empresas, como também quem deseja montar um laboratórios de testes iniciais para conhecer a ferramenta e o funcionamento do 464XLAT em redes locais e sem fio.
+
Este breve artigo tem como objetivo demonstrar o uso do mecanismo de tradução 464XLAT através do software de código aberto Jool, desenvolvido pela equipe de desenvolvedores do [https://www.nicmexico.mx/ NIC México]. Serão abordados conceitos e comandos básicos que podem ser utilizados tanto para Provedores de Internet (ISP), Universidades, Empresas, como também quem deseja montar um laboratórios de testes iniciais para conhecer o Jool e o funcionamento do 464XLAT em redes locais (LAN) ou redes sem fio (WLAN).
  
Com a escassez cada vez mais nos números IP versão 4 (IPv4) e a necessidade de conexão de cada vez mais dispositivos na Internet, a adoção do IP versão 6 (IPv6) é a solução mais viável até o momento para que possamos crescer e expandir novos serviços de conexão a Internet. Recentemente a Diretoria do LACNIC fez um [https://www.lacnic.net/4284/3/lacnic/chamada-da-diretoria-do-lacnic--comunidade-para-favorecer-a-implementac%C3%A3o-do-ipv6 comunicado] à comunidade para favorecer e acelerar a implementação do IPv6 nas redes da região. Na América Latina, o [https://www.lacnic.net/agotamiento esgotamento] completo do IPv4 está previsto para o mês de agosto de 2020.
+
Com a escassez cada vez mais nos números IP versão 4 (IPv4) e o aumento de dispositivos conectados a Internet, a adoção do IP versão 6 (IPv6) é a solução mais viável até o momento para que possamos crescer e expandir novos serviços de conexão a Internet. Em 2019, a diretoria do LACNIC fez um [https://www.lacnic.net/4284/3/lacnic/chamada-da-diretoria-do-lacnic--comunidade-para-favorecer-a-implementac%C3%A3o-do-ipv6 comunicado] à comunidade para favorecer e acelerar a implementação do IPv6 nas redes na região do LACNIC. Na América Latina, em agosto de 2020, foi [https://prensa.lacnic.net/news/institucional/agotamiento-de-ipv4-lacnic-asigno-el-ultimo-bloque anunciado] a designação do último bloco de IPv4.
  
 
Este estudo faz parte de um trabalho desenvolvido na Universidade Estadual de Campinas ([https://www.unicamp.br UNICAMP]) de forma a acelerar e adequar os sistemas computacionais a conviver com o protocolo IPv6 e oferecer uma Internet cada vez melhor a toda comunidade na promoção do ensino, pesquisa e extensão.
 
Este estudo faz parte de um trabalho desenvolvido na Universidade Estadual de Campinas ([https://www.unicamp.br UNICAMP]) de forma a acelerar e adequar os sistemas computacionais a conviver com o protocolo IPv6 e oferecer uma Internet cada vez melhor a toda comunidade na promoção do ensino, pesquisa e extensão.
  
=== Por que utilizar o 464XLAT ? ===
+
=== Por que utilizar o 464XLAT (IPv4aaS) ? ===
  
Inicialmente o estudo começou em uma rede piloto utilizando o mecanismo de transição NAT64 em conjunto com o DNS64 em uma rede sem fio para atender os alunos, docentes e visitantes que chegam na Universidade, mais especificamente na Faculdade de Ciências Aplicadas ([https://www.fca.unicamp.br/portal/pt-br/ FCA]), devido a não termos mais IPv4 públicos disponíveis para serem atribuídos. A ideia inicial foi entregar somente endereços IPv6 na rede sem fio da Unidade para atender os usuários famintos por conectividade. Esse estudo completo está disponível [https://www.lacnic.net/innovaportal/file/3207/1/apresentacao-lacnic-henri-v2.pdf aqui] para quem desejar obter mais detalhes.
+
Inicialmente o estudo começou em uma rede piloto utilizando o mecanismo de tradução NAT64 em conjunto com o DNS64 em uma rede sem fio para atender os alunos, docentes e visitantes que chegam na Universidade, mais especificamente na Unidade do Campus II - Faculdade de Ciências Aplicadas ([https://www.fca.unicamp.br/portal/pt-br/ FCA]), devido a não termos mais IPv4 públicos disponíveis para serem atribuídos na rede. A ideia foi entregar somente endereços IPv6 na rede sem fio para os usuários famintos por conectividade que passam pelo Campus diariamente (~ 3000 pessoas). Esse estudo completo está disponível [https://www.lacnic.net/innovaportal/file/3207/1/apresentacao-lacnic-henri-v2.pdf aqui] para quem desejar obter mais detalhes.
  
 
Apesar do seu bom funcionamento e sua crescente utilização, durante o uso do NAT64 foram detectados alguns problemas na rede:
 
Apesar do seu bom funcionamento e sua crescente utilização, durante o uso do NAT64 foram detectados alguns problemas na rede:
  
 
* Sem conectividade em dispositivos legados de usuários e visitantes que não suportavam o protocolo IPv6.
 
* Sem conectividade em dispositivos legados de usuários e visitantes que não suportavam o protocolo IPv6.
* Aplicações que ainda utilizavam IP literal. RFC 6586 Seção 6.1
+
* Aplicações que ainda utilizavam IP literal. [https://tools.ietf.org/html/rfc6586 (RFC 6586)] Seção 6.1
 
* Dificuldade no mapeamento de pastas e impressoras na rede.
 
* Dificuldade no mapeamento de pastas e impressoras na rede.
  
 
Portanto, o uso somente de NAT64/DNS64 em um rede não é uma solução viável.  
 
Portanto, o uso somente de NAT64/DNS64 em um rede não é uma solução viável.  
  
Para resolver esses problemas foram realizados testes com outro mecanismo de transição muito similar ao NAT64, chamado de 464XLAT RFC 6877. A diferença é que ao invés de ter somente um endereço IPv6 é entregue também um endereço IPv4 privado. Com isso podemos atender os dispositivos legados que não possuem suporte a IPv6. De maneira geral é adicionado um tradutor próximo ao cliente chamado de CLAT (''Customer-side Translator'') executando a função de tradução de IPv4 para IPv6 chamado de SIIT (''Stateless IP/ICMP Translation Algorithm'') RFC 7915. Existe um entendimento hoje de chamarem o CLAT como NAT46.
+
Para resolver esses problemas foram realizados testes com outro mecanismo de tradução muito similar ao NAT64, chamado de 464XLAT [https://tools.ietf.org/html/rfc6877 (RFC 6877)]. A diferença é que ao invés de ter somente um endereço IPv6 é entregue um endereço IPv4 privado. Com isso podemos atender os dispositivos legados que não possuem suporte a IPv6. De maneira geral é adicionado um tradutor próximo ao cliente chamado de CLAT (''Customer-side Translator'') executando a função de tradução de IPv4 para IPv6 conhecido como SIIT (''Stateless IP/ICMP Translation Algorithm'') ([https://tools.ietf.org/html/rfc7915 RFC 7915)]. Existe então um entendimento hoje de chamarem o CLAT como SIIT.
  
Exemplo: Um dispositivo que tenha recebido somente um IPv4 privado e deseja acessar um endereço também em IPv4, sofrerá um primeira tradução de endereços no usuário final (CLAT) para que o endereço em IPv6 seja transmitido por uma infraestrutura IPv6 até chegar ao ISP, onde será realizada uma segunda tradução, agora para IPv4 novamente, chegando ao seu destino. Chamados essa segunda tradução de PLAT (''Provider-side Translator'') que nada mais é que um NAT64, já conhecido. Quando o destino for um endereço IPv6 seu trânsito será realizado diretamente pela rede IPv6 sem a necessidade de traduções pelo PLAT.
+
Exemplo: Um dispositivo que tenha recebido somente um IPv4 privado e deseja acessar a Internet tendo como destino um endereço em IPv4, sofrerá uma primeira tradução de endereços no CLAT para que o endereço em IPv6 seja transmitido por uma infraestrutura IPv6 até chegar ao ISP, onde será realizada uma segunda tradução, agora para IPv4 novamente, chegando ao seu destino. Chamados essa segunda tradução de PLAT (''Provider-side Translator'') que nada mais é que um NAT64, já conhecido. Quando o destino for um endereço IPv6 seu trânsito será realizado diretamente pela rede IPv6 sem a necessidade de traduções pelo PLAT.
  
 
=== Por que utilizar o Jool ? ===
 
=== Por que utilizar o Jool ? ===
  
A ferramenta Jool foi escolhido por ser uma software de código aberto, que pode ser instalado em qualquer distribuição Linux moderno. Além do mais, é um ferramenta que possui uma comunidade ativa, atualizações e correção de problemas frequentes e principalmente é mantido pelo equipe de desenvolvedores do NIC México, altamente receptivos a qualquer dúvida ou sugestões. É uma ferramenta estável, simples, fácil de usar, possui uma boa performance 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. Seria impossível abordar nesse tutorial todas as sintaxes de comando que o Jool oferece e sua flexibilidade nas configurações e ajustes finos para adequar a cada cenário. A documentação completa e detalhada pode ser acessada no site do Jool.
+
A ferramenta Jool foi escolhida por ser uma software de código aberto, que pode ser instalado em qualquer distribuição Linux moderno. Além do mais, é uma ferramenta que possui uma comunidade ativa, atualizações e correções de problemas frequentes e principalmente é mantida pelo equipe de desenvolvedores do NIC México, altamente receptivos a qualquer dúvida ou sugestões. É uma ferramenta estável, simples, fácil de usar, possui uma boa performance 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. Seria impossível abordar nesse tutorial todas as sintaxes de comando que o Jool oferece e sua flexibilidade nas configurações e ajustes finos para adequar a cada cenário. A documentação completa e detalhada pode ser acessada no site do Jool.
  
 
=== Topologia ===
 
=== Topologia ===
  
A Figura 1 mostra a topologia de um cenário onde os clientes finais utilizam a rede sem fio para se conectar a Internet. Como ainda não temos um aplicativo cliente para fazer a função de CLAT em redes WiFi e que possa ser instalado nos dispositivos, por exemplo, notebooks e smartphones (Windows, iOS e Android) ou a implementação da funcionalidade CLAT massiva em CPEs, inserimos uma máquina virtual (VM) chamada CLAT na VLAN do controlador da rede sem fio para que a tradução nos clientes sejam realizadas. Uma outra VM chamada PLAT deve estar localizada na saída do tráfego IPv6 para a Internet no Provedor. A conexão entre o CLAT e PLAT é exclusivamente utilizando IPv6 e no caso dos ISPs estão localizados distantes um do outro. Neste cenário, as máquinas virtuais CLAT e PLAT estão no mesmo lugar físico no Data Center, podendo neste caso, estar localizado em um mesmo host até. Por questões didáticas utilizaremos cada tradutor em VM distintas.
+
A Figura 1 mostra a topologia de um cenário onde os clientes finais utilizam a rede sem fio para se conectarem a Internet. Como ainda não temos um aplicativo cliente para fazer a função de CLAT em redes Wi-Fi e que possam ser instalados nos dispositivos, por exemplo, notebooks e smartphones (Windows, iOS e Android) ou a implementação da funcionalidade CLAT massiva em CPEs, inserimos uma [https://www.linux-kvm.org/page/Main_Page máquina virtual] (VM) chamada CLAT na VLAN do controlador da rede sem fio para que a tradução nos clientes sejam realizadas. Uma outra VM chamada PLAT deve estar localizada na saída do tráfego IPv6 para a Internet no Provedor. A conexão entre o CLAT e PLAT é exclusivamente utilizando IPv6 e no caso dos ISPs estão localizados distantes um do outro. Neste cenário, as máquinas virtuais CLAT e PLAT estão no mesmo lugar físico no Data Center, podendo neste caso, estarem localizados em um mesmo host até. Por questões didáticas utilizaremos cada tradutor em VM distintas.
  
 
Enquanto em um cenário utilizando IPv6-only e NAT64 o uso do DNS64 é fundamental para o funcionamento, já no 464XLAT é opcional. Neste tutorial não estaremos configurando e utilizando o DNS64. A ausência do DNS64 não causa grandes problemas de performance durante a navegação na Internet, mesmo sabendo que nesse caso o CLAT estará trabalhando sempre, pois não guardará os estados das conexões.
 
Enquanto em um cenário utilizando IPv6-only e NAT64 o uso do DNS64 é fundamental para o funcionamento, já no 464XLAT é opcional. Neste tutorial não estaremos configurando e utilizando o DNS64. A ausência do DNS64 não causa grandes problemas de performance durante a navegação na Internet, mesmo sabendo que nesse caso o CLAT estará trabalhando sempre, pois não guardará os estados das conexões.
  
[[Arquivo:Figura1-464XLAT.jpg|centro|commoldura|721x721px|Figura 1 - Topologia 464XLAT]]
+
[[Arquivo:Top-nat464.jpg|centro|miniaturadaimagem|492x492px|Fig 1. Topologia 464XLAT]]
 
 
 
=== Instalação e Configuração do Ambiente ===
 
=== Instalação e Configuração do Ambiente ===
  
O Linux utilizado é o CentOS 7 que pode ser encontrado no [https://www.centos.org/download/ repositório] da distribuição e deverá ser instalado em ambas as VM para que o Jool possa ser compilado. Não abordaremos aqui a instalação e configuração do Linux CentOS 7 como também as configurações dos IPs nas interfaces de rede e o roteamento. A ferramenta Jool pode ser encontrada no site [https://www.jool.mx/en/download.html Jool] em sua última versão. O download pode ser feito tanto no formato ''tarballs'' como pelo repositório Github.<pre>
+
O Linux utilizado é o CentOS 7 que pode ser encontrado no [https://www.centos.org/download/ repositório] da distribuição e deverá ser instalado em ambas as VM para que o Jool possa ser compilado. Não abordaremos aqui a instalação e configuração do Linux CentOS 7 como também as configurações dos IPs nas interfaces de rede e o roteamento. O software Jool pode ser encontrado no site [https://www.jool.mx/en/download.html Jool] em sua última versão. O download pode ser feito tanto no formato ''tarballs'' como pelo repositório Github.<pre>
wget https://github.com/NICMx/Jool/releases/download/v4.0.7/jool-4.0.7.tar.gz
+
# wget https://jool.mx/download/jool-4.1.5.tar.gz
git clone https://github.com/NICMx/Jool.git
+
ou
 +
# git clone https://github.com/NICMx/Jool.git
 
</pre>
 
</pre>
  
 
Alguns outros ajustes indicados em cada VM são:
 
Alguns outros ajustes indicados em cada VM são:
  
* Ajustes do smp_affinity que podem ser consultada em /proc/interrupts para um melhor uso da CPU com a interrupção do driver de rede Ethernet. Parece uma coisa boba mas faz muita diferença.
+
* Ajustes do [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-cpu-irq smp_affinity] que podem ser consultada em /proc/interrupts para um melhor uso da CPU com a interrupção do driver de rede Ethernet. Parece uma coisa boba mas faz muita diferença.
  
 
* Habilitar o ip forwarding no Kernel:
 
* Habilitar o ip forwarding no Kernel:
 
<pre>
 
<pre>
sysctl -w net.ipv4.conf.all.forwarding=1  
+
# sysctl -w net.ipv4.conf.all.forwarding=1  
sysctl -w net.ipv6.conf.all.forwarding=1
+
# sysctl -w net.ipv6.conf.all.forwarding=1
 
</pre>
 
</pre>
* Desabilitando Offload nas interfaces de rede:
+
* Desabilitando o offload nas interfaces de rede:
 
<pre>
 
<pre>
ethtool --offload interface lro off  
+
# ethtool --offload interface lro off  
ethtool --offload interface gro off
+
# ethtool --offload interface gro off
 
</pre>
 
</pre>
* Ajustes para melhorar a performance na rede:
+
* Ajustes no kernel para melhorar a performance da rede:
 
<pre>
 
<pre>
 
kern.maxfiles=25600  
 
kern.maxfiles=25600  
Linha 66: Linha 66:
  
 
Desde a versão 4.0.x 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:<pre>
 
Desde a versão 4.0.x 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:<pre>
/sbin/dkms install jool-4.0.7/
+
# /sbin/dkms install jool-4.1.5/
 
</pre>
 
</pre>
 
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:
 
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:
 
<pre>
 
<pre>
cd jool-4.0.7/
+
# cd jool-4.1.5/
./configure
+
# ./configure
make
+
# make
make install
+
# make install
 
</pre>
 
</pre>
  
 
==== Implementando o CLAT ====
 
==== Implementando o CLAT ====
  
A primeira tradução (''Stateless Translation'') acontece quando um endereço IPv4 privado não roteável é traduzido para IPv6 antes de chegar ao PLAT. Uma tabela de mapeamento de endereços chamada de EAMT (''Explicit Address Mapping Specification'') RFC 7757 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 de acordo com o cenário proposto, digitando os comandos:
+
A primeira tradução (''Stateless Translation'') acontece quando um endereço IPv4 privado não roteável é traduzido para IPv6 antes de chegar ao PLAT. Uma tabela de mapeamento de endereços chamada de EAMT (''Explicit Address Mapping Specification'') [https://tools.ietf.org/html/rfc7757 (RFC 7757)] 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 de acordo com o cenário proposto, digitando os comandos:
 
<pre>
 
<pre>
jool_siit instance add --netfilter --pool6 64:ff9b::/96
+
# jool_siit instance add --netfilter --pool6 64:ff9b::/96
jool_siit eamt add 192.168.200.0/24 2801:8a:c040:200::
+
# jool_siit eamt add 192.168.200.0/24 2801:8a:c040:200::
 
</pre>
 
</pre>
 
Desde a versão 4.0.6 é possível fazer uma consulta da tabela EAMT através do comando ''address query'' o qual nos auxilia a entender a tradução.
 
Desde a versão 4.0.6 é possível fazer uma consulta da tabela EAMT através do comando ''address query'' o qual nos auxilia a entender a tradução.
 
<pre>
 
<pre>
[root@clat ~]# jool_siit address query 192.168.200.11
+
# jool_siit address query 192.168.200.11
 
2801:8a:c040:200::b
 
2801:8a:c040:200::b
[root@clat ~]#
 
 
</pre>
 
</pre>
 
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.
 
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.
 
<pre>
 
<pre>
[root@clat ~]# cat /etc/jool_siit.json
+
# cat /etc/jool_siit.json
 
{
 
{
  
         "comment": "SIIT Config",
+
         "comment": "CLAT Config",
 
         "instance": "default",
 
         "instance": "default",
 
         "framework": "netfilter",
 
         "framework": "netfilter",
Linha 109: Linha 108:
 
}
 
}
 
</pre>
 
</pre>
Para executar o arquivo de configuração JSON:
+
Para executar o arquivo de configuração JSON use o comando:
 +
<pre>
 +
# jool_siit file handle /etc/jool_siit.json
 +
</pre>
 +
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:
 
<pre>
 
<pre>
[root@clat ~]# jool_siit file handle /etc/jool_siit.json
+
[Unit]
 +
Description=Jool Service
 +
ConditionPathExists=/etc/jool_siit.json
 +
After=network.target
 +
 
 +
[Service]
 +
Type=forking
 +
RemainAfterExit=yes
 +
ExecStartPre=/sbin/modprobe jool_siit
 +
ExecStart=/usr/local/bin/jool_siit file handle /etc/jool_siit.json
 +
ExecStop=/usr/local/bin/jool_siit -f /etc/jool_siit.json instance remove
 +
 
 +
[Install]
 +
WantedBy=multi-user.target
 
</pre>
 
</pre>
  
Linha 119: Linha 135:
  
 
<pre>
 
<pre>
[root@plat ~]# jool instance add --netfilter --pool6 64:ff9b::/96
+
# jool instance add --netfilter --pool6 64:ff9b::/96
[root@plat ~]# jool pool4 add 143.106.230.240
+
# jool pool4 add 143.106.230.240
 
</pre>
 
</pre>
Para um melhor ajuste do pool IPv4 e as portas utilizadas podemos configurar o seu intervalo que serão adicionados por demanda.
+
Para um melhor ajuste do pool IPv4 e a reservar as portas utilizadas podemos configurar o intervalo que serão adicionados por demanda:
 
<pre>
 
<pre>
[root@plat ~]# sysctl -w net.ipv4.ip_local_port_range="32768 40000"
+
# sysctl -w net.ipv4.ip_local_port_range="32768 40000"
  
[root@plat ~]# jool pool4 add 143.106.230.240 40001-61000 --tcp
+
# jool pool4 add 143.106.230.240 40001-61000 --tcp
[root@plat ~]# jool pool4 add 143.106.230.240 40001-61000 --udp
+
# jool pool4 add 143.106.230.240 40001-61000 --udp
[root@plat ~]# jool pool4 add 143.106.230.240 40001-61000 --icmp
+
# jool pool4 add 143.106.230.240 40001-61000 --icmp
 
</pre>
 
</pre>
Para que o Jool faça o log das traduções realizadas e das portas utilizadas, recomenda-se adicionar as seguintes opções:
+
Para que o Jool faça o registro das informações na ''Binding Information Base'' (BIB) para que possamos gerenciar e também realizar o log das sessões de traduções e portas utilizadas, recomenda-se adicionar as seguintes opções:
 
<pre>
 
<pre>
[root@plat ~]# jool global update logging-bib true
+
# jool global update logging-bib true
[root@plat ~]# jool global update logging-session true
+
# jool global update logging-session true
 
</pre>
 
</pre>
 
Exemplo do arquivo JSON para automatizar as configurações de inicialização:
 
Exemplo do arquivo JSON para automatizar as configurações de inicialização:
 
<pre>
 
<pre>
 +
# cat /etc/jool.json
 
{
 
{
         "comment": "Config NAT64",
+
         "comment": "PLAT Config",
 
         "instance": "default",
 
         "instance": "default",
 
         "framework": "netfilter",
 
         "framework": "netfilter",
Linha 168: Linha 185:
 
=== Auditoria ===
 
=== Auditoria ===
  
O Jool consegue registrar com detalhes quando uma tradução é criada e finalizada utilizando o arquivo gerado pelo syslog. É recomendado ativar o logging do Jool para o caso de uma análise de incidentes de segurança. Segue abaixo um exemplo do log gerado:
+
O Jool consegue registrar com detalhes no PLAT o registro na BIB (''Mapped)'' e quando uma sessão é criada (''Added''), no arquivo ''messages'' gerado pelo serviço de ''syslog'' do Linux. É recomendado ativar as opções de logging do Jool para o caso de uma análise de incidentes de segurança. Segue abaixo um exemplo do log gerado:
 
<pre>
 
<pre>
[236793.979096] Jool: default 2020/1/30 13:22:38 (GMT) - Added session 2801:8a:c040:200::a#45399|64:ff9b::426e:3120#1443|143.106.230.240#43549|66.110.49.32#1443|TCP
+
[236793.979096] Jool: default 2020/1/30 13:22:38 (GMT) - Added session 2801:8a:c040:200::b#45399|64:ff9b::426e:3120#1443|143.106.230.240#43549|66.110.49.32#1443|TCP
[236793.979148] Jool: default 2020/1/30 13:22:38 (GMT) - Mapped 2801:8a:c040:200::a#45399 to 143.106.230.240#43549 (TCP)
+
[236793.979148] Jool: default 2020/1/30 13:22:38 (GMT) - Mapped 2801:8a:c040:200::b#45399 to 143.106.230.240#43549 (TCP)
 
</pre>
 
</pre>
  
 
Onde temos:
 
Onde temos:
 
<pre>
 
<pre>
2801:8a:c040:200::a#45399  --> Endereço IPv6 origem gerado no NAT46/CLAT e porta.
+
2801:8a:c040:200::b#45399  --> Endereço IPv6 origem gerado no CLAT/SIIT e porta.
64:ff9b::426e:3120#1443  --> Endereço pool6 para tradução no NAT64/PLAT.
+
64:ff9b::426e:3120#1443  --> Endereço pool6 para tradução no PLAT/NAT64.
143.106.230.240#43549 --> Endereço IPv4 mascarado de saída no NAT64/PLAT e porta
+
143.106.230.240#43549 --> Endereço IPv4 mascarado de saída no PLAT/NAT64 e porta
 
66.110.49.32#1443|TCP --> Endereço IPv4 destino, porta e protocolo de transporte.
 
66.110.49.32#1443|TCP --> Endereço IPv4 destino, porta e protocolo de transporte.
 
</pre>
 
</pre>
  
Somente isso não é suficiente para rastrear o usuário que realizou a conexão. É necessário a combinação de vários logs de sistemas para complementar a auditoria. Por isso, todo usuário da rede sem fio passa por um Captive Portal que se autentica em uma base de usuários utilizando o FreeRADIUS. Segue abaixo uma parte do log do radius de uma conexão do usuário:
+
Podemos consultar as informações que estão armazenadas na tabela BIB com relação as conexões TCP utilizando o comando:
 +
<pre>
 +
# jool bib display --tcp --numeric
 +
[Dynamic TCP] 143.106.230.240#52110 - 2801:8a:c040:200::b#47469
 +
[Dynamic TCP] 143.106.230.240#52492 - 2801:8a:c040:200::b#39215
 +
[Dynamic TCP] 143.106.230.240#54461 - 2801:8a:c040:200::b#49340
 +
</pre>
 +
 
 +
A tabela de sessões estabelecidas e o tempo de expiração podem sem consultadas com o comando:
 +
<pre>
 +
# jool session display --tcp --numeric
 +
---------------------------------
 +
(V4_FIN_RCV) Expires in 0:15:06.168
 +
Remote: 108.174.11.17#443      2801:8a:c040:200::b#38914
 +
Local: 143.106.230.240#59953    64:ff9b::6cae:b11#443
 +
---------------------------------
 +
</pre>
 +
Para melhorar ainda mais o rastreamento do usuário que realizou a conexão é necessário a combinação de vários logs de sistemas para complementar a auditoria. Por isso, todo usuário da rede sem fio passa por um Captive Portal que se autentica em uma base de usuários utilizando o FreeRADIUS. Segue abaixo uma parte do log do radius de uma conexão do usuário:
 
<pre>
 
<pre>
Thu Jan 30 10:22:36 2020
 
        Acct-Session-Id = "5E32D87D-BDBC3E02"
 
 
         Framed-IP-Address = 192.168.200.10 --> IPv4 Privado a ser traduzido no CLAT
 
         Framed-IP-Address = 192.168.200.10 --> IPv4 Privado a ser traduzido no CLAT
 
         Framed-Interface-Id = 40d9:cda9:1952:7fe6  --> Temporary IPv6 Address
 
         Framed-Interface-Id = 40d9:cda9:1952:7fe6  --> Temporary IPv6 Address
 
         Framed-IPv6-Prefix = 2801:8a:c040:200::/64 --> IPv6 Network
 
         Framed-IPv6-Prefix = 2801:8a:c040:200::/64 --> IPv6 Network
        Acct-Multi-Session-Id = "f0b0521e8e9ef0d7aa5382fc5e32d87d1ccd"
 
 
         Acct-Status-Type = Start
 
         Acct-Status-Type = Start
 
         Acct-Authentic = RADIUS
 
         Acct-Authentic = RADIUS
         User-Name = "henri.godoy" --> Usuário
+
         User-Name = "user" --> Usuário
 
         NAS-Identifier = "F0-B0-52-1E-8E-9E"
 
         NAS-Identifier = "F0-B0-52-1E-8E-9E"
         Called-Station-Id = "F0-B0-52-1E-8E-9E:FCA6"
+
         Called-Station-Id = "F0-B0-52-1E-8E-9E:FCA6" --> MAC Address do Access Point e SSID
 
         Calling-Station-Id = "F0-D7-AA-53-82-FC" --> MAC Address do dispositivo
 
         Calling-Station-Id = "F0-D7-AA-53-82-FC" --> MAC Address do dispositivo
        NAS-Port-Type = Wireless-802.11
 
        Connect-Info = "CONNECT 802.11a/n"
 
        Event-Timestamp = "Jan 30 2020 10:22:30 -03"
 
 
         NAS-IPv6-Address = 2801:8a:c040:fca1::4
 
         NAS-IPv6-Address = 2801:8a:c040:fca1::4
        FreeRADIUS-Acct-Session-Start-Time = "Jan 30 2020 10:22:36 -03"
 
 
</pre>
 
</pre>
  
Linha 211: Linha 238:
 
Por fim, quanto mais endereços IPv6 configurado nas redes temos:
 
Por fim, quanto mais endereços IPv6 configurado nas redes temos:
  
* Menos traduções são realizadas nos equipamentos.
+
* Menos traduções são realizadas nos equipamentos (PLAT/NAT64).
* Facilita e agiliza a identificação de um host/usuário no caso de uma auditoria.
+
* Maior facilidade e rapidez na identificação de um host/usuário no caso de uma auditoria.
* O scanning da rede se torna mais complexo.
+
* Seus usuários estarão utilizando um protocolo novo [https://tools.ietf.org/html/rfc8200 (RFC 8200)] e experimentando uma navegação mais rápida.
 +
* Possibilidade de atribuir endereços IP a um número maior de equipamentos sem causar uma quebra de conectividade fim-a-fim.
 +
* O ''scanning'' da rede se torna mais complexo.
 
* Você estará contribuindo para o crescimento e desenvolvimento da Internet. ;-)
 
* Você estará contribuindo para o crescimento e desenvolvimento da Internet. ;-)
  
Espero com esse tutorial ter auxiliado e incentivado o uso do 464XLAT, apresentando o Jool como ferramenta prática. Qualquer dúvida, sugestões, críticas, estou a disposição.
+
Espero com esse tutorial, no qual manterei sempre atualizado, ter auxiliado e incentivado o uso do 464XLAT, apresentando o Jool como um software simples de configurar na prática. Qualquer dúvida, sugestões, críticas, estou a disposição. [https://www.linkedin.com/in/henri-alves-godoy/ Linkedin]
  
 
Autor: [https://wiki.brasilpeeringforum.org/w/Usu%C3%A1rio:Henri.godoy Henri A. Godoy]
 
Autor: [https://wiki.brasilpeeringforum.org/w/Usu%C3%A1rio:Henri.godoy Henri A. Godoy]
Linha 222: Linha 251:
 
=== Referências ===
 
=== Referências ===
  
* [https://www.jool.mx/en/documentation.html Documentação Completa do Jool]
+
* [https://www.jool.mx/en/documentation.html Documentação Completa do Jool | NIC.MX]
* [ftp://ftp.registro.br/pub/gter/gter48/12-xlat.pdf Transição para IPv6 com 464xlat em cenário ISP | GTER48]
+
* [https://www.lacnic.net/innovaportal/file/4756/1/henri-464xlat-lacnic34.pdf 464XLAT en redes inalámbricas utilizando Jool | LACNIC 34/LACNOG 2020]
 +
* [ftp://ftp.registro.br/pub/gter/gter48/12-xlat.pdf Transição para IPv6 com 464XLAT em cenário ISP | GTER48]
 
* [https://www.lacnic.net/3653/1/lacnic/ Introducción a Jool | Webinar LACNIC]
 
* [https://www.lacnic.net/3653/1/lacnic/ Introducción a Jool | Webinar LACNIC]
 
* [https://www.lacnic.net/3753/1/lacnic/ IPv6 Day | Webinar LACNIC]
 
* [https://www.lacnic.net/3753/1/lacnic/ IPv6 Day | Webinar LACNIC]
 
* [https://www.lacnic.net/3900/52/evento/#tutorial-ipv6-avanzado Tutoriales IPv6 avanzado | LACNIC 32/LACNOG 2019]
 
* [https://www.lacnic.net/3900/52/evento/#tutorial-ipv6-avanzado Tutoriales IPv6 avanzado | LACNIC 32/LACNOG 2019]
 
* [https://www.lacnic.net/2467/1/lacnic/ Implementando SIIT/NAT64 usando Jool | Webinar LACNIC]
 
* [https://www.lacnic.net/2467/1/lacnic/ Implementando SIIT/NAT64 usando Jool | Webinar LACNIC]
 +
* [https://www.lacnic.net/innovaportal/file/3207/1/apresentacao-lacnic-henri-v2.pdf Entrega de IPv6-only al usuario final utilizando NAT64 | LACNIC 30/LACNOG 2018]
 
* [https://youtu.be/ZSMMkYPbX5U Guía para el despliegue de NAT64/464XLAT en redes de operadores y redes empresariales | LACNOG 2019]
 
* [https://youtu.be/ZSMMkYPbX5U Guía para el despliegue de NAT64/464XLAT en redes de operadores y redes empresariales | LACNOG 2019]
* [https://prensa.lacnic.net/news/ipv6/jool-una-herramienta-que-facilita-el-camino-a-ipv6 Jool, una herramienta que facilita el camino a IPv6 | LACNIC NEWS Abril 2019]
+
* [https://prensa.lacnic.net/news/ipv6/jool-una-herramienta-que-facilita-el-camino-a-ipv6 Jool, una herramienta que facilita el camino a IPv6 | LACNIC News - Abril 2019]
 
* [http://ipv6.br/pagina/livro-ipv6/ Livro Laboratório de IPv6]
 
* [http://ipv6.br/pagina/livro-ipv6/ Livro Laboratório de IPv6]
 +
* [https://tools.ietf.org/html/rfc8200 RFC 8200 - Internet Protocol, Version 6 (IPv6) Specification]
 +
* [https://tools.ietf.org/html/rfc8683 RFC 8683 - Additional NAT64/464XLAT Deployment Guidelines in Operator and Enterprise Networks]
 +
* [https://tools.ietf.org/html/rfc8781 RFC 8781 - Discovering PREF64 in Router Advertisements]
 +
* [https://tools.ietf.org/html/rfc8978 RFC 8978 - Reaction of (SLAAC) to Flash-Renumbering Events]
 +
==== Internet-Draft atuais atualizado sobre o assunto ====
  
==== Internet-Draft atuais sobre o assunto ====
+
* [https://tools.ietf.org/html/draft-ietf-v6ops-transition-comparison-00 Pros and Cons of IPv6 Transition Technologies for IPv4aaS]
 
+
* [https://tools.ietf.org/html/draft-ietf-v6ops-ipv6-deployment-01 IPv6 Deployment Status]
 
* [https://tools.ietf.org/html/draft-palet-v6ops-464xlat-opt-cdn-caches-04 464XLAT Optimization]
 
* [https://tools.ietf.org/html/draft-palet-v6ops-464xlat-opt-cdn-caches-04 464XLAT Optimization]
* [https://tools.ietf.org/html/draft-gont-v6ops-slaac-renum-01 Reaction of (SLAAC) to Flash-Renumbering Events]
+
* [https://tools.ietf.org/html/draft-palet-v6ops-ipv6-only-05 IPv6-only Terminology Definition]
* [https://tools.ietf.org/html/draft-ietf-v6ops-nat64-deployment-08 Additional NAT64/464XLAT Deployment Guidelines in Operator and Enterprise Networks]
+
* [https://tools.ietf.org/html/draft-ietf-6man-mtu-option-05 IPv6 Minimum Path MTU Hop-by-Hop Option]
* [https://www.ietf.org/archive/id/draft-palet-v6ops-ipv6-only-04.txt IPv6-only Terminology Definition]
 
* [https://tools.ietf.org/html/draft-ietf-6man-ra-pref64-09 Discovering PREF64 in Router Advertisements]
 
* [https://tools.ietf.org/html/draft-ietf-6man-mtu-option-01 IPv6 Minimum Path MTU Hop-by-Hop Option]
 
 
* [https://tools.ietf.org/html/draft-ietf-6man-ipv6only-flag-05 IPv6 Router Advertisement IPv6-Only Flag]
 
* [https://tools.ietf.org/html/draft-ietf-6man-ipv6only-flag-05 IPv6 Router Advertisement IPv6-Only Flag]
  
 
[[Categoria:Infraestrutura]]
 
[[Categoria:Infraestrutura]]
 
[[Categoria:IPv6]]
 
[[Categoria:IPv6]]

Edição das 22h24min de 9 de junho de 2021

Introdução

Este breve artigo tem como objetivo demonstrar o uso do mecanismo de tradução 464XLAT através do software de código aberto Jool, desenvolvido pela equipe de desenvolvedores do NIC México. Serão abordados conceitos e comandos básicos que podem ser utilizados tanto para Provedores de Internet (ISP), Universidades, Empresas, como também quem deseja montar um laboratórios de testes iniciais para conhecer o Jool e o funcionamento do 464XLAT em redes locais (LAN) ou redes sem fio (WLAN).

Com a escassez cada vez mais nos números IP versão 4 (IPv4) e o aumento de dispositivos conectados a Internet, a adoção do IP versão 6 (IPv6) é a solução mais viável até o momento para que possamos crescer e expandir novos serviços de conexão a Internet. Em 2019, a diretoria do LACNIC fez um comunicado à comunidade para favorecer e acelerar a implementação do IPv6 nas redes na região do LACNIC. Na América Latina, em agosto de 2020, foi anunciado a designação do último bloco de IPv4.

Este estudo faz parte de um trabalho desenvolvido na Universidade Estadual de Campinas (UNICAMP) de forma a acelerar e adequar os sistemas computacionais a conviver com o protocolo IPv6 e oferecer uma Internet cada vez melhor a toda comunidade na promoção do ensino, pesquisa e extensão.

Por que utilizar o 464XLAT (IPv4aaS) ?

Inicialmente o estudo começou em uma rede piloto utilizando o mecanismo de tradução NAT64 em conjunto com o DNS64 em uma rede sem fio para atender os alunos, docentes e visitantes que chegam na Universidade, mais especificamente na Unidade do Campus II - Faculdade de Ciências Aplicadas (FCA), devido a não termos mais IPv4 públicos disponíveis para serem atribuídos na rede. A ideia foi entregar somente endereços IPv6 na rede sem fio para os usuários famintos por conectividade que passam pelo Campus diariamente (~ 3000 pessoas). Esse estudo completo está disponível aqui para quem desejar obter mais detalhes.

Apesar do seu bom funcionamento e sua crescente utilização, durante o uso do NAT64 foram detectados alguns problemas na rede:

  • Sem conectividade em dispositivos legados de usuários e visitantes que não suportavam o protocolo IPv6.
  • Aplicações que ainda utilizavam IP literal. (RFC 6586) Seção 6.1
  • Dificuldade no mapeamento de pastas e impressoras na rede.

Portanto, o uso somente de NAT64/DNS64 em um rede não é uma solução viável.

Para resolver esses problemas foram realizados testes com outro mecanismo de tradução muito similar ao NAT64, chamado de 464XLAT (RFC 6877). A diferença é que ao invés de ter somente um endereço IPv6 é entregue um endereço IPv4 privado. Com isso podemos atender os dispositivos legados que não possuem suporte a IPv6. De maneira geral é adicionado um tradutor próximo ao cliente chamado de CLAT (Customer-side Translator) executando a função de tradução de IPv4 para IPv6 conhecido como SIIT (Stateless IP/ICMP Translation Algorithm) (RFC 7915). Existe então um entendimento hoje de chamarem o CLAT como SIIT.

Exemplo: Um dispositivo que tenha recebido somente um IPv4 privado e deseja acessar a Internet tendo como destino um endereço em IPv4, sofrerá uma primeira tradução de endereços no CLAT para que o endereço em IPv6 seja transmitido por uma infraestrutura IPv6 até chegar ao ISP, onde será realizada uma segunda tradução, agora para IPv4 novamente, chegando ao seu destino. Chamados essa segunda tradução de PLAT (Provider-side Translator) que nada mais é que um NAT64, já conhecido. Quando o destino for um endereço IPv6 seu trânsito será realizado diretamente pela rede IPv6 sem a necessidade de traduções pelo PLAT.

Por que utilizar o Jool ?

A ferramenta Jool foi escolhida por ser uma software de código aberto, que pode ser instalado em qualquer distribuição Linux moderno. Além do mais, é uma ferramenta que possui uma comunidade ativa, atualizações e correções de problemas frequentes e principalmente é mantida pelo equipe de desenvolvedores do NIC México, altamente receptivos a qualquer dúvida ou sugestões. É uma ferramenta estável, simples, fácil de usar, possui uma boa performance 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. Seria impossível abordar nesse tutorial todas as sintaxes de comando que o Jool oferece e sua flexibilidade nas configurações e ajustes finos para adequar a cada cenário. A documentação completa e detalhada pode ser acessada no site do Jool.

Topologia

A Figura 1 mostra a topologia de um cenário onde os clientes finais utilizam a rede sem fio para se conectarem a Internet. Como ainda não temos um aplicativo cliente para fazer a função de CLAT em redes Wi-Fi e que possam ser instalados nos dispositivos, por exemplo, notebooks e smartphones (Windows, iOS e Android) ou a implementação da funcionalidade CLAT massiva em CPEs, inserimos uma máquina virtual (VM) chamada CLAT na VLAN do controlador da rede sem fio para que a tradução nos clientes sejam realizadas. Uma outra VM chamada PLAT deve estar localizada na saída do tráfego IPv6 para a Internet no Provedor. A conexão entre o CLAT e PLAT é exclusivamente utilizando IPv6 e no caso dos ISPs estão localizados distantes um do outro. Neste cenário, as máquinas virtuais CLAT e PLAT estão no mesmo lugar físico no Data Center, podendo neste caso, estarem localizados em um mesmo host até. Por questões didáticas utilizaremos cada tradutor em VM distintas.

Enquanto em um cenário utilizando IPv6-only e NAT64 o uso do DNS64 é fundamental para o funcionamento, já no 464XLAT é opcional. Neste tutorial não estaremos configurando e utilizando o DNS64. A ausência do DNS64 não causa grandes problemas de performance durante a navegação na Internet, mesmo sabendo que nesse caso o CLAT estará trabalhando sempre, pois não guardará os estados das conexões.

Fig 1. Topologia 464XLAT

Instalação e Configuração do Ambiente

O Linux utilizado é o CentOS 7 que pode ser encontrado no repositório da distribuição e deverá ser instalado em ambas as VM para que o Jool possa ser compilado. Não abordaremos aqui a instalação e configuração do Linux CentOS 7 como também as configurações dos IPs nas interfaces de rede e o roteamento. O software Jool pode ser encontrado no site 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.5.tar.gz
ou
# git clone https://github.com/NICMx/Jool.git

Alguns outros ajustes indicados em cada VM são:

  • Ajustes do smp_affinity que podem ser consultada em /proc/interrupts para um melhor uso da CPU com a interrupção do driver de rede Ethernet. Parece uma coisa boba mas faz muita diferença.
  • Habilitar o ip forwarding no Kernel:
# sysctl -w net.ipv4.conf.all.forwarding=1 
# sysctl -w net.ipv6.conf.all.forwarding=1
  • Desabilitando o offload nas interfaces de rede:
# ethtool --offload interface lro off 
# ethtool --offload interface gro off
  • Ajustes no kernel para melhorar a performance da rede:
kern.maxfiles=25600 
kern.maxfilesperproc=16384 
net.inet.tcp.sendspace=65536 
net.inet.tcp.recvspace=65536 
net.core.netdev_max_backlog = 65536

Desde a versão 4.0.x 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.5/

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.5/
# ./configure
# make
# make install

Implementando o CLAT

A primeira tradução (Stateless Translation) acontece quando um endereço IPv4 privado não roteável é traduzido para IPv6 antes de chegar ao PLAT. Uma tabela de mapeamento de endereços chamada de EAMT (Explicit Address Mapping Specification) (RFC 7757) 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 de acordo com o cenário proposto, digitando os comandos:

# jool_siit instance add --netfilter --pool6 64:ff9b::/96
# jool_siit eamt add 192.168.200.0/24 2801:8a:c040:200::

Desde a versão 4.0.6 é possível fazer uma consulta da tabela EAMT através do comando address query o qual nos auxilia a entender a tradução.

# jool_siit address query 192.168.200.11
2801:8a:c040:200::b

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.

# cat /etc/jool_siit.json
{

        "comment": "CLAT Config",
        "instance": "default",
        "framework": "netfilter",

        "global": {

                "pool6": "64:ff9b::/96"
        },

        "eamt": [
                { "ipv6 prefix": "2801:8a:c040:200::", "ipv4 prefix": "192.168.200.0/24" }
        ]

}

Para executar o arquivo de configuração JSON use o comando:

# jool_siit file handle /etc/jool_siit.json

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_siit.json
After=network.target

[Service]
Type=forking
RemainAfterExit=yes
ExecStartPre=/sbin/modprobe jool_siit
ExecStart=/usr/local/bin/jool_siit file handle /etc/jool_siit.json
ExecStop=/usr/local/bin/jool_siit -f /etc/jool_siit.json instance remove

[Install]
WantedBy=multi-user.target

Implementando o PLAT

A segunda tradução (Stateful Translation) acontece logo em seguida quando o pacote chega a VM PLAT. Para habilitar a tradução devemos digitar o comando:

# jool instance add --netfilter --pool6 64:ff9b::/96
# jool pool4 add 143.106.230.240

Para um melhor ajuste do pool IPv4 e a reservar as portas utilizadas podemos configurar o intervalo que serão adicionados por demanda:

# sysctl -w net.ipv4.ip_local_port_range="32768 40000"

# jool pool4 add 143.106.230.240 40001-61000 --tcp
# jool pool4 add 143.106.230.240 40001-61000 --udp
# jool pool4 add 143.106.230.240 40001-61000 --icmp

Para que o Jool faça o registro das informações na Binding Information Base (BIB) para que possamos gerenciar e também realizar o log das sessões de traduções e portas utilizadas, recomenda-se adicionar as seguintes opções:

# jool global update logging-bib true
# jool global update logging-session true

Exemplo do arquivo JSON para automatizar as configurações de inicialização:

# cat /etc/jool.json
{
        "comment": "PLAT Config",
        "instance": "default",
        "framework": "netfilter",
        "global": {
                "pool6": "64:ff9b::/96",
                "logging-bib": true,
                "logging-session": true
        },

        "pool4": [

                {
                        "protocol": "TCP",
                        "prefix": "143.106.230.240",
                        "port range": "40001-61000"
                }, {
                        "protocol": "UDP",
                        "prefix": "143.106.230.240",
                        "port range": "40001-61000"
                }, {
                        "protocol": "ICMP",
                        "prefix": "143.106.230.240",
                        "port range": "40001-61000"
                }, 
        ]
}

Auditoria

O Jool consegue registrar com detalhes no PLAT o registro na BIB (Mapped) e quando uma sessão é criada (Added), no arquivo messages gerado pelo serviço de syslog do Linux. É recomendado ativar as opções de logging do Jool para o caso de uma análise de incidentes de segurança. Segue abaixo um exemplo do log gerado:

[236793.979096] Jool: default 2020/1/30 13:22:38 (GMT) - Added session 2801:8a:c040:200::b#45399|64:ff9b::426e:3120#1443|143.106.230.240#43549|66.110.49.32#1443|TCP
[236793.979148] Jool: default 2020/1/30 13:22:38 (GMT) - Mapped 2801:8a:c040:200::b#45399 to 143.106.230.240#43549 (TCP)

Onde temos:

2801:8a:c040:200::b#45399  --> Endereço IPv6 origem gerado no CLAT/SIIT e porta.
64:ff9b::426e:3120#1443  --> Endereço pool6 para tradução no PLAT/NAT64.
143.106.230.240#43549 --> Endereço IPv4 mascarado de saída no PLAT/NAT64 e porta
66.110.49.32#1443|TCP --> Endereço IPv4 destino, porta e protocolo de transporte.

Podemos consultar as informações que estão armazenadas na tabela BIB com relação as conexões TCP utilizando o comando:

# jool bib display --tcp --numeric
[Dynamic TCP] 143.106.230.240#52110 - 2801:8a:c040:200::b#47469
[Dynamic TCP] 143.106.230.240#52492 - 2801:8a:c040:200::b#39215
[Dynamic TCP] 143.106.230.240#54461 - 2801:8a:c040:200::b#49340

A tabela de sessões estabelecidas e o tempo de expiração podem sem consultadas com o comando:

# jool session display --tcp --numeric
---------------------------------
(V4_FIN_RCV) Expires in 0:15:06.168
Remote: 108.174.11.17#443       2801:8a:c040:200::b#38914
Local: 143.106.230.240#59953    64:ff9b::6cae:b11#443
---------------------------------

Para melhorar ainda mais o rastreamento do usuário que realizou a conexão é necessário a combinação de vários logs de sistemas para complementar a auditoria. Por isso, todo usuário da rede sem fio passa por um Captive Portal que se autentica em uma base de usuários utilizando o FreeRADIUS. Segue abaixo uma parte do log do radius de uma conexão do usuário:

        Framed-IP-Address = 192.168.200.10 --> IPv4 Privado a ser traduzido no CLAT
        Framed-Interface-Id = 40d9:cda9:1952:7fe6  --> Temporary IPv6 Address
        Framed-IPv6-Prefix = 2801:8a:c040:200::/64 --> IPv6 Network
        Acct-Status-Type = Start
        Acct-Authentic = RADIUS
        User-Name = "user" --> Usuário
        NAS-Identifier = "F0-B0-52-1E-8E-9E"
        Called-Station-Id = "F0-B0-52-1E-8E-9E:FCA6" --> MAC Address do Access Point e SSID
        Calling-Station-Id = "F0-D7-AA-53-82-FC" --> MAC Address do dispositivo
        NAS-IPv6-Address = 2801:8a:c040:fca1::4

Conclusões

Vivemos em um momento que não podemos mais falar sobre a ausência de tráfego de pacotes em IPv6 e deixarmos de lado sua implementação. A adoção tanto por ISPs quanto Operadoras de Telecom é necessária para que a Internet continue crescendo e que todos sintam o benefício e a experiência de uma melhor navegação na Internet, pois dependemos da ajuda de todos os Sistemas Autônomos (AS) para que ativem o protocolo IPv6 em seus equipamentos.

Reforçando mais uma vez, não existem motivos para não adotar o IPv6 hoje em dia. Existem uma grande quantidade de materiais, treinamentos, eventos e tutoriais disponíveis pelo NIC Brasil no qual tem realizado um belo trabalho no fomento para adoção do IPv6 no Brasil. O LACNIC tem promovido além de seus eventos anuais, Webinars e Cursos alguns gratuitos sobre o assunto. Porém a procrastinação em IPv6 (palavra difícil que aprendi com o Uesley Corrêa no GTER48) tem sido muito praticada. Quem realiza esse ato está praticando uma espécie de auto-sabotagem diariamente e isso tem interferido no bom funcionamento da Internet no qual somos todos corresponsáveis.

Por fim, quanto mais endereços IPv6 configurado nas redes temos:

  • Menos traduções são realizadas nos equipamentos (PLAT/NAT64).
  • Maior facilidade e rapidez na identificação de um host/usuário no caso de uma auditoria.
  • Seus usuários estarão utilizando um protocolo novo (RFC 8200) e experimentando uma navegação mais rápida.
  • Possibilidade de atribuir endereços IP a um número maior de equipamentos sem causar uma quebra de conectividade fim-a-fim.
  • O scanning da rede se torna mais complexo.
  • Você estará contribuindo para o crescimento e desenvolvimento da Internet. ;-)

Espero com esse tutorial, no qual manterei sempre atualizado, ter auxiliado e incentivado o uso do 464XLAT, apresentando o 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

Internet-Draft atuais atualizado sobre o assunto