Controllr/Manual/Accel-PPP
Índice
Controllr > Accel-PPP
O Accel-PPP é um software compilado para ser usando em diversos serviços de autenticação, compatível com o protocolo Radius. Como por exemplo autenticação PPPoE, IPoE, etc... Essa ferramenta pode ser usada em conjunto com o Controllr.
Instalação do Debian10
Você pode usar tanto o Ubuntu quando o Debian, ou outro derivado do LINUX que seja compatível para instalar o seu Accel-PPP. No exemplo a seguir, iremos ensinar como pode ser instalado no Debian versão 10.4.0 (Download 64x ISO)
- Baixe a ISO e realize a instalação do seu Debian.
- OBS: Se preferir, no momento da instalação escolha somente a opção via terminal shell (SSH), sem interface gráfica (web)
- Dicas Debian
- Habilitar login root via putty:
- Instale o editor de arquivos joe
- Habilitar login root via putty:
apt-get install joe -- Comandos JOE CURSOR MOVER MARCAR BLOCO ^B esquerda ^U tela anterior ^KB início ^P cima ^V tela posterior ^KK final ^Z palavra anterior ^A início da linha ^KM mover ^X palavra posterior ^E fim da linha ^KC copiar ^F direita ^KU início do arquivo ^KW salvar ^N baixo ^KV final do arquivo ^KY apagar ^KL mover para linha ^K/ filtro DELETAR MISCELÂNEA SAIR ^D caracter ^KJ reformatar ^KX salvar ^Y linha ^T opções ^C abortar ^W palavra a direita ^R refrescar ^KZ shell ^O palavra a esquerda ^@ inserir ARQUIVO ^J final da linha SPELL ^KE editar ^_ desfazer ^[N palavra ^KR inserir ^^ refazer ^[L arquivo ^KD salvar BUSCA ^KF procurar texto ^L procurar próximo *^ = CTRL*
- Abra o arquivo:
joe /etc/ssh/sshd_config
- Edite as linha tirando o # e mudando para yes
PermitRootLogin yes
- Após editar o arquivo:
CTRL + K
CTRL + X
- Depois reinicie o SSH
/etc/init.d/ssh restart
Agora vamos instalar o Accel-PPP
- Baixe os pacotes do Accel-PPP no seu Debian
apt-get install -y build-essential cmake gcc linux-headers-`uname -r` git libpcre3-dev libssl-dev liblua5.1-0-dev -- Se não tiver o LIB SNMP instale-o, depois rode novamente o comando acima apt-get install libsnmp-dev
- Agora crie um diretório para baixar o projeto do git
mkdir -p /usr/local/src/accel mkdir -p /usr/local/src/accel/build
- Agora entre nesse diretório criado
cd /usr/local/src/accel
- Depois irar fazer o clone do projeto do git do Accel-PPP
git clone https://github.com/xebd/accel-ppp.git
- Antes de Compilar, rode o PATCH do Mikrotik Rate Limit
Compilação
- Após clonar do git acesse o diretório da Build
cd /usr/local/src/accel/build
- Dentro do diretório da Build, irá escolher o que será compilado, conforme sua necessidade
cmake -DCPACK_TYPE=Debian10 -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DRADIUS=TRUE -DNETSNMP=TRUE -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr -DKDIR=/usr/src/linux-headers-$(uname -r) ../accel-ppp
- Agora irá compilar o Accel-PPP no Debian
make
- Após irá copiar o modulo do Kernel Vlan_mon e IPoE em seguida carregue-os
cp drivers/ipoe/driver/ipoe.ko /lib/modules/$(uname -r) cp drivers/vlan_mon/driver/vlan_mon.ko /lib/modules/$(uname -r) depmod -a modprobe vlan_mon modprobe ipoe
- Devemos adicionar os módulos para iniciarem com o Boot
echo "vlan_mon" >> /etc/modules echo "ipoe" >> /etc/modules
- Iremos criar o pacote .DEB
cpack -G DEB apt install ./accel-ppp.deb
Instalação do Accel-PPP Completa no seu Debian
- Agora habilite o seu Accel-PPP para iniciar com o seu Debian
systemctl enable accel-ppp
- O pacote vem com um modelo de exemplo, jogue esse modelo de configuração no seu Accel-PPP e edite-o conforme a sua necessidade.
cp /etc/accel-ppp.conf.dist /etc/accel-ppp.conf
- Apos a edição do arquivo, sempre reinicie o seu Accel-PPP
systemctl restart accel-ppp systemctl status accel-ppp
Patch Mikrotik Rate Limit
--- git a/accel-ppp/accel-pppd/shaper/shaper.c b/accel-ppp/accel-pppd/shaper/shaper.c --- a/accel-ppp/accel-pppd/shaper/shaper.c +++ b/accel-ppp/accel-pppd/shaper/shaper.c @@ -196,7 +196,9 @@ static struct shaper_pd_t *find_pd(struct ap_session *ses, int create) static void parse_string_simple(const char *str, int dir, int *speed, int *burst, int *tr_id) { char *endptr; + char *endstr; long int val; + long int bandw; val = strtol(str, &endptr, 10); if (*endptr == 0) { @@ -211,15 +213,38 @@ static void parse_string_simple(const char *str, int dir, int *speed, int *burst *speed = conf_multiplier * val; return; } else { - if (*endptr == '/' || *endptr == '\\' || *endptr == ':') { - if (dir == ATTR_DOWN) - *speed = conf_multiplier * val; - else - *speed = conf_multiplier * strtol(endptr + 1, &endptr, 10); + if (*endptr == 'k' || *endptr == 'K' || *endptr == 'm' || *endptr == 'M') { + endstr = endptr; + endptr++; + if (*endptr == '/' || *endptr == '\\' || *endptr == ':') { + if (dir == ATTR_UP) { + bandw = conf_multiplier * val; + if (*endstr == 'm' || *endstr == 'M') { + *speed = bandw * 1024; + } else { + *speed = bandw; + } + } else { + bandw = conf_multiplier * strtol(endptr + 1, &endptr, 10); + if (*endptr == 'm' || *endptr == 'M') { + *speed = bandw * 1024; + } else { + *speed = bandw; + } + } + } + } else { + if (*endptr == '/' || *endptr == '\\' || *endptr == ':') { + if (dir == ATTR_DOWN) + *speed = conf_multiplier * val; + else + *speed = conf_multiplier * strtol(endptr + 1, &endptr, 10); + } } } } + static void parse_string(const char *str, int dir, int *speed, int *burst, int *tr_id) { long int val;
Poderá copiar do Pastebin
Esse patch deve ser jogado no seu Accel-PPP para que você consiga usar o vendor Mikrotik Rate limit no Shaper.
- Copie essas linhas de código e salve com a extensão .patch
- Depois jogue esse arquivo no diretório
cd /usr/local/src/accel
- Poderá transferir via SCP, segue exemplo de como transferir usando o CMD do Windows:
scp -P (porta ssh)(diretório onde se encontra o arquivo) (usuário@X.X.X.X):(diretório que irá mandar o arquivo) scp -P 22 D:/ISO/MK-rate-limit.patch root@192.168.142.227:/usr/local/src/accel
- Outra opção é fazer tudo via shell
cd /usr/local/src/accel touch MK-rate-limit.patch joe MK-rate-limit.patch -- Colar o script CTRL + K CTRL + X --Por fim rodar o patch patch -p 1 < MK-rate-limit.patch -- Confira se subiu o patch corretamente cat /usr/local/src/accel/accel-ppp/accel-pppd/shaper/shaper.c | grep -A50 'static void parse_string_simple'
Agora volte para a compilação do seu Accel-PPP
Accel-PPP Configuração
Esse é o exemplo de configuração que melhor se enquadra em conjunto com o Controllr.
A configuração pode ser modificada conforme a sua necessidade.
O manual dos módulos, se encontra nesses links abaixo:
https://accel-ppp.org/accel-ppp.conf.html
https://accel-ppp.org/wiki/doku.php?id=configfile
Os campos com estão desabilitados, para habilitar basta remover o .
[modules] log_file log_syslog ppp pppoe auth_pap radius ippool pppd_compat shaper sigchld # log_tcp # log_pgsql # pptp # l2tp # sstp # ipoe # auth_mschap_v2 # auth_mschap_v1 # auth_chap_md5 # chap-secrets # net-snmp # logwtmp # connlimit # ipv6_nd # ipv6_dhcp # ipv6pool [log] log-file=/var/log/accel-ppp/accel-ppp.log log-emerg=/var/log/accel-ppp/emerg.log log-fail-file=/var/log/accel-ppp/auth-fail.log log-debug=/var/log/accel-ppp/debug.log color=1 per-session=1 level=5 # copy=1 # syslog=accel-pppd,daemon # log-tcp=127.0.0.1:3000 # per-user-dir=per_user # per-session-dir=per_session [core] log-error=/var/log/accel-ppp/core.log thread-count=4 [common] verbose=1 single-session=replace sid-case=upper sid-source=seq check-ip=1 # max-sessions=1000 # max-starting=0 # single-session-ignore-case=0 [dns] dns1=8.8.8.8 dns2=1.1.1.1 [wins] #wins1=172.16.0.1 #wins2=172.16.1.1 [cli] telnet=127.0.0.1:2000 tcp=127.0.0.1:2001 # sessions-columns=ifname,username,ip,ip6,ip6-dp,type,state,uptime,uptime-raw,calling-sid,called-sid,sid,comp,rx-bytes,tx-bytes,rx-bytes-raw,tx-bytes-raw,rx-pkts,tx-pkts # verbose=1 # password=123 [auth] verbose=1 any-login=0 noauth=0 [ppp] verbose=1 min-mtu=1452 mtu=1480 mru=1480 accomp=deny pcomp=deny ccp=0 ipv4=require ipv6=deny lcp-echo-interval=20 lcp-echo-timeout=120 unit-cache=100 unit-preallocate=1 # mppe=require # ipv6-intf-id=0:0:0:1 # ipv6-peer-intf-id=0:0:0:2 # ipv6-accept-peer-intf-id=1 # lcp-echo-failure=3 [pppoe] verbose=1 ac-name=Accel-PPP service-name=Accel-PPP accept-any-service=1 pado-delay=0,100:100,200:200,500:500,-1:700 called-sid=ifname:mac padi-limit=50 ip-pool=pool-accel sid-uppercase=0 interface=ens33 vlan-mon=ens33,1-4095 vlan-timeout=240 vlan-name=%I.%N # pado-delay=0 # tr101=1 # ipv6-pool=pppoe # ipv6-pool-delegate=pppoe # ifname=pppoe%d # interface=ens33,padi-limit=1000 [radius] verbose=1 interim-verbose=1 dictionary=/usr/share/accel-ppp/radius/dictionary nas-identifier=Accel-PPP nas-ip-address=192.168.142.227 gw-ip-address=192.168.142.227 server=192.168.142.22,brbyte,auth-port=1812,acct-port=0,req-limit=50,fail-timeout=20,max-fail=30,weight=1 server=192.168.142.22,brbyte,auth-port=0,acct-port=1813,req-limit=50,fail-timeout=20,max-fail=30,weight=1 dae-server=192.168.142.227:3799,brbyte acct-timeout=300 acct-delay-time=0 acct-interim-interval=60 # timeout=5 # max-try=30 # acct-on=1 # server=192.168.142.xx,brbyte,auth-port=1812,acct-port=1813,req-limit=50,fail-timeout=0,backup # acct-on=0 # acct-interim-jitter=0 # attr-tunnel-type=My-Tunnel-Type [ip-pool] verbose=1 gw-ip-address=192.168.142.227 attr=Framed-Pool 192.168.1.1-255,name=pool-accel # vendor=Mikrotik # attr=Mikrotik-Host-IP # 192.168.0.2-255 # 192.168.2.1-255,name=pool2 # 192.168.3.1-255,name=pool3 # 192.168.4.1-255,name=pool4,next=pool1 # 192.168.4.0/24 [shaper] verbose=1 vendor=Mikrotik attr=Mikrotik-Rate-Limit up-limiter=police down-limiter=tbf # down-burst-factor=0.1 # up-burst-factor=1.0 # latency=50 # mpu=0 # mtu=0 # r2q=10 # quantum=1500 # moderate-quantum=1 # cburst=1534 # ifb=ifb0 # leaf-qdisc=sfq perturb 10 # leaf-qdisc=fq_codel [limit PACKETS] [flows NUMBER] [target TIME] [interval TIME] [quantum BYTES] [[no]ecn] # rate-multiplier=1 # fwmark=1 # rate-limit=2048/1024 [client-ip-range] disable [log-pgsql] # conninfo=user=log # log-table=log [pppd-compat] verbose=1 # ip-up=/etc/ppp/ip-up # ip-down=/etc/ppp/ip-down radattr-prefix=/var/run/radattr # ip-pre-up=/etc/ppp/ip-pre-up # ip-change=/etc/ppp/ip-change # fork-limit=16 [chap-secrets] verbose=1 gw-ip-address=192.168.142.227 #chap-secrets=/etc/ppp/chap-secrets #encrypted=0 #username-hash=md5 [snmp] # master=0 # agent-name=Accel-PPP [connlimit] # limit=10/min # burst=3 # timeout=60 [pptp] # verbose=1 # echo-interval=30 # ip-pool=pptp # ipv6-pool=pptp # ipv6-pool-delegate=pptp # ifname=pptp%d [ipv6-pool] # gw-ip6-address=fc00:0:1::1 # vendor= # attr-prefix=Delegated-IPv6-Prefix-Pool # attr-address=Stateful-IPv6-Address-Pool # fc00:0:1::/48,64 # fc00:0:2::/48,64,name=pool1 # fc00:0:3::/48,64,name=pool2,next=pool1 # delegate=fc00:1::/36,48 # delegate=fc00:2::/36,48,name=pool3 # delegate=fc00:3::/36,48,name=pool4,next=pool3 [ipv6-dns] # fc00:1::1 # fc00:1::2 # fc00:1::3 # dnssl=suffix1.local.net # dnssl=suffix2.local.net. [ipv6-dhcp] # verbose=1 # pref-lifetime=604800 # valid-lifetime=2592000 # route-via-gw=1 [l2tp] # verbose=1 # dictionary=/usr/local/share/accel-ppp/l2tp/dictionary # hello-interval=60 # timeout=60 # rtimeout=1 # rtimeout-cap=16 # retransmit=5 # recv-window=16 # host-name=accel-ppp # dir300_quirk=0 # secret= # dataseq=allow # reorder-timeout=0 # ip-pool=l2tp # ipv6-pool=l2tp # ipv6-pool-delegate=l2tp # ifname=l2tp%d [sstp] # verbose=1 # cert-hash-proto=sha1,sha256 # cert-hash-sha1= # cert-hash-sha256= # accept=ssl,proxy # ssl-protocol=tls1,tls1.1,tls1.2,tls1.3 # ssl-dhparam=/etc/ssl/dhparam.pem # ssl-ecdh-curve=prime256v1 # ssl-ciphers=DEFAULT # ssl-prefer-server-ciphers=0 # ssl-ca-file=/etc/ssl/sstp-ca.crt # ssl-pemfile=/etc/ssl/sstp-cert.pem # ssl-keyfile=/etc/ssl/sstp-key.pem # host-name=domain.tld # http-error=allow # timeout=60 # hello-interval=60 # ip-pool=sstp # ipv6-pool=sstp # ipv6-pool-delegate=sstp # ifname=sstp%d [ipoe] # verbose=1 # username=ifname # password=username # lease-time=600 # renew-time=300 # max-lease-time=3600 # unit-cache=1000 # l4-redirect-table=4 # l4-redirect-ipset=l4 # l4-redirect-on-reject=300 # l4-redirect-ip-pool=pool1 # shared=0 # ifcfg=1 # mode=L2 # start=dhcpv4 # start=up # ip-unnumbered=1 # proxy-arp=0 # nat=0 # proto=100 # relay=10.10.10.10 # vendor=Custom # weight=0 # attr-dhcp-client-ip=DHCP-Client-IP-Address # attr-dhcp-router-ip=DHCP-Router-IP-Address # attr-dhcp-mask=DHCP-Mask # attr-dhcp-lease-time=DHCP-Lease-Time # attr-dhcp-opt82=DHCP-Option82 # attr-dhcp-opt82-remote-id=DHCP-Agent-Remote-Id # attr-dhcp-opt82-circuit-id=DHCP-Agent-Circuit-Id # attr-l4-redirect=L4-Redirect # attr-l4-redirect-table=4 # attr-l4-redirect-ipset=l4-redirect # lua-file=/etc/accel-ppp.lua # offer-delay=0,100:100,200:200,-1:1000 # vlan-mon=eth0,10-200 # vlan-timeout=60 # vlan-name=%I.%N # ip-pool=ipoe # ipv6-pool=ipoe # ipv6-pool-delegate=ipoe # idle-timeout=0 # session-timeout=0 # soft-terminate=0 # check-mac-change=1 # calling-sid=mac # local-net=192.168.0.0/16 # interface=eth0
Módulos que devem se atentar em substituir os dados.
[pppoe] verbose=1 ac-name=Accel-PPP /******** Nome do seu servidor Accel ********/ service-name=Accel-PPP /******** Nome do seu servidor Accel ********/ ip-pool=pool-accel /******** Nome da Pool que irá entregar os IPs. Se não for usar basta marcar # ********/ interface=ens33 /******** Nome da interface de rede da conexão dos clientes ********/ vlan-mon=ens33,1-4095 /******** Nome da interface de rede da conexão dos clientes ********/
[radius] nas-identifier=Accel-PPP /******** Nome do seu servidor Accel. Tem que estar o mesmo nome no Radius NAS do Controllr ********/ nas-ip-address=192.168.142.227 /******** IP do seu Accel-PPP ********/ gw-ip-address=192.168.142.227 /******** IP do seu Accel-PPP ********/ server=192.168.142.22,brbyte,auth-port=1812,acct-port=0,req-limit=50,fail-timeout=20,max-fail=30,weight=1 /******** Ip do seu servidor Radius Controllr ********/ server=192.168.142.22,brbyte,auth-port=0,acct-port=1813,req-limit=50,fail-timeout=20,max-fail=30,weight=1 /******** Ip do seu servidor Radius Controllr ********/ dae-server=192.168.142.227:3799,brbyte /******** IP do seu Accel-PPP ********/
[ip-pool] gw-ip-address=192.168.142.227 /******** Gateway do seu range de IP ou o IP do seu Accel-ppp ********/ 192.168.1.1-255,name=pool-accel /******** Se for entregar IP pelo Accel, basta seguir a lógica e configurar o range de IP. Se for entregar pelo Controllr basta marcar o # ********/
[chap-secrets] gw-ip-address=192.168.142.227 /******** Gateway do seu range de IP ou o IP do seu Accel-ppp ********/
Dicionario do Mikrotik
# MikroTik vendor specific dictionary # Copyright (C) MikroTikls, SIA # # You may freely redistribute and use this software or any part of it in source # and/or binary forms, with or without modification for any purposes without # limitations, provided that you respect the following statement: # # This software is provided 'AS IS' without a warranty of any kind, expressed or # implied, including, but not limited to, the implied warranty of # merchantability and fitness for a particular purpose. In no event shall # MikroTikls SIA be liable for direct or indirect, incidental, consequential or # other damages that may result from the use of this software, including, but # not limited to, loss of data, time and (or) profits. # # $Id: dictionary.mikrotik,v 1.8 2019/12/20 11:02:37 strods Exp $ # # MikroTik Attributes VENDOR Mikrotik 14988 BEGIN-VENDOR Mikrotik ATTRIBUTE Mikrotik-Recv-Limit 1 integer ATTRIBUTE Mikrotik-Xmit-Limit 2 integer ATTRIBUTE Mikrotik-Group 3 string ATTRIBUTE Mikrotik-Wireless-Forward 4 integer ATTRIBUTE Mikrotik-Wireless-Skip-Dot1x 5 integer ATTRIBUTE Mikrotik-Wireless-Enc-Algo 6 integer ATTRIBUTE Mikrotik-Wireless-Enc-Key 7 string ATTRIBUTE Mikrotik-Rate-Limit 8 string ATTRIBUTE Mikrotik-Realm 9 string ATTRIBUTE Mikrotik-Host-IP 10 ipaddr ATTRIBUTE Mikrotik-Mark-Id 11 string ATTRIBUTE Mikrotik-Advertise-URL 12 string ATTRIBUTE Mikrotik-Advertise-Interval 13 integer ATTRIBUTE Mikrotik-Recv-Limit-Gigawords 14 integer ATTRIBUTE Mikrotik-Xmit-Limit-Gigawords 15 integer ATTRIBUTE Mikrotik-Wireless-PSK 16 string ATTRIBUTE Mikrotik-Total-Limit 17 integer ATTRIBUTE Mikrotik-Total-Limit-Gigawords 18 integer ATTRIBUTE Mikrotik-Address-List 19 string ATTRIBUTE Mikrotik-Wireless-MPKey 20 string ATTRIBUTE Mikrotik-Wireless-Comment 21 string ATTRIBUTE Mikrotik-Delegated-IPv6-Pool 22 string ATTRIBUTE Mikrotik-DHCP-Option-Set 23 string ATTRIBUTE Mikrotik-DHCP-Option-Param-STR1 24 string ATTRIBUTE Mikortik-DHCP-Option-Param-STR2 25 string ATTRIBUTE Mikrotik-Wireless-VLANID 26 integer ATTRIBUTE Mikrotik-Wireless-VLANIDtype 27 integer ATTRIBUTE Mikrotik-Wireless-Minsignal 28 string ATTRIBUTE Mikrotik-Wireless-Maxsignal 29 string ATTRIBUTE Mikrotik-Switching-Filter 30 string # MikroTik Values VALUE Mikrotik-Wireless-Enc-Algo No-encryption 0 VALUE Mikrotik-Wireless-Enc-Algo 40-bit-WEP 1 VALUE Mikrotik-Wireless-Enc-Algo 104-bit-WEP 2 VALUE Mikrotik-Wireless-Enc-Algo AES-CCM 3 VALUE Mikrotik-Wireless-Enc-Algo TKIP 4 VALUE Mikrotik-Wireless-VLANIDtype 802.1q 0 VALUE Mikrotik-Wireless-VLANIDtype 802.1ad 1 END-VENDOR Mikrotik
Você pode pegar o dicionário do Mikrotik direto no site deles.
https://wiki.mikrotik.com/wiki/Manual:RADIUS_Client/vendor_dictionary
No seu Debian procure pelo diretório aonde fica os dicionários
find / -name 'dictionary*'
Deve localizar esse diretório
cd /usr/share/accel-ppp/radius
Após entrar nesse diretório, irá criar um arquivo chamado dictionary.mikrotik
touch dictionary.mikrotik joe dictionary.mikrotik -- Colar o dicionário do Mikrotik, salvar e fechar CTRL + K CTRL + X
Depois irá editar o arquivo dictionary, para incluir a biblioteca do Mikroitk.
joe /usr/share/accel-ppp/radius/dictionary -- Insira na última linha do arquivo $INCLUDE dictionary.mikrotik -- Salvar e fechar o arquivo CTRL + K CTRL + X