18.7. Usando SLIP

Originalmente contribuído por Satoshi Asami. Com adições de Guy Helmer e Piero Serini.

18.7.1. Ajustando um cliente SLIP

Mostraremos uma maneira de ajustar uma máquina FreeBSD para SLIP numa rede de endereços estáticos. Para ajuste dinâmico de endereços (seu endereço IP muda cada vez que se conecta) uma configuração mais complexa deve ser feita.

Primeiro determine em qual porta serial seu modem está conectado. Muitas pessoas ajustam um link simbólico, /dev/modem, que aponta para o nome real do dispositivo, /dev/cuaaN. Isso permite que você abstraia o nome do dispositivo caso você precise mover o modem para outra porta. Isso pode ser bastante útil quando você precisa arrumar um monte de arquivos no /etc e arquivos .kermrc por todo o sistema!

Nota: /dev/cuaa0 é COM1, cuaa1 é COM2, etc.

Tenha certeza de ter o seguinte na configuração do seu kernel:

pseudo-device   sl      1

Isso é incluído no kernel GENERIC, portanto não deve ser um problema a menos que você o removeu.

18.7.1.1. Coisas Que Você Tem De Fazer Apenas Uma Vez

  1. Adicione sua máquina, gateway e servidores de nomes ao arquivo /etc/hosts. O meu se parece com isso:

    127.0.0.1         localhost loghost
    136.152.64.181    water.CS.Example.EDU water.CS water
    136.152.64.1        inr-3.CS.Example.EDU inr-3 slip-gateway
    128.32.136.9        ns1.Example.EDU ns1
    128.32.136.12      ns2.Example.EDU ns2
    
  2. Tenha certeza de que você tem hosts antes de bind no seu /etc/host.conf em versões do FreeBSD anteriores a 5.0. Desde o FreeBSD 5.0, o sistema usa o arquivo /etc/nsswitch.conf portanto tenha certeza de ter files antes de dns na linha hosts deste arquivo. Sem estes parâmetros coisas estranhas podem acontecer.

  3. Edite o arquivo /etc/rc.conf.

    1. Define seu hostname editando a linha que diz:

      hostname="meunome.my.dominio"
      

      O hostname completo da sua máquina deve ser posto lá.

    2. Adicione sl0 a listagem de interfaces de rede editando a linha que diz:

      network_interfaces="lo0"
      

      para:

      network_interfaces="lo0 sl0"
      
    3. Defina algumas opções de inicialização da sl0 editando a linha:

      ifconfig_sl0="inet ${hostname} slip-gateway netmask 0xffffff00 up"
      
    4. Defina o roteador padrão editando a linha:

      defaultrouter="NO"
      

      para:

      defaultrouter="slip-gateway"
      
  4. Crie um arquivo /etc/resolv.conf que contenha:

    domain CS.Exemplo.BR
    nameserver 128.32.136.9
    nameserver 128.32.136.12
    

    Como você pode ver, estas opções definem os servidores de nomes. É claro que o nome do domínio e o endereços dos servidores dependem do seu ambiente.

  5. Ajuste uma senha para root e toor (e qualquer outra conta que não tenha uma senha).

  6. Reinicie sua máquina e tenha certeza de que ela iniciou com o hostname correto.

18.7.1.2. Criando uma Conexão SLIP

  1. Disque, digitar slip no prompt, entre com o nome da sua máquina e a senha. O que é necessário para estabelecer a conexão varia de acordo com seu ambiente. Se você usa kermit, pode tentar um script como o abaixo:

    # kermit setup
    set modem hayes
    set line /dev/modem
    set speed 115200
    set parity none
    set flow rts/cts
    set terminal bytesize 8
    set file type binary
    # A próxima macro vai discar e logar
    define slip dial 643-9600, input 10 =>, if failure stop, -
    output slip\x0d, input 10 Username:, if failure stop, -
    output silvia\x0d, input 10 Password:, if failure stop, -
    output ***\x0d, echo \x0aCONNECTED\x0a
    

    É claro que você precisa trocar o hostname e a senha. Depois de fazer isso você pode digitar slip do prompt do kermit para se conectar.

    Nota: Deixar sua senha em texto puro no sistema de arquivos geralmente é uma idéia.

  2. Deixe o kermit lá (você pode suspendê-lo com um Ctrl-z) e, como root, digite:

    # slattach -h -c -s 115200 /dev/modem
    

    Se você conseguir pingar alguma máquina no outro lado do roteador, você está conectado! Se isso não funcionar você pode tentar usar a opção -a em vez de -c como um argumento para slattach.

18.7.1.3. Como Desligar uma Conexão

Faça o seguinte:

# kill -INT `cat /var/run/slattach.modem.pid`

para matar o slattach. Tenha em mente que você precisa ser root para realizar esta operação. Volte para o kermit (através da execução do comando fg se você o suspendeu) e saia dele (com o comando q).

O página manual do slattach diz que você tem de usar ifconfig sl0 down para marcar a interface como desligada, mas isso não parece fazer nenhuma diferença para mim. (ifconfig sl0 diz a mesma coisa.)

Algumas vezes, seu modem pode se recusar a liberar a linha (o meu faz isso as vezes). Nesse caso, simplesmente inicie o kermit e saia novamente. Ele geralmente libera a linha na segunda tentativa.

18.7.1.4. Resolução de Problemas

Se isso não funcionar, sinta-se livre para me perguntar. As coisas que as pessoas têm feito até agora:

  • Não usar -c ou -a no slattach (Isso não deve ser fatal, mas alguns usuários tem informado que isso resolve os problemas deles).

  • Usar s10 em vez de sl0 (pode ser difícil de ver a diferença em algumas fontes).

  • Tente ifconfig sl0 para ver o status da sua interface. Por exemplo, você pode ver:

    # ifconfig sl0
    sl0: flags=10<POINTOPOINT>
        inet 136.152.64.181 --> 136.152.64.1 netmask ffffff00
    
  • Se você ver ``no route to host'' do ping, pode haver um problema com sua tabela de roteamento. Você pode usar o comando netstat -r para mostra as rotas correntes:

    # netstat -r
    Routing tables
    Destination      Gateway        Flags     Refs     Use IfaceMTU    Rtt    Netmasks:
    
    (root node)
    (root node)
    
    Route Tree for Protocol Family inet:
    (root node) =>
    default   inr-3.Example.EDU UG    8   224515 sl0 -      -
    localhost.Exampl localhost.Example.  UH   5    42127 lo0 -       0.438
    inr-3.Example.ED water.CS.Example.E UH    1 0 sl0 -      -
    water.CS.Example localhost.Example.  UGH    34 47641234 lo0 -       0.438
    (root node)
    

    Os exemplos anteriores são de um sistema relativamente carregado. Os números no seu sistema vão variar dependendo da atividade de rede.

18.7.2. Configurando um Servidor SLIP

Esse documento fornece sugestões para se ajustar um servidor SLIP em um sistema FreeBSD, o que tipicamente significa configurar o sistema para que inicie as conexões automaticamente assim que ocorrer o login de clientes remotos.

18.7.2.1. Pré-requisitos

Essa seção é bastante técnica em sua natureza, portanto conhecimento sobre o assunto é requerido. Assumimos que você esteja familiar com a suíte de protocolos TCP/IP, e em particular, endereçamento, máscaras de rede, subnetting, roteamento e protocolos de roteamento, como o RIP. Configurar serviços SLIP em um servidor de acesso discado requer conhecimento de todos esses conceitos, e se você não está familiar com eles, por favor leia o livro TCP/IP Network Administration de Craig Hunt publicado pela O'Reilly & Associates, Inc. ( ISBN 0-937175-82-X), ou os livros de Douglas Comer sobre TCP/IP.

É assumido que você já ajustou seu modem(s) e configurou os arquivos do sistema apropriados para permitir logins através de seus modems. Se você não preparou o sistema ainda para isso, por favor veja o tutorial sobre como configurar serviços de acesso discado; se você tem um navegador disponível, navegue pela lista de tutoriais disponíveis em http://www.FreeBSD.org/. Você também pode verificar as páginas manuais sio(4) para informações sobre o driver de dispositivo para portas seriais e ttys(5), gettytab(5), getty(8), & init(8) para informação sobre como configurar o sistema para aceitar logins de modems, e talvez stty(1) para informações sobre como ajustar os parâmetros da porta serial (como clocal para interfaces seriais diretamente conectadas).

18.7.2.2. Rápida Introdução

Na configuração típica, usar o FreeBSD como um servidor SLIP funciona da seguinte forma: um usuário SLIP disca para seu servidor SLIP e se autentica com um login especial SLIP que usa /usr/sbin/sliplogin como sua shell. O programa sliplogin navega pelo arquivo /etc/sliphome/slip.hosts para achar uma linha que contenha esse usuário, e se ele encontra, conecta a linha serial com uma interface SLIP disponível e então roda o script shell /etc/sliphome/slip.login para configurar a interface SLIP.

18.7.2.2.1. Exemplo de um Login

Por exemplo, se um usuário SLIP fosse Shelmerg, a entrada de Shelmerg no arquivo /etc/master.passwd iria ser parecida com isso:

Shelmerg:password:1964:89::0:0:Guy Helmer - SLIP:/usr/users/Shelmerg:/usr/sbin/sliplogin

Quando Shelmerg entrasse, sliplogin iria procurar por uma linha em /etc/sliphome/slip.hosts que contivesse o usuário; por exemplo, pode haver uma linha no /etc/sliphome/slip.hosts que fosse assim:

Shelmerg   dc-slip sl-helmer       0xfffffc00        autocomp

sliplogin vai encontrar essa linha, ligar a linha serial à próxima interface SLIP disponível e então executar /etc/sliphome/slip.login desta forma:

/etc/sliphome/slip.login 0 19200 Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp

Se tudo correr bem, /etc/sliphome/slip.login irá executar o ifconfig para a interface SLIP a qual sliplogin se ligou (interface 0, no exemplo acima, que era o primeiro parâmetro na lista dada a slip.login) para ajustar o endereço IP local (dc-slip), o endereço IP remoto (sl-helmer), a máscara de rede (0xfffffc00), e qualquer flag adicional (autocomp). Se alguma coisa acontecer de errado, sliplogin geralmente grava uma mensagem em /var/log/messages (veja a página manual do syslogd(8) e syslog.conf(5) e talvez verifique o /etc/syslog.conf para ver o que o syslogd está gravando e onde ele está gravando).

OK, chega de exemplos -- vamos ajustar o sistema.

18.7.2.3. Configuração do Kernel

O kernel padrão do FreeBSD vem com duas interfaces SLIP definidas (sl0 e sl1); você pode usar netstat -i para ver se alguma dessas interfaces está definida no seu kernel.

Exemplo do netstat -i:

Name Mtu   Network     Address     Ipkts Ierrs    Opkts Oerrs Coll
ed0   1500 <Link>0.0.c0.2c.5f.4a   291311     0   174209     0   133
ed0   1500 138.247.224 ivory         291311     0   174209     0   133
lo0   65535 <Link>                79     0       79     0     0
lo0   65535 loop    localhost        79     0       79     0     0
sl0*  296   <Link>                 0     0    0     0     0
sl1*  296   <Link>                 0     0    0     0     0

As interfaces sl0 e sl1 mostradas pelo netstat -i indicam que existem duas interfaces SLIP no kernel. (O asterisco depois de sl0 e sl1 indica que as interfaces estão ``desligadas''.)

Entretanto, o kernel padrão do FreeBSD não vem configurado para encaminhar pacotes (por padrão, uma máquina FreeBSD não funciona como roteador) devido aos requerimentos do RFC para hosts da Internet (ver RFCs 1009 [Requeriments for Internet Gateways], 1222 [Requirements for Internet Hosts -- Communication Layers], e talvez 1127 [A Perspective on the Host Requirements]). Se você quer que seu servidor SLIP haja como um roteador, edite o arquivo /etc/rc.conf e troque o valor da opção gateway_enable para YES.

Você precisará reiniciar para que as novas definições entrem em ação.

Você notará que perto do final da configuração do kernel padrão (/sys/i386/conf/GENERIC) haverá uma linha assim:

pseudo-device sl 2

Essa é a linha que define o número de dispositivos SLIP disponíveis no kernel; o número no final da linha é o máximo número de conexões SLIP que podem estar operando ao mesmo tempo.

Por favor veja Capítulo 9 em Configurando o kernel do FreeBSD para maiores informações sobre como reconfigurar seu kernel.

18.7.2.4. Configuração do Sliplogin

Como mencionado anteriormente, existem três arquivos no diretório /etc/sliphome que são parte da configuração do /usr/sbin/sliplogin (veja sliplogin(8) para a página manual do sliplogin): slip.hosts, que define os usuários SLIP associados aos endereços IP; slip.login, que geralmente configura a interface SLIP; e (opcionalmente) slip.logout, que desfaz o que o slip.login fez quando a conexão serial for terminada.

18.7.2.4.1. Configuração do slip.hosts

/etc/sliphome/slip.hosts contém linhas que têm até quatro ítens separados por espaços:

  • Login ID do usuários SLIP

  • Endereço local (local para o servidor SLIP) do link SLIP

  • Remote address of the SLIP link

  • Máscara de Rede

Os endereços local e remoto podem ser nomes (traduzidos para endereços IP pelo /etc/hosts ou por um serviço de nomes, dependendo das suas especificações no /etc/nsswitch.conf no FreeBSD 5.X ou /etc/host.conf no FreeBSD 4.X), e a máscara de rede pode ser um nome que será traduzido pelo /etc/networks. Em um sistema de exemplo o arquivo /etc/sliphome/slip.hosts pode se parecer com isso:

#
# login local-addr      remote-addr     mask        opt1    opt2
#                          (normal,compress,noicmp)
#
Shelmerg dc-slip       sl-helmerg      0xfffffc00      autocomp

No final da linha existe uma ou mais opções.

  • normal -- sem compressão de cabeçalho

  • compress -- comprime os cabeçalhos

  • autocomp -- comprime os cabeçalhos se a ponta remota permitir isso

  • noicmp -- desabilita pacotes ICMP (portanto qualquer pacote ``ping'' será descartado em vez de utilizar sua conexão)

Sua escolha de endereços locais e remotos para os links SLIP depende se você irá dedicar uma sub-rede ou se irá utilizar ``proxy ARP'' no servidor SLIP (não é proxy ARP ``verdadeiro'' mas essa é a terminologia utilizada nessa seção para descrever isso). Se você não tem certeza de qual método escolher ou como definir os endereços IP, por favor veja os livros sobre TCP/IP na listagem de pré-requisitos (Seção 18.7.2.1) e/ou consulte seu gerente de rede.

Se você vai utilizar uma rede separada para seus clientes SLIP, você deverá alocar os endereços IP para seus clientes dentre os disponíveis para essa rede escolhida. Então, você provavelmente precisará configurar uma rota estática para essa rede SLIP através do seu servidor SLIP no roteador mais próximo.

Caso você use ``proxy ARP'', você precisará definir os endereços IP dos seus clientes SLIP dentro os disponíveis na rede Ethernet do seu servidor e também deverá ajustar o /etc/sliphome/slip.login e /etc/sliphome/slip.logout para usarem arp(8) para gerenciar as entradas proxy-ARP na tabela ARP do servidor SLIP.

18.7.2.4.2. Configuração do slip.login

Um /etc/sliphome/slip.login típico se parece com o abaixo:

#!/bin/sh -
#
#       @(#)slip.login 5.1 (Berkeley) 7/1/90

#
# arquivo de login genérico para uma linha slip. sliplogin invoca
# isso com os seguintes parâmetros:
#      1    2    3  4     5  6     7-n
#   slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 inet $4 $5 netmask $6

Esse arquivo slip.login meramente executa o comando ifconfig para a interface SLIP apropriada com os endereços local e remoto e a máscara de rede da interface.

Se você decidiu utilizar ``proxy ARP'' (em vez de alocar uma sub-rede para seus clientes SLIP) seu /etc/sliphome/slip.login irá se parecer com o abaixo:

#!/bin/sh -
#
#       @(#)slip.login 5.1 (Berkeley) 7/1/90

#
# arquivo de login genérico para uma linha slip. sliplogin invoca
# isso com os seguintes parâmetros:
#      1    2    3  4     5  6     7-n
#   slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 inet $4 $5 netmask $6
# Responde requisições ARP para o cliente SLIP com nosso endereço Ethernet
/usr/sbin/arp -s $5 00:11:22:33:44:55 pub

Essa linha adicional, arp -s $5 00:11:22:33:44:55 pub cria uma entrada na tabela ARP do servidor. Essa entrada faz com que o servidor responda com o endereço MAC do próprio servidor quando alguma outra máquina na rede Ethernet desejar falar com endereço IP do cliente SLIP.

Quando estiver utilizando o exemplo acima tenha certeza de trocar o endereço MAC (00:11:22:33:44:55) pelo endereço da placa de rede Ethernet do seu sistema ou o ``proxy ARP'' definitivamente não funcionará! Você pode descobrir o endereço MAC do seu servidor olhando a saída do comando netstat -i; a segunda linha deve se parecer com isso:

ed0   1500 <Link>0.2.c1.28.5f.4a  191923 0   129457     0   116

Isso indica que o endereço da placa de rede, o MAC address, é 00:02:c1:28:5f:4a -- os pontos no endereço fornecido por netstat -i precisam ser trocados por dois pontos e devem ser adicionados zeros em qualquer número hexadecimal que tenha um só digito para converter para o formato que o arp(8) deseja; veja a página manual do arp(8) para informações completas de utilização.

Nota: Quando você cria o /etc/sliphome/slip.login e /etc/sliphome/slip.logout, o bit ``execute'' (chmod 755 /etc/sliphome/slip.login /etc/sliphome/slip.logout) precisa estar definida, ou sliplogin não conseguirá executá-los.

18.7.2.4.3. Configuração do slip.logout

O /etc/sliphome/slip.logout não é estritamente necessário (a não ser que você esteja implementando ``proxy ARP''), mas se você decidir criá-lo abaixo temos um exemplo básico do script:

#!/bin/sh -
#
#       slip.logout

#
# arquivo de login genérico para uma linha slip. sliplogin invoca
# isso com os seguintes parâmetros:
#      1    2    3  4     5  6     7-n
#   slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 down

Se você estiver utilizando ``proxy ARP'' irá querer que o /etc/sliphome/slip.logout remova a entrada ARP do cliente SLIP:

#!/bin/sh -
#
#       @(#)slip.logout

#
# arquivo de login genérico para uma linha slip. sliplogin invoca
# isso com os seguintes parâmetros:
#      1    2    3  4     5  6     7-n
#   slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 down
# Para de responder requisições ARP para o cliente SLIP
/usr/sbin/arp -d $5

O comando arp -d $5 remove a entrada ARP que o slip.login adicionou quando o cliente SLIP se conectou.

É necessário repetir: tenha certeza de que o /etc/sliphome/slip.logout tem o bit de execução definido depois que você criá-lo (por exemplo, chmod 755 /etc/sliphome/slip.logout).

18.7.2.5. Considerações de Roteamento

Se você não está utilizando ``proxy ARP'' para rotear os pacotes entre seus clientes SLIP e o resto de sua rede (e talvez a Internet), você deve provavelmente ter rotas estáticas para seus roteadores para rotear a sub-rede dos seus clientes SLIP via seu servidor SLIP.

18.7.2.5.1. Rotas Estáticas

Adicionar rotas estáticas para seus roteadores mais próximos pode ser problemático (ou impossível se você não tem autoridade para isso). Se você tem uma rede com diversos roteadores, alguns deles, como os feitos pela Cisco e Proteon, podem não apenas precisar ter as rotas configuradas mas também precisam saber sobre quais rotas eles devem informar os outros roteadores, portanto alguma experiência e certos ajustes podem ser necessários para fazer com que sua rede baseada em rotas estáticas funcione.

18.7.2.5.2. Executando o gated

Nota: O gated é um programa proprietário que não tem seu código disponível para o público mais (informações adicionais no site do gated). Essa seção só existe para manter compatibilidade para as pessoas que ainda estão utilizando a versão antiga.

Uma alternativa para as dores de cabeça com rotas estáticas é instalar o gated no seu servidor SLIP e configurar ele para usar os protocolos de roteamento apropriado (RIP/OSPF/BGP/EGP) para dizer aos outros roteadores sobre sua rede SLIP. Você precisará editar um arquivo /etc/gated.conf para configurar seu gated; aqui está um exemplo, similar ao que o autor utilizou em um servidor SLIP FreeBSD:

#
# gated configuration file for dc.dsu.edu; for gated version 3.5alpha5
# Only broadcast RIP information for xxx.xxx.yy out the ed Ethernet interface
#
#
# tracing options
#
traceoptions "/var/tmp/gated.output" replace size 100k files 2 general ;

rip yes {
  interface sl noripout noripin ;
  interface ed ripin ripout version 1 ;
  traceoptions route ;
} ;

#
# Turn on a bunch of tracing info for the interface to the kernel:
kernel {
  traceoptions remnants request routes info interface ;
} ;

#
# Propagate the route to xxx.xxx.yy out the Ethernet interface via RIP
#

export proto rip interface ed {
  proto direct {
      xxx.xxx.yy mask 255.255.252.0 metric 1; # SLIP connections
  } ;
} ;

#
# Accept routes from RIP via ed Ethernet interfaces
    
import proto rip interface ed {
  all ;
} ;

O exemplo acima de um arquivo gated.conf envia informação de roteamento sobre a sub-rede SLIP xxx.xxx.yy via RIP por Ethernet; se você está utilizando um driver Ethernet diferente do ed você precisará trocar as referencias a ed pela interface apropriada. Esse exemplo também configura a gravação de informações de debug sobre a atividade do gated; você pode certamente desligar isso se o gated funciona OK para você. Você precisará trocar o xxx.xxx.yy pelo endereço da sua rede SLIP (tenha certeza de trocar a máscara de rede na cláusula proto direct também).

Uma vez que você instalou e configurou o gated no seu sistema você precisará dizer aos script de inicialização do FreeBSD para rodarem o gated no lugar do routed. A maneira mais fácil é definir as variáveis router e router_flags no /etc/rc.conf. Por favor veja a página manual do gated para mais informações.

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>.