Configurando rede no GNU/Linux

Desde que foi criado, o Linux é um sistema de rede… E mesmo que na sua casa tenha somente seu computador e você não esteja conectado à Internet, seu Linux continua sendo um sistema de rede.

Atualmente as distros trazem o Network Manager, que já ajuda o usuário a configurar a rede rapidamente. Mas, se você é um administrador de sistemas, não irá trabalhar com uma interface gráfica o tempo todo; assim, é importante conhecer os comandos e arquivos de configuração de rede.

Antes de falar sobre os arquivos de configuração, vou falar sobre as interfaces de rede, que são os dispositivos que irão formatar os pacotes e repassá-los através de cabo de rede, wireless, fibra ótica, etc.

Todos computadores que utilizam o protocolo TCP/IP, possuem uma interface de rede lógica, chamada loopback que responde no endereço 127.0.0.1. A interface loopback (lo), faz com que o sistema converse com ele mesmo. É o que chamo de “máquina bater papo com seu eu interior”.

Isso é bacana porque, se você quer criar um servidor DNS (servidor de resolução de nomes), um servidor de e-mail ou de FTP, poderá fazê-lo mesmo que não esteja em uma rede com muitos computadores; ou, caso esteja em uma rede, pode testar os serviços localmente.

Além da interface de loopback, também configuramos a placa de rede – no linux ela é identificada pelo dispositivo ethX, onde X é o número do dispositivo. Por exemplo, eth0 é o primeiro dispositivo de rede existente no computador.

Para configurar a placa de rede, é necessário que o módulo esteja no ar. Eu já falei em outro post, como configurar o módulo da placa de rede… para relembrar, clique aqui. Com o módulo no ar, podemos designar um IP para a placa; para isso usamos o comando ifconfig. Por exemplo:

#ifconfig eth0 192.168.0.10

Onde:

eth0 – Device da placa de rede, ou seja a interface de rede.

192.168.0.10 – É o endereço que estou designando para essa interface.

Essa forma de configuração de rede é temporária; caso reinicie a máquina, a configuração será perdida… é uma configuração básica quando você precisa testar por exemplo, saber se a placa está OK, se designar um IP ela vai conseguir conexão na rede, etc.

Para a configuração da rede ficar definitiva no sistema, devemos editar os seguintes arquivos:

/etc/hostname – Nome da máquina
/etc/hosts – Resolução de nomes locais
/etc/network/interfaces – Informação sobre IP

Os arquivos acima, são para configuração em distribuições Debian e suas variantes! Em sistemas Red Hat e suas variantes, os arquivos são:

/etc/sysconfig/network – Nome da máquina e informações da rede
/etc/hosts – Resolução de nomes
/etc/syscofig/network-scripts/ifcfg-ethX – Informação sobre IP

No caso de Red Hat e suas variantes, para cada placa instalada no computador, existe um arquivo de configuração… por isso o “X” na linha /etc/syscofig/network-scripts/ifcfg-ethX.

E no Slackware:

/etc/HOSTNAME – Nome da máquina e informações da rede
/etc/hosts – Resolução de nomes
/etc/networks/etc/rc.d/rc.inet1 – Informação sobre IP

Bem, nos meus posts, sempre falo em Debian, que é a distribuição que uso… então, aqui vou falar sobre a configuração em ambientes Debian.

O primeiro arquivo que editamos é o /etc/hostname. Esse arquivo é utilizado para definir o nome da nossa máquina:

# echo “nixi” > /etc/hostname

Acima, apenas inseri o nome da minha máquina (nixi) no arquivo hostname. Só que as configurações do nome, só estarão disponíveis quando eu reiniciar a máquina. Para usar o nome sem a necessidade de reiniciar, basta fazer:

# hostname nixi

E aí já estarei usando o novo nome. Ahn, o comando acima, além de definir um nome prá máquina, também pode ser usado para mostrar o nome da máquina… para isso, basta digitar:

# hostname
nixi

O segundo arquivo, é o /etc/hosts… ele serve para resolver o nome da máquina pelo IP dela. É como se fosse um servidor DNS, só que é local, isto é, somente para a minha máquina! Esse arquivo tem a seguinte estrutura:

# cat /etc/hosts
127.0.0.1       localhost.localdomain   localhost

Onde:
127.0.0.1 – IP da máquina

localhost.localdomainFQDNFully Qualified Domain Name – é o nome completo da máquina; isto é, o nome (localhost) e o domínio (localdomain)

localhost – nome da máquina

A utilidade desse arquivo? Bem, imagine que você queira acessar algumas máquinas e não quer ficar digitando o IP delas! Se você não tem DNS, pode colocar o nome e o IP das máquinas que deseja acessar nesse arquivo. Por exemplo, se quiser fazer ping para a máquina asmith, ao invés de digitar o IP dela, poderia incluir a seguinte linha no arquivo /etc/hosts:

192.168.0.150    asmith.nixi.com.br    asmith

Quando for fazer o ping, ao invés de digitar o IP, posso fazer:

# ping asmith
PING asmith.nixi.com.br (192.168.0.150) 56(84) bytes of data.
64 bytes from asmith.nixi.com.br (192.168.0.150): icmp_seq=1 ttl=64 time=0.156 ms
64 bytes from asmith.nixi.com.br (192.168.0.150): icmp_seq=2 ttl=64 time=0.122 ms
64 bytes from asmith.nixi.com.br (192.168.0.150): icmp_seq=3 ttl=64 time=0.044 ms

Lembrando que essa é uma configuração local! Então, se quiser que outras máquinas resolvam os nomes, tem que configurar nelas também… mas se for pensar em configurar muuuuuitas máquinas, é melhor ter um DNS (assunto para um futuro post!) e deixar o /etc/hosts resolver somente o nome da nossa máquina. No caso, da minha máquina local, o arquivo ficou assim:

# cat /etc/hosts
127.0.0.1       localhost.localdomain   localhost
192.168.0.100   nixi.org.br        nixi

O próximo arquivo a ser configurado é o /etc/network/interfaces, responsável por armazenar as configurações de IP de todas as placas de rede. Em distribuições Red Hat e variantes, cada placa tem seu arquivo específico; no Debian, as configurações de todas interfaces são feitas em um único arquivo. Abaixo, exemplo de configuração para IP fixo; isto é, toda vez que a máquina iniciar, sempre irá usar esse IP:

auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1

Onde:
auto eth0 – Indica que a interface será inicializada no boot. Caso não defina essa linha, mesmo que o serviço de rede esteja iniciado, as configurações dessa interface não serão carregadas.

iface eth0 inet static – Indica se a interface terá IP fixo ou não. Aqui, estamos falando que a interface eth0 terá IP fixo.

address– Endereço IP

netmask – Máscara de rede

network – Endereço da rede

broadcast – IP que varre a rede inteira para determinar quais IP’s estão ativos

gateway – IP da máquina que fará a saída dos pacotes para Internet

Essa configuração é usada quando a máquina tem um IP fixo! Caso a máquina seja um cliente de DHCP; isto é, quando existe um servidor que distribui os IP’s para as máquinas que estão na rede, a configuração desse arquivo fica assim:

auto eth0
iface eth0 inet dhcp

Fica uma configuração simples… porque o servidor DHCP será o responsável por configurar o IP, máscara, rede, broadcast, gateway e resolução DNS para o cliente!

Após configurar o arquivo, para que as alterações sejam realizadas, devemos parar e iniciar o serviço de rede:

# /etc/init.d/networking stop
# /etc/init.d/networking start

Para checar as novas configurações da placa de rede:

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:47:ba:19
inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe47:ba19/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:47639 errors:0 dropped:0 overruns:0 frame:0
TX packets:33167 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:65097967 (62.0 MiB)  TX bytes:2828496 (2.6 MiB)
Interrupt:19 Base address:0x2000

Ainda falando sobre o arquivo /etc/network/interfaces, lá existe a linha gateway. Para uma máquina ser capaz de encontrar outra através de uma rede, é necessário que ela saiba como ir de uma rede para outra. O ‘caminho’ que permite uma máquina de uma rede se comunicar com outra de rede diferente, se chama roteamento.

Uma rota, é um par de endereços composto por destino e gateway e indica que, se você estiver tentando alcançar este destino, deve se comunicar através desse gateway. A famosa ‘rota default’, é a rota utilizada por um roteador quando não há nenhuma outra rota conhecida existente para o endereço de destino de um pacote. E todos os pacotes para destinos desconhecidos pela tabela do roteador são enviados para o endereço de rota padrão.

O comando para visualizar a tabela de rotas é o route:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0

Vejam que a última linha indica o IP 192.168.0.1, que é justamente o IP que foi configurado na linha gateway do arquivo /etc/network/interfaces. A opção -n no comando, é para mostrar em formato numérico, isto é, o comando não tentará resolver os IP’s para nomes.

O comando route também é usado para criar uma rota manualmente, seja por motivo de não ter adicionado a linha gateway no arquivo, ou até mesmo por querer utilizar uma outra rota. Para isso, executa-se o comando abaixo:

# route add default gw 192.168.0.1

Onde:

add – para adicionar a rota

default gw 192.168.0.1 – indica que está configurando a rota default com o IP 192.168.0.1

Esse comando faz a mesma coisa que a linha gateway indicada no arquivo /etc/network/interfaces. A diferença é que essa configuração é perdida caso a máquina reinicie, enquanto no arquivo é uma configuração definitiva.

Outras formas ver a tabela de rotas:

# cat /proc/net/route

# netstat -nr

E, para finalizar essa parte da configuração de rede, tem mais um arquivo que editamos quando configuramos rede no Linux. É o arquivo /etc/resolv.conf; responsável por buscar o servidor DNS para resolver nomes na rede.

O DNS foi criado com o objetivo de tornar as coisas mais fáceis para o usuário, permitindo assim, a identificação de computadores na Internet ou redes locais através de nomes (é como se tivéssemos apenas que decorar o nome da pessoa ao invés de um número de telefone). A parte responsável por traduzir os nomes como http://www.wordpress.com em um endereço IP é chamada de resolvedor de nomes.

Então, é no arquivo /etc/resolv.conf que indicamos o nome de domínio DNS da nossa rede, e qual o servidor DNS irá resolver as consultas de nomes.

Exemplo de um arquivo resolv.conf:

search nixi.org.br
nameserver 4.2.2.2

Onde:

search – Lista de pesquisa para a procura do nome de servidor; normalmente é determinado pelo domínio do servidor local.

nameserver – Endereço IP do servidor de nomes que o resolvedor deve pesquisar; são utilizados na ordem em que estão listados.

É importante observar que, se for um cliente dhcp, o resolv.conf será sobrescrito com a informação recebida do servidor DHCP.

Abordei no post a configuração em sistemas Debian; apesar de não utilizar sistemas Slackware ou Red Hat, segue links que irão ajudar na configuração de rede nessas duas distros:

SlackwareConfiguration Help

Red Hat e derivadosHowto Red hat enterprise Linux 5 configure the network card

Referências:
Manual Completo do Linux – Guia do Administrador
Evi Nemeth et al, Pearson Books

Capítulo 15 – Rede

Bem, é isso… até o próximo post! 🙂

Anúncios

Um comentário sobre “Configurando rede no GNU/Linux

  1. unix 19/02/2016 / 2:03 AM

    I am truly happy to read this website posts which includes lots of useful
    information, thanks for providing these information.

Os comentários estão desativados.