sábado, 16 de janeiro de 2010

Configurando a rede no Linux

Autor:Carlos E. Morimoto28/03/2008
    Como vimos, existem diversas ferramentas gráficas de configuração da rede, que você pode usar de acordo com a distribuição. Mesmo assim, nenhuma ferramenta é à prova de falhas. Erros diversos podem ocorrer, lhe obrigando a corrigir o problema manualmente.

    Além de ser um trunfo na hora de solucionar problemas, entender a configuração manual do sistema lhe dá uma flexibilidade muito maior na hora de criar configurações personalizadas ou pouco comuns, ou ainda na hora de configurar servidores dedicados, sem ambiente gráfico.

    O utilitário básico para configurar a rede é o ifconfig. Ele suporta um grande número de opções, mas o comando básico para ativar a rede é:

    # ifconfig eth0 192.168.1.2 netmask 255.255.255.0 up

    Este comando configura o endereço IP e a máscara de sub-rede para a interface especificada (a "eth0" no exemplo) e o "up" serve para ativar a interface, caso ela esteja inativa.

    No Linux, as placas Ethernet cabeadas recebem nomes como "eth0" (primeira placa), "eth1" (segunda placa), "eth2" (terceira placa) e assim por diante. No caso das placas wireless, o nome muda de acordo com o modelo e com o driver usado. Placas configuradas através do ndiswrapper são identificadas como "wlan0", placas com chipset Ralink como "ra0" e placas com chipset Intel como "eth1", da mesma forma que uma placa cabeada. Em caso de dúvida, você pode verificar como as placas de rede foram detectadas pelo sistema usando os comandos:

    # cat /proc/net/dev

    (mostra todas as interfaces)

    # cat /proc/net/wireless

    (mostra apenas as placas wireless)

    Além das interfaces de rede, o comando "cat /proc/net/dev" mostra também interfaces virtuais, como a lo (a interface de loopback) e a sit0, que é uma interface virtual, usada pelo protocolo IPV6 para encapsular pacotes IPV4 quando necessário. Se você usa o VMware, a lista incluirá também a interface vmnet8, que é usada para permitir que as máquinas virtuais acessem a rede. Veja um exemplo da saída dos dois comandos:


    index_html_5d7b017c

     

    index_html_dac0079

    Através do "cat /proc/net/dev", posso ver que o PC usado nos screenshots possui três interfaces de rede (eth0, eth1 e a ppp0) e, através do "cat /proc/net/wireless" vejo que a interface eth1 é uma placa wireless. Não seria difícil deduzir então que a placa eth0 é a placa cabeada, a eth1 é a placa wireless e a ppp0 é um modem discado, ou uma conexão via celular.

    Depois de identificadas as interfaces, o passo seguinte é definir a rota padrão, ou seja, o gateway da rede e a interface que será usada para contatá-lo. Por segurança, rodamos primeiro o comando "route del default", que desativa qualquer configuração anterior:

    # route del default
    # route add default gw 192.168.1.1 dev eth0

    ... onde o "192.168.0.1" é o gateway da rede e a "eth0" é a placa conectada a ele. Estes mesmos dois comandos resolvem casos em que o micro tem duas placas de rede (ou uma placa de rede e um modem) e o sistema tenta acessar a Internet usando a interface errada.

    Em caso de redes com mais de um gateway (caso você tenha uma conexão via ADSL e também uma conexão via cabo, por exemplo), estes mesmos comandos podem ser usados para mudar a conexão que está sendo usada. Se o segundo gateway da rede é o "192.168.1.254", por exemplo, você poderia mudar a configuração para que ele seja utilizado no lugar no "192.168.1.1" usando os comandos:

    # route del default
    # route add default gw 192.168.1.254 dev eth0

    É possível também fazer com que o segundo roteador seja usado apenas para um endereço específico, o que é útil na hora de fazer grandes downloads. Você pode usar a segunda conexão para baixar o arquivo, deixando a conexão principal livre. Para isso, copie o endereço do arquivo e selecione apenas o endereço ou domínio do servidor, como em "linorg.usp.br", ignorando a estrutura de pastas até o arquivo.

    Use em seguida o comando "route add host", especificando o servidor, o gateway e a interface de rede que serão usadas para acessá-lo, como em:

    # route add -host linorg.usp.br gw 192.168.1.1 dev eth0

    Com isso, os downloads feitos a partir do servidor especificado serão feitos usando o gateway "192.168.1.1" e todos os demais acessos continuarão sendo feitos através do "192.168.1.254". Com o preço dos planos de acesso caindo como estão, pode valer à pena ter uma segunda conexão para baixar arquivos e usar como backup.

    Para checar as rotas definidas, use o comando "netstat -rn" e, para remover uma rota definida manualmente (de forma que o servidor volte a ser acessado usando a rota padrão), use o comando "route del -host", seguido pelo endereço, como em:

    # route del -host linorg.usp.br

    Depois de definir o IP, máscara e o gateway, falta também indicar os servidores de DNS, o que é feito no arquivo "/etc/resolv.conf". Nele você indica os servidores DNS que serão usados, um por linha, como em:

    nameserver 208.67.222.222
    nameserver 208.67.220.220

    A falta dos endereços no "/etc/resolv.conf" é, provavelmente, a causa mais comum de problemas com a navegação. Na dúvida, você pode utilizar qualquer servidor de DNS público, como os endereços do opendns.com que usei no exemplo anterior.

    Para checar a configuração rapidamente em caso de problemas e assim verificar o que está errado, você pode usar os comandos:

    # ifconfig
    # route
    # cat /etc/resolv.conf

    Outro arquivo que vale à pena citar é o "/etc/hosts", onde você pode definir apelidos para hosts que deseja acessar. Os apelidos podem ser usados para agilizar o acesso a micros que você acessa com frequência, ou serem usados para atribuir nomes aos micros da rede local, sem para isso precisar configurar um servidor DNS.

    Originalmente ele contém uma declaração para a interface de loopback, que relaciona o endereço "127.0.0.1" com os nomes "localhost" e com o nome da máquina:

    127.0.0.1 lenny localhost

    Imagine, por exemplo, que você administra o "servidor.minhaempresa.com". Sempre que precisa acessá-lo você precisa digitar "ssh servidor.minhaempresa.com", o que é tedioso. Você poderia simplificar as coisas adicionando uma entrada como esta no /etc/hosts:

    servidor.minhaempresa.com servidor

    A partir daí, você poderia acessá-lo apenas digitando "ssh servidor". Também funciona ao especificar o endereço IP diretamente, como em:

    200.234.32.21 servidor

    Para dar nomes aos micros da rede local, você criaria uma lista, como em:

    192.168.1.1 gateway
    192.168.1.40 etch
    192.168.1.31 sarge
    192.168.1.30 woody

    O grande problema em usar o /etc/hosts para dar nomes aos micros da rede local, no lugar de um servidor DNS, é que você precisa replicar a lista (e mantê-la atualizada) em todos os micros. Funciona em redes pequenas, com 3 ou 5 micros, mas para redes maiores um servidor DNS local acaba sendo uma opção muito mais saudável.

    Além de ser declarado no arquivo /etc/hosts, o nome da máquina é configurado no arquivo "/etc/hostname". Este arquivo contém uma única linha, contendo o nome da máquina, como em:

    lenny

     

    Este arquivo é lido durante o boot pelo script "/etc/init.d/hostname.sh", que se encarrega de atribuir o nome especificado no arquivo.


    Configurando via DHCP

     

    Configurar a rede via DHCP é bastante simples. Desde que exista um servidor DHCP na rede, a estação recebe os endereços automaticamente e você não precisa esquentar a cabeça.

    No Linux, existem dois clientes dhcp. O mais usado é o "dhclient", disponível na maioria das distribuições. O comando para configurar uma placa via DHCP manualmente através dele é:

    # dhclient eth0

    (onde o eth0 é a interface a ser configurada)

    Ao usá-lo via terminal, ele mostra todos os passos da negociação, incluindo o endereço do servidor DHCP da rede e o IP recebido, como em:

    Listening on LPF/eth0/00:0f:b0:55:df:17
    Sending on LPF/eth0/00:0f:b0:55:df:17
    Sending on Socket/fallback
    DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5
    DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
    DHCPOFFER from 10.67.3.2
    DHCPREQUEST on eth0 to 255.255.255.255 port 67
    DHCPACK from 10.67.3.2
    bound to 201.56.188.45 -- renewal in 5585 seconds.

    Existe ainda o "pump", um cliente mais simples, que ainda pode ser encontrado em algumas instalações. Para configurar a rede através dele, use o comando:

    # pump -i eth0

    Ao contrário do dhclient, ele não exibe a negociação, limitando-se a exibir uma mensagem de erro em caso de problemas.

    Ao acessar via cabo, a configuração da rede é obtida automaticamente via DHCP, com o cable-modem cuidando de toda a modulação do sinal. Ao contrário do ADSL, não é usada autenticação, mas em compensação sua conta é relacionada ao endereço MAC da placa de rede do micro onde foi configurado o acesso. Se você tentar acessar a partir de outro micro, ou trocar de placa de rede, não conseguirá acessar, a menos que ligue para a central e peça que alterem o endereço cadastrado.

    Uma solução mais rápida é simplesmente trocar o endereço MAC da nova placa de rede, de forma que ela utilize o endereço cadastrado. Isso pode ser feito de forma muito simples utilizando o comando ifconfig.

    Comece desativando a placa de rede, como em:

    # ifconfig eth0 down

    Use em seguida os parâmetros "hw ether", seguidos pelo endereço MAC desejado, para trocar o endereço físico da placa:

    # ifconfig eth0 hw ether 00:0F:B2:52:45:E3

    Execute novamente o "dhclient eth0" e você verá que o micro volta a receber a resposta do servidor DHCP, mesmo com a placa diferente :). Esta dica pode ser usada também em casos onde você quer acessar acessar (em horários alternados) a partir de dois micros, desde que não ao mesmo tempo.

    Outra peculiaridade do acesso via cabo é que você não consegue obter uma nova resposta do servidor DHCP até que a primeira conexão seja encerrada (o timeout varia de 90 a 180 minutos, de acordo com a operadora). Isto causa problemas quando você tem Linux e Windows em dual-boot, pois é preciso esperar até três horas ao trocar de sistema, até que vença o leasing do endereço no servidor DHCP e você possa obter outro IP.

    A solução neste caso é liberar o IP antes de reiniciar, usando o parâmetro "-r" disponível tanto no dhclient, quanto no pump. Ele avisa ao servidor DHCP que a conexão está sendo encerrada, permitindo que você consiga configurar a rede novamente depois de reiniciar no Windows. Para isso use:

    # dhclient -r eth0

    ou:

    # pump -r

    (nesse caso sem especificar a interface)


    Arquivos de configuração

     

    Uma forma simples de salvar a configuração da rede seria criar um mini-script com os comandos usados e adicioná-lo no arquivo "/etc/rc.local" ou outro arquivo de configuração, como em:

    ifconfig eth0 192.168.1.2 netmask 255.255.255.0 up
    route del default
    route add default gw 192.168.1.1 dev eth0
    echo 'nameserver 208.67.222.222
    nameserver 208.67.220.220' > /etc/resolv.conf

    Como o arquivo "/etc/rc.local" é processado no final do boot, depois dos serviços que carregam a configuração da rede, sua configuração seria usada mesmo que a rede tivesse sido configurada usando outro utilitário. Mas, naturalmente, esta não seria a forma mais elegante de salvar a configuração da rede.

    Assim como outras configurações do sistema, a configuração da rede é salva em arquivos de configuração, que são lidos pelos serviços responsáveis por ativar a rede. A maioria dos utilitários de configuração nada mais são do que interfaces para a edição desses arquivos.

    Nas distribuições derivadas do Debian, incluindo o Ubuntu e o Kubuntu, a configuração da rede é salva no arquivo "/etc/network/interfaces". Um exemplo de arquivo configurado é:

    # /etc/network/interfaces
    auto lo eth0
    iface lo inet loopback
    iface eth0 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.1

    O arquivo é dividido em duas partes. A linha "auto ..." lista as interfaces que devem ser ativadas automaticamente e as demais contém a configuração de cada uma. Para configurar uma nova placa de rede, você adicionaria a configuração relacionada a ela no final do arquivo e a adicionaria na linha "auto", como em "auto lo eth0 eth1". Se, por outro lado, você quiser desativar uma interface, precisa apenas removê-la da linha auto, não é preciso remover as demais linhas.

    A interface "lo" é a interface de loopback, usada para a comunicação local entre diversos aplicativos e componentes do sistema, por isso nunca deve ser desativada. Embora o uso da interface de loopback pareça ser uma exclusividade do Linux, ela é usada também no Windows; a única diferença é que no Windows ela não aparece na configuração.

    Em seguida temos a configuração de cada interface, que vai em uma seção separada. No caso da interface lo é usada uma única linha, "iface lo inet loopback", usada em qualquer instalação, seguida pelas demais interfaces.

    Como você pode ver, as últimas 5 linhas na configuração da placa eth0 especificam o IP utilizado pelo PC e o restante da configuração da rede, com exceção dos endereços dos servidores DNS, que vão no arquivo "/etc/resolv.conf".

    Se você quisesse que a interface fosse configurada via DHCP, poderia substituir as 6 linhas referentes a ela por:

    iface eth0 inet dhcp

    Ao configurar um servidor com duas placas de rede, onde a eth0 está ligada à rede local e a eth1 ao cable modem (obtendo o endereço via DHCP), por exemplo, o arquivo ficaria:

    # /etc/network/interfaces
    auto lo eth0 eth1
    iface lo inet loopback
    iface eth0 inet static
    address 192.168.1.1
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    iface eth1 inet dhcp

    Veja que nesse caso a configuração da interface eth0 não inclui o gateway, pois é a eth1 que será usada para acessar a web.

    Depois de editar o arquivo, você pode aplicar as alterações reiniciando o serviço relacionado a ele:

    # /etc/init.d/networking restart

    Um problema comum que afeta versões do Debian, Ubuntu e distribuições baseadas neles é as interfaces mudarem de endereço a cada reset em micros com duas ou mais interfaces de rede. A placa eth0 passa então a ser a ath1 e assim por diante, o pode ser uma grande dor de cabeça ao configurar um servidor para compartilhar a conexão, já que se as duas interfaces mudam de posição, nada funciona.

    A solução para o problema é um pequeno utilitário chamado "ifrename", que permite fixar os devices utilizados para as placas. Utilizá-lo é bem simples. Comece instalando o pacote via apt-get:

    # apt-get install ifrename

    Crie o arquivo "/etc/iftab" e, dentro dele, relacione o device de cada interface com o endereço MAC correspondente, seguindo o modelo abaixo:

    #/etc/iftab
    eth0 mac 00:11:D8:76:59:2E
    eth1 mac 00:E0:7D:9B:F8:01

    Em caso de dúvida, use o comando "ifconfig -a" para ver a configuração atual das placas e o endereço MAC de cada uma. Uma vez criado, o arquivo é verificado a cada boot e a configuração se torna persistente, resolvendo o problema. Este bug das interfaces itinerantes afeta apenas algumas distribuições, por isso você não precisa se preocupar com ele até que perceba que está usando uma das afetadas.

    No Fedora e outras distribuições derivadas do Red Hat, a configuração de rede é dividida em uma série de arquivos, localizados na pasta "/etc/sysconfig/network-scripts/". Dentro da pasta, você encontrará um arquivo separado para a configuração de cada interface disponível. A configuração da placa eth0 é armazenada no arquivo "ifcfg-eth0", o da eth1 no "ifcfg-eth1" e assim por diante.

    Um exemplo de configuração para uso de IP fixo é:

    #/etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    IPADDR=192.168.1.43
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    BOOTPROTO=static
    ONBOOT=yes

     

    A opção "ONBOOT" indica se a placa deve ser ativada automaticamente durante o boot. Ao desativar essa opção, a interface fica desativada por padrão, até ser carregada manualmente. Continuando, aqui vai um exemplo de configuração para DHCP:

    #/etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=dhcp
    ONBOOT=yes

     

    Lembre-se que cada arquivo armazena a configuração de uma interface específica (a configuração da interface de loopback, por exemplo, vai no arquivo ifcfg-lo), diferente do Debian, onde é usado um único arquivo com uma seção separada para cada interface. Temos também o arquivo "/etc/sysconfig/network", que armazena o nome da máquina.

    Para que as alterações entrem em vigor, é necessário reiniciar o serviço responsável pela configuração da rede, o que no Fedora é feito usando o comando:

    # /etc/rc.d/init.d/network restart

    Concluindo, tanto no Fedora quanto no Debian, Ubuntu e outros, você pode desativar temporariamente uma interface configurada usando o comando "ifdown", como em:

    # ifdown eth0

    Para reativá-la posteriormente, use o comando ifup:

    # ifup eth0

    Assim como no caso das alterações feitas através do ifconfig, desativar a interface usando o ifdown não é permanente: a interface volta a ser ativada ao reiniciar o micro. Se você quiser desativar a interface de forma definitiva, precisa fazer a alteração diretamente no arquivo de configuração.

0 comentários :

Enviar um comentário