[GTER] Morte às mensagens de NAT tipo 3 - DANOS - CGNAT OpenSource com BPA EIM/EIF e UPnP/PCP

Gondim gondim at linuxinfo.com.br
Tue Sep 15 10:30:52 -03 2020


Em 14/09/2020 09:52, Márcio Elias Hahn do Nascimento escreveu:

> Em 2020-09-11 16:15, Gondim escreveu:
>
>> Em 23/07/2020 14:56, Douglas Fischer escreveu:
>>
>>> Eu escrevi essa montoeira de siglas ali em cima...
>>> Mas tenho certeza que o que chamou atenção dos coleguinhas foi a parte do
>>> "Morte às mensagens de NAT tipo 3".
>>> -> 3 vivas para os tickets de suporte que os usuários de PSN e XBOX abrem
>>> por causa das mensagens de NAT Tipo 3, não é mesmo?
>>>
>>> TL;DR:
>>> Se você manja bem dos paranauê de linux, nat/iptables e similares, e está
>>> disposto a fazer uma tentativa uma ferramenta opensource que promete
>>> resolver muitos problemas que o CGNAT trás, eu gostaria de contar com sua
>>> ajuda! Arranje um servidor BOM(não bom venha com velharia) e "bora si
>>> ajudá" a parar de passar raiva com CGNAT.
>>>
>>> A importancia do CGNAT para ISPs no dia de Hoje
>>> -----------------------------------------------
>>> Se você está no mercado atual de ISPs e nunca ouviu falar de CGNAT, PARE O
>>> QUE ESTÁ FAZENDO E VÁ PROCURAR SABER SOBRE CGNAT!
>>> Pois existe um grande risco de você estar fazendo as coisas de um jeito
>>> errado, e logo-logo ter problemas legais por conta disso.
>>>
>>> Se você já ouviu falar CGNAT, deve saber que existem basicamente 2 tipos de
>>> CGNAT.
>>> (vou ser muito muito muito conciso nessa descrição)
>>> - Determinístico(ou Predefined) - Onde ranges de portas UDP e TCP de IPs
>>> Públicos/Válidos são préviamente alocadas para as conexões saintes de cada
>>> um dos IPs de uso reservado do CGNAT.
>>> A principal vantagem desse modelo é (se ele for implementado
>>> corretamente) não precisar da guarda de LOGs.
>>> - BPA - Bulk Port Allocation - Onde as portas vão sendo alocadas de
>>> Tanto-em-Tanto para os   IPs de uso reservado do CGNAT conforme ele vai
>>> precisando, e cada vez quem um grupo de portas é alocado, o mecanismo de
>>> CGNAT deve fazer um LOG disso, e esse log deve armazenado adequadamente.
>>> A principal vantagem desse modelo é o excelente nível de relação entre
>>> IPs Válidos/Públicos e os IPs reservados do CGNAT.
>>>
>>> Os dois modelos tem vantagens, os dois modelos tem desvantagens...
>>> Sinceramente sou adepto do BPA, pois apesar de exigir recursos extras de
>>> Log, tem uma melhor utilização das portas dos IPs públicos, e a alocação
>>> dinâmica reduz a dor de cabeça com usuários que usam muitas portas.
>>>
>>> P.S.: Alerta de problemas jurídicos!
>>> Uma coisa que tenho visto muito por aí é uma galerinha que tá fazendo uns
>>> mapeamento maroto sem uma lógica reversível e sem fazer log.
>>> Quando chegar uma ordem judicial especificando
>>> IPDeOrigem/PortaDeOrigem/DataeHora, e você não conseguir fazer a
>>> identificação INEQUÍVOCA responsável do contrato daquele assinante...
>>> A coisa tente a ficar feia pro seu lado... CUIDADO!
>>>
>>> Aonde está a maior parte das dores que o CGNAT trás?
>>> ----------------------------------------------------
>>> CONEXÕES ENTRANTES AUXILIARES formadas para comunicação Peer-to-Peer.
>>> Geralmente esses mapeamento de conexões auxiliares entrantes são feitos
>>> ALGorítimos que ficam escutando as comunicações nas portas determinadas e
>>> "preparam uma regrinha dinâmica" para conexão entrante...
>>> Os protocolos mais comuns de ver isso são:
>>> - SIP/H323
>>> - FTP ativo/passivo
>>> - DCCP(que é o que a maioria dos games usa)
>>> Porém para esses ALGs funcionarem, além de o equipamento de NAT tem que ter
>>> todos os ALGs habilitados, e a comunicação nesse protocolo de controle não
>>> pode ser criptografada.
>>> -> Para exemplificar, SIP-ALG não vai funcionar se for SIP over TLS
>>> (a não ser que ele abra a criptografia do TLS).
>>>
>>> Para contornar essa complexidade que esse ALGs trazem para fazer
>>> funcionar o P2P com regras de firewall e CGNAT foram criados padrões e
>>> protocolos como PCP/UPnP, EIM/EIF (antes era o NAT-PMP).
>>>
>>> A ESPERANÇA
>>> -----------
>>> Já tem muito tempo que eu venho buscando uma solução OpenSource para CGNAT
>>> que concorresse com a soluções proprietárias como "A10/F5/Hillstone" para
>>> ambientes de CGNAT com suporte a BPA e PCP.
>>> Inclusive eu e mais alguns amigos chegamos a propor um vakinha on-line para
>>> comprar o desenvolvimento disso no formato OpenSource.
>>>
>>> Bom... Felizmente acredito que tenhamos achado a solução OpenSource que eu
>>> procurava...
>>> https://danosproject.atlassian.net/wiki/spaces/DAN/pages/421101573/CGNAT+and+PCP
>>>
>>> Ainda estou preparando um ambiente de testes dessa ferramenta.
>>> Mas estou bastante otimista com o que pude ver dela.
>>>
>>> Dentre a diversas coisas boas que posso falar sobre esse projeto, é que
>>> mesmo sendo opensource ele tem uns empurrõezinhos de grandes ISPS e
>>> carriers como a AT&T.
>>>
>>> O PEDIDO DE AJUDA
>>> -----------------
>>> No momento, a melhor maneira que eu encontrei de ajudar esse projeto
>>> OpenSource é fazer um apelo aos colegas brasileiros que tenham expertise
>>> para manter um ambiente de NAT em Linux, que mantenham redes de ISP que
>>> usem CGNAT, e que queiram ajudar a validar se essa ferramenta é realmente
>>> tão PORRETA, colocando ele para rodar em algum ambiente de teste e
>>> compartilhando com o pessoal do projeto o resultado.
>>> <https://danosproject.atlassian.net/wiki/spaces/DAN/pages/421101573/CGNAT+and+PCP>
>>>
>>> NÃO É UMA TELA DO WINBOX
>>> ------------------------
>>> Minha sugestão sobre a quem seria indicado embarcar nesses testes.
>>>
>>> P.S.: Antes que venham me achincalahar de metido... Já adianto:
>>> Estou pedindo a colaboração aqui na lista porque, sendo sicero, tenho
>>> dúvidas se eu tenho conhecimento técnico suficiente para segurar esse rojão.
>>> E também porque sei que temos vários colegas aqui na lista que tem um nível
>>> Master-Pica-Jedi e que conseguiriam lidar com os prossíveis problemas que
>>> surgirão com se estivessem descascando amendoim.
>>>
>>> - Se for querer usar um hardware velharia/lixo, com mais de 10-12 anos...
>>> Fora da lista de compatibilidade do projeto.
>>> ou
>>> - Se você não tem um bom conhecimento para conseguir fazer troubleshooting
>>> em ambientes mais elaborados de Fowarding, NAT, e Firewall de Linux.
>>>
>>> -> NÃO SE META!
>>> Você vai passar raiva...
>>> Depois vai pedir ajuda...
>>> Vai fazer os coleguinhas passarem raiva,
>>> que irão usar palavras pesadas com você...
>>> E depois você vai sair falando baoseiras sobre o projeto!
>>>
>>> Ao meu entender o projeto é bastante robusto e maduro!
>>> Mas nesse momento ainda não é algo que esteja mastigadinho no nível
>>> "tutorial do underlinux ou do vivaolinux" que seja só copiar e colar...
>> Boa tarde meus amigos e amigas,
>>
>> Estamos testando esse projeto DANOS [1 [1]] como caixa CGNAT e estamos gostando bastante. Abaixo algumas informações interessantes sobre ele:
>>
>> Prós:
>>
>> - Primeiro que a interface é toda Vyatta e toda a configuração feita por ela. Achei bem legal o conceito e quem já mexe com juniper vai sentir algumas familiaridades interessantes.
>> - O sistema trabalha com commit, commit-confirm e rollback. Olha o Juniper aí rsrsrs
>> - O show configuration dele pode ser exibido tanto no formato de blocos com chaves como no Juniper, como também em comandos set como no Juniper (show | display set).
>> - Possui implementado o DPDK [2 [2]] que nos permite muito mais poder de tráfego com menos processamento.
>> - O bichinho faz CGNAT BPA (Bulk Port Allocation), o que nos dá uma ótima economia de IPv4 público. Mas lembre-se da Seleção Natural de Darwin, nunca use somente CGNAT, sem IPv6. Você pode morrer lá na frente quando acabar o IPv4 público pra por no CGNAT.
>> - Possui FRR 7.3.1 [3 [3]].
>> - Sistema base é GNU/Linux Debian 10 (Buster) [4 [4]], um sistema Linux muito estável. Mas não se enganem se acham que vão conseguir fazer uso do apt/apt-get pois são desativados para não quebrar o sistema. A atualização é feita através de um comando específico
>> pra instalação da .ISO, que for lançada no site.
>> - Você pode criar regras/filtros de firewall parecidos com o PROTECT-RE que usamos no Juniper e depois aplicá-los somente para proteção da caixa, sem interferência com as demais interfaces.
>> - Possui diversos comandos para exibir informações do CGNAT como IPs públicos usados e portas tcp/udp usadas, IPs usados nos assinantes, sumário, etc.
>> - Na documentação já se encontra exemplos de configuração de CGNAT perfeitamente funcionais.
>> - Ferramentas para monitorar o tráfego das interfaces, htop, top e muitas outras.
>> - Suporte por meio de tickets. Pessoal responde rápido e são muito atenciosos.
>>
>> Contras:
>>
>> - O sistema por usar DPDK não suporta todas as interfaces de rede do mercado mas as melhores já são suportadas. A lista está aqui [5 [5]].
>> - Gera mais logs que o modelo determinístico mas ao meu ver vale à pena. Você pode configurar o DANOS pra enviar os logs para um servidor syslog tipo o GrayLog [6 [6]], tratar os logs e jogá-los para uma base de dados sua.
>> - Consome mais memória que um sistema comum. Aqui estamos testando com tráfego de 5Gbps (pico), 12 prefixos de CGNAT, 12 prefixos públicos /27 e o sistema já ocupa 5.82G de ram.
>> - Pouca documentação. Mas suprida pelas ajudas do suporte deles e também com documentações sobre Vyatta/VyOS encontradas pela Internet. Obrigado Google por isso. rsrsrsrs 
>>
>> Sinceramente esses contras nem foram tão ruins e acredito que o projeto valha o estudo. Também pode ser usado para outros projetos como até mesmo montagem de SoftRouters e dessa vez com o poder o DPDK em suas mãos. rsrsrs
>>
>> Agora uma outra dica minha para te ajudar com os logs. Não habilite todos os logs pois isso além de diminuir a performance da caixa, vai te gerar logs descomunais com volumes absurdos e vai por mim, você não vai querer isso. Habilite apenas esse cara:
>>
>> set service nat cgnat log event port-block-allocation
>>
>> Ele já vai te gerar simplificado quem usou qual IPv4 público e que bloco de portas com data/hora inicial e final. Para isso deixe a configuração de alocação de portas como sequencial e não randômica.
>>
>> Bem espero ter contribuído de alguma forma e quem sabe mais pra frente faço algum artigo no BPF [7 [7]] sobre o DANOS.
>>
>> [1] https://danosproject.atlassian.net/wiki/spaces/DAN/pages/2556033/About+DANOS
>> [2] https://www.dpdk.org/
>> [3] https://frrouting.org/
>> [4] https://www.debian.org/
>> [5] https://danosproject.atlassian.net/wiki/spaces/DAN/pages/121143308/Frequently+Asked+Questions#Supported-NICs
>> [6] https://www.graylog.org/products/open-source
>> [7] https://wiki.brasilpeeringforum.org/w/P%C3%A1gina_principal
> Interessante, poderia nos dar mais detalhes sobre o hardware usado para
> passar os 5Gbps e a carga atual dele com essa demanda?
>
Opa claro. É um Dell R230 quad core Intel(R) Xeon(R) CPU E3-1240 v6 @ 3.70GHz com 8G de ram. O load do equipamento fica entre 3.x e 3.5. No início tomei um susto pois dos 4 cores, o primeiro fica praticamente livre e os outros 3 em 100% com tráfego já perto dos 5Gbps
mas esse efeito é normal devido ao uso do DPDK. Coloquei nesse equipamento 2 interfaces Intel X520-SR2 fazendo LACP 20Gbps de entrada e 20Gbps de saída. Agora devo adicionar mais 8G de ram e começar à jogar mais tráfego pra ele, pelo menos subir pra uns 15Gbps e ver
seu comportamento.

-- 
  ⢀⣴⠾⠻⢶⣦⠀  Marcelo Gondim 
  ⣾⠁⢠⠒⠀⣿⡁  Sysadmin - https://www.linuxinfo.com.br
  ⢿⡄⠘⠷⠚⠋   DA04 922E 78B3 44A5 3C8D 23D0 8DB5 571E E151 4E19
  ⠈⠳⣄⠀⠀⠀⠀  Logic will get you from A to B. Imagination will take you everywhere. (Albert Einstein)





More information about the gter mailing list