---
title: Capítulo 27. PPP
part: Parte IV. Comunicação de rede
prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 32
params:
  path: "/books/handbook/ppp-and-slip/"
---

[[ppp-and-slip]]
= PPP
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 27
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/ppp-and-slip/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[ppp-and-slip-synopsis]]
== Sinopse

O FreeBSD suporta o protocolo Point-to-Point (PPP) que pode ser usado para estabelecer uma conexão de rede ou Internet usando um modem dial-up. Este capítulo descreve como configurar serviços de comunicação baseados em modem no FreeBSD.

Depois de ler este capítulo, você saberá:

* Como configurar, usar e solucionar problemas de uma conexão PPP.
* Como configurar o PPP sobre Ethernet (PPPoE).
* Como configurar o PPP sobre ATM (PPPoA).

Antes de ler este capítulo, você deve:

* Estar familiarizado com a terminologia básica de rede.
* Entender os conceitos básicos e o propósito de uma conexão dial-up e PPP.

[[userppp]]
== Configurando o PPP

O FreeBSD fornece suporte nativo para gerenciamento conexões dial-up PPP usando man:ppp[8]. O kernel padrão do FreeBSD fornece suporte para o [.filename]#tun#, que é usado para interagir com um hardware de modem. A configuração é executada editando pelo menos um arquivo de configuração, e exemplos destes arquivos de configuração são fornecidos com o sistema. Finalmente, o `ppp` é usado para iniciar e gerenciar conexões.

Para usar uma conexão PPP, os seguintes itens são necessários:

* Uma conta dial-up com um provedor de serviços de Internet (ISP).
* Um modem dial-up.
* O número de discagem para o ISP.
* O nome de usuário e a senha atribuídos pelo ISP.
* O endereço IP de um ou mais servidores de DNS. Normalmente, o ISP fornece estes endereços. Caso contrário, o FreeBSD pode ser configurado para usar a negociação de DNS.

Se alguma das informações necessárias estiver faltando, entre em contato com o ISP.

As seguintes informações podem ser fornecidas pelo ISP, mas não são necessárias:

* O endereço IP do gateway padrão. Se esta informação for desconhecida, o ISP fornecerá automaticamente o valor correto durante a configuração da conexão. Ao configurar o PPP no FreeBSD, este endereço é chamado de `HISADDR`.
* A máscara de sub-rede. Se o ISP não tiver fornecido um, `255.255.255.255` será usado no arquivo de configuração do man:ppp[8].
*
+ 
Se o ISP tiver atribuído um endereço IP estático e um nome de host, ele deverá ser inserido no arquivo de configuração. Caso contrário, essas informações serão fornecidas automaticamente durante a configuração da conexão.

O restante desta seção demonstra como configurar o FreeBSD para cenários de conexão PPP comuns. O arquivo de configuração requerido é o [.filename]#/etc/ppp/ppp.conf# e arquivos de exemplos adicionais estão disponíveis em [.filename]#/usr/shared/examples/ppp/#.

[NOTE]
====
Ao longo desta seção, muitos dos exemplos de arquivos exibem números de linha. Esses números de linha foram adicionados para facilitar o acompanhamento da discussão e não devem ser colocados no arquivo real.

Ao editar um arquivo de configuração, o recuo adequado é importante. Linhas que terminam em um `:` iniciam na primeira coluna (início da linha) enquanto todas as outras linhas devem ser recuadas como mostrado usando espaços ou tabulações.
====

[[userppp-staticIP]]
=== Configuração básica

Para configurar uma conexão PPP, primeiro edite o [.filename]#/etc/ppp/ppp.conf# com as informações de discagem do ISP. Este arquivo é descrito da seguinte maneira:

[.programlisting]
....
1     default:
2       set log Phase Chat LCP IPCP CCP tun command
3       ident user-ppp VERSION
4       set device /dev/cuau0
5       set speed 115200
6       set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
7                 \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"
8       set timeout 180
9       enable dns
10
11    provider:
12      set phone "(123) 456 7890"
13      set authname foo
14      set authkey bar
15      set timeout 300
16      set ifaddr x.x.x.x/0 y.y.y.y/0 255.255.255.255 0.0.0.0
17      add default HISADDR
....

Linha 1:::
Identifica a entrada `default`. Os comandos nesta entrada (linhas 2 a 9) são executados automaticamente quando o `ppp` é executado.

Linha 2:::
Ativa os parâmetros de log detalhado para testar a conexão. Uma vez que a configuração esteja funcionando satisfatoriamente, esta linha deve ser reduzida para:
+

[.programlisting]
....
set log phase tun
....

Linha 3:::
Exibe a versão do man:ppp[8] para o software PPP em execução no outro lado da conexão.

Linha 4:::
Identifica o dispositivo ao qual o modem está conectado, onde [.filename]#COM1# é [.filename]#/dev/cuau0# e [.filename]#COM2# é [.filename]#/dev/cuau1#.

Linha 5:::
Define a velocidade de conexão. Se `115200` não funcionar em um modem mais antigo, tente `38400` em seu lugar.

Linhas 6 & 7:::
A string de discagem escrita como na sintaxe de envio e espera. Consulte man:chat[8] para obter maiores informações.
+
Observe que esse comando continua na próxima linha para facilitar a leitura. Qualquer comando no [.filename]#ppp.conf# pode fazer isso se o último caractere na linha for `\`.

Linha 8:::
Define o tempo ocioso limite do link em segundos.

Linha 9:::
Instrui o peer para confirmar as configurações de DNS. Se a rede local estiver executando seu próprio servidor DNS, essa linha deve ser comentada, adicionando um `#` no início da linha ou removendo-a.

Linha 10:::
Uma linha em branco para facilitar a leitura. Linhas em branco são ignoradas pelo man:ppp[8].

Linha 11:::
Identifica uma entrada chamada `provider`. Isto pode ser alterado para o nome do ISP, para que `load _ISP_` possa ser usado para iniciar a conexão.

Linha 12:::
Use o número de telefone para o ISP. Vários números de telefone podem ser especificados usando os dois-pontos (`:`) ou o caractere pipe (`|`) como um separador. Para rotacionar entre os números, use dois pontos. Para sempre tentar discar o primeiro número primeiro e usar os outros números apenas se o primeiro número falhar, use o caractere pipe. Sempre coloque todo o conjunto de números de telefone entre aspas (`"`) para evitar falhas de discagem.

Linhas 13 & 14:::
Use o nome de usuário e senha para o ISP.

Linha 15:::
Define o tempo ocioso limite padrão em segundos para a conexão. Neste exemplo, a conexão será fechada automaticamente após 300 segundos de inatividade. Para evitar um tempo limite, defina esse valor como zero.

Linha 16:::
Define os endereços da interface. Os valores usados dependem de se um endereço IP estático foi obtido do ISP ou se ele negocia um endereço IP dinâmico durante a conexão.
+
Se o ISP tiver alocado um endereço IP estático e um gateway padrão, substitua _xxxx_ pelo endereço IP estático e substitua _yyyy_ com o endereço IP do gateway padrão. Se o ISP tiver fornecido apenas um endereço IP estático sem um endereço de gateway, substitua _yyyy_ por `10.0.0.2/0`.
+
Se o endereço IP mudar sempre que uma conexão for feita, altere essa linha para o seguinte valor. Isso diz ao man:ppp[8]para usar o IP Configuration Protocol (IPCP) para negociar um endereço IP dinâmico:
+

[.programlisting]
....
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255 0.0.0.0
....

Linha 17:::
Mantenha esta linha como está, pois ela adiciona uma rota padrão ao gateway. O `HISADDR` será automaticamente substituído pelo endereço do gateway especificado na linha 16. É importante que esta linha apareça depois da linha 16.

Dependendo se o man:ppp[8] for iniciado manualmente ou automaticamente, um arquivo [.filename]#/etc/ppp/ppp.linkup# também pode precisar ser criado, contendo as seguintes linhas. Este arquivo é requerido ao executar o `ppp` no modo `-auto`. Este arquivo é usado após a conexão ter sido estabelecida. Neste ponto, o endereço IP será atribuído e agora será possível adicionar as entradas da tabela de roteamento. Ao criar este arquivo, certifique-se de que o _provider_ corresponda ao valor demonstrado na linha 11 do [.filename]#ppp.conf#.

[.programlisting]
....
provider:
      add default HISADDR
....

Este arquivo também é necessário quando o endereço do gateway padrão é "adivinhado" em uma configuração de endereço IP estático. Neste caso, remova a linha 17 do [.filename]#ppp.conf# e crie o [.filename]#/etc/ppp/ppp.linkup# com as duas linhas acima. Outros exemplos para este arquivo podem ser encontrados em [.filename]#/usr/shared/examples/ppp/#.

Por padrão, o `ppp` deve ser executado como `root`. Para alterar esse padrão, adicione a conta do usuário que deve executar o `ppp` ao grupo `network` em [.filename]#/etc/group# .

Em seguida, conceda ao usuário acesso a uma ou mais entradas em [.filename]#/etc/ppp/ppp.conf# com `allow`. Por exemplo, para dar a permissão para os usuários `fred` e `mary` somente à entrada `provider:`, inclua esta linha para a seção `provider:`:

[.programlisting]
....
allow users fred mary
....

Para fornecer aos usuários especificados acesso a todas as entradas, coloque essa linha na seção `default`.

=== Configuração Avançada

É possível configurar o PPP para fornecer endereços de servidores DNS e NetBIOS sob demanda.

Para habilitar estas extensões com o PPP versão 1.x, as seguintes linhas podem ser adicionadas à seção relevante do [.filename]#/etc/ppp/ppp.conf#.

[.programlisting]
....
enable msext
set ns 203.14.100.1 203.14.100.2
set nbns 203.14.100.5
....

E para o PPP versão 2 e acima:

[.programlisting]
....
accept dns
set dns 203.14.100.1 203.14.100.2
set nbns 203.14.100.5
....

Isso informará aos clientes os endereços do servidor de nomes primário e secundário e um host do servidor de nomes NetBIOS.

Na versão 2 e acima, se a linha `set dns` for omitida, o PPP usará os valores encontrados em [.filename]#/etc/resolv.conf#.

[[userppp-PAPnCHAP]]
==== Autenticação PAP e CHAP

Alguns ISPs configuram seu sistema para que a parte de autenticação da conexão seja feita usando um dos mecanismos de autenticação PAP ou CHAP. Se este for o caso, o ISP não exibirá um prompt `login:` na conexão, mas começará a falar PPP imediatamente.

O PAP é menos seguro que o CHAP, mas a segurança normalmente não é um problema aqui, pois as senhas, embora sejam enviadas como texto simples com o PAP, estão sendo transmitidas apenas por uma linha serial. Não há muito espaço para crackers "escutarem".

As seguintes alterações devem ser feitas:

[.programlisting]
....
13      set authname MyUserName
14      set authkey MyPassword
15      set login
....

Linha 13:::
Esta linha especifica o nome de usuário do PAP/CHAP. Insira o valor correto para _MyUserName_.

Linha 14:::
Esta linha especifica a senha PAP/CHAP . Insira o valor correto para _MyPassword_. Você pode querer adicionar uma linha adicional, como:
+
[.programlisting]
....
16      accept PAP
....
+
ou
+
[.programlisting]
....
16      accept CHAP
....
+
para tornar óbvio que essa é a intenção, mas o PAP e o CHAP são aceitos por padrão.

Linha 15:::
O ISP normalmente não exigirá um login no servidor ao usar o PAP ou o CHAP. Portanto, desabilite a string "set login".

[[userppp-nat]]
==== Usando a funcionalidade de conversão de endereços de rede (NAT) do PPP

O PPP tem a capacidade de usar o NAT interno sem recursos de diverting do kernel. Esta funcionalidade pode ser ativada pela seguinte linha no [.filename]#/etc/ppp/ppp.conf#:

[.programlisting]
....
nat enable yes
....

Como alternativa, o NAT pode ser ativado pela opção de linha de comando `-nat`. Há também uma opção no [.filename]#/etc/rc.conf# chamada `ppp_nat`, que é ativada por padrão.

Ao usar este recurso, pode ser útil incluir as seguintes opções no [.filename]#/etc/ppp/ppp.conf# para habilitar o encaminhamento de conexões de entrada:

[.programlisting]
....
nat port tcp 10.0.0.2:ftp ftp
nat port tcp 10.0.0.2:http http
....

ou para não confiar em nenhuma conexão de entrada

[.programlisting]
....
nat deny_incoming yes
....

[[userppp-final]]
=== Configuração final do sistema

Embora o `ppp` agora esteja configurado, algumas edições ainda precisam ser feitas no [.filename]#/etc/rc.conf#.

Trabalhando de cima para baixo neste arquivo, certifique-se de que a linha `hostname=` esteja configurada:

[.programlisting]
....
hostname="foo.example.com"
....

Se o ISP tiver fornecido um nome de host e um endereço IP estático, use este nome como o nome do host.

Procure pela variável `network_interfaces`. Para configurar o sistema para discar para o ISP sob demanda, certifique-se de que o dispositivo [.filename]#tun0# esteja adicionado à lista, caso contrário, remova-o.

[.programlisting]
....
network_interfaces="lo0 tun0"
ifconfig_tun0=
....

[NOTE]
====
A variável `ifconfig_tun0` deve estar vazia, e um arquivo chamado [.filename]#/etc/start_if.tun0# deve ser criado. Este arquivo deve conter a linha:

[.programlisting]
....
ppp -auto mysystem
....

Este script é executado no momento da configuração da rede, iniciando o daemon do ppp no modo automático. Se esta máquina funcionar como um gateway, considere incluir a opção `-alias`. Consulte a página de manual para maiores detalhes.
====

Certifique-se de que o programa roteador está configurado para `NO` com a seguinte linha em [.filename]#/etc/rc.conf#:

[.programlisting]
....
router_enable="NO"
....

É importante que o daemon `routed` não seja iniciado, pois o `routed` tende a excluir as entradas da tabela de roteamento padrão criadas pelo `ppp`.

É provavelmente uma boa idéia garantir que a linha `sendmail_flags` não inclua a opção `-q`, caso contrário o `sendmail` tentará fazer uma pesquisa de rede de vez em quando, possivelmente fazendo com que sua máquina disque. Você pode tentar:

[.programlisting]
....
sendmail_flags="-bd"
....

A desvantagem é que o `sendmail` é forçado a reexaminar a fila de mensagens sempre que o link ppp subir. Para automatizar isso, inclua `!Bg` no [.filename]#ppp.linkup#:

[.programlisting]
....
1     provider:
2       delete ALL
3       add 0 0 HISADDR
4       !bg sendmail -bd -q30m
....

Uma alternativa é configurar um "dfilter" para bloquear o tráfego SMTP. Consulte os arquivos de exemplo para maiores detalhes.

=== Usando o `ppp`

Tudo o que resta é reiniciar a máquina. Após a reinicialização, digite:

[source,shell]
....
# ppp
....

e, em seguida, o `dial provider` para iniciar a sessão PPP ou para configurar o `ppp` para estabelecer sessões automaticamente quando houver tráfego de saída e o [.filename]#start_if .tun0# não existir, digite:

[source,shell]
....
# ppp -auto provider
....

É possível falar com o programa `ppp` enquanto ele está sendo executado em segundo plano, mas somente se uma porta de diagnóstico adequada tiver sido configurada. Para fazer isso, adicione a seguinte linha à configuração:

[.programlisting]
....
set server /var/run/ppp-tun%d DiagnosticPassword 0177
....

Isso fará com que o PPP escute no soquete de domínio UNIX(TM) especificado, solicitando aos clientes a senha especificada antes de permitir o acesso. O `%d` no nome é substituído pelo número do dispositivo [.filename]#tun# que está em uso.

Uma vez que um socket tenha sido configurado, o programa man:pppctl[8] pode ser usado em scripts que desejam manipular o programa em execução.

[[userppp-mgetty]]
=== Configurando serviços de discagem

A crossref:serialcomms[dialup,Serviço Dial-in] fornece uma boa descrição sobre como ativar serviços dial-up usando o man:getty[8].

Uma alternativa para o `getty` é o port package:comms/mgetty+sendfax[]), uma versão mais inteligente do `getty` projetada com as linhas dial-up em mente.

As vantagens de usar o `mgetty` é que ele _fala_ ativamente com os modems, o que significa que se a porta estiver desligada no [.filename]#/etc/ttys# então o modem não irá atender o telefone.

Versões posteriores do `mgetty` (da 0.99beta em diante) também suportam a detecção automática de fluxos PPP, permitindo acesso ao servidor de clientes sem script.

Consulte a URL http://mgetty.greenie.net/doc/mgetty_toc.html[http://mgetty.greenie.net/doc/mgetty_toc.html] para maiores informações sobre o `mgetty`.

Por padrão, o port package:comms/mgetty+sendfax[] vem com a opção `AUTO_PPP` ativada permitindo que o `mgetty` detecte a fase LCP das conexões PPP e crie automaticamente um shell ppp. No entanto, como a sequência de login/senha padrão não ocorre, é necessário autenticar os usuários usando o PAP ou o CHAP.

Esta seção assume que o usuário compilou com sucesso e instalou o port package:comms/mgetty+sendfax[] em seu sistema.

Assegure-se de que o [.filename]#/usr/local/etc/mgetty+sendfax/login.config# tenha o seguinte:

[.programlisting]
....
/AutoPPP/ -     - /etc/ppp/ppp-pap-dialup
....

Isto diz ao `mgetty` para executar o [.filename]#ppp-pap-dialup# para conexões PPP detectadas.

Crie um arquivo executável chamado [.filename]#/etc/ppp/ppp-pap-dialup# contendo o seguinte:

[.programlisting]
....
#!/bin/sh
exec /usr/sbin/ppp -direct pap$IDENT
....

Para cada linha dial-up ativada em [.filename]#/etc/ttys#, crie uma entrada correspondente em [.filename]#/etc/ppp/ppp.conf#. Isso irá coexistir com as definições que criamos acima.

[.programlisting]
....
pap:
  enable pap
  set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40
  enable proxy
....

Cada usuário que fizer login com este método precisará ter um nome de usuário/senha em [.filename]#/etc/ppp/ppp.secret# ou, como alternativa, adicione a seguinte opção para autenticar os usuários via PAP a partir de [.filename]#/etc/passwd#.

[.programlisting]
....
enable passwdauth
....

Para atribuir à alguns usuários um endereço de IP estático , especifique o endereço como o terceiro argumento em [.filename]#/etc/ppp/ppp.secret#. Consulte o [.filename]#/usr/shared/examples/ppp/ppp.secret.sample# para exemplos.

[[ppp-troubleshoot]]
== Solução de problemas de conexões PPP

Esta seção aborda alguns problemas que podem surgir ao usar PPP em uma conexão de modem. Alguns ISPs apresentam o prompt `ssword` enquanto outros apresentam `password`. Se o script `ppp` não for escrito de acordo, a tentativa de login falhará. A maneira mais comum de depurar as conexões `ppp` é conectando manualmente conforme descrito nesta seção.

=== Verifique os Device Nodes

Ao usar um kernel personalizado, certifique-se de incluir a seguinte linha no arquivo de configuração do kernel:

[.programlisting]
....
device   uart
....

O dispositivo [.filename]#uart# já está incluído no kernel `GENERIC`, portanto, nenhuma etapa adicional é necessária neste caso. Basta verificar a saída do `dmesg` para o dispositivo do modem com:

[source,shell]
....
# dmesg | grep uart
....

Isso deve exibir alguma saída pertinente sobre os dispositivos [.filename]#uart#. Estas são as portas COM que precisamos. Se o modem funcionar como uma porta serial padrão, ele deve estar listado em [.filename]#uart1# ou [.filename]#COM2#. Nesse caso, uma recompilação do kernel não é necessária. Ao fazer a verificação, se o modem estiver em [.filename]#uart1#, o dispositivo do modem será [.filename]#/dev/cuau1#.

=== Conectando Manualmente

Conectar-se à Internet controlando manualmente o `ppp` é rápido, fácil e uma ótima maneira de depurar uma conexão ou simplesmente obter informações sobre como o ISP trata as conexões `ppp` do cliente. Vamos iniciar o PPP na linha de comando. Note que em todos os nossos exemplos nós usaremos _example_ como o nome do host da máquina rodando o PPP. Para iniciar o `ppp`:

[source,shell]
....
# ppp
....

[source,shell]
....
ppp ON example> set device /dev/cuau1
....

Este segundo comando define o dispositivo do modem como [.filename]#cuau1#.

[source,shell]
....
ppp ON example> set speed 115200
....

Isso define a velocidade de conexão para 115.200 kbps.

[source,shell]
....
ppp ON example> enable dns
....

Isto diz ao `ppp` para configurar o resolver e adicionar as linhas do servidor de nomes ao [.filename]#/etc/resolv.conf#. Se o `ppp` não puder determinar o nome do host, ele poderá ser configurado manualmente mais tarde.

[source,shell]
....
ppp ON example> term
....

Isso alterna para o modo de "terminal" para controlar manualmente o modem.

[.programlisting]
....
deflink: Entering terminal mode on /dev/cuau1
type '~h' for help
....

[source,shell]
....
 at
OK
 atdt123456789
....

Use o comando `at` para inicializar o modem, então use o comando `atdt` e o número o ISP para iniciar o processo de discagem.

[source,shell]
....
CONNECT
....

Confirmação da conexão, se tivermos problemas de conexão, não relacionados ao hardware, aqui é onde tentaremos resolvê-los.

[source,shell]
....
ISP Login:myusername
....

Nesse prompt, responda com o nome de usuário fornecido pelo ISP.

[source,shell]
....
ISP Pass:mypassword
....

Nesse prompt, responda com a senha fornecida pelo ISP. Assim como ocorre ao se logar no FreeBSD, a senha não será exibida quando você a digitar.

[source,shell]
....
Shell or PPP:ppp
....

Dependendo do ISP, este aviso pode não aparecer. Em caso afirmativo, ele está perguntando se deve usar um shell no provedor ou iniciar o `ppp`. Neste exemplo, o `ppp` foi selecionado para estabelecer uma conexão com a Internet.

[source,shell]
....
Ppp ON example>
....

Observe que neste exemplo o primeiro `p` foi capitalizado. Isso mostra que nós nos conectamos com sucesso ao ISP.

[source,shell]
....
PPp ON example>
....

Nós nos autenticamos com sucesso com nosso ISP e estamos aguardando que o endereço IP seja atribuído.

[source,shell]
....
PPP ON example>
....

Fizemos a negociação de um endereço IP e concluímos nossa conexão com êxito.

[source,shell]
....
PPP ON example>add default HISADDR
....

Aqui nós adicionamos nossa rota padrão, precisamos fazer isso antes de podermos conversar com o mundo externo, já que atualmente a única conexão estabelecida é com o peer. Se isso falhar devido a rotas existentes, coloque o caractere `!` na frente do `add`. Alternativamente, defina isso antes de fazer a conexão real e ele negociará uma nova rota de acordo.

Se tudo correu bem, agora deveríamos ter uma conexão ativa com a Internet, que poderia ser colocada em segundo plano usando kbd:[CTRL+z] Se o `PPP` retornar para `ppp`, a conexão será perdida. É bom saber isso porque mostra o status da conexão. Os P maiúsculos representam uma conexão com o ISP e os p minúsculos mostram que a conexão foi perdida.

=== Depuração

Se uma conexão não puder ser estabelecida, desligue o fluxo de hardware CTS/RTS usando `set ctsrts off`. Normalmente este é o problema quando nos conectamos há alguns servidores de terminal com PPP, onde o PPP trava quando tenta gravar dados no link de comunicação e aguarda um Clear To Send (CTS), sinal que pode nunca vir. Ao usar esta opção, inclua `set accmap`, pois isso pode ser necessário para evitar que o hardware dependa de passar certos caracteres de ponta a ponta, na maioria das vezes XON/XOFF. Consulte man:ppp[8] para obter maiores informações sobre essa opção e como ela é usada.

Um modem mais antigo pode precisar de `set parity even`. A paridade é definida como none por padrão, mas é usada para verificação de erros com um grande aumento no tráfego, em modems mais antigos.

O PPP pode não retornar ao modo de comando, que geralmente é um erro de negociação em que o ISP está aguardando a negociação começar. Neste ponto, usando `~p` forçará o ppp a começar a enviar as informações de configuração.

Se um prompt de login nunca aparecer, a autenticação PAP ou CHAP provavelmente será necessária. Para usar PAP ou CHAP, adicione as seguintes opções ao PPP antes de entrar no modo terminal:

[source,shell]
....
ppp ON example> set authname myusername
....

Onde _myusername_ deve ser substituído pelo nome de usuário que foi atribuído pelo ISP.

[source,shell]
....
ppp ON example> set authkey mypassword
....

Onde _mypassword_ deve ser substituído pela senha que foi atribuída pelo ISP.

Se uma conexão for estabelecida, mas não conseguir encontrar nenhum nome de domínio, tente utilizar o man:ping[8] em um endereço IP. Se houver 100 por cento (100%) de perda de pacotes, é provável que uma rota padrão não tenha sido atribuída. Verifique novamente se `add default HISADDR` foi definido durante a conexão. Se uma conexão puder ser feita para um endereço IP remoto, é possível que um endereço de resolvedor não tenha sido adicionado ao [.filename]#/etc/resolv.conf#. Este arquivo deve se parecer com:

[.programlisting]
....
domain example.com
nameserver x.x.x.x
nameserver y.y.y.y
....

Onde _x.x.x.x_ e _y.y.y.y_ deve ser substituído pelo endereço IP dos servidores DNS do ISP.

Para configurar man:syslog[3] para fornecer o registro para a conexão PPP, verifique se essa linha existe no [.filename]#/etc/syslog.conf#:

[.programlisting]
....
!ppp
*.*     /var/log/ppp.log
....

[[pppoe]]
== Usando o PPP sobre Ethernet (PPPoE)

Esta seção descreve como configurar o PPP sobre Ethernet (PPPoE).

Aqui está um exemplo de [.filename]#ppp.conf# funcional:

[.programlisting]
....
default:
  set log Phase tun command # you can add more detailed logging if you wish
  set ifaddr 10.0.0.1/0 10.0.0.2/0

name_of_service_provider:
  set device PPPoE:xl1 # replace xl1 with your Ethernet device
  set authname YOURLOGINNAME
  set authkey YOURPASSWORD
  set dial
  set login
  add default HISADDR
....

Como `root`, execute:

[source,shell]
....
# ppp -ddial name_of_service_provider
....

Adicione o seguinte ao [.filename]#/etc/rc.conf#:

[.programlisting]
....
ppp_enable="YES"
ppp_mode="ddial"
ppp_nat="YES"	# if you want to enable nat for your local network, otherwise NO
ppp_profile="name_of_service_provider"
....

=== Usando um nome de perfil PPPoE

Às vezes, será necessário usar nome de perfil para estabelecer a conexão. Nomes de perfil são usados para distinguir entre diferentes servidores PPPoE conectados a uma determinada rede.

Qualquer informação do nome do perfil necessário deve estar na documentação fornecida pelo ISP.

Como último recurso, pode-se tentar instalar o pacote ou port package:net/rr-pppoe[]. Lembre-se, no entanto, que isso pode desprogramar o seu modem e torná-lo inútil, então pense duas vezes antes de fazê-lo. Basta instalar o programa enviado com o modem. Em seguida, acesse o menu menu:System[] do programa. O nome do perfil deve estar listado lá. Geralmente é _ISP_.

O nome do perfil (service tag) será usado na entrada de configuração PPPoE em [.filename]#ppp.conf# como a parte do provedor para o `set device`. Consulte man:ppp[8] para detalhes completos. Deve ficar assim:

[.programlisting]
....
set device PPPoE:xl1:ISP
....

Não se esqueça de alterar o _xl1_ para o dispositivo adequado para a placa Ethernet.

Não se esqueça de alterar o _ISP_ para o nome de perfil.

Para informações adicionais, consulte http://web.archive.org/web/20130907043447/http://renaud.waldura.com:80/doc/freebsd/pppoe/[Banda larga mais barata com o FreeBSD em DSL] por Renaud Waldura.

[[ppp-3com]]
=== PPPoE com um 3Com(TM)HomeConnect(TM) ADSL Modem Dual Link

Este modem não segue a especificação PPPoE definida em http://www.faqs.org/rfcs/rfc2516.html[RFC 2516].

Para tornar o FreeBSD capaz de se comunicar com este dispositivo, um sysctl deve ser configurado. Isso pode ser feito automaticamente no momento da inicialização, atualizando o [.filename]#/etc/sysctl.conf#:

[.programlisting]
....
net.graph.nonstandard_pppoe=1
....

ou pode ser feito imediatamente com o comando:

[source,shell]
....
# sysctl net.graph.nonstandard_pppoe=1
....

Infelizmente, como essa é uma configuração valida para todo o sistema, não é possível falar com um cliente ou servidor PPPoE normal e um 3Com(TM)HomeConnect(TM) Modem ADSL ao mesmo tempo.

[[pppoa]]
== Usando PPP sobre ATM (PPPoA)

Esta sessão descreve como configurar o PPP sobre ATM (PPPoA). O PPPoA é uma escolha popular entre os provedores europeus de DSL.

=== Usando o mpd

O aplicativo mpd pode ser usado para conectar-se a uma variedade de serviços, em particular serviços PPTP. Ele pode ser instalado usando o pacote ou port package:net/mpd5[]. Muitos modems ADSL exigem que um túnel PPTP seja criado entre o modem e o computador.

Uma vez instalado, configure o mpd para adequar-se às configurações do provedor. O port coloca um conjunto de arquivos de configuração de exemplos os quais são bem documentados em [.filename]#/usr/local/etc/mpd/#. Um guia completo para configurar o mpd está disponível no formato HTML em [.filename]#/usr/ports/shared/doc/mpd/#. Aqui está uma configuração de exemplo para conectar-se a um serviço ADSL com o mpd. A configuração está espalhada em dois arquivos, primeiro o [.filename]#mpd.conf#:

[NOTE]
====
Este exemplo de [.filename]#mpd.conf# só funciona com o mpd 4.x.
====

[.programlisting]
....
default:
    load adsl

adsl:
    new -i ng0 adsl adsl
    set bundle authname username <.>
    set bundle password password <.>
    set bundle disable multilink

    set link no pap acfcomp protocomp
    set link disable chap
    set link accept chap
    set link keep-alive 30 10

    set ipcp no vjcomp
    set ipcp ranges 0.0.0.0/0 0.0.0.0/0

    set iface route default
    set iface disable on-demand
    set iface enable proxy-arp
    set iface idle 0

    open
....

<.> O nome de usuário usado para autenticar com seu ISP.

<.> A senha usada para autenticar com seu ISP.

Informações sobre o link, ou links, a estabelecer são encontradas em [.filename]#mpd.links#. Um exemplo do [.filename]#mpd.links# para acompanhar o exemplo acima é dado abaixo:

[.programlisting]
....
adsl:
    set link type pptp
    set pptp mode active
    set pptp enable originate outcall
    set pptp self 10.0.0.1 <.>
    set pptp peer 10.0.0.138 <.>
....

<.> O endereço IP do computador FreeBSD executando o mpd.

<.> O endereço IP do modem ADSL. O padrão do Alcatel SpeedTouch(TM) padrão é `10.0.0.138`.

É possível inicializar a conexão facilmente, emitindo o seguinte comando como `root`:

[source,shell]
....
# mpd -b adsl
....

Para ver o status da conexão:

[source,shell]
....
% ifconfig ng0
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500
     inet 216.136.204.117 --> 204.152.186.171 netmask 0xffffffff
....

Usar o mpd é a maneira recomendada de se conectar a um serviço ADSL com o FreeBSD.

=== Usando o pptpclient

Também é possível usar o FreeBSD para conectar-se a outros serviços PPPoA usando o package:net/pptpclient[].

Para usar o package:net/pptpclient[] para conectar-se a um serviço DSL, instale o port ou o pacote e edite o [.filename]#/etc/ppp/ppp.conf#. Uma seção de exemplo do [.filename]#ppp.conf# é dada abaixo. Para maiores informações sobre as opções do [.filename]#ppp.conf# consulte man:ppp[8].

[.programlisting]
....
adsl:
 set log phase chat lcp ipcp ccp tun command
 set timeout 0
 enable dns
 set authname username <.>
 set authkey password <.>
 set ifaddr 0 0
 add default HISADDR
....

<.> O nome de usuário no provedor de DSL.

<.> A senha da sua conta.

[WARNING]
====

Como a senha da conta é adicionada ao [.filename]#ppp.conf# em forma de texto simples, certifique-se de que ninguém possa ler o conteúdo deste arquivo:

[source,shell]
....
# chown root:wheel /etc/ppp/ppp.conf
# chmod 600 /etc/ppp/ppp.conf
....

====

Isso abrirá um túnel para uma sessão PPP para o roteador DSL. Os modems Ethernet DSL têm um endereço IP LAN pré-configurado para conexão. No caso do Alcatel SpeedTouch(TM) Home, este endereço é `10.0.0.138`. A documentação do roteador deve listar o endereço que o dispositivo usa. Para abrir o túnel e iniciar uma sessão PPP:

[source,shell]
....
# pptp address adsl
....

[TIP]
====

Se um E comercial ("&") for adicionado ao final desse comando, o pptp retornará ao prompt.
====

Um dispositivo de túnel virtual [.filename]#tun# será criado para interação entre os processos do pptp e do ppp. Quando o prompt for retornado ou o processo do pptp confirmar uma conexão, examine o túnel:

[source,shell]
....
% ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        inet 216.136.204.21 --> 204.152.186.171 netmask 0xffffff00
	Opened by PID 918
....

Se a conexão falhar, verifique a configuração do roteador, que geralmente é acessível usando um navegador da web. Além disso, examine a saída do `pptp` e o conteúdo do arquivo de log [.filename]#/var/log/ppp.log# para pistas.
