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
"