Configurar o FreeBSD para operar como um servidor de acesso , e possibilitar
conexoes PPP aos seus clientes e uma tarefa relativamente simples. Existem 2 maneiras
de implementar um servidor PPP no FreeBSD , uma utilizando o pppd e outra utilizando o ppp.
Para este tutorial, optei pelo uso do segundo, por ser o mais simples de se utilizar.
Neste tutorial , voce ira aprender a configurar um server PPP ,
com 8 portas de acesso ( usando uma placa multiserial Cyclades-8yo, ISA ou PCI ),
com o uso de modens USR de 28.8 Kbps ou superior.
Para este tutorial, presume-se que voce ja tenha instalado e configurado a
sua placa multiserial utilizando o programa cyctest (para MS-DOS), fornecido com a placa.
Feitas estas consideracoes, continuemos.
- O primeiro passo sera recompilar seu kernel, para habilitar
o suporte a placa multiserial e habilitar suas portas seriais.
Por exemplo para a placa padrao ISA, voce deve recompilar seu kernel
acrescentando as seguintes opcoes, ao arquivo de configuracao de seu
kernel atual:
device cy0 at isa? tty irq 10 iomem 0xd4000 iosiz 0x2000 vector cyintr
OBS:
O seu irq e iomem pode ser diferente do ilustrado acima!
Voce deve tambem alterar as entradas defaults:
maxusers 10
pseudo-device tun 1
pseudo-device pty 16
Para:
maxusers 64
pseudo-device tun 8
pseudo-device pty 32
Consulte - Recompilando seu Kernel, para maiores informacoes
sobre como proceder para recompilar seu Kernel.
Logo apos recompilar seu kernel e antes de dar Boot em seu servidor,
nao se esqueca de criar as entradas necessarias em /dev/.
- O proximo passo sera criar em /dev as entradas, referentes as portas seriais,
que vamos utilizar.
As entradas que necessitamos criar sao:
ttyc0 cuac0 tun0
ttyc1 cuac1 tun1
ttyc2 cuac2 tun2
ttyc3 cuac3 tun3
ttyc4 cuac4 tun4
ttyc5 cuac5 tun5
ttyc6 cuac6 tun6
ttyc7 cuac7 tun7
Voce pode criar as entradas acima uma a uma , usando o comando MAKEDEV.
Para facilitar sua vida voce pode utilizar o seguinte script, para gerar todas as
entradas de uma unica vez:
#!/bin/sh
#
cd /dev
for i in 0 1 2 3 4 5 6 7;do ./MAKEDEV cuac$i ttyc$i;done
./MAKEDEV tun7
#
Voce deve gravar o script acima em /usr/local/bin , com o nome de dev_serial , seta-lo com
"chmod +x dev_serial".
Para usa-lo voce deve executar:
# cd /dev
# ./dev_serial
Apos executar o script acima, todas as entradas necessarias
para o correto funcionamento das 8 portas seriais, serao criadas em
/dev.
- O proximo passo sera editar o arquivo /etc/rc.serial e alterar a linha:
# Initialize all ports on a Cyclades-8yo.
# modem c c 00 01 02 03 04 05 06 07
para
# Initialize all ports on a Cyclades-8yo.
modem c c 00 01 02 03 04 05 06 07
Salve o arquivo e de um boot em seu servidor.
- O proximo passo sera configurar os terminais seriais.
Voce deve consultar - Configurando um terminal Dial-up , para maiores
informacoes de como proceder.
Vale lembrar que tudo o que foi feito no tutorial citado, parar o terminal ttyd1, deve
ser repetido para todos os 16 terminais que vamos usar agora, ou seja do ttyd4 ao ttydj, ok?
Mas veja que os passos 1 deve ser feito uma unica vez ;-) e o 4 deve ser executado apenas
apos terminar de editar o /etc/ttys
no final do processo seu arquivo /etc/ttys devera conter as linhas:
ttyc0 "/usr/libexec/getty VH57600" dialup on
ttyc1 "/usr/libexec/getty VH57600" dialup on
ttyc2 "/usr/libexec/getty VH57600" dialup on
ttyc3 "/usr/libexec/getty VH57600" dialup on
ttyc4 "/usr/libexec/getty VH57600" dialup on
ttyc5 "/usr/libexec/getty VH57600" dialup on
ttyc6 "/usr/libexec/getty VH57600" dialup on
ttyc7 "/usr/libexec/getty VH57600" dialup on
E o arquivo /etc/rc.serial devera conter as linhas (no final dele):
stty -f /dev/ttyc0 crtscts
stty -f /dev/ttyc1 crtscts
stty -f /dev/ttyc2 crtscts
stty -f /dev/ttyc3 crtscts
stty -f /dev/ttyc4 crtscts
stty -f /dev/ttyc5 crtscts
stty -f /dev/ttyc6 crtscts
stty -f /dev/ttyc7 crtscts
E o arquivo /etc/remote devera conter as seguintes linhas:
cuac0:dv=/dev/cuac0:br#19200:pa=none
cuac1:dv=/dev/cuac1:br#19200:pa=none
cuac2:dv=/dev/cuac2:br#19200:pa=none
cuac3:dv=/dev/cuac3:br#19200:pa=none
cuac4:dv=/dev/cuac4:br#19200:pa=none
cuac5:dv=/dev/cuac5:br#19200:pa=none
cuac6:dv=/dev/cuac6:br#19200:pa=none
cuac7:dv=/dev/cuac7:br#19200:pa=none
- O proximo passo sera a configuracao do server PPP propriamente dito.
Antes de iniciar vamos supor que:
Hostname do Servidor de Acesso = omega
IP do roteador default = 192.168.0.1
IP do Servidor de Acesso = 192.168.0.2
IP do Servidor DNS = 192.168.0.3
Netmask = 255.255.255.0
Faixa de IP disponivel para os clientes de PPP discado: 192.168.0.10 a 192.168.0.25
Feitas estas consideracoes, continuemos.
Inicialmente devemos criar o arquivo de configuracao do ppp, /etc/ppp/ppp.conf , este arquivo para o nosso exemplo esta abaixo:
#Inicio
# Arquivo ppp.conf - Exemplo para configurar um server PPP - versao 1.0 - 3/02/1998
#
default:
disable lqr
set log phase lcp chat
set timeout 300
enable msext
set ns 192.168.0.3
set nbns 192.168.0.3
allow users
#
# Configuracao dos terminais
#
porta-ttyc0:
disable passwdauth
set ifaddr 192.168.0.2 192.168.0.10 255.255.255.0
enable proxy
#
porta-ttyc1:
disable passwdauth
set ifaddr 192.168.0.2 192.168.0.11 255.255.255.0
enable proxy
#
porta-ttyc2:
disable passwdauth
set ifaddr 192.168.0.2 192.168.0.12 255.255.255.0
enable proxy
#
porta-ttyc3:
disable passwdauth
set ifaddr 192.168.0.2 192.168.0.13 255.255.255.0
enable proxy
#
porta-ttyc4:
disable passwdauth
set ifaddr 192.168.0.2 192.168.0.14 255.255.255.0
enable proxy
#
porta-ttyc5:
disable passwdauth
set ifaddr 192.168.0.2 192.168.0.15 255.255.255.0
enable proxy
#
porta-ttyc6:
disable passwdauth
set ifaddr 192.168.0.2 192.168.0.16 255.255.255.0
enable proxy
#
porta-ttyc7:
disable passwdauth
set ifaddr 192.168.0.2 192.168.0.17 255.255.255.0
enable proxy
#
#Fim
O ppp.conf acima, implementa um server PPP com autenticacao simples, se voce desejar
que seus usuarios sejam autenticados via PAP, voce deve usar entradas no ppp.conf,
para suas portas seriais, do tipo:
#
porta-ttyc0:
enable pap
enable passwdauth
set ifaddr 192.168.0.2 192.168.0.10 255.255.255.0
enable proxy
#
Deste modo seus usuarios serao autenticados via PAP e o PPP ira comparar o
login e a senha , fornecidos por seus clintes, com os dados do /etc/passwd.
Em seguida devemos criar o arquivo ppp.secret ,
este arquivo para o nosso exemplo esta abaixo:
#Inicio
# Arquivo ppp.secret de exemplo versao 1.0 - 3/02/1998
#
omega senha1 192.168.0.2
porta-ttyc0 senha2 192.168.0.10
porta-ttyc1 senha3 192.168.0.11
porta-ttyc2 senha4 192.168.0.12
porta-ttyc3 senha5 192.168.0.13
porta-ttyc4 senha6 192.168.0.14
porta-ttyc5 senha7 192.168.0.15
porta-ttyc6 senha8 192.168.0.16
porta-ttyc7 senha9 192.168.0.17
#
#Fim
O proximo passo sera criar o script que ira
executar o "ppp -direct", para seus clientes,
provendo uma conexao PPP a eles.
O ppp ira buscar no /etc/ppp/ppp.conf, o IP a ser utilizado para
cada terminal. Observando o nosso ppp.conf
Voce vai ver que definimos um IP para cada porta serial,
de modo que os usuarios terao IP dinamico.
Eu utilizo o script abaixo:
#!/bin/sh -
##
## Script PPP-Shell - versao 2.5 10/01/1998
## Edson Brandi - E.Brandi@iqm.unicamp.br
##
USUARIO=`whoami`
DATA=`date`
TTY=`tty`
PORTA=`echo $TTY | sed -e 's/dev//' | cut -s -d / -f 2- | cut -s -d / -f 2-`
echo ""
echo ""
echo "--------------------------------------------------"
echo " Seja bem vindo ao sistema, $USUARIO "
echo " Hora local: $DATA "
echo " Iniciando conexao PPP na porta: $PORTA "
echo "--------------------------------------------------"
echo ""
exec /usr/sbin/ppp -direct porta-$PORTA
##
##
Grave este script em /usr/local/bin , com o nome dePPP-Shell , e sete-o com "chmod +x PPP-Shell".
Apos criar este script, voce deve editar o arquivo /etc/shells e inserir a seguinte linha, no final do arquivo:
/usr/local/bin/PPP-Shell
Para terminar veja se seu servidor de acesso, esta configurado
para operar como gateway, se nao estiver edite o arquivo /etc/rc.conf e altere a entrada:
gateway=NO
para
gateway=YES
Para efetivar a alteracao, execute:
# shutdown now
Quando o sistema, voltar ao prompt "#" , digite exit e pressione ENTER.
Pronto a configuracao esta terminada, agora falta apenas criar as contas dos seus clientes PPP.
Para faze-lo voce deve utilizar o adduser, devera definir
/usr/local/bin/PPP-Shell
, como a shell de seus clintes e estes deverao
OBRIGATORIAMENTE PERTENCER AO GROUP NETWORK, ou
eles nao terao permissao para executar o ppp -direct !!!
Agora sim, uma vez criada as contas, voce ja pode testar ;-).
Recomendo que voce desabilite o servidor de FTP e Telnet
neste Servidor se for possivel.
Se nao for, voce pode restringir o acesso implementando, por exemplo
um firewall filtrando o trafego FTP e Telnet para este servidor com
base no IP.
Outras restricoes podem ser definidas nos arquivos /etc/login.conf e /etc/login.access
Se voce precisar controlar o tempo utilizado pelos seus usuarios, o sistema de accounting no /etc/rc.conf
e de uma olhada no manual online do comando ac.
Boa sorte!!!
OBS:
Quando voce for testar seu servidor voce verificar que ele prende a porta, quando o usuario ppp desconecta , impedindo que um novo usuario conecte nessa porta,
ate que voce mate o processo manualmente , voce pode utilizar o script abaixo e executa-lo periodicamente pelo cron,
e evitar que isso ocorra, eu sugiro que rode a cada 5 minutos. Mas lembre-se use este script apenas se seu getty prender a porta, ok?
#!/bin/sh
##/etc/ppp/Kill_ppp
ps -ax | grep /usr/sbin/ppp | grep -v grep
pid=`ps -ax | grep /usr/sbin/ppp | grep d1- | grep -v grep | awk '{print $1;}'`
echo 'Matando ppp , PID='${pid}
kill ${pid}
kill -HUP 1
##
Salve o script com o nome que desejar e programe sua execucao pelo cron.