Configurando Servidor PPPOE simples no Debian 11

Recentemente precisei configurar um servidor PPPOE para testes internos em minha empresa.
Mas não precisava ser algo complexo com banco de dados Mysql, servidor Radius, etc. Eu já tinha scripts e documentação para configuração destes servidores mais complexos e em versões anteriores do Debian Linux, mas não tinha nada para algo simples e para a ultima versão do Debian 11. Então precisei pesquisar para como configurar e estou aqui publicando os passos por mim utilizado.

Não vou detalhar a instalação do Debian 11, mas basta realizar a instalação mínima selecionando apenas o pacote ssh pois até para economia de recursos e poder se utilizar uma máquina mais simples não se faz necessário a instalação de ambiente gráfico.
Para o hardware os requisitos são bem baixos apenas sendo necessário duas placas de rede. Uma por onde receberemos a internet do provedor e a outra para ser distribuída para o ambiente interno.

Após a instalação do Linux começamos instalando os pacotes mais abaixo.
É muito importante pois na falta deles a compilação do pacote rp-pppoe pelo código fonte não ocorrerá corretamente.
Primeiro vamos atualizar a lista de pacotes com o comando abaixo.

apt-get update

Agora vamos instalar os pacotes abaixo.

apt-get install make gcc ppp ppp-dev iptables

Com os pacotes devidamente instalados precisamos baixar o pacote rp-pppoe do site do projeto.
Na data em que edito este artigo a ultima versão disponível é a 3.15.

Podemos baixar o arquivo com o comando abaixo.

wget https://dianne.skoll.ca/projects/rp-pppoe/download/rp-pppoe-3.15.tar.gz

Após ter baixado o arquivo com sucesso temos que descompactar o mesmo com o comando abaixo.

tar -zxvf rp-pppoe-3.15.tar.gz

Após descompactar o arquivo será criado a pasta rp-pppoe-3.15. Vamos acessar a pasta scr que fica dentro da mesma.

cd rp-pppoe-3.15/src

Estando dentro da pasta src vamos executar os comandos abaixo pra compilar e instalar o pacote rp-pppoe

make clean
./configure --enable-plugin
make
make install

Com o sucesso da compilação agora passamos para a criação e configuração dos arquivos necessários para o funcionamento do servidor pppoe.

# 1 /etc/default/rp-pppoe_range

O primeiro arquivo que vamos configurar é o /etc/default/rp-pppoe_range. Este arquivo não existe. Eu estou criando o mesmo dentro da pasta /etc/default/ pois é uma pasta padrão de configuração, mas este arquivo pode ser criado em qualquer outro lugar desde que devidamente referenciado nos outros arquivos de configuração.
No meu servidor a faixa de rede escolhida é 100.90.80.0/24 mas você utilizar outra faixa de rede caso preferir desde que esta faixa de rede seja diferente da faixa de rede da entrada da sua internet.

Então o conteúdo do meu arquivo /etc/default/rp-pppoe_range ficou assim.

100.90.80.2-254
# 2 /etc/ppp/chap-secrets

Este segundo arquivo é onde ficará armazenados os logins e as senhas dos clientes pppoe do servidor.
O padrão deste arquivo é .:

"login" * "senha" *

A primeira coluna é o login entre “aspas”. Sim as aspas fazem parte do arquivo. A segunda coluna é o * asterisco. A terceira coluna é a senha também entre aspas. A quarta coluna é o endereço de ip. Se deixarmos um * asteriscos o endereço de ip será aleatório dentro da faixa de rede escolhida, mas caso deseje pode se fixar o endereço.

Veja os exemplos.

"edmarcos" * "123456" *

ou

"edmarcos" * "123456" 100.90.80.3
# 3 /etc/ppp/pppoe-server-options

O terceiro arquivo que vamos editar é o /etc/ppp/pppoe-server-options. Este arquivo já existe e precisamos editar apenas um parâmetro e acrescentar outros ao mesmo.

Primeiro procure pela linha que contém este texto.:

require-pap

comente esta linha acrescentando um # no começo da mesma e abaixo dela  adicione esta linha.

require-chap

Então o arquivo deve ficar assim:

#require-pap
require-chap

Agora vamos configurar os servidores de dns que desejamos utilizar. No meu caso estou utilizando os servidores do google, mas outros servidores podem ser utilizados. Então adicione as duas linha conforme exemplo abaixo.

ms-dns 8.8.8.8
ms-dns 8.8.4.4

E vamos adicionar mais 4 parâmetros ao final do arquivo como no exemplo abaixo.

netmask 255.255.255.0
defaultroute
noipdefault
usepeerdns
# 4 /usr/local/sbin/rp-pppoe-server.sh

O quarto arquivo a ser editado não existe e precisa ser criado. Vamos criar o mesmo em /usr/local/sbin/rp-pppoe-server.sh com o conteúdo abaixo.

#!/bin/bash

modprobe pppoe

/usr/sbin/pppoe-server -k -C EdegServer -L 100.90.80.1 -p /etc/default/rp-pppoe_range -I eth0

No caso edite seu arquivo alterando o parâmetro “-C EdegServer” para o nome que quiser usar em seu servidor. Também altere o parâmetro “-I eth1” pelo nome da placa de rede de saída do seu servidor.

Com o arquivo devidamente customizado vamos adicionar permissão de execução do mesmo com o comando abaixo.

chmod a+x /usr/local/sbin/rp-pppoe-server.sh
# 5 /usr/local/sbin/masquerade.sh

Para que os computadores conectados neste servidor pppoe possam navegar pela internet precisamos configurar um roteamento via iptables. Para isto vamos configurar um arquivo simples para fazer o masquerade.

Segue exemplo abaixo.

#!/bin/bash

FW=/sbin/iptables
SRC=100.90.80.0/24 # faixa de rede do servidor pppoe
WAN=eth1 # placa de rede da entrada da internet

echo 1 > /proc/sys/net/ipv4/ip_forward

$FW           -F
$FW -t nat    -F
$FW -t mangle -F

$FW -t nat -A POSTROUTING -o $WAN -s $SRC -j MASQUERADE

Também precisamos dar permissão de execução neste arquivo com o comando abaixo.

chmod a+x /usr/local/sbin/masquerade.sh
# 6 /etc/rc.local

Para que o script /usr/local/sbin/rp-pppoe-server.sh e o script /usr/local/sbin/masquerade.sh sejam executados automaticamente toda a vez que o computador for inicializado ou reinicializado vamos fazer de maneira simples editando o arquivo /etc/rc.local.
Nas versões mais recentes do Debian este arquivo não existe mais. Por isto vamos criá-lo conforme o exemplo abaixo.

#!/bin/sh

/usr/local/sbin/rp-pppoe-server.sh
/usr/local/sbin/masquerade.sh

exit 0

Também precisamos dar permissão de execução no /etc/rc.local conforme exemplo abaixo.

chmod a+x /etc/rc.local

Pronto. O servidor está devidamente configurado agora basta testar o mesmo.

Referencias usadas:
https://dianne.skoll.ca/
https://www.vivaolinux.com.br/dica/Configurando-um-PPPOE-Server