Skip to content

IPoE Server com VYOS

Primeiras Configurações

set system time-zone America/Campo_Grande
set system login user suporten1 authentication plaintext-password suporte123 * Criando usuario Suporte N1*
set system login banner pre-login "Suporte Tel: (XX)XXXX:XXXX" * Banner antes do login*
set system login banner post-login "Bem-vindo, log ativo!" * Banner apos o login*
set service ssh access-control allow user suporten1 *Permitindo usuario logar com ssh*
set service ssh listen-address 172.16.200.6 *Por onde ssh vai responder*
set system sysctl parameter net.ipv6.conf.default.addr_gen_mode value 0 #Para IPV6 Funcionar
Verificando usuarios logados

run show users 

Otimização de placa de rede e driver.

Muitas interfaces de rede modernas oferecem suporte ao ajuste fino. Recomendamos começar a partir do tamanho do buffer da fila em anel - esse buffer é usado para salvar ponteiros em dados, que foram recebidos da NIC ou devem ser transferidos por meio dela. Por padrão, os drivers definem algum valor "ótimo", mas nem sempre pode atender aos requisitos. Em duas palavras:

  • o tamanho alto do buffer de anel leva a menos uso da CPU devido à baixa frequência de interrupções relacionadas à rede. Mas, devido a isso, torne a latência um pouco maior. Preferida para sistemas de altas cargas;

  • o tamanho baixo do buffer de anel leva ao alto uso da CPU e até mesmo a quedas de pacotes, caso a taxa de pacotes seja muito alta. Mas diminui a latência. Preferido para sistemas sensíveis à latência.

Para verificar seus valores atuais de buffers de anel, você pode usar o próximo comando:

sudo ethtool -g eth0
vyos@test-05:~$ sudo ethtool -g eth3
Ring parameters for eth3:
Pre-set maximums:
RX:     4096
RX Mini:    0
RX Jumbo:   0
TX:     4096
Current hardware settings:
RX:     128
RX Mini:    0
RX Jumbo:   0
TX:     128

Como você pode ver, nossa placa de rede suporta valores de até 4096, mas a configuração atual é 128.

Para alterar esse valor, você precisa adicionar as próximas linhas ao arquivo "/config/scripts/vyos-postconfig-bootup.script":

Este comando alterará os valores de RX e TX para 4096 a cada inicialização.

ethtool -G eth0 tx 4096 rx 4096

SMP Affinity

O SMP Affinity permite atribuir IRQs a processadores específicos. Por padrão, o VyOS configura a afinidade SMP distribuindo automaticamente NICs pela CPU. Mas você também pode configurá-lo manualmente para necessidades específicas.

Para um desempenho ideal, um núcleo de CPU dedicado pode ser atribuído a cada interface de rede. Você pode ver manualmente o IRQ para cada interface em /proc/interrupts, por exemplo

vyos@vyos:~$ cat /proc/interrupts | grep eth 
  16:        930   IO-APIC-fasteoi   eth1
  19:       2445   IO-APIC-fasteoi   eth0
O valor smp_affinity para uma interface é uma máscara de bits de núcleos de CPU disponíveis em hexadecimal. Exemplo para um sistema de 4 núcleos:
           Binary       Hex 
    CPU 0    0001         1 
    CPU 1    0010         2
    CPU 2    0100         4
    CPU 3    1000         8
A configuração seria algo como:
set interfaces ethernet eth0 smp_affinity 1
set interfaces ethernet eth1 smp_affinity 2

Manualmente, isso seria:

echo 1 > /proc/irq/16/smp_affinity
echo 2 > /proc/irq/19/smp_affinity

Observe que os sistemas mais novos podem ter vários IRQs para cada interface, por exemplo

 30:    3176819    3181843   PCI-MSI-edge      eth0-rx-0
 31:        393        343   PCI-MSI-edge      eth0-tx-0
 32:          5          5   PCI-MSI-edge      eth0
 33: 3696151744 3709942356   PCI-MSI-edge      eth1-rx-0
 34: 3110055844 3108916060   PCI-MSI-edge      eth1-tx-0
 35:    1674002    1673645   PCI-MSI-edge      eth1
 36:  695750170  650735677   PCI-MSI-edge      eth2-rx-0
 37: 2838722531 2838813824   PCI-MSI-edge      eth2-tx-0
 38:     879793     879761   PCI-MSI-edge      eth2
 39:   51381461   50904827   PCI-MSI-edge      eth3-rx-0
 40:    9658376    9570304   PCI-MSI-edge      eth3-tx-0
 41:          5          7   PCI-MSI-edge      eth3

Aqui, para cada interface, IRQs separados são usados ​​para RX, TX e controle. O VyOS atribuirá a mesma afinidade a cada uma das filas associadas a uma interface de rede específica.

Se o smp-affinity auto estiver configurado, o VyOS tentará distribuir NICs entre os núcleos da CPU automaticamente.

Criando VLAN na Interface

Vamos criar a vlan para rodar o ipoe server

configure

set interfaces ethernet eth0 vif 30 description " VLAN.30 IPOE SERVER "
vamos confirmar se a vlan foi criada e adicionado a description

run show interfaces
a saida deve ser algo como
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             -                                 u/u
eth0.20          172.16.70.106/30                  u/u  entrada-cgnat
eth0.30          -                                 u/u  VLAN.30 IPOE SERVER #NOSSA_VLAN
lo               127.0.0.1/8                       u/u
                 ::1/128

Configurando IPoE + Radius

edit service ipoe-server

set authentication mode radius 
set authentication radius acct-timeout 10
set authentication radius acct-interim-jitter 10
set authentication radius nas-identifier Server-IPoE "Nome do NAS"
set authentication radius nas-ip-address 172.16.70.106 "IP do NAS"
set authentication radius preallocate-vif
set authentication radius server 172.16.0.2 "IP DO RADIUS"
set authentication radius server 172.16.0.2 acct-port 1813 
set authentication radius server 172.16.0.2 fail-time 10
set authentication radius server 172.16.0.2 key @senha-radius
set authentication radius server 172.16.0.2 port 1812
set authentication radius dynamic-author server 172.16.70.106
set authentication radius dynamic-author key @infoteccr
set authentication radius dynamic-author port 3799


"eth0.30" interface com vlan que ira rodar o ipoe server

set interface eth0.30  network shared
set interface eth0.30  network-mode L2
set name-server 186.233.4.18 "DNS entregue pelo Ipoe normalmente o dns do provedor fica como dsn=1"
set name-server 8.8.8.8 " DNS 2 "

set service ipoe-server client-ip-pool name bloqueado gateway-address 100.100.248.1 #Se o Radius fazer bloqueio pela pool solicite o nome da pool, no nosso caso é a pool "bloqueado"
set service ipoe-server client-ip-pool name bloqueado subnet 100.100.248.0/24


commit
save

Incluir IPoE nos moculos do sistema

Nem todas as config. estao disponiveis por linha de comando, por isto vamos configurar alguns arquivos manualmente.

entre com o comando

sudo su

Para incluir ipoe no boot do sistema

grep ipoe /etc/modules || echo "ipoe" >> /etc/modules
verifique se foi incluido ipoe

cat /etc/modules

Criando o arquivo LUA, este arquivo vai ser responsavel por capturar o metodo de login.

crie o arquivo com o comando

# nano /usr/share/vyos/templates/accel-ppp/ipoe.lua
este script captura o MAC para usar como login

function username(pkt)
return pkt:hdr('chaddr')
end

Criando arquivo estatico

Toda vez que reiniciamos o VYOS, as configurações são geradas novamente, e alguns ajustes como o shaper nao estao incluidos no CLI, então iremos criar um arquivo estatico com as configurações geradas, e vamos realizar alguns ajustes.

crie um backup do arquivo gerado automaticamente pelo Python

cp  /run/accel-pppd/ipoe.conf /config/ipoe.conf

Vamos criar um backup da UNIT do systemd responsavel por subir o accel-ppp

cp  /usr/lib/systemd/system/accel-ppp@.service  /config/accel-ppp@.service.backup

Proximo passo é ajustar o arquivo "accel-ppp@.service" para que nosso arquivo estatico ipoe.conf suba, é necessario ajustar.

Vamos substituir a linha

ExecStart=/usr/sbin/accel-pppd -d -p /run/accel-pppd/%i.pid -c /run/accel-pppd/%i.conf

Por

ExecStart=/usr/sbin/accel-pppd -d -p /run/accel-pppd/%i.pid -c /config/ipoe.conf
Vamos atualizar systemd
sudo systemctl daemon-reload
reboot
Após o reboot, vamos verificar se o serviço esta em execução
ps ax | grep accel-ppp
a saida deve ser algo como
root@vyos:/# ps ax | grep accel-ppp
  1491 ?        Ssl    0:00 /usr/sbin/accel-pppd -d -p /run/accel-pppd/ipoe.pid -c /config/ipoe.conf

Finalizando com alguns ajustes do arquivo de config. do IPoE

agora com o arquivo estatico criado e funcional, vamos editar alguns parametros

nano /config/ipoe.conf

vamos adicionar alguns parametros, sempre a baixo do parametro "verbose" para nao correr risco de colar o comando dentro da arvore do script e quebra-lo

[modules]
shaper
lua
[radius]
verbose=1
acct-interim-interval=10

[ipoe]
verbose=1
lua-file=/usr/share/vyos/templates/accel-ppp/ipoe.lua # Informamos aonde o script LUA se encontra
username=lua:username # Usamos o arquivo para gerar o usuario
password=username # se este campo for "username" a senha vai ser a mesma do login
gw-ip-address=100.64.0.1/20 # o gateway vai ser o primeiro IP do bloco que sera distribuido pelo radius.

e por ultimo, o shaper, e alguns ajustes para informações a mais.

[shaper]
verbose=1
vendor=Mikrotik
attr=Mikrotik-Rate-Limit
ifb=ifb0
up-limiter=htb
down-limiter=tbf
[cli]
tcp=127.0.0.1:2002
sessions-columns=ifname,type,calling-sid,username,rate-limit,called-sid,ip,uptime,tx-bytes,state

finalizado as configurações, vamos reiniciar o serviço

sudo systemctl restart  accel-ppp@pppoe.service
exit

vamos verificar se nosso usuario subiu.

show ipoe-server sessions
a saida deve retornar algo como:
ifname | type |    calling-sid    |     username      |  rate-limit   | called-sid |      ip      |  uptime  | tx-bytes | state
--------+------+-------------------+-------------------+---------------+------------+--------------+----------+----------+--------
 ipoe0  | ipoe | 6c:3b:6b:ea:48:e1 | 6c:3b:6b:ea:48:e1 | 122000/122000 | eth0.30    | 100.64.7.185 | 00:22:34 | 13.8 KiB | active

Observação importante, ao finalizar toda esta arvore de comandos, cuidado ao fazer alguma alteração pelo CLI do VYOS, pois ao efetuar alguma configuração ele altera o arquivo "accel-ppp@.service" assim ele para de funcionar