Compilar com pouca memória RAM

Para compilar em c++ e evitar os erros de memoria excedida segue esta dica:

System wide C++ change on Ubuntu:

sudo apt-get install clang
sudo update-alternatives --config c++

Will print something like this:

  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/g++       20        auto mode
  1            /usr/bin/clang++   10        manual mode
  2            /usr/bin/g++       20        manual mode

Then just select clang++.

 

me salvou ;)
fonte: https://stackoverflow.com/questions/7031126/switching-between-gcc-and-clang-llvm-using-cmake

por int21 Postado em Linux

TTS (text-to-speech) muuuuito real

Pessoal, as vezes precisamos de um URA ou quelaquer coisa do gênero que precisamos de uma voz bonita e uma boa dicção para tal tarefa, nunca acreditei em TTS pois sempre foram robotizados mas quando ouvi esta que esta no link abaixo fiquei surpreso.

segue o link, escolha Gabriela V3, copie e cole um texto seu abaixo ou use o que la esta e de um play.

https://text-to-speech-demo.ng.bluemix.net/

Os tempos são utros, as ferramentas também.

O Minimo que voce precisa saber sobre DDoS

Fonte: https://wiki.brasilpeeringforum.org/w/Direitos_Autorais_Licenca_de_Uso

Índice

  • 1 Introdução
  • 2 Diferenças entre DoS e DDoS
  • 3 Efeitos de um ataque de negação de serviço
  • 4 Motivações de um ataque DoS
  • 5 Coisas que você NÃO deve fazer para mitigar ataques DoS
  • 6 O que fazer para se prevenir e/ou mitigar ataques DoS
  • 7 Não seja você a origem de um ataque
  • 8 Resumo de alguns pontos importantes

Introdução

Disclaimer: se você não estiver disposto a ler este artigo inteiro, ao menos clique aqui e leia este capítulo, que diz o que você NÃO deve fazer!

Os ataques de negação de serviço consistem no envio massivo de pacotes não solicitados em alta volumetria contra algum dispositivo ou uma rede conectada à internet. Quando isto ocorre, a vítima do ataque tem seus recursos computacionais ou links de Internet total ou parcialmente saturados, não conseguindo processar os pacotes legítimos. Como consequência, o serviço torna-se indisponível ou degradado.

Como analogia, imaginemos uma festa cujo local do evento comporta apenas algumas dezenas de pessoas, sendo invadida por centenas de impostores. Naturalmente, caso nenhuma ação seja tomada, o salão em pouco tempo estará totalmente lotado por pessoas não autorizadas e não haverá mais espaço para que pessoas autorizadas possam adentrar. Uma possível solução para este problema poderia ser a contratação de seguranças devidamente capacitados para discernir pessoas autorizadas de impostores. Com esta contramedida, hipoteticamente poderíamos ter alguns resultados:

  1. Sucesso: Os seguranças conseguem filtrar rapidamente o ingresso das pessoas ao recinto, permitindo que o espaço fique livre para receber apenas as pessoas autorizadas;
  2. Sucesso com pequena degradação no serviço: O número de impostores é muito maior do que o número de convidados para a festa. Desta forma, devido ao número limitado ou pequeno de seguranças, as pessoas autorizadas precisam aguardar um tempo anormal para adentrar à festa, enquanto os seguranças checam cada um dos candidatos à ingressar ao evento;
  3. Falha devido ao exaurimento da capacidade da equipe de segurança: Sendo o número de seguranças insuficiente para a checagem de todos as pessoas aguardando para entrar à festa, é possível que hajam falhas no processo de identificação e impostores tomem os espaços que deviam ser reservados para convidados;
  4. Falha por congestionamento nas entradas: Considerando que as entradas do evento suportem apenas dez pessoas transitando simultaneamente ao total, se dez ou mais impostores tentarem invadir a festa ao mesmo tempo, o número ou a capacidade dos seguranças não fará diferença. Por mais numerosos e por mais ágeis que sejam, os seguranças não poderão evitar que os impostores congestionem totalmente as entradas do evento, impedindo que os convidados consigam entrar no salão de festas.

Essa analogia representa justamente alguns cenários possíveis de ataques de negação de serviço e algumas contramedidas e seus resultados.

Para facilitar a compreensão:

  • A festa em em si representa a vítima do ataque de negação de serviço;
  • Os seguranças representam sistemas de mitigação de ataques ou firewalls;
  • A entrada da festa representa a capacidade de link que a empresa vítima do ataque possui.

Esta foi uma forma simples de exemplificar que nem todos os ataques DoS podem ser mitigados localmente sem que haja uma grande infraestrutura preparada para receber estes tipos de ataques.

Diferenças entre DoS e DDoS

Ataques de negação de serviço podem ser efetuados através de uma única origem (DoS) ou através de múltiplas origens (DDoS). Na maioria dos cenários, a contramedida e as defesas contra estes ataques são as mesmas, independente se é um DoS ou um DDoS.

Para facilitar a leitura deste artigo, aqui trataremos todos os ataques, sejam distribuítos (DDoS) ou de origens únicas (DoS) como apenas DoS.

Efeitos de um ataque de negação de serviço

Os ataques de negação de serviço podem basicamente surtir dois efeitos:

  • Exaurimento de recursos computacionais: quando o ataque é tão grande que os equipamentos da rede, como roteadores e switchs, não são capazes de processá-los, apresentando gargalos ou mau funcionamento.
  • Exaurimento da capacidade dos links de Internet: quando o ataque, somado à quantidade banda limpa, é maior do que a quantidade de link contratado pela empresa.

Motivações de um ataque DoS

Nem sempre é possível determinar o motivo de ser vítima de um ataque, mas algumas causas costumam ser comuns e bastante recorrentes, como:

  • Ação anticompetitiva: muitas vezes o motivo do ataque é uma ação anticompetitiva de um concorrente de mercado, que busca indisponibilizar o serviço visando a perda de receitas da vítima ou perda de sua reputação. Durante a edição 32 do GTS foi ministrada esta palestra, que explica mais sobre o assunto.
  • Retaliação: há casos onde uma vítima de DoS causado por uma amplificação dentro da tua rede entende que você o está atacando propositalmente. Nestes casos, a vítima do ataque contrata serviços de ataque contra você para se vingar do mal causado.
  • Extorsão: é bastante comum empresas receberem ataques DoS e em seguida serem chantageadas a pagarem um valor, geralmente em bitcoin, para que os ataques sejam cessados.
  • Rivalidade entre gamers: um outro motivo recorrente de ataques é contra servidores de jogos hospedados na empresa. Estes ataques geralmente não têm como destino necessariamente a empresa hospedeira, mas seu objetivo final é indisponibilizar o servidor de jogos. As vezes a empresa toda pode ser atacada quando não há sucesso no ataque direto ao servidor do jogo. Também não é raro encontrarmos casos onde toda a infraestrutura de um ISP é lesada por um ataque apenas com o objetivo de deixar um único jogador fora da Internet.
  • Vingança pessoal: alguns ataques têm como alvo uma pessoa da organização, não a empresa em si. Estes ataques podem ter motivos diversos, como separação de sociedades, pleitos jurídicos e discussões em redes sociais.
  • Testes contra sua infraestrutura: uma pessoa ou entidade interessada em saber a resiliência de sua rede pode usar ferramentas de ataque contra sua infraestrutura apenas para testar sua capacidade de reação contra estes ataques.
  • Testes de ferramentas de ataque: há casos onde a vítima do ataque foi escolhida aleatoriamente apenas para validar o funcionamento de uma ferramenta de ataques.

Coisas que você NÃO deve fazer para mitigar ataques DoS

  • Pedir cotação de diversas empresas de mitigação em nuvem: antes de buscar uma empresa que faça mitigação em núvem, pesquise quem são seus upstreams, seus peerings, downstreams, pontos de conexão, e o principal: sua reputação. Para saber sobre a reputação e confiabilidade de uma empresa, faça buscas ou questione em listas de emails como GTER e BPF, grupos de comunidades técnicas no Whatsapp e Telegram e contate clientes e ex clientes desta empresa pedindo referências. De preferência, faça este processo de forma anônima para evitar eventuais retaliações. Ao menor sinal de dúvida sobre a reputação da empresa candidata a ser contratada, não peça sequer uma cotação.
  • Contratar serviços paralelos que não sejam de mitigação de ataques: existem diversos serviços de segurança de rede para sistemas autônomos. Mas a grande maioria destes serviços não tem qualquer relação com ataques. Alguns destes serviços oferecem sistemas de blacklists, onde você aprende centenas ou milhares de IPs maliciosos da Internet via BGP e deixa de enviar pacotes para estes endereços. Entenda que ataques de negação de serviço não dependem de (a) você responder ou não aos pacotes maliciosos ou (b) ter o IP em uso em sua rede. Ou seja, estes serviços de blacklists evitam que a comunicação dos IPs maliciosos em sua rede não seja bidirecional, evitando spams, bruteforces ou invasões à devices, mas não evitam ataques de negação de serviço.
  • Se vingar do suposto atacante: por mais que você desconfie ou tenha fortes evidências de quem está te atacando, tome nenhuma atitude contra esta empresa ou pessoa sem que tenha certeza absoluta de que ela é a culpada. Existem casos onde é montado um grande teatro para te fazer crer que o culpado de seus ataques é uma pessoa inocente, e nestes casos você irá iniciar uma guerra cibernética desnecessariamente.
  • Pagar ao atacante para parar de receber ataques: quando você paga para o ofensor cessar seus ataques, está sinalizando à ele que você é uma fonte de renda fácil. Por ser uma prática criminosa, obviamente não existem garantias de que você não voltará a receber novos ataques após realizar este pagamento. Além disso, você também ajudará o mercado dos crimes cibernéticos a crescer, o que também te afetará.

O que fazer para se prevenir e/ou mitigar ataques DoS

Primeiramente eu gostaria de deixar claro o significado da palavra mitigação:

mitigação substantivo feminino

  1. ação, processo de mitigar; aliviamento.

  2. efeito de mitigar; alívio, lenitivo.

Origem

⊙ ETIM lat. mitigatĭo,ōnis ‘ação de aliviar’

Com isto quero dizer que a mitigação de um ataque pode não significar necessariamente cessá-lo ou zerar seus efeitos colaterais, mas sim reduzir os impactos causados.

  • Apenas contrate upstreams que possuam suporte à blackhole: jamais contrate um fornecedor de link IP que não tenha suporte funcional à communities de blackhole. Caso seus upstreams atuais não tenham, sinto-lhe em dizer que você está fadado à sucumbir no primeiro ataque que receber.
  • Mantenha o IPv6 em dia: durante um ataque severo em IPv4, a única alternativa para continuar operando pode ser deixar de anunciar alguns de seus blocos IPv4 para a Internet e mantê-lo apenas para Peerings privados e CDNs. O impacto na navegação de centenas de usuários será grande, obviamente, mas tendo IPv6 trabalhando em paralelo com o IPv4 diminuirá bastante as queixas de problemas.
  • Tenha um sistema de blackhole automatizado: tenha um sistema de blackhole automatizado, como Wanguard ou Fastnetmon, que analisa o tráfego de sua rede constantemente e anuncia os IPs sob ataque para a blackhole de seus upstreams. Caso você não possua isso de forma automatizada, o seu tempo de reação pode ser demasiadamente alto, fazendo até com que você não consiga acessar o equipamento para realizar esta ação manualmente.
  • Mantenha uma boa relação com seus concorrentes: seus concorrentes não devem ser seus inimigos. Você deve se esforçar para manter uma boa relação com eles, inclusive parcerias se possível. Tendo uma boa relação e deixando claro que sua intenção não é prejudicá-los, você certamente diminuirá as chances de receber um ataque por ações anticompetitivas.
  • Possua um plano de contingência: para não ser pego totalmente de surpresa, você precisa ter um plano de contingência contra ataques. E para isso, algumas perguntas precisam ser respondidas e estar bem documentadas, como:
  1. O que fazer quando o IP de um assinante for atacado e estiver em blackhole? Trocar seu IP ou deixá-lo indisponível por um tempo? Se a resposta for trocar seu IP, quais IPs serão usados para este fim?
  2. O que fazer se o IP de todos os seus DNS’s ficarem indisponíveis? Existe outro DNS não divulgado, mas pronto e configurado, reservado para esta finalidade?
  3. Caso um bloco inteiro seja atacado e você anuncie eles para a blackhole, terminará de concretizar o ataque. Você possui outros IPs fora do alvo do ataque para contingência? Utilizará um NAT com estes outros blocos para navegação na Internet? E os serviços que precisam ser acessados externamente: eles possuem IPv6?
  4. Se você possuir um serviço de mitigação em nuvem, quais são os limites de ataque e banda limpa contratados? Se este limite exceder, você pode operar no regime de 95 percentile? Estas perguntas são apenas alguns exemplos, mas devem ser adaptadas à sua organização, levando em conta sua capacidade e peculiaridades. Recomendamos que isto seja devidamente documentado internamente e que todos os responsáveis pelo NOC saibam como operar durante uma situação de crise.
  • Teste periodicamente suas medidas de contingência: por mais que você tenha feito um plano de contingência, testado e validado seu funcionamento, você precisa testá-lo recorrentemente e corrigir eventuais falhas se necessário. Um upstream pode mudar sua community de blackhole, deixar de prover este recurso ou algum software de detecção automática pode deixar de funcionar sem que você saiba. Portanto, não é necessário apenas construir o plano, mas também testá-lo periodicamente.
  • Acionar a justiça e autoridades policiais: a grande maioria das empresas não toma nenhuma atitude no âmbito jurídico, trazendo uma grande sensação de impunidade para os atacantes. Recomendamos que sempre que for alvo de um ataque, contate um advogado e façam uma notícia crime. Baseado nisto, existe a possibilidade de que casos correlatos sejam associados e um criminoso seja encontrado ou ao menos investigado. Como podemos ver neste vídeo, a polícia federal sequer fica sabendo dos ataques que acontecem.
  • Entenda que ataques causam efeitos colaterais, mesmo se mitigados: todo ataque de negação de serviço, ainda que mitigado, causará efeitos colaterais em sua rede. Estes efeitos colaterais podem variar em tipo ou intensidade, mas quase sempre acontecerão. Um dos mais comuns é o aumento de latência ou perda de pacotes. Quanto melhor for o teu plano de contingência, mais você saberá lidar com estes efeitos colaterais ou contorná-los.

Não seja você a origem de um ataque

A grande maioria dos ataques são causados por amplificação, reflexão, spoofing ou as três coisas juntas. Estes ataques apenas acontecem apenas porque outras entidades na Internet não fizeram o seu dever de casa e permitiram que isto acontecesse.

Para que você não seja a origem de um ataque, é necessário que você:

  • Possua filtros antispoofing em sua rede;
  • Mantenha seus serviços, como DNS, NTP, SNMP e outros, devidamente configurados e respondendo apenas à sua rede;
  • Adira ao MANRS, seguindo esta documentação, para que a segurança de sua rede seja validada externamente por outras pessoas;
  • Siga as boas práticas de segurança padrão recomendadas pela comunidade da Internet. Este artigo e também este podem te ajudar com isto.

Lembre-se que se você não seguir as instruções acima, além de estar sujando a reputação de sua empresa publicamente e prejudicando outras organizações, também se prejudicará com a alta taxa de upload e pacotes por segundo em sua própria rede.

Resumo de alguns pontos importantes

  • Se o ataque recebido for maior que seus links, não adianta tentar limpar o tráfego internamente;
  • Rotas recebidas e inseridas em uma blacklist ou blackhole de sua rede não farão com que um ataque DoS deixe de entrar em sua rede;
  • Não contrate soluções de mitigação desesperadamente. Pesquise sobre a empresa antes de solicitar cotações;
  • Siga as boas práticas para não originar ataques em sua rede.

Artigo originalmente escrito por Daniel Damito.

Como capturar pacotes no Mikrotik

  • 1 Introdução
  • 2 Requisitos
  • 3 Salvando um arquivo de captura no Mikrotik
  • 4 Transmitindo a captura em tempo real para o Wireshark

Introdução

Certos problemas de rede só podem ser identificados mais profundamente através da análise de uma captura de pacotes. Através desta captura podemos identificar excesso de retransmissões, falhas em consultas em DNS, emissão de pacotes com IP de origem incorreto e diversos outros problemas que dificilmente veríamos de forma tradicional.

Existem diversas formas de se capturar pacotes em uma rede. O método mais usado geralmente é através do utilitário tcpdump do Linux. O Mikrotik possui duas formas de se analisar pacotes: torch e packet sniffer.

Apesar de o torch também ser um recurso válido, ele é relativamente limitado à alguns detalhes dos pacotes. Por este motivo, iremos demonstrar neste artigo como capturar os pacotes utilizando o packet sniffer, pois podemos visualizar a captura localmente em nossos computadores com o Wireshark.

Requisitos

  • Um roteador Mikrotik;
  • Wireshark;
  • Winbox.

Salvando um arquivo de captura no Mikrotik

No Winbox, em Tools > Packet Sniffer, preencha da seguinte forma:

Guia General

  • Memory Limit: a quantidade máxima de memória em KB que será usada para salvar a captura de pacotes. Geralmente 10000 KBs (10 MB) é suficiente para capturas normais.
  • Only headers: caso queira salvar apenas os cabeçalhos dos pacotes, marque esta opção. Se tiver dúvidas do que precisa, deixe-a desmarcada.
  • File name: nome do arquivo que será salvo no roteador. Utilize sempre a extensão .pcap para facilitar o reconhecimento do software padrão (Wireshark) no sistema operacional. Exemplo: ProblemasGoogle.pcap.
  • File limit: este será o tamanho máximo do arquivo. Este tamanho dependerá do que você deseja analisar.

Captura de pacotes mk 1.png

Guia Streaming

Como não iremos transmitir a captura em tempo real nesta seção, todos os campos desta guia podem ser deixados desmarcados e em branco.

Guia Filter

Esta guia é onde você configurará os filtros para selecionar o que exatamente deseja capturar.

Caso deseje utilizar mais de um filtro em um parâmetro específico, basta clicar na seta para baixo do lado direito do parâmetro. Para selecionar se o condicional será e ou ou, utilize o campo Filter Operation, explicado mais abaixo.

Os campos de Interfaces até CPU não são obrigatórios, portanto utilize apenas os filtros que te forem desejados. Caso não deseje filtrar nada específico, basta deixar todos esses campos em branco.

  • Interfaces: De qual interface deseja coletar a captura.
  • Mac Address: De qual endereço MAC de origem ou destino deseja coletar a captura.
  • Mac Protocol: De qual protocolo de camada 2 deseja coletar a captura.
  • IP Address: De qual IPv4 (obsoleto) de destino ou de origem deseja coletar a captura.
  • IPv6 Address: De qual IPv6 de destino ou de origem deseja coletar a captura.
  • IP Protocol: De qual protocolo de camada 4 deseja coletar a captura
  • Port: De qual porta deseja coletar a captura
  • CPU: De qual CPU deseja capturar os pacotes
  • Direction: Baseado na interface selecionado, qual sentido deseja capturar pacotes: rx (download) ou tx (upload).
  • Filter Operation: Quando um campo tiver mais de um parâmetro, a opção selecionada aqui decidirá se a condição será e ou ou. Exemplos:
    • Caso você adicione dois IPs no campo IPv6 Address e a condição aqui seja or, a captura irá coletar pacotes que coincidam com qualquer um destes IPs;
    • Caso você adicione dois IPs no campo IPv6 Address e a condição aqui seja and, a captura irá coletar apenas os pacotes que coincidam com os dois IPs ao mesmo tempo.

Captura de pacotes mk 3.png

No Winbox, em Tools > Packet Sniffer, clique em start quando desejar iniciar a captura;

No Winbox, em Tools > Packet Sniffer, clique em stop quando desejar parar a captura. Após isso, o arquivo estará salvo no menu files no Mikrotik e poderá ser baixado localmente.

Transmitindo a captura em tempo real para o Wireshark

Em Tools > Packet Sniffer, preencha da seguinte forma:

Guia General

  • Memory Limit: A quantidade máxima de memória em KB que será usada para salvar a captura de pacotes. Geralmente 10000 KBs (10 MB) é suficiente para capturas normais.
  • Only headers: Caso queira capturar apenas os cabeçalhos dos pacotes, marque esta opção. Se tiver dúvidas do que precisa, deixe-a desmarcada.
  • File name: Este campo não será preenchido, visto que iremos transmitir a captura em tempo real para o Wireshark.
  • File limit: Este campo não será preenchido, visto que iremos transmitir a captura em tempo real para o Wireshark.

Captura de pacotes mk 4.png

Guia Streaming

Esta guia é utilizada para configurar a transmissão remota para o computador local que está rodando o Wireshark. É aqui que configuraremos para que a captura seja lida em tempo real no Wireshark.

Para que este streaming funcione, é necessário que a porta UDP 37008 esteja liberada em sua rede.

  • Streaming Enabled: Habilitar ou não a transmissão em tempo real.
  • Server: IP do computador que irá rodar o wireshark para leitura em tempo real dos pacotes. Infelizmente este campo só suporta o antigo protocolo IPv4.
  • Filter stream: Filtrar ou não que o tráfego de transmissão das capturas também seja capturado. Não faz sentido capturar este tráfego geralmente, então se tiver dúvidas, deixe a caixa sempre marcada.

Captura de pacotes mk 5.png

Guia Filter

Esta guia é onde você configurará os filtros para selecionar o que exatamente deseja capturar.

Caso deseje utilizar mais de um filtro em um parâmetro específico, basta clicar na seta para baixo do lado direito do parâmetro, como indicado no campo x do screenshot abaixo. Para selecionar se o condicional será e ou ou, utilize o campo Filter Operation, explicado mais abaixo.

Os campos de Interfaces até CPU não são obrigatórios, portanto utilize apenas os filtros que te forem desejados. Caso não deseje filtrar nada específico, basta deixar todos esses campos em branco.

  • Interfaces: De qual interface deseja coletar a captura.
  • Mac Address: De qual endereço MAC de origem ou destino deseja coletar a captura.
  • Mac Protocol: De qual protocolo de camada 2 deseja coletar a captura.
  • IP Address: De qual IPv4 (obsoleto) de destino ou de origem deseja coletar a captura.
  • IPv6 Address: De qual IPv6 de destino ou de origem deseja coletar a captura.
  • IP Protocol: De qual protocolo de camada 4 deseja coletar a captura
  • Port: De qual porta deseja coletar a captura
  • CPU: De qual CPU deseja capturar os pacotes
  • Direction: Baseado na interface selecionado, qual sentido deseja capturar pacotes: rx (download) ou tx (upload).
  • Filter Operation: Quando um campo tiver mais de um parâmetro, a opção selecionada aqui decidirá se a condição será e ou ou. Exemplos:
    • Caso você adicione dois IPs no campo IPv6 Address e a condição aqui seja or, a captura irá coletar pacotes que coincidam com qualquer um destes IPs;
    • Caso você adicione dois IPs no campo IPv6 Address e a condição aqui seja and, a captura irá coletar apenas os pacotes que coincidam com os dois IPs ao mesmo tempo.

Lendo esta captura no Wireshark

  1. Abra o Wireshark como administrador;
  2. Caso não deseje ver todo o tráfego local de seu computador, utilize filtros no menu superior, como no exemplo do screenshot abaixo;
  3. Após isso, clique no botão azul para iniciar a captura, como indicado no screenshot abaixo:

Captura pacotes mk.png

Se tudo tiver dado certo, você já começará a ver os pacotes transmitidos à seu computador.

No Winbox, em Tools > Packet Sniffer, clique em start quando desejar iniciar a captura;

No Winbox, em Tools > Packet Sniffer, clique em stop quando desejar parar a captura.

Artigo original por Daniel Damito.

CGNAT na pratica

  • 1 Objetivo
  • 2 Diagrama de exemplo
  • 3 Dados técnicos do equipamento usado no exemplo
  • 4 Dados técnicos do Sistema usado
  • 5 Gráficos CGNAT em produção
  • 6 Descrição
  • 7 CPU Affinity
  • 8 Variáveis /proc
  • 9 Variáveis sysctl
  • 10 Ativando o BBR (TCP Congestion Control do Google)
  • 11 Arquivos de configuração do Sistema
    • 11.1 /etc/network/interfaces
    • 11.2 /etc/rc.local
  • 12 Scripts CGNAT
    • 12.1 frw.sh – formato x_tables
    • 12.2 frw.sh – formato nf_tables
    • 12.3 Abaixo as regras do cgnat-bras1.conf – formato x_tables
    • 12.4Abaixo as regras do cgnat-bras1.conf – formato nf_tables

Objetivo

Com o esgotamento do IPv4 mundialmente, precisamos tomar algumas providências para que a Internet não pare. As que vejo de imediatas são: IPv6 e CGNAT (Carrier Grade NAT). O IPv6 é a real solução para os problemas de esgotamento e o CGNAT seria a “gambiarra” necessária para continuar com o IPv4 até que a Internet esteja 100% em IPv6. Nesse artigo será explicado como montar uma caixa CGNAT funcional para atender as necessidades básicas. O que será colocado abaixo, funciona muito bem aqui no nosso AS e nos permite avançar com o IPv6. No nosso exemplo as caixas PPPoE (B-RAS – Broadband Remote Access Server) não fazem NAT, pois o recurso de controlar estados de conexões e controles de NAT, consomem muito processamento e podem atrapalhar a performance da caixa PPPoE.

Diagrama de exemplo

Diagrama exemplo do CGNAT.png

No B-RAS é configurado um PBR (Policy Based Routing) onde apenas IPs do bloco 100.64.0.0/10 são roteados diretamente para a caixa CGNAT. Qualquer IPv4 público ou IPv6, são roteados diretamente para o Router/Firewall. Isso evita processamento e tráfego desnecessário na caixa de CGNAT. Através dessa manobra evitamos qualquer uso de stateful e NAT no B-RAS, aumentando a performance do mesmo. No diagrama ao lado a linha vermelha simboliza o tráfego do bloco 100.64.0.0/10 indo para o CGNAT. A linha amarela seria o tráfego já nateado e sendo roteado para o Router/Firewall. A linha verde é o tráfego mais limpo, sem “gambiarras” e o real objetivo que devemos seguir para uma Internet melhor.

O Router/Firewall é um equipamento onde podemos inserir algumas regras de Firewall stateless para filtrar alguns pacotes indesejados como alguns tipos de spoofing, alguns pacotes UDP de certas portas usadas para ataques de amplificação, etc. Nunca! Jamais faça uso de regras stateful nesse nível de Firewall, pois determinados ataques podem estourar suas tabelas de controle de estados de conexões e derrubar todo o tráfego.

O Router de Borda dispensa comentários não é mesmo? Vamos voltar para o conteúdo que realmente interessa.

O objetivo deste artigo é exemplificar algumas configurações básicas e deixar para o leitor criar suas próprias ferramentas para facilitar a criação das regras que na maioria das vezes são em grande quantidade e inviável de se fazer manualmente.

Algumas ferramentas de uso público serão comentadas e passadas as devidas referências.

Dados técnicos do equipamento usado no exemplo

  • Intel Dual Xeon E5-2630 v2 @ 3.1GHz.
  • 16Gb de RAM.
  • 2 interfaces Intel X520-SR2 (2 portas ópticas de 10GbE).
  • 1 SSD 120Gb.

Dados técnicos do Sistema usado

  • Debian 9 (stretch) 64 bits.
  • kernel 4.19 (backports do Debian).
  • Netfilter/IPTables.

Gráficos CGNAT em produção

Zabbix cgnat.png

Bmon.png

Htop.png

Descrição

Como todo bom sistema não basta apenas instalar os programas e por um passe de mágica tudo funcionar como deveria. Estamos falando aqui de um sistema que se mal configurado, a caixa apresentará problemas de performance e você não conseguirá alcançar seu objetivo que é montar uma caixa CGNAT BBB (Bom Bonito e Barato). Para isso você vai precisar instalar um sistema Debian 9 64 bits e remover todos os serviços desnecessários. Faça uma instalação bem clean, Mantenha o serviço sshd rodando para que possa acessar remotamente e continuar configurando o equipamento. Lembre-se: serviços desnecessários rodando, poderão ser uma vulnerabilidade no futuro. O sistema aqui em produção gerencia um tráfego de CGNAT, em horário de pico, de 6Gbps e com bastante folga de recursos. Abaixo continuaremos com as configurações do sistema.

CPU Affinity

Balancear o tráfego das interfaces de rede em seus devidos cores é importantíssimo para o melhor aproveitamento do hardware. Essa configuração é um pouco mais complexa quando estamos trabalhando com arquitetura NUMA. Usando NUMA é importante verificar se a motherboard possui gerência de slots por CPU. Dessa forma você pode colocar uma interface de 10GbE em um slot gerenciado pela CPU0 e uma outra interface de 10GbE em outro slot gerenciado pela CPU1. Isso você pode procurar no manual técnico da motherboard. Para checar qual CPU é responsável pela sua interface de rede, use o comando abaixo substituindo <interface> pela interface desejada. Obs.: se o valor retornado for -1 sua motherboard não é boa pra CPU affinity. Os valores retornados para um equipamento com 2 CPUs deveriam ser 0 ou 1. Onde 0 seria CPU0 e 1, CPU1.

# cat /sys/class/net/<interface>/device/numa_node

Para saber os cores relacionados à CPU podemos usar os seguintes comandos abaixo:

# cat /sys/devices/system/node/node0/cpulist

0-5

# cat /sys/devices/system/node/node1/cpulist

6-11

Um conjunto de ferramentas que costumo usar é o netutils-linux que pode ser encontrado aqui. Nele encontrará ferramentas para setar o cpu affinity, maximizar a frequência das CPUs e aumentar o buffer de rx das interfaces de rede.

Variáveis /proc

Vamos fazer alguns ajustes nas variáveis do /proc porque como o sistema vai utilizar o recurso de conntracks, precisamos mexer em alguns timeouts tcp/udp e outras variáveis. Isso faz parte do tuning para que o sistema fique mais leve e performático. Caso não façamos essas alterações, corremos o risco de estourar a tabela de conntracks e interromper os acessos.

echo 5 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_syn_sent

echo 5 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_syn_recv

echo 300 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established

echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_fin_wait

echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close_wait

echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_last_ack

echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_time_wait

echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close

echo 3 > /proc/sys/net/netfilter/nf_conntrack_tcp_max_retrans

echo 300 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_unacknowledged

echo 10 > /proc/sys/net/netfilter/nf_conntrack_udp_timeout

echo 180 > /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream

echo 10 > /proc/sys/net/netfilter/nf_conntrack_icmp_timeout

echo 600 > /proc/sys/net/netfilter/nf_conntrack_generic_timeout

Variáveis sysctl

Agora temos umas poucas variáveis de sysctl para justar em /etc/sysctl.conf:

net.core.default_qdisc=fq

net.ipv4.tcp_congestion_control=bbr

net.core.rmem_max = 2147483647

net.core.wmem_max = 2147483647

net.ipv4.tcp_rmem = 4096 87380 2147483647

net.ipv4.tcp_wmem = 4096 65536 2147483647

net.ipv4.conf.all.forwarding=1

net.ipv6.conf.all.forwarding=1

Ativando o BBR (TCP Congestion Control do Google)

O Google desenvolveu um TCP Congestion Control que já está no kernel da distro Debian e pode ser facilmente habilitado. A finalidade é ter um melhor controle do congestionamento dos fluxos de TCP. Seria um substituto para o CUBIC e New Reno. Nas variáveis sysctl acima especificamos o BBR mas precisamo carregar o módulo do kernel antes de usá-lo. Basta adicionarmos o tcp_bbr em /etc/modules que o mesmo será carregado após o boot do sistema. Também adicionei o dummy que não tem nenhum relacionamento com o BBR, mas que será usado para criarmos as interfaces virtuais com os IPs públicos que serão usados no NAT. Existe também a possibilidade de não precisar do dummy se for trabalhar sem os IPs públicos nas interfaces virtuais e usarmos blackholes para se proteger dos static-loops.

tcp_bbr

dummy

Arquivos de configuração do Sistema

Os arquivos de configurações do Sistema, são aqueles que usaremos para fazer algumas optimizações, levantar as interfaces de rede e carregar as regras de CGNAT propriamente ditas. Esses arquivos foram alterados para o nosso exemplo e são mais para dar uma ideia de como podem ser feitos. Cabe ao leitor decidir a melhor forma de implementar o que será colocado à seguir. O objetivo é fazer com que o sysadmin melhore e crie novas maneiras de se fazer o proposto nesse artigo.

/etc/network/interfaces

Interfaces.png

O /usr/local/bin/rx-buffers-increase é uma das ferramentas do netutils-linux, citado mais acima. A interface ens5f0 é a interface externa do CGNAT que fala com o Router/Firewall e a ens5f1, a interface interna do CGNAT que fala com o B-RAS.

/etc/rc.local

Rc local.png

As duas primeiras linhas desabilitam o TSO e LRO das interfaces. Segundo muitos docs que li é aconselhado para uma melhor performance em roteamento. O ganho não é absurdo mas ajuda. Em seguida é criado uma interface dummy0 com o IP público 192.0.0.0/32 que será usado para o CGNAT. Em casos reais são criados diversos IPs virtuais na dummy0 e nesse caso faz-se necessário criar um script para gerar em tempo de boot, todos os IPs que serão usados na caixa. Fica aqui como exercício de casa para se pensar. O rss-ladder é o programa que faz o cpu affinity citado acima. No exemplo acima estou setando todos os cores para as duas interfaces porque estou usando apenas uma Intel X520-SR2. O melhor seria uma interface recebendo o link externo entrante e trabalhando nos cores corretos, por exemplo, 0-5 e a outra interface X520-SR2 para o tráfego sainte nos cores 6-11. Mas lembre-se de checar quais cores estão gerenciando determinada interface de rede. Lembre-se da casadinha slot/cores. Primeiro você identifica por qual node a interface é gerenciada e depois quais cores pertencem à aquele node. Mostrei isso bem acima. O programa maximize-cpu-freq faz exatamente o que o nome sugere. Em seguida executo os scripts que criarão as regras de NAT. Mais à frente veremos ele. Fazemos as optimizações do /proc e criamos a rota de retorno do 100.64.0.0/27 de volta para o B-RAS (192.168.254.2).

Se não quiser trabalhar com os IPs públicos nas interfaces virtuais dummy, basta substituir a linha “/sbin/ip addr add 192.0.0.0/32 dev dummy0 &> /dev/null” por “/sbin/ip route add blackhole 192.0.0.0/32” ou se houverem mais IPs, por exemplo, “/sbin/ip route add blackhole 192.0.0.0/27″.Isso é para proteção contra static-loops, já que não teremos mais os IPs públicos carregados, e deve ser feito para todos os prefixos públicos usados na caixa CGNAT.

Scripts CGNAT

Nesse ponto vamos criar nossas regras de NAT e finalmente dar forma ao objetivo do nosso artigo. Primeiro vamos entender o seguinte: o Netfilter/IPTables trabalha com first match wins ou seja, o pacote quando encontra a regra que se satisfaz, da match e descarta o restante das regras. Em uma caixa CGNAT vão existir muitas mas muitas regras. A nossa aqui por exemplo tem mais de 20.000 regras de NAT. Agora imagina um pacote ter que passar por essas 20.000 regras e só dar match lá no final. Isso vai causar um bom uso de processamento desnecessário e não queremos isso. Então para resolver esse problema usamos regras com chains específicas, assim reduzimos o processamento pois o pacote vai seguir as chains reduzidas e encontrar seu match rapidamente. Isso ficará mais claro com o exemplo mais à frente mas sugiro estudar Netfilter/IPTables para uma base melhor de entendimento. Com o lançamento do Debian Buster, o nf_tables passou à vir como padrão no lugar do antigo x_tables e aconselha-se à usá-lo pois será o novo sistema de Firewall adotado por todas as grandes distribuições Linux.

Vamos criar um ambiente pro nosso artigo: crie um diretório /root/cgnat que é onde ficarão todos os scripts que usaremos abaixo:

frw.sh – formato x_tables

Frw.png

frw.sh – formato nf_tables

Cgnat nft2.png

Não vamos entrar em detalhes sobre as regras em si porque isso já sairia muito do artigo. Mas reparem que são criados duas chains CGNATOUT e CGNATIN e todo tráfego que sair pela interface ens5f0 será direcionados para a CGNATOUT e o que entrar irá para a CGNATIN. Abaixo são criadas outras chains para confinar o bloco 100.64.0.0/27 e cada bloco deve ter sua chain de confinamento. Dentro dessa chain fazemos o CGNAT determinístico como pode ser visto abaixo:

Abaixo as regras do cgnat-bras1.conf – formato x_tables

/sbin/iptables -t nat -N CGNATOUT_0

/sbin/iptables -t nat -N CGNATIN_0

/sbin/iptables -t nat -F CGNATOUT_0

/sbin/iptables -t nat -F CGNATIN_0

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.0 -p tcp -j SNAT –to 192.0.0.0:1-2048

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.0 -p udp -j SNAT –to 192.0.0.0:1-2048

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 1:2048 -j DNAT –to 100.64.0.0

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 1:2048 -j DNAT –to 100.64.0.0

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.1 -p tcp -j SNAT –to 192.0.0.0:2049-4096

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.1 -p udp -j SNAT –to 192.0.0.0:2049-4096

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 2049:4096 -j DNAT –to 100.64.0.1

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 2049:4096 -j DNAT –to 100.64.0.1

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.2 -p tcp -j SNAT –to 192.0.0.0:4097-6144

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.2 -p udp -j SNAT –to 192.0.0.0:4097-6144

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 4097:6144 -j DNAT –to 100.64.0.2

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 4097:6144 -j DNAT –to 100.64.0.2

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.3 -p tcp -j SNAT –to 192.0.0.0:6145-8192

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.3 -p udp -j SNAT –to 192.0.0.0:6145-8192

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 6145:8192 -j DNAT –to 100.64.0.3

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 6145:8192 -j DNAT –to 100.64.0.3

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.4 -p tcp -j SNAT –to 192.0.0.0:8193-10240

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.4 -p udp -j SNAT –to 192.0.0.0:8193-10240

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 8193:10240 -j DNAT –to 100.64.0.4

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 8193:10240 -j DNAT –to 100.64.0.4

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.5 -p tcp -j SNAT –to 192.0.0.0:10241-12288

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.5 -p udp -j SNAT –to 192.0.0.0:10241-12288

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 10241:12288 -j DNAT –to 100.64.0.5

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 10241:12288 -j DNAT –to 100.64.0.5

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.6 -p tcp -j SNAT –to 192.0.0.0:12289-14336

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.6 -p udp -j SNAT –to 192.0.0.0:12289-14336

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 12289:14336 -j DNAT –to 100.64.0.6

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 12289:14336 -j DNAT –to 100.64.0.6

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.7 -p tcp -j SNAT –to 192.0.0.0:14337-16384

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.7 -p udp -j SNAT –to 192.0.0.0:14337-16384

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 14337:16384 -j DNAT –to 100.64.0.7

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 14337:16384 -j DNAT –to 100.64.0.7

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.8 -p tcp -j SNAT –to 192.0.0.0:16385-18432

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.8 -p udp -j SNAT –to 192.0.0.0:16385-18432

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 16385:18432 -j DNAT –to 100.64.0.8

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 16385:18432 -j DNAT –to 100.64.0.8

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.9 -p tcp -j SNAT –to 192.0.0.0:18433-20480

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.9 -p udp -j SNAT –to 192.0.0.0:18433-20480

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 18433:20480 -j DNAT –to 100.64.0.9

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 18433:20480 -j DNAT –to 100.64.0.9

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.10 -p tcp -j SNAT –to 192.0.0.0:20481-22528

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.10 -p udp -j SNAT –to 192.0.0.0:20481-22528

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 20481:22528 -j DNAT –to 100.64.0.10

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 20481:22528 -j DNAT –to 100.64.0.10

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.11 -p tcp -j SNAT –to 192.0.0.0:22529-24576

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.11 -p udp -j SNAT –to 192.0.0.0:22529-24576

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 22529:24576 -j DNAT –to 100.64.0.11

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 22529:24576 -j DNAT –to 100.64.0.11

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.12 -p tcp -j SNAT –to 192.0.0.0:24577-26624

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.12 -p udp -j SNAT –to 192.0.0.0:24577-26624

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 24577:26624 -j DNAT –to 100.64.0.12

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 24577:26624 -j DNAT –to 100.64.0.12

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.13 -p tcp -j SNAT –to 192.0.0.0:26625-28672

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.13 -p udp -j SNAT –to 192.0.0.0:26625-28672

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 26625:28672 -j DNAT –to 100.64.0.13

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 26625:28672 -j DNAT –to 100.64.0.13

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.14 -p tcp -j SNAT –to 192.0.0.0:28673-30720

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.14 -p udp -j SNAT –to 192.0.0.0:28673-30720

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 28673:30720 -j DNAT –to 100.64.0.14

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 28673:30720 -j DNAT –to 100.64.0.14

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.15 -p tcp -j SNAT –to 192.0.0.0:30721-32768

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.15 -p udp -j SNAT –to 192.0.0.0:30721-32768

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 30721:32768 -j DNAT –to 100.64.0.15

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 30721:32768 -j DNAT –to 100.64.0.15

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.16 -p tcp -j SNAT –to 192.0.0.0:32769-34816

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.16 -p udp -j SNAT –to 192.0.0.0:32769-34816

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 32769:34816 -j DNAT –to 100.64.0.16

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 32769:34816 -j DNAT –to 100.64.0.16

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.17 -p tcp -j SNAT –to 192.0.0.0:34817-36864

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.17 -p udp -j SNAT –to 192.0.0.0:34817-36864

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 34817:36864 -j DNAT –to 100.64.0.17

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 34817:36864 -j DNAT –to 100.64.0.17

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.18 -p tcp -j SNAT –to 192.0.0.0:36865-38912

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.18 -p udp -j SNAT –to 192.0.0.0:36865-38912

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 36865:38912 -j DNAT –to 100.64.0.18

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 36865:38912 -j DNAT –to 100.64.0.18

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.19 -p tcp -j SNAT –to 192.0.0.0:38913-40960

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.19 -p udp -j SNAT –to 192.0.0.0:38913-40960

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 38913:40960 -j DNAT –to 100.64.0.19

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 38913:40960 -j DNAT –to 100.64.0.19

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.20 -p tcp -j SNAT –to 192.0.0.0:40961-43008

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.20 -p udp -j SNAT –to 192.0.0.0:40961-43008

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 40961:43008 -j DNAT –to 100.64.0.20

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 40961:43008 -j DNAT –to 100.64.0.20

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.21 -p tcp -j SNAT –to 192.0.0.0:43009-45056

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.21 -p udp -j SNAT –to 192.0.0.0:43009-45056

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 43009:45056 -j DNAT –to 100.64.0.21

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 43009:45056 -j DNAT –to 100.64.0.21

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.22 -p tcp -j SNAT –to 192.0.0.0:45057-47104

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.22 -p udp -j SNAT –to 192.0.0.0:45057-47104

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 45057:47104 -j DNAT –to 100.64.0.22

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 45057:47104 -j DNAT –to 100.64.0.22

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.23 -p tcp -j SNAT –to 192.0.0.0:47105-49152

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.23 -p udp -j SNAT –to 192.0.0.0:47105-49152

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 47105:49152 -j DNAT –to 100.64.0.23

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 47105:49152 -j DNAT –to 100.64.0.23

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.24 -p tcp -j SNAT –to 192.0.0.0:49153-51200

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.24 -p udp -j SNAT –to 192.0.0.0:49153-51200

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 49153:51200 -j DNAT –to 100.64.0.24

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 49153:51200 -j DNAT –to 100.64.0.24

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.25 -p tcp -j SNAT –to 192.0.0.0:51201-53248

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.25 -p udp -j SNAT –to 192.0.0.0:51201-53248

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 51201:53248 -j DNAT –to 100.64.0.25

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 51201:53248 -j DNAT –to 100.64.0.25

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.26 -p tcp -j SNAT –to 192.0.0.0:53249-55296

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.26 -p udp -j SNAT –to 192.0.0.0:53249-55296

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 53249:55296 -j DNAT –to 100.64.0.26

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 53249:55296 -j DNAT –to 100.64.0.26

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.27 -p tcp -j SNAT –to 192.0.0.0:55297-57344

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.27 -p udp -j SNAT –to 192.0.0.0:55297-57344

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 55297:57344 -j DNAT –to 100.64.0.27

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 55297:57344 -j DNAT –to 100.64.0.27

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.28 -p tcp -j SNAT –to 192.0.0.0:57345-59392

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.28 -p udp -j SNAT –to 192.0.0.0:57345-59392

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 57345:59392 -j DNAT –to 100.64.0.28

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 57345:59392 -j DNAT –to 100.64.0.28

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.29 -p tcp -j SNAT –to 192.0.0.0:59393-61440

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.29 -p udp -j SNAT –to 192.0.0.0:59393-61440

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 59393:61440 -j DNAT –to 100.64.0.29

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 59393:61440 -j DNAT –to 100.64.0.29

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.30 -p tcp -j SNAT –to 192.0.0.0:61441-63488

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.30 -p udp -j SNAT –to 192.0.0.0:61441-63488

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 61441:63488 -j DNAT –to 100.64.0.30

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 61441:63488 -j DNAT –to 100.64.0.30

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.31 -p tcp -j SNAT –to 192.0.0.0:63489-65535

/sbin/iptables -t nat -A CGNATOUT_0 -s 100.64.0.31 -p udp -j SNAT –to 192.0.0.0:63489-65535

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p tcp –dport 63489:65535 -j DNAT –to 100.64.0.31

/sbin/iptables -t nat -A CGNATIN_0 -d 192.0.0.0 -p udp –dport 63489:65535 -j DNAT –to 100.64.0.31

/sbin/iptables -t nat -A CGNATOUT_0 -j SNAT –to 192.0.0.0

/sbin/iptables -t nat -A CGNATOUT -s 100.64.0.0/27 -j CGNATOUT_0

/sbin/iptables -t nat -A CGNATIN -d 192.0.0.0/32 -j CGNATIN_0

Abaixo as regras do cgnat-bras1.conf – formato nf_tables

add chain ip nat CGNATOUT_0

add chain ip nat CGNATIN_0

flush chain ip nat CGNATOUT_0

flush chain ip nat CGNATIN_0

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.0 counter snat to 192.0.0.0:1-2048

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.0 counter snat to 192.0.0.0:1-2048

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 1-2048 counter dnat to 100.64.0.0

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 1-2048 counter dnat to 100.64.0.0

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.1 counter snat to 192.0.0.0:2049-4096

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.1 counter snat to 192.0.0.0:2049-4096

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 2049-4096 counter dnat to 100.64.0.1

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 2049-4096 counter dnat to 100.64.0.1

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.2 counter snat to 192.0.0.0:4097-6144

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.2 counter snat to 192.0.0.0:4097-6144

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 4097-6144 counter dnat to 100.64.0.2

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 4097-6144 counter dnat to 100.64.0.2

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.3 counter snat to 192.0.0.0:6145-8192

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.3 counter snat to 192.0.0.0:6145-8192

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 6145-8192 counter dnat to 100.64.0.3

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 6145-8192 counter dnat to 100.64.0.3

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.4 counter snat to 192.0.0.0:8193-10240

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.4 counter snat to 192.0.0.0:8193-10240

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 8193-10240 counter dnat to 100.64.0.4

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 8193-10240 counter dnat to 100.64.0.4

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.5 counter snat to 192.0.0.0:10241-12288

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.5 counter snat to 192.0.0.0:10241-12288

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 10241-12288 counter dnat to 100.64.0.5

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 10241-12288 counter dnat to 100.64.0.5

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.6 counter snat to 192.0.0.0:12289-14336

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.6 counter snat to 192.0.0.0:12289-14336

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 12289-14336 counter dnat to 100.64.0.6

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 12289-14336 counter dnat to 100.64.0.6

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.7 counter snat to 192.0.0.0:14337-16384

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.7 counter snat to 192.0.0.0:14337-16384

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 14337-16384 counter dnat to 100.64.0.7

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 14337-16384 counter dnat to 100.64.0.7

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.8 counter snat to 192.0.0.0:16385-18432

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.8 counter snat to 192.0.0.0:16385-18432

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 16385-18432 counter dnat to 100.64.0.8

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 16385-18432 counter dnat to 100.64.0.8

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.9 counter snat to 192.0.0.0:18433-20480

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.9 counter snat to 192.0.0.0:18433-20480

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 18433-20480 counter dnat to 100.64.0.9

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 18433-20480 counter dnat to 100.64.0.9

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.10 counter snat to 192.0.0.0:20481-22528

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.10 counter snat to 192.0.0.0:20481-22528

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 20481-22528 counter dnat to 100.64.0.10

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 20481-22528 counter dnat to 100.64.0.10

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.11 counter snat to 192.0.0.0:22529-24576

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.11 counter snat to 192.0.0.0:22529-24576

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 22529-24576 counter dnat to 100.64.0.11

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 22529-24576 counter dnat to 100.64.0.11

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.12 counter snat to 192.0.0.0:24577-26624

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.12 counter snat to 192.0.0.0:24577-26624

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 24577-26624 counter dnat to 100.64.0.12

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 24577-26624 counter dnat to 100.64.0.12

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.13 counter snat to 192.0.0.0:26625-28672

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.13 counter snat to 192.0.0.0:26625-28672

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 26625-28672 counter dnat to 100.64.0.13

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 26625-28672 counter dnat to 100.64.0.13

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.14 counter snat to 192.0.0.0:28673-30720

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.14 counter snat to 192.0.0.0:28673-30720

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 28673-30720 counter dnat to 100.64.0.14

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 28673-30720 counter dnat to 100.64.0.14

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.15 counter snat to 192.0.0.0:30721-32768

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.15 counter snat to 192.0.0.0:30721-32768

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 30721-32768 counter dnat to 100.64.0.15

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 30721-32768 counter dnat to 100.64.0.15

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.16 counter snat to 192.0.0.0:32769-34816

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.16 counter snat to 192.0.0.0:32769-34816

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 32769-34816 counter dnat to 100.64.0.16

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 32769-34816 counter dnat to 100.64.0.16

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.17 counter snat to 192.0.0.0:34817-36864

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.17 counter snat to 192.0.0.0:34817-36864

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 34817-36864 counter dnat to 100.64.0.17

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 34817-36864 counter dnat to 100.64.0.17

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.18 counter snat to 192.0.0.0:36865-38912

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.18 counter snat to 192.0.0.0:36865-38912

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 36865-38912 counter dnat to 100.64.0.18

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 36865-38912 counter dnat to 100.64.0.18

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.19 counter snat to 192.0.0.0:38913-40960

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.19 counter snat to 192.0.0.0:38913-40960

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 38913-40960 counter dnat to 100.64.0.19

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 38913-40960 counter dnat to 100.64.0.19

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.20 counter snat to 192.0.0.0:40961-43008

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.20 counter snat to 192.0.0.0:40961-43008

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 40961-43008 counter dnat to 100.64.0.20

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 40961-43008 counter dnat to 100.64.0.20

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.21 counter snat to 192.0.0.0:43009-45056

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.21 counter snat to 192.0.0.0:43009-45056

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 43009-45056 counter dnat to 100.64.0.21

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 43009-45056 counter dnat to 100.64.0.21

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.22 counter snat to 192.0.0.0:45057-47104

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.22 counter snat to 192.0.0.0:45057-47104

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 45057-47104 counter dnat to 100.64.0.22

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 45057-47104 counter dnat to 100.64.0.22

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.23 counter snat to 192.0.0.0:47105-49152

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.23 counter snat to 192.0.0.0:47105-49152

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 47105-49152 counter dnat to 100.64.0.23

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 47105-49152 counter dnat to 100.64.0.23

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.24 counter snat to 192.0.0.0:49153-51200

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.24 counter snat to 192.0.0.0:49153-51200

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 49153-51200 counter dnat to 100.64.0.24

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 49153-51200 counter dnat to 100.64.0.24

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.25 counter snat to 192.0.0.0:51201-53248

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.25 counter snat to 192.0.0.0:51201-53248

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 51201-53248 counter dnat to 100.64.0.25

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 51201-53248 counter dnat to 100.64.0.25

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.26 counter snat to 192.0.0.0:53249-55296

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.26 counter snat to 192.0.0.0:53249-55296

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 53249-55296 counter dnat to 100.64.0.26

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 53249-55296 counter dnat to 100.64.0.26

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.27 counter snat to 192.0.0.0:55297-57344

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.27 counter snat to 192.0.0.0:55297-57344

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 55297-57344 counter dnat to 100.64.0.27

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 55297-57344 counter dnat to 100.64.0.27

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.28 counter snat to 192.0.0.0:57345-59392

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.28 counter snat to 192.0.0.0:57345-59392

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 57345-59392 counter dnat to 100.64.0.28

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 57345-59392 counter dnat to 100.64.0.28

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.29 counter snat to 192.0.0.0:59393-61440

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.29 counter snat to 192.0.0.0:59393-61440

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 59393-61440 counter dnat to 100.64.0.29

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 59393-61440 counter dnat to 100.64.0.29

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.30 counter snat to 192.0.0.0:61441-63488

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.30 counter snat to 192.0.0.0:61441-63488

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 61441-63488 counter dnat to 100.64.0.30

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 61441-63488 counter dnat to 100.64.0.30

add rule ip nat CGNATOUT_0 ip protocol tcp ip saddr 100.64.0.31 counter snat to 192.0.0.0:63489-65535

add rule ip nat CGNATOUT_0 ip protocol udp ip saddr 100.64.0.31 counter snat to 192.0.0.0:63489-65535

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 tcp dport 63489-65535 counter dnat to 100.64.0.31

add rule ip nat CGNATIN_0 ip daddr 192.0.0.0 udp dport 63489-65535 counter dnat to 100.64.0.31

add rule ip nat CGNATOUT_0 counter snat to 192.0.0.0

add rule ip nat CGNATOUT ip saddr 100.64.0.0/27 counter jump CGNATOUT_0

add rule ip nat CGNATIN ip daddr 192.0.0.0/32 counter jump CGNATIN_0

As duas regras em negrito acima, fazem o redirecionamento do tráfego para a chain correta, dessa forma evita que um pacote percorra todas as regras buscando um match. Essa é mágica que deixa o sistema bem leve.

Bem espero que esse artigo seja útil e ajude ao máximo. O objetivo era mostrar, dar uma ideia e agora fica com vocês a tarefa de desenvolver o script que vai facilitar a criação de todas as regras. Porque o que foi mostrado é apenas um /27 saindo com um IP público e todos sabemos que no mundo real isso é um grão de areia. Fica o restante como dever de casa mas posso dizer que esse ambiente existe e funciona muito bem pro nosso AS.

Qualquer dúvida sobre o artigo só me procurar:

Autor: Marcelo Gondim

Ps.: Marcelo Godim foi uma das primeiras pessoas que me influenciaram com sua visão tecnica, me lembro que quando começamos a trabalhar com caches, thundercache, desenvolvi o thunder media center que pegava os conteúdos do thundercache (versão open ainda) e transformava numa sala de entretenimento pelo que o pessoal ja assistira, minha primeira experiência com tproxy e a explicação afinada veio de matéria do Godim, que depois pude ter o prazer de fazer parte de um mesmo grupo de telegram que ele participava e sempre muito receptivo e disposto a ajudar.

Meu muito obrigado ao Marcelo, faço esta menção honrosa  pois me ajudou muito na caminhada.