+ Responder ao Tópico



  1. #1

    Padrão Script para CGNAT

    Boa noite pessoal, segue script para fazer o CGNAT em sua rede, ele já inclui um contador que facilita sua vida para vc não precisar criar na mão 2 regras para cada cliente mais os jumps.

    _____________________________________________________________________________
    :global sqrtbin do={ :local count 0 :local value $1 :do { :set count ($count + 1) :set value ($value / 2) } while=($value > 0) :return $count}:global addNatRules do={ :global sqrtbin; :local toAddrCount $toAddr; :local x (1<<(([$sqrtbin ($count)])/2)); :local y ($count / $x); :for j from=$srcStartOct1 to=$srcStopOct1 do={ :for k from=$srcStartOct2 to=$srcStopOct2 do={ :for l from=$srcStartOct3 to=$srcStopOct3 do={ /ip firewall nat add chain=srcnat action=jump jump-target="CGNAT-$($toAddrCount)" \ src-address=(($j.".".$k.".".$l.".".$srcStartOct4)."-".($j.".".$k.".".$l.".".$srcStopOct4)) \ comment="CGNAT" out-interface=LINK :set toAddrCount ($toAddrCount + 1) } } } :set toAddrCount $toAddr; :for j from=$srcStartOct1 to=$srcStopOct1 do={ :for k from=$srcStartOct2 to=$srcStopOct2 do={ :for l from=$srcStartOct3 to=$srcStopOct3 do={ :if ($x * $x = $count) do={ :set y ($x + 1) } :for i from=0 to=($y-1) do={ :local inicio [:toip (($j.".".$k.".".$l.".".$srcStartOct4) + ($x * $i))] :local fim [:toip (($j.".".$k.".".$l.".".$srcStartOct4) + ($x * ($i + 1) - 1))] /ip firewall nat add chain="CGNAT-$($toAddrCount)" action=jump jump-target="CGNAT-$($toAddrCount)-$($i)" \ src-address=([:tostr $inicio]."-".[:tostr $fim]) comment="CGNAT" } :set toAddrCount ($toAddrCount + 1) } } } :set toAddrCount $toAddr :for j from=$srcStartOct1 to=$srcStopOct1 do={ :for k from=$srcStartOct2 to=$srcStopOct2 do={ :for l from=$srcStartOct3 to=$srcStopOct3 do={ :local srcStart [:toip (($j.".".$k.".".$l.".".$srcStartOct4))] :for i from=0 to=($count - 1) do={ :local prange "$($portStart + ($i * $portsPerAddr))-$($portStart + (($i + 1) * $portsPerAddr) - 1)" /ip firewall nat add chain="CGNAT-$($toAddrCount)-$($i / $x)" action=src-nat protocol=tcp src-address=($srcStart + $i) \ to-address=$toAddrCount to-ports=$prange comment="CGNAT" /ip firewall nat add chain="CGNAT-$($toAddrCount)-$($i / $x)" action=src-nat protocol=udp src-address=($srcStart + $i) \ to-address=$toAddrCount to-ports=$prange comment="CGNAT" } :set toAddrCount ($toAddrCount + 1) } } }}$addNatRules count=128 srcStartOct1=100 srcStartOct2=64 srcStartOct3=0 srcStartOct4=1 \ srcStopOct1=100 srcStopOct2=64 srcStopOct3=0 srcStopOct4=128 \ toAddr=201.xx.xx.177 portStart=1500 portsPerAddr=500

    _____________________________________________________________________________

    A personalização para ficar de acordo com sua rede acontece em $addNatRules (antepenúltima linha), em nosso exemplo utilizamos a range de ip para os clientes de 100.64.0.1 até 100.64.0.128, esses 128 clientes vão sair pelo ip válido 201.xx.xx.177 no seu respectivo bloco de portas designado.

    Caso tenha mais de 128 clientes, adicione um novo ip válido a sua interface de link e rode o script novamente editando o addNatRules

    Mais detalhes no blog do amigo @eduardomazoline : http://blog.mazolini.com.br/2017/03/cgnat.html

  2. #2

    Padrão Re: Script para CGNAT

    Bom dia amigo,
    Parabéns pelo seu script e pela iniciativa de compartilha-lo!
    por acaso vc tem alguma atualização do mesmo?
    pois parece não funcionar mais na versão atual do Mikotik!
    Obrigado

  3. #3

    Padrão Re: Script para CGNAT

    Esqueci de mencionar o out-interface que deve ser editado tbm

  4. #4

    Padrão

    Citação Postado originalmente por michelkalinoski Ver Post
    Esqueci de mencionar o out-interface que deve ser editado tbm
    Sim, eu editei mas ele da um erro na linha 1 coluna 37

  5. #5

    Padrão Re: Script para CGNAT

    Tem espaço no nome da sua interface?

  6. #6

    Padrão Re: Script para CGNAT

    nao esta o nome default "ether1"

  7. #7

    Padrão Re: Script para CGNAT

    Precisei rodar novamente aqui e realmente não funciona na versão nova do Router OS, achou solução @aseriosouza

  8. #8

    Padrão Re: Script para CGNAT

    tem esse script do Rafael Galdino, ainda não testei, mais talvez pode lhe ajudar.

    https://mega.nz/#!lGI3VQoR!abOWBqK5L...oYfVeIV-0hW-80