Antes que você inicie o ajuste do PPP na sua máquina, certifique-se de que o pppd está no diretório /usr/sbin e que o diretório /etc/ppp existe.
O pppd pode funcionar de dois modos:
Como um ``cliente'' -- você quer conectar sua máquina com o mundo exterior através de uma conexão PPP serial ou de um de modem.
Como um ``servidor'' -- sua máquina está localizada em uma rede e é utilizada para conectar outros computadores através de PPP.
Nos dois casos você deverá ajustar o arquivo de opções (/etc/ppp/options ou ~/.ppprc se você tem mais de um usuário na máquina que utiliza PPP).
Você irá também precisar de um software para modem/serial (preferencialmente comms/kermit), para que você possa discar e estabelecer uma conexão com a máquina remota.
O arquivo /etc/ppp/options abaixo pode ser utilizado para se conectar a um servidor PPP da Cisco.
crtscts # ativa controle de fluxo por hardware
modem # linha de controle do modem
noipdefault # o servidor PPP remoto deve definir um endereço IP para você
# se a máquina remota não definir o endereço durante a
# negociação IPCP, remova esta opção
passive # espera por pacotes LCP
domain ppp.foo.com # coloque seu domínio aqui
:<remote_ip> # ponha o endereço da máquina remota aqui
# isso será utilizado para rotear os pacotes pelo link PPP
# se você não especificou a opção noipdefault
# mude essa linha para <local_ip>:<remote_ip>
defaultroute # coloque isso se você deseja que o servidor PPP seja
# o seu roteador padrão
Para conectar:
Disque para o host remoto usando o kermit (ou outro programa para o modem) e digite seu usuário e senha (ou o que quer que seja necessário para ativar PPP no host remoto.
Saia do kermit (sem desconectar a linha).
Digite o seguinte:
# /usr/src/usr.sbin/pppd.new/pppd /dev/tty01 19200
Certifique-se de usar a velocidade e o nome do dispositivo apropriados.
Agora seu computador está conectado por PPP. Se a conexão falhar, você pode adicionar a opção debug ao arquivo /etc/ppp/options e verificar as mensagens no console para diagnosticar o problema.
O script /etc/ppp/pppup abaixo irá fazer os 3 estágios automaticamente:
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
ifconfig ppp0 down
ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.dial
pppd /dev/tty01 19200
/etc/ppp/kermit.dial é um script do kermit que disca e faz toda a autorização necessária no host remoto (um exemplo de tal script está anexado ao final deste documento).
Use o seguinte script /etc/ppp/pppdown para desconectar a linha PPP:
#!/bin/sh
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ X${pid} != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill -TERM ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
/sbin/ifconfig ppp0 down
/sbin/ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.hup
/etc/ppp/ppptest
Verifique se o pppd está ainda executando através do comando /usr/etc/ppp/ppptest, que deverá se parecer com o seguinte:
#!/bin/sh
pid=`ps ax| grep pppd |grep -v grep|awk '{print $1;}'`
if [ X${pid} != "X" ] ; then
echo 'pppd running: PID=' ${pid-NONE}
else
echo 'No pppd running.'
fi
set -x
netstat -n -I ppp0
ifconfig ppp0
Para desligar, execute o /etc/ppp/kermit.hup, que deve conter:
set line /dev/tty01 ; put your modem device here set speed 19200 set file type binary set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none pau 1 out +++ inp 5 OK out ATH0\13 echo \13 exit
Um método alternativo é usar o comando chat invés do kermit:
Os dois arquivos seguintes são suficientes para estabelecer uma conexão com pppd.
/etc/ppp/options:
/dev/cuaa1 115200
crtscts # ativa controle de fluxo por hardware
modem # linha de controle do modem
connect "/usr/bin/chat -f /etc/ppp/login.chat.script"
noipdefault # o servidor PPP remoto deve definir um endereço IP para você
# se a máquina remota não definir o endereço durante a
# negociação IPCP, remova esta opção
passive # espera por pacotes LCP
domain <your.domain> # coloque seu domínio aqui
# ponha o endereço da máquina remota aqui
# isso será utilizado para rotear os pacotes pelo link PPP
# se você não especificou a opção noipdefault
# mude essa linha para <local_ip>:<remote_ip>
defaultroute # coloque isso se você deseja que o servidor PPP seja
# o seu roteador padrão
/etc/ppp/login.chat.script:
Nota: O conteúdo abaixo deve ficar em uma única linha:
ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDT<phone.number> CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: <login-id> TIMEOUT 5 sword: <password>
Uma vez que eles estiverem instalados e modificados corretamente, tudo que você precisa fazer é executar o pppd da seguinte maneira:
# pppd
O arquivo /etc/ppp/options deve conter algo similar ao seguinte:
crtscts # Controle de fluxo por hardware
netmask 255.255.255.0 # máscara de rede (não requerido)
192.114.208.20:192.114.208.165 # IP's da máquina remota e local
# IP local pode ser diferente do qual
# você definiei para a interface ethernet
# na sua máquina.
# IP remoto é o endereço IP que será definido
# para a máquina remota.
domain ppp.foo.com # seu domínio
passive # esperar por LCP
modem # linha do modem
O script /etc/ppp/pppserv abaixo irá fazer com que o pppd se comporte como um servidor:
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
# reset ppp interface
ifconfig ppp0 down
ifconfig ppp0 delete
# enable autoanswer mode
kermit -y /etc/ppp/kermit.ans
# run ppp
pppd /dev/tty01 19200
Use o script /etc/ppp/pppservdown para para o servidor:
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
ifconfig ppp0 down
ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.noans
O script para kermit abaixo (/etc/ppp/kermit.ans) irá ativar/desativar o modo de atendimento automático do seu modem. Ele deve se parecer com o seguinte:
set line /dev/tty01
set speed 19200
set file type binary
set file names literal
set win 8
set rec pack 1024
set send pack 1024
set block 3
set term bytesize 8
set command bytesize 8
set flow none
pau 1
out +++
inp 5 OK
out ATH0\13
inp 5 OK
echo \13
out ATS0=1\13 ; mude isso para ATS0=0\13 se você quer desabilitar
; o modo de atendimento automático.
inp 5 OK
echo \13
exit
O script chamado /etc/ppp/kermit.dial é utilizado para discagem e autenticação na máquina remota. Você precisará customizá-lo para suas necessidades. Coloque seu usuário e senha nesse script; você também precisará mudar a indicação de entrada dependendo das respostas do seu modem e da máquina remota.
;
; ponha a linha serial a qual o modem está ligado:
;
set line /dev/tty01
;
; velocidade do modem:
;
set speed 19200
set file type binary ; full 8 bit file xfer
set file names literal
set win 8
set rec pack 1024
set send pack 1024
set block 3
set term bytesize 8
set command bytesize 8
set flow none
set modem hayes
set dial hangup off
set carrier auto ; Then SET CARRIER if necessary,
set dial display on ; Then SET DIAL if necessary,
set input echo on
set input timeout proceed
set input case ignore
def \%x 0 ; login prompt counter
goto slhup
:slcmd ; Poe o modem em modo de comando
echo Put the modem in command mode.
clear ; Limpa caracteres não lidos do buffer de entrada
pause 1
output +++ ; hayes escape sequence
input 1 OK\13\10 ; wait for OK
if success goto slhup
output \13
pause 1
output at\13
input 1 OK\13\10
if fail goto slcmd ; if modem doesn't answer OK, try again
:slhup ; desliga o telefone
clear ; Limpa caracteres não lidos do buffer de entrada
pause 1
echo Hanging up the phone.
output ath0\13 ; hayes command for on hook
input 2 OK\13\10
if fail goto slcmd ; se não houve resposta OK, poe o modem em modo de comando
:sldial ; disca o número
pause 1
echo Dialing.
output atdt9,550311\13\10 ; ponha o número do telefone aqui
assign \%x 0 ; zera o contador de tempo
:look
clear ; Limpa caracteres não lidos do buffer de entrada
increment \%x ; Conta os segundos
input 1 {CONNECT }
if success goto sllogin
reinput 1 {NO CARRIER\13\10}
if success goto sldial
reinput 1 {NO DIALTONE\13\10}
if success goto slnodial
reinput 1 {\255}
if success goto slhup
reinput 1 {\127}
if success goto slhup
if < \%x 60 goto look
else goto slhup
:sllogin ; login
assign \%x 0 ; Zera o contador de tempo
pause 1
echo Looking for login prompt.
:slloop
increment \%x ; Conta os segundos
clear ; Limpa caracteres não lidos do buffer de entrada
output \13
;
; ponha o prompt de login esperado aqui:
;
input 1 {Username: }
if success goto sluid
reinput 1 {\255}
if success goto slhup
reinput 1 {\127}
if success goto slhup
if < \%x 10 goto slloop ; tenta 10 vezes conseguir o prompt de login
else goto slhup ; desliga e tenta denovo se falhou 10 vezes
:sluid
;
; ponha seu usuário aqui:
;
output ppp-login\13
input 1 {Password: }
;
; ponha sua senha aqui:
;
output ppp-password\13
input 1 {Entering SLIP mode.}
echo
quit
:slnodial
echo \7No dialtone. Check the telephone line!\7
exit 1
; local variables:
; mode: csh
; comment-start: "; "
; comment-start-skip: "; "
; end:
Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.