Neste artigo aprenderemos a criar um servidor PPPoE em FreeBSD com autenticação no FreeRadius consultando um banco de dados em MySQL. Será uma conexão com usuário e senha como a maioria dos provedores ADSL provêem, liberando um IP inválido para cada estação.
Atualizar o ports antes de começar a instalar os pacotes:
# portsnap fetch extract
Instalando o PPPoE
Edite o arquivo:
# ee /etc/ppp/ppp.conf
Apague tudo e cole as configs abaixo:
########PPP.CONF########
#########BEGIN##########
default:
set log Chat Command Phase #Ativa o cliente logado.
enable pap #Ativa a autenticação pap (password authentication protocol)
enable chap #Ativa a conta chap (challenge handshake authentication protocol)
enable echo #Envio de echos LCP (Verifica se o link está ativo)
set echoperiod 5 #Tempo de envio para cada echo (Depois de 5 falhas o tun é desconectado)
allow mode direct #Ativa o ppp bridging
enable proxy #Ativa o ppp proxyarping
disable ipv6cp #Como não usamos IPV6, não queremos os seus erros
set mru 1492 #Coloque o MRU abaixo de 1500
set mtu 1492 #Coloque o MRU abaixo de 1500
set ifaddr 192.168.1.1 192.168.1.2-192.168.1.100 # Gateway e range de ips
set speed sync #
set timeout 0 #
enable lqr #
accept dns #Aceita DNS
set radius /etc/radius.conf #Ativa o Radius e especifica onde está o arquivo de conexão
##########END###########
########PPP.CONF########
Edite o arquivo /etc/radius.conf (crie este arquivo).
[2] Comentário enviado por manfilho em 08/10/2007 - 01:16h
Me desculpe caro colega... valeu pela intenção e dedicar o seu tempo para escrever esse "artigo"... mas.. entendi o seguinte:
Artigo copiar e colar, sem muitas explicações e detalhes de informações
Você acha que eu vou fazer o que você está "mandando" sem que você me convença o porquê? em um servidor?
Tudo na vida tem uma explicação, para você mostrar que realmente conhece do assunto simplesmente não me mande copiar e colar, escrever tal linha, sem explicar o que cada coisa dessas faz
No VOL tem muito tipo de Artigo desse tipo
Não curto :)
[3] Comentário enviado por tholoko em 08/10/2007 - 07:45h
Me desculpe amigo... pelo meu "artigo"... mas tenho certeza que nenhum USER vai tentar instalar um Servidor PPPoE sem antes ter noções de alguns fatores...
Muitas vezes eh melhor ensinar alguem assim USER a pescar,,, do que lhe entregar o peixe!!! Não acha???
Se quiser posso te fazer um tutorial bem explicadinho... soh pra vc!!! Afinal... eh muito mais facil.... ler algo explicadinho do que correr atras, olhar os man e descobrir o que cada função faz... Se outro pode ler pra mim e escrever resumido... pq perder meu tempo neh??? muito boa!
Boa sorte nas pesquisas por artigos resumidos... abraços!
[5] Comentário enviado por manfilho em 08/10/2007 - 17:45h
Olá caro amigo tholoko,
Você não me entendeu bem, eu não estou pedindo um tutorial diferenciado para mim, peço para a comunidade.
Com mais explicações, riqueza de informação, uma coisa que o usuário leia, entenda o que você está recomendando o que faça.
Você está entrando em contradição quando diz:
"Muitas vezes eh melhor ensinar alguem assim USER a pescar,,, do que lhe entregar o peixe!!! Não acha???"
Eu acho que você está entregando o peixe sem ensinar como pescar, caro colega... simplesmente, digite isso, subistitua tal arquivo, reinicie, copie, cole, edite e pronto! estará pronto!
É difícil fazer? sei que não é.
Mas se mesmo assim você não entender, peço que faça um SÓ PARA MIM, que eu publico na comunidade dando todo mérito a você.
Um abraço.
[6] Comentário enviado por tholoko em 09/10/2007 - 10:48h
FalaPharoeste... Entendi onde vc quer chegar... mas entenda... nesse artigo tentei explicar o funcionamento do PPPoE... onde comento e muito bem todas as config do artigo ppp.conf... Podemos utilizar um arquivo texto ppp.secret ao inves de criar um FreeRadius se autenticando em MySQL, assim ficaria bem mais curto o artigo, mas apenas mostrei que isso eh variavel e foi o melhor metodo para o meu problema.
Sei como que foi dificil para eu chegar e montar esse Servidor e não quero entregar de mão beijada a todos... apenas ensinei a voar... mas depende dos users criar asas...
No meu server,,, criei absurdos... controle de banda com IPFw,,, bloueio de cliente com meu sistema em PHP... relatorios... etc... mas isso é segredo de estado!!! akaukauakuaka
[7] Comentário enviado por wpereiratecno em 03/11/2009 - 09:39h
Olá, Thomaz.
Se me permite, gostaria de acrescentar algo sobre a questão freeradius + mysql:
Antes de dizer que algo funciona ou não, nessa ou naquela distribuição, é importante considerar, além da distribuição GNU/Linux ou BSD-like usada, as versões dos programas também.
No meu cenário eu tenho:
- Debian GNU/Linux lenny x86_64 kernel 2.6.26-2-amd64 (isso tudo significa Debian 64 bits)
- Freeradius 2.0.4
- MySQL 5.0.51a
Algumas considerações:
1. Eu não criei os tipos de autenticação para a tabela radgroupcheck e mesmo assim funcionou (aliás, é altamente recomendável não usar o atributo Auth-Type);
2. Na tabela radcheck o Attribute pode ser 'Crypt-Password' (que dá uma segurança maior);
3. Edite o arquivo /etc/freeradius/sites-enabled/default e, além de descomentar as linhas de sql recomendadas pelo Thalles, descomente a linha unix (isso fará com que o freeradius autentique via MySQL e não via /etc/passwd);
4. No mesmo arquivo /etc/freeradius/sites-enabled/default comente a linha radutmp, conforme abaixo:
# Session database, used for checking Simultaneous-Use. Either the radutmp
# or rlm_sql module can handle this.
# The rlm_sql module is *much* faster
session {
# radutmp
5. Na tabela radgroupreply, a coluna Prio não estava criada, então eu precisei criar com o comando ALTER TABLE radgroupreply ADD Prio VARCHAR(1); (rodei na base de dados criada o script de schema.sql e essa coluna Prio não foi criada, por isso a criei manualmente).
6. Nas propriedades de conexão da tabela radgroupreply, o Attribute Framed-Compression aceita tanto o Value Van-Jacobsen-TCP-IP quanto Van-Jacobson-TCP-IP (mas o recomendado pela IETF na RFC 1144 é o segundo).
7. Não esquecer de descomentar a linha $INCLUDE sql.conf do arquivo /etc/freeradius/radiusd.conf
Algumas recomendações:
1. Além do usuário root da base de dados MySQL, crie um usuário adicional, com privilégio USAGE e com senha diferente da do root, pois será necessário informar esses dados no arquivo /etc/freeradius/sql.conf, na sessão # Connection info; portanto, não é muito seguro deixar a senha do root nesse arquivo. Veja a seguir:
2. Verifique sempre se os serviços mysql e freeradius estão rodando. Se não estiverem, faça /etc/init.d/mysql start e /etc/init.d/freeradius start (você pode preferir automatizar essa tarefa com a ferramenta update-rc.d).
3. Algumas verificações que podem ser feitas para garantir que está tudo configurado corretamente:
a. ifconfig eth0 (comando para verificar o IP da interface eth0)
b. editar o arquivo /etc/hostname (para verificar se o nome do servidor está correto)
c. editar o arquivo /etc/hosts (para verificar se o IP e o hostname estão correspondendo)
HORA DE ALEGRIA:
Após toda a instalação e configuração, teste com o radtest:
Entre na pasta /etc/freeradius
Digite: radtest {username} {password} {hostname:port} 10 {radius_secret}
Se retornar a mensagem...
Sending Access-Request of id 174 to 10.0.0.1 port 1812
User-Name = "user"
User-Password = "teste"
NAS-IP-Address = 10.0.0.1
NAS-Port = 0
rad_recv: Access-Accept packet from host 10.0.0.1 port 1812, id=174, length=44
Framed-Compression = Van-Jacobson-TCP-IP
Framed-Protocol = PPP
Service-Type = Framed-User
Framed-MTU = 1500
...então é HORA DE ALEGRIA! Vamos sorrir e cantar! Funcionou! Aproveite para ir tomar um café sossegado : )
Obs.: o IP privado 10.0.0.1 foi usado para efeito didático apenas, portanto, esse IP será o do seu servidor onde está rodando o freeradius.
Agradeço o apoio inestimável dos colegas Boni, Ettore, Tati, Roberto e Sidinei; e a confiança do parceiro Rogério Herrera, por me confiar esse desafio.