logo titulo
anterior indice proximo

Administração de Redes


Redes interconectam computadores para transferência de informações com mail, new (notícias), facilidades como login remoto, transferência de arquivos ou hipertexto. Existem dois mecanismos principais para essa finalidade no Linux, uucp e tcp/ip. O primeiro, que remonta aos anos 70, com a saudosa Bell Co., foi muito utilizado (e ainda é usado hoje) para formar a rede Usenet. A maioria dos seus nodos tinha conexão discada, temporária, e as mensagens entre as máquinas ficam aguardando as próximas conexões para serem enviadas de um nodo a outro da rede. O segundo, tcp/ip, é o mais usado hoje, popularizado pela Internet. É o q meio que serve de transporte para nossos e-mails, canais de irc e icq, e principalmente para o acesso via http, onde as páginas dos browsers encontram hipertextos para o deleite do usuário. Trataremos exclusivamente do tcp/ip aqui, pois já existem excelentes discussões de todos esses tipos de redes, seus protocolos e sua implementação. Aconselhamos a leitura dos documentos do LDP (Linux Documentation Project) para uma formação mais consistente sobre este vasto e bem explorado assunto.

Como eu posso evitar de conhecer todos esses detalhes tão complicados? Simples: use as interfaces visuais já fornecidas com sua distribuição Linux. Mas se voce realmente deseja saber o que está escondido "na cartola do mágico", leia não só o que estou mostrando aqui, mas também o "The Linux Network Administrator's Guide", no LDP, pelo menos!

Uma rápida introdução às interfaces de rede

Cada sistema numa rede tcp/ip tem um endereço (network address), também conhecido como endereço de IP, usualmente atribuido pelo NIC (Network Information Center). Este endereço, único em toda a internet é um número de 32 bits [33] que é representado como quatro números (1 byte cada) entre 0 e 255, separados por pontos. Mesmo que sua máquina não esteja conectado a nenhuma rede, ainda assim, o endereço 127.0.0.1 deverá existir. Este endereço define o loopback, necessário para alguns programas que funcionam normalmente em rede. Neste caso, sua máquina estará enviado mensagens (conforme o protocolo) para ela própria.

net utils As distribuições do Linux já vêm com a maioria das aplicações e ferramentas de configuração de rede, incluindo alguns exemplos dos arquivos de configuração. O "super-servidor" é odaemoninetd.
O termo "super-servidor" é devido à maneira como esse programa funciona. Ele cria sockets para os vários serviços configurados, e quando algum programa remoto solicita um destes serviços, o inetd inicia o servidor específico para aquele serviço. O arquivo /etc/inetd.conf contém os serviços suportados no seu sistema. Se voce deseja reconfigurar esse arquivo, após a edição, basta enviar um sinal HUP para o inetd para que este re-leia este arquivo de configuração: kill -HUP `cat /var/run/inetd.pid`. O arquivo /var/run/inetd.pid é gerado com apenas um número, o PID do processo inetd, portanto, usamos a substituição de comandos do shell para obter esse valor.

O arquivo /etc/inetd.conf contém linhas com os seguintes dados (nesta mesma ordem): serviço tipo protocolo wait usuário servidor linha-de-comando O último destes parâmetros pode ser o nome do servidor apropriado (ftpd, telnetd, fingerd, rlogind, rshd, rexecd, etc), ou a palavra internal, quando o serviço é provido pelo próprio inetd.

Os arquivos /etc/services e /etc/protocols definem portas (port numbers, como por exemplo, a porta 80, que é o default para http, como em http://www.yahoo.com:80, que é equivalente a http://www.yahoo.com). Mas, felizmente, estes valores são sempre padronizados, e muito raramente teremos que modificá-los.
Outra alternativa para rodar os servidores com o inetd, é através do tcpd, que é chamado pelo inetd no lugar de, por exemplo, ftpd, mas monitora o acesso (via syslog) e permite controle de acesso através dos arquivos /etc/hosts.allow e /etc/hosts.deny.
Veja parte do meu arquivo inetd.conf:

rsync stream tcp nowait root /usr/sbin/tcpd /usr/local/b
pop3 stream tcp nowait root /usr/sbin/tcpd in.pop3d

shell stream tcp nowait root /usr/sbin/tcpd in.rshd -L
login stream tcp nowait root /usr/sbin/tcpd in.rlogind
Redes ethernet definem o mapeamento do endereço da LAN (local) para um endereço IP em um cache, que pode ser visualizado pelo comando
arp -a. Esse cache é aumentado dinâmicamente quando um acesso a um endereço IP desconhecido é tentado na rede local, e reside em /proc/net/arp.

Uma rede local Linux pode também compartilhar o mesmo endereço IP, através do IP masquerading.

Cada máquina numa rede deverá ter um hostname bem determinado. Esse nome é armazenado no kernel, e pode ser configurado pelo comando hostname <novo nome>, ou verificado pelo mesmo comando sem parâmetros. Só o root pode mudar o hostname. Mas, se voce der novo boot na máquina verá que o nome original estará de volta. Se sua distribuição é RedHat, voce terá que alterar o arquivo /etc/sysconfig/network, ou usar um utilitário existen para isso, da própria empresa. No Slakware, o script /etc/rc.d/rc.M efetua esta modificação com a linha /bin/hostname `cat /etc/HOSTNAME | cut -f1 -d .` , portanto, modificando o arquivo /etc/HOSTNAME, na próxima carga do sistema você estará com o nome correto.

Outros comandos úteis na depuração das redes é o traceroute, para mostrar toda a rota de acesso entre o seu endereço de IP e o do destino. (assim voce verifica se o seu provedor ou a Embratel está atrasando na "entrega" dos pacotes.) O comando route serve para mostrar ou modificar a tabela de roteamento do kernel. Use-o com cuidado, sometne quando estiver entendendo melhor o seu funcionamento. Raramente você irá precisar de fazer alterações se estiver ligado a um provedor pois o pppd (discutido logo adiante), adicionará dados do seu roteamento default quando voce for conectado.

um simples experimento


No lugar de descrever de forma estéril várias dezenas de comandos relacionados com redes e conectividade, preferimos mostrar o reteiro detalhado de um experimento muito simples, que poderá demostrar como conectar dois computadores usando tcp/ip através de uma linha serial (via modem ou não, caso voce sue um cabo serial null-modem, com os pinos 2 e 3 invertidos). Este experimento poderá lhe servir, por exemplo, para interligar várias máquinas para transferência de dados usando ftp, testar um servidor de web (como o Apache, ou o Boa, que é o meu predileto), ou compartilhar o acesso de várias máquinas ao seu provedor internet, se voce habilitar IP masquerading no seu kernel.

Como estamos usando uma linha serial, precisaremos de um protocolo como slip ou ppp para encapsular os pacotes do tcp/ip e enviá-los ponto-a-ponto. O daemon pppd é tanto um servidor como um cliente, podendo ser usado para estabelecer qualquer dos dois lados na ligação (link). Todavia, as duas máquinas terão que se "conhecer" mutuamente para essa ligação ser possível. Existem endereços reservados no protocolo tcp/ip para uso em redes locais, que não estejam conectadas diretamente à internet. Como queremo somente alguns poucos endereços, um endereço de subnet será suficiente. Escolhemos 192.168,97,X (onde X depende da máquina).

Suponhamos que o "servidor" seja a máquina pernambuco, endereço 192.168.97.1 (endereço do "líder"), e a segunda máquina seja paraiba, endereço 192.168.97.2. Editaremos o arquivo /etc/hosts nas duas máquinas com a seguinte informação:

     127.0.0.1         localhost
     192.168.97.1      pernambuco 
192.168.97.2 paraiba

Não se esqueça de mudar o hostname em cada máquina para um dos nomes dados acima. O arquivo /etc/networks de cada máquina terá o seguinte:

     loopback        127.0.0.0 
nordestenet 192.168.97.0

Então, voce estará pronto para iniciar a conexão. Dois comandos serão usados, uma para o servidor (no nosso caso pernambuco), e o segundo para o outro ponto da "rede".

pernambuco:

     pppd /dev/cua0 115200 -crtscts 192.168.97.1: local passive

paraiba:

     pppd /dev/cua0 115200 -crtscts local passive defaultroute

Neste comandos, estamos assumindo que a ligação é local (sem modem), usando a primeira porta serial do computador (COM1 no MsDos, /dev/cua0 no Linux). A opção passive indica que a conexão ficará no ar indefinidamente, a menos que numa das máquinas executemos kill -KILL <PID do pppd>.

Agora voce pode testar a conexão com: ping pernambuco ou ping paraiba. Veja a diferença de velocidades. Problemas possíveis: é possível que alguma opção global esteja presente para o pppd, neste caso voce deverá comentar todas as linhas (colocando "#" no início) do arquivo /etc/ppp/options. Voce poderá verificar a interface ppp0 (dispositivo criado pelo pppd) executando netstat -i e observando se existe uma linha com ppp0 no início.

Kernel Interface table 
Iface   MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flags 
lo     3584   0   2914      0      0      0   2914      0      0      0 BLRU 
ppp0    552   0      6      1      1      0      7      0      0      0 PRU

Outro comando útil na monitoração das transferências via ppp é o pppstats. Veja este fragmento de sua utilização:

     in   pack   comp uncomp    err  |    out   pack   comp uncomp     ip 
  10474     66     24     24      0  |   7193     63     35      8     20
   5774     12     11      0      0  |    165      8      7      0      1    
    609      2      1      0      0  |    177      3      0      2      1

conectando com um provedor (isp)


A conexão com um provedor é só um pouco mais complicada. Primeiramente, a resolução de endereços não será feita numa tabela estática, e tão pequena quanto /etc/hosts. A internet possui mais de 40 milhões de endereços atualmente, o que resultaria numa tablea imensa, e muitos desses endereços podem ser modificados com o tempo. Assim voce usa o mapeamento externo fornecidos por servidores de uma forma hierárquica, espalhados no mundo inteiro, de acordo com os seus domínios. Para isso voce terá que indicar um servidor (do seu provedor) para este serviço, no arquivo /etc/resolv.conf. Veja o meu arquivo (fictício):

     domain linuxserv.com.br
     nameserver 218.230.85.2 
     nameserver 218.230.86.25

supondo que o provedor me fornece dois servidores dns. (por favor não tente acessar estes endereços, pois são completamente fictícios e não sei se corresponde a algum provedor válido!) Ponha também no arquivo /etc/host.conf as seguintes duas linhas:

     order hosts, bind 
     multi on

Crie uma arquivo com o nome ppp-liga, com o seguinte conteúdo:

pppd debug connect "chat -f /etc/ppp/dial-provedor" /dev/cua3 38400 \
-detach crtscts modem noipdefault defaultroute name rpragana&

Rápida explicação: pppd irá executar o utiliário chat para programar o modem e efetuar a ligação. O script para o chat está no arquivo dial-provedor. Colocamos a opção noipdefault porque esta ligação irá receber o seu endereço IP do seu provedor (IP dinâmico). Se o seu provedor suporta autenticação com pap, você terá que introduzir mais alguns dados no arquivo /etc/ppp/pap-secrets:

# client    server  secret          IP addresses
rpragana * xyzABC123

onde xyzABC123 é a sua senha neste provedor. Finalmente devemos ter o arquivo dial-provedor usado pelo chat como uma série de perguntas/respostas para a conversação entre o modem e a sua máquina:

ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATS0=0L3M1V1 OK ATDP2221234 CONNECT

Explicando rapidamente: o comando chat trabalha com pares de strings. Ele aguarda a primera string do par do modem, e envia a segunda em seguida, exceto se o par começar com ABORT. Neste último caso, ele procurará a segunda string e abortará o comando se a segunda string coincidir com o que for recebido do modem. No script acima, significa que BUSY ou NO CARRIER irão abortar o comando chat. Em seguida, o '' (string vazia) será esperado domodem (ou seja, não espere nada) e enviará ATZ (comando para resetar o modem). Depois aguarda o OK do modem e envia a string de inicialização (no exemplo acima ATS0=0L3M1V1). No fim de tudo, ele irá aguardar a string CONNECT para terminar o script e retornar o controle ao pppd.

Para desligar o ppp, simplesmente mate o processo com o ppp0 (se este for o único dispositivo ppp na sua máquina):

     kill -INT `cat /var/run/ppp0.pid`

Edite esse script minúsculo no arquivo ppp-desliga (de preferência em /etc/ppp).

Depois voce poderá automatizar (e embelezar) esses procedimentos com um programa como wmifs, rodando sob X11. Este programa monitora o ppp0 e permite com um click no mouse voce ligar-se ou desligar-se do seu provedor. Veja a sua configuração:
~ # cat .wmifsrc
left: /etc/ppp/ppp-liga
middle: /etc/ppp/ppp-desliga
right:

wmifs

aplicações na internet


São inúmeros os serviços disponíveis na "rede global", que precisaria um livro inteiro para descrevê-los, mesmo superficialmente.

Voce poderá começar instalndo o Netscape, que é sem sombra de dúvidas o melhor web-browser para Linux. Entretanto, se voce pretende editar páginas em html, ele não é tão bom, do ponto de vista de gerar o hipertexto em conformidade com os padrões do W3C (organização que padroniza os protocolos para hipertexto no web). Existem vários editores visuais e "helpers" que podem ser usados com editor mais convencionais. O XEmacs é célebre, mas o ASWedit é bem mais simples para o principiante. Um editor de uso geral que pode ser interessante é o Nedit, que coloriza o texto em quase 20 linguagens diferentes (entre elas, html), é expansível, e de excelente qualidade (e é open source, também, claro!).

O presente texto, entretanto, eu editei com o Amaya, um edito visual (open source) desenvolvido pelo W3C, mas não o aconselho para principiantes. Se voce não conhecer razoavelmente bem html, voce poderá ficar perdido com as operações aparentemente ilógicas que este editor realiza. Ele é também um editor estruturado, bom para que quer experimentar com features avançadas do "html 4.0 transitional", o único modelo que ele usa para edição. Para o usuário comum, aconselho ficar com o html 3.2 ou "4./0 strict".

Outros protocolos, como o ftp, possuem inúmeros clientes de excelente nível como o ncftp, o snarf, e muitos com gui visuais. O mc (Midnight Commander), que vimos no começo deste manual, pode ser usado de maneira muito transparente para transferências de arquivos via ftp. Basta mudar um dos paineis de diretórios para o diretório de nome ftp:host/diretório e voce estará conectado. A listagem que aparece é inteiramente virtual, formada a partir de comandos para obter o diretório remoto. Para copiar arquivos, use os comandos habituais, inclusive podendo marcar vários (Ctrl-t) e copiá-los todos de uma vez só.

Para e-mail, eu ainda prefiro o pine, da U. Washington. Ele permite escolher o editor (adivinhem: joe é o que eu uso!), controle total sobre os cabeçalhos dos e-mails enviados, addressbook, etc. E é bastante rápido (roda em um xterm). Outros preferem o elm, tkrat, etc. Ou ainda, o próprio Nestacape, que tem tudo integrado. Se voce opta pela simplicidade sobre a potência, esse último será sua escolha.


rpragana
Wed Jan 13 18:57:31 EDT 1999