Ferramentas de Usuário

Ferramentas de Site


private:mikrotik:mikrotik-cpppoe-php-sh-gera-config-rb750

Scripts para gerar a configuração para BRAS Mikrotik RB750

Script PHP

Esse script é o que vai receber as informações, repassar para ou próximo scritp, receber o retorno e mostrar na tela.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>Cria configuração de concentradores PPPoE para RB750</title>
  </head>
<body>

<b>Informe todos os dados abaixo.</b><p>

<!--
Nesta parte monta a caixa de texto para informar o Login e o batão "Consultar".
read IP_Pool IP_Loopback numPPPoE Local net_WAN IP_Pub IP_WAN IP_gw Radius_Password
-->
<form action="" method="post" >
    <b>Pool IPs de CGNat: </b>
    <p><input type="text" name="IP_Pool"></p>
    <p><b>IP para a LoopBack: </b></p>
    <p><input type="text" name="IP_Loopback"></p>
    <p><b>Número de interfaces com PPPoE (entre 1 e 4): </b></p>
    <p><input type="text" name="numPPPoE"></p>
    <p><b>Local da instalação do concentrador: </b></p>
    <p><input type="text" name="Local"></p>
    <p><b>Faixa da WAN: </b></p>
    <p><input type="text" name="net_WAN"></p>
    <p><b>IP da WAN: </b></p>
    <p><input type="text" name="IP_WAN"></p>
    <p><b>Gateway da WAN: </b></p>
    <p><input type="text" name="IP_gw"></p>
    <p><b>IP público: </b></p>
    <p><input type="text" name="IP_Pub"></p>
    <p><b>Senha do Radius: </b></p>
    <p><input type="text" name="Radius_Password"></p>
    <input type="submit" value="Criar" name="submit" />
</form>

<?php

/*
Define o timezone para esse arquivo.
*/
date_default_timezone_set('America/Sao_Paulo');

/*
Verifica se o POST contém o nome loginPppoe, caso tenha começa a execução do precesso de consulta.
A variável dateForFile receba a data e hora mais a extenção .txt para formar a parte final do nome do arquivo que será armazenado no caminho pathOfFile.
Após isso na variável log armazenamos o caminho completo e o nome do arquivo a ser gravado, ele será gravado mesmo que não retorne nada na consulta.
*/
if (isset($_POST['IP_Pool'])) {
  $IP_Pool = $_POST["IP_Pool"];
  $IP_Loopback = $_POST["IP_Loopback"];
  $numPPPoE = $_POST["numPPPoE"];
  $Local = $_POST["Local"];
  $net_WAN = $_POST["net_WAN"];
  $IP_Pub = $_POST["IP_Pub"];
  $IP_WAN = $_POST["IP_WAN"];
  $IP_gw = $_POST["IP_gw"];
  $Radius_Password = $_POST["Radius_Password"];
  if ($IP_Pool != NULL) {
	  $output = shell_exec("echo $IP_Pool $IP_Loopback $numPPPoE $Local $net_WAN $IP_Pub $IP_WAN $IP_gw $Radius_Password | bash configura_cpppoe_mk_750.sh");
	  echo $output;
    } else {
	  echo '<br /><b style="color:red;">Favor informar TODOS os dados solicitados.</b>';
    }
  }

?>
</body>
</html>

Esse é o script .sh que gera a configuração, salvar como configura_cpppoe_mk_750.sh.

#!/bin/bash
#
# Descrição das variaveis.
# 
# IP_Pool: faixa de IP de CGnat, exemplo 100.64.66.0/27
# IP_Loopback: IP /32 da interface loopback que será usado para comunicação com o Radius
# numPPPoE: número de interfaces com servidor PPPoE, deve ser entre 1 e 4
# Local: nome da localidade onde o concentrador será instalado
# net_WAN: identificação da rede da WAN, exemplo se a rede for 10.10.10.0/30 a rede será 10.10.10.0
# IP_Pub: IP que ficará na WAN para CGNat
# IP_WAN: IP privado que ficará na WAN do roteador
# IP_gw: Endereço IP do gateway e que irá fechar o OSPF
# Radius_Password: senha de autenticação do servidor radius
# 
# Como usar o script:
# echo 100.64.66.0/27 172.16.100.250 4 "Nome_do_Local" 10.0.100.252 177.137.58.121 10.0.100.254 10.0.100.253 "Senha_do_Radius_aqui" | bash configura_cpppoe_mk_750.sh
# 

read IP_Pool IP_Loopback numPPPoE Local net_WAN IP_Pub IP_WAN IP_gw Radius_Password

echo "
/interface bridge
add fast-forward=no name=LoopBack
/interface ethernet
set [ find default-name=ether1 ] comment=\"LINK_ONU - OSPF Borda\"
"
numPPPoE=$numPPPoE+1;

echo "/interface vlan"
for (( port=2; port<=$numPPPoE; port++ ))
do
	echo "add interface=ether$port name=Vlan3-Gerencia_Rede_ether$port vlan-id=3"
done

echo "/ip pool
add name=POOL_FTTH ranges=$IP_Pool
"
echo "/queue type
set 0 pfifo-limit=60
set 9 pfifo-limit=60
/ppp profile
set *0 dns-server=8.8.8.8,1.1.1.1 local-address=$IP_Loopback only-one=yes queue-type=default remote-address=POOL_FTTH
"
echo "/routing ospf instance
set [ find default=yes ] redistribute-connected=as-type-2 redistribute-static=as-type-2 router-id=$IP_Loopback
/snmp community
add addresses=172.16.0.100/32 name=Comunidade_Leitura
/ip settings
set rp-filter=strict tcp-syncookies=yes
"

echo "/interface pppoe-server server"
for (( port=2; port<=$numPPPoE; port++ ))
do
 echo "add authentication=pap,chap disabled=no interface=ether$port max-mru=1492 max-mtu=1492 mrru=1600 one-session-per-host=yes service-name=PPPoE_$Local-Ether_$port"
done

echo "/ip address
add address=$IP_WAN/30 interface=ether1 network=$net_WAN
add address=$IP_Pub interface=ether1 network=$IP_Pub
add address=$IP_Loopback interface=LoopBack network=$IP_Loopback
/ip dns
set servers=8.8.8.8,1.1.1.1
/ip firewall address-list
add address=172.16.0.100 list=redes_com_acesso_total
add address=172.16.10.0/28 list=redes_sem_nat
add address=8.8.8.8 list=ServidoresLiberados
"
echo "/ip firewall filter
add action=drop chain=input connection-state=!established,new src-address-list=!redes_com_acesso_total
add action=drop chain=forward dst-port=21,22,23,80,443,5060,5431,8089,8090,8091,8291,8092,8080 out-interface=all-ppp protocol=tcp src-address-list=!redes_com_acesso_total
add action=drop chain=forward dst-port=21,22,23 out-interface=all-ppp protocol=tcp src-address-list=!redes_com_acesso_total
add action=drop chain=forward dst-port=19,25,53,1900,10001,11211 out-interface=all-ppp protocol=tcp src-address-list=!redes_com_acesso_total
add action=drop chain=forward dst-port=19,25,53,1900,5656-5699,10001,11211 out-interface=all-ppp protocol=udp
    
/ip firewall nat
add action=src-nat chain=srcnat dst-address=200.192.232.8 out-interface=ether1 src-address=$IP_WAN to-addresses=$IP_Pub
"
echo "/ip firewall service-port
set ftp disabled=yes
set tftp disabled=yes
set irc disabled=yes
set h323 disabled=yes
set sip disabled=yes
set udplite disabled=yes
set dccp disabled=yes
set sctp disabled=yes
/ip route
add distance=200 gateway=$IP_gw
/ip service
set telnet disabled=yes
set ftp disabled=yes
set ssh disabled=yes
set api disabled=yes
set api-ssl disabled=yes
/ip upnp
set enabled=yes
/ppp aaa
set interim-update=5m use-radius=yes
/radius
add address=172.16.100.12 secret=$Radius_Password service=ppp src-address=$IP_Loopback
add address=172.16.200.12 secret=$Radius_Password service=ppp src-address=$IP_Loopback
/radius incoming
set accept=yes
/routing filter
add action=discard chain=ospf-in prefix=!0.0.0.0/0
/routing ospf interface
add disabled=no interface=LoopBack network-type=broadcast
/routing ospf network
add area=backbone network=$net_WAN/30
"

echo "/snmp
set contact=\"Nome de contato\" enabled=yes location=\"$Local\" trap-community=Comunidade_Leitura trap-version=2
/system clock
set time-zone-name=America/Bahia
/system identity
set name=CPPPoE_$Local
/system ntp client
set enabled=yes primary-ntp=200.192.232.8
/system routerboard settings
set silent-boot=no
/tool bandwidth-server
set enabled=no
"

echo "####################################################################################
Configuração para CGNat
####################################################################################"

ipRede=$(echo $IP_Pool | sed -e "s/\/.*//g")

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

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

  :local x [$sqrt $count]
  :local y $x
  :if ($x * $x = $count) do={ :set y ($x + 1) }
  :for i from=0 to=$x do={
    /ip firewall nat add chain=CGNat action=jump jump-target="CGNat-$($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="CGNat-$($i / $x)" action=src-nat protocol=tcp src-address=($srcStart + $i) \
     to-address=$toAddr to-ports=$prange
    /ip firewall nat add chain="CGNat-$($i / $x)" action=src-nat protocol=udp src-address=($srcStart + $i) \
     to-address=$toAddr to-ports=$prange
  }
}
\"
echo "
\$addNatRules count=32 srcStart=$ipRede toAddr=$IP_Pub portStart=1000 portsPerAddr=2000

/ip firewall nat
/ip firewall nat add action=src-nat chain=srcnat src-address=$IP_Pool to-addresses=$IP_Pub
"
private/mikrotik/mikrotik-cpppoe-php-sh-gera-config-rb750.txt · Última modificação em: 2024/08/25 18:39 por 127.0.0.1