[GTER] Scritp Regras CGNAT

Flavio Rescia Dias flavioresciadias at gmail.com
Thu Nov 24 12:06:31 -02 2016


*Márcio,*
Fiz no excel 😎!
Estou fazendo dessa forma sim, colocar tudo da srcnat ficaria muito ruim,
obrigado pela dica!

*Bruno,*
A variável é passada via na função AddNatRules, e ela chama a função sqrt
passando como parametro $1 o valor do count.

*Hugo,*
Mas acho que é assim mesmo que está veja:

Função sqtr que sozinha funciona certinho:

:global sqrt do={
  :for i from=0 to=*$1* do={
    :if (i * i > *$1*) do={ :return ($i - 1) }
  }
}


Função AddNatRules:

:global addNatRules do={
  /ip firewall nat add chain=srcnat action=jump jump-target=xxx \
    src-address="$($srcStart)-$($srcStart + $count - 1)"

  *:local x [$sqrt $count]
*  :put $x
  :local y $x
  :if ($x * $x = $count) do={ :set y ($x + 1) }
  :for i from=0 to=$x do={
    /ip firewall nat add chain=xxx action=jump jump-target="xxx-$($i)" \
     src-address="$($srcStart + ($x * $i))-$($srcStart + ($x * ($i + 1) - 1))"
  }

  :for i from=0 to=($count - 1) do={
    :local prange "$($portStart + ($i * $portsPerAddr))-$($portStart +
(($i + 1) * $portsPerAddr) - 1)"
    /ip firewall nat add chain="xxx-$($i / $x)" action=src-nat
protocol=tcp src-address=($srcStart + $i) \
     to-address=$toAddr to-ports=$prange
    /ip firewall nat add chain="xxx-$($i / $x)" action=src-nat
protocol=udp src-address=($srcStart + $i) \
     to-address=$toAddr to-ports=$prange
  }
}


Executando conforme abaixo, o :put não retorna nada e dá erro de to
esperando com valor inteiro:

> *$addNatRules count=2 srcStart=100.64.1.1 toAddr=2.2.2.2 portStart=2000
> portsPerAddr=100*


--
Flávio Rescia Dias

Em 24 de novembro de 2016 10:38, Márcio Elias Hahn do Nascimento <
marcio at sulonline.net> escreveu:

>
>
> Cara, eu usei um programinha feito em Delphi por mim mesmo.
>
> Mais
> vc pode usar qualquer linguagem de programação que vc conheça, o
> importante é a saída ser os comandos a serem executados na CLI do
> routeros.
>
> Gera um arquivo com todas as regras, sobe ele para o
> equipamento e executa por CLI. (import nome-do-arquivo).
>
> Outra dica
> que deram aqui em outra thread é o uso das regras Jump, para diminuir o
> número de checagens de um pacote até que o mesmo seja processado. Por
> exemplo tenho CCR 1036 com mais de 8000 regras de Nat, passando mais de
> 1G de banda e consumindo em média 10% de CPU. Antes disso eu testei com
> as regras sem Jump, e passando de 100M de banda a CCR rebotava...
>
>
> Basicamente eu estruturei dessa forma:
>
> add action=jump chain=srcnat
> jump-target=bloco0 src-address=100.64.0.0/24
> add action=jump
> chain=srcnat jump-target=bloco1 src-address=100.64.1.0/24
> add
> action=jump chain=srcnat jump-target=bloco2
> src-address=100.64.2.0/24
> add action=jump chain=srcnat
> jump-target=bloco3 src-address=100.64.3.0/24
>
> ...
>
> add action=jump
> chain=bloco0 jump-target=bloco00 src-address=100.64.0.0/27
> add
> action=jump chain=bloco0 jump-target=bloco01
> src-address=100.64.0.32/27
> add action=jump chain=bloco0
> jump-target=bloco02 src-address=100.64.0.64/27
> add action=jump
> chain=bloco0 jump-target=bloco03 src-address=100.64.0.96/27
> add
> action=jump chain=bloco0 jump-target=bloco04
> src-address=100.64.0.128/27
> add action=jump chain=bloco0
> jump-target=bloco05 src-address=100.64.0.160/27
> add action=jump
> chain=bloco0 jump-target=bloco06 src-address=100.64.0.192/27
> add
> action=jump chain=bloco0 jump-target=bloco07 src-address=100.64.0.224/27
>
>
> ...
>
> add action=src-nat chain=bloco00 protocol=tcp
> src-address=100.64.0.0 to-addresses=x.x.x.x to-ports=1500-5499
> add
> action=src-nat chain=bloco00 protocol=udp src-address=100.64.0.0
> to-addresses=x.x.x.x to-ports=1500-5499
> add action=src-nat chain=bloco00
> src-address=100.64.0.0 to-addresses=x.x.x.x
> add action=src-nat
> chain=bloco00 protocol=tcp src-address=100.64.0.1 to-addresses=x.x.x.x
> to-ports=5500-9499
> add action=src-nat chain=bloco00 protocol=udp
> src-address=100.64.0.1 to-addresses=x.x.x.x to-ports=5500-9499
> add
> action=src-nat chain=bloco00 src-address=100.64.0.1 to-addresses=x.x.x.x
>
>
> Ou seja, o pacote bate em um bloco /24, depois em um bloco /27 e assim
> vai cair em algumas regras para os IP's desse bloco /27.
>
> ---
>
> Att
>
>
> Márcio Elias Hahn do Nascimento
> (48) 8469-1819 / 3524-0700 -
> marcio at sulonline.net
> INOC-BR: 52977*100
> GERÊNCIA DE RECURSOS DE TIC -
> Sul Internet [3]
>
>  [3]
>
> Em 23/11/2016 17:26, Flavio Rescia Dias
> escreveu:
>
> > Valeu ajuda Bruno,
> >
> > Na verdade está setado sim,
> veja:
> >
> >> [darede at Core_ATM] > *$addNatRules count=2
> srcStart=100.64.1.1 toAddr=200.1.1.1 portStart=2000 portsPerAddr=100*
> invalid value of "to", must be integer
> >
> > A documentação está em:
> >
> http://wiki.mikrotik.com/wiki/Manual:IP/Firewall/NAT#
> Carrier-Grade_NAT_.28CGNAT.29_or_NAT444
> [2]
> >
> > Como o pessoal que usa CGNAT com controle por porta tem feito
> para criar
> > todas as regras? Estão usando esse script?
> >
> > Flávio
> Rescia Dias
> >
> > Em 23 de novembro de 2016 17:06, Bruno Cabral
> <bruno at openline.com.br>
> > escreveu:
> >
> >> Talvez $count nao esteja
> setado... !3runo Cabral ________________________________ De: gter
> <gter-bounces at eng.registro.br> em nome de Flavio Rescia Dias <
> flavioresciadias at gmail.com> Enviado: quarta-feira, 23 de novembro de
> 2016 16:54:48 Para: Grupo de Trabalho de Engenharia e Operacao de Redes
> Assunto: [GTER] Scritp Regras CGNAT Amiginho, Estou tentando criar
> regras de CGNAT em mikrotik (própria mikrotik), porém a função sqrt não
> retorna nada na linha abaixo: :local x [$sqrt $count] Testando a função
> na mão, ele retorna valores conforme abaixo:
> >>
> >>> [darede at Core_ATM]
> > *$sqrt 3* 1 2 [darede at Core_ATM] > *$sqrt 10* 3 4 5 6 7 8 9
> >> Alguém
> já utilizou esse script? Tem alguma dica? -- Flávio Rescia Dias -- gter
> list https://eng.registro.br/mailman/listinfo/gter [1] -- gter list
> https://eng.registro.br/mailman/listinfo/gter [1]
> >
> > --
> > gter list
> https://eng.registro.br/mailman/listinfo/gter [1]
>
>
> Links:
> ------
> [1]
> https://eng.registro.br/mailman/listinfo/gter
> [2]
> http://wiki.mikrotik.com/wiki/Manual:IP/Firewall/NAT#
> Carrier-Grade_NAT_.28CGNAT.29_or_NAT444
> [3]
> http://www.sulinternet.net
> --
> gter list    https://eng.registro.br/mailman/listinfo/gter
>



More information about the gter mailing list