Configurando uma pequena rede

Este mini "como fazer" tenta mostrar da forma mais enxuta e direta possível como configurar um servidor Linux para compartilhar Internet e servir DHCP e DNS para uma pequena rede.

O Cenário

O cenário da nossa rede é muito comum e encontrado em varias empresas: Um servidor com duas placas de rede, uma das placas esta ligada a Internet através de um roteador fornecido pelo provedor de acesso, a outra placa esta ligada em um switch onde estão conectadas as estações de trabalho.

Diagrama da rede
Diagrama da rede

Alguns detalhes sobre o cenário

A placa de rede (interface de rede) do nosso servidor que esta ligada a Internet é a eth0, e a que esta ligada a rede interna é a eth1.

Nossa rede interna é uma classe C com IPs 192.168.0.X. Reservamos 100 endereços de rede para serem fornecidos as estações de trabalho via DHCP, de 192.168.0.101 até 192.168.0.200, os outros endereços restantes vamos reservar para uso futuro.

Assumi que o IP do servidor na rede interna (eth1) esta configurado para 192.168.0.1. Caso você use um IP difentente você deve ajustar os exemplos para o IP correto.

Os exemplos desse texto foram testados do Debian GNU/Linux versão 5.0 "Lenny" e no Ubuntu 9.10 Karmic Koala.


Roteando pacotes

Para a rede interna conseguir acessar a Internet é necessário que nosso servidor roteie os pacotes entre as redes. Para isso siga os seguintes passos:

Como root, crie um arquivo para conter os comandos do nosso roteador:

vi /sbin/net_forward.sh

E insira o seguinte conteúdo:

echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE

Altere as permissões do arquivo para executável com o seguinte comando:

chmod +x /sbin/net_forward.sh

Edite o arquivo /etc/rc.local e antes da linha exit 0 insira a seguinte linha:

/sbin/net_forward.sh

Pronto, com isso assim que a maquina for reiniciada ela passara a rotear os pacotes e poderá ser configurada como gateway da rede interna. Mas as maquinas ainda não conseguem resolver nomes de domínios a menos estejam usando um servidor DNS esterno. Vamos configurar o nosso próprio servidor DNS no próximo passo.


Resolvendo nomes

Agora vamos configurar o servidor DNS. Nosso DNS tem dois objetivos, ele vai servir de cache para endereços da Internet e também vai resolver nomes da rede interna facilitando a vida dos usuários que queriam acessar uma aplicação no servidor da empresa ou uma impressora de rede por exemplo.

Instalando o servidor DNS

Primeiro vamos instalar o Bind, como root use o seguinte comando:

apt-get instal bind9

Configurando cache DNS

Agora vamos iniciar a configuração, primeiro vamos incluir os forwarders, para isso edite o arquivo /etc/bind/named.conf.options e inclua as seguintes linhas:

forwarders {
	8.8.8.8;
	8.8.4.4;
	208.67.222.222;
	200.212.223.44;
};

Nesse exemplo eu usei os servidores DNS do Google e do meu provedor, você pode escolher os servidores DNS que preferir, mas idealmente deve-se usar os servidores da rede em que se esta, então veja quais são os servidores DNS do seu provedor e coloque na lista. Você pode usar quantos quiser mas dois ou três já são suficientes.

Reinicie o serviço DNS com o seguinte comando:

/etc/init.d/bind9 restart

Agora vamos configurar o servidor para usar o nosso DNS recém instalado, para isso edite o arquivo /etc/resolv.conf e insira a seguinte linha:

nameserver 127.0.0.1

Vamos fazer um pequeno teste para ver se esta tudo funcionando perfeitamente. Execute o seguinte comando:

dig www.ibm.com

Observe a linha onde esta escrito "Query time" nela você vai ver quantos milissegundos o nosso servidor levou para resolver o nome do domínio, execute o comando novamente e o tempo de consulta deve diminuir drasticamente, isso significa que o cache DNS esta funcionando.

Configurando os nomes internos

Agora que o cache esta configurado e testado vamos configurar a zona da rede interna. Em outras palavras vamos criar a estrutura de nomes para ser usada na nossa rede interna no lugar do IP tornando mais fácil acessar os recursos da rede.

Primeiro edite o arquivo /etc/bind/named.conf.local e insira o seguinte conteúdo:

//Rede interna
//Definindo a zona:
zone "rede.empresa.com.br" { // nome do dominio, eu usei rede.empresa.com.br mas podia ser qualquer nome como ibm.com por exemplo.
    type master;
    file "/etc/bind/db.rede.empresa.com.br"; // arquivo contendo os dados da zona
};

//Definindo zona reversa:
zone "0.168.192.in-addr.arpa" {
	// Usamos os 3 primeiros bytes do IP mas em notação reversa, 
	// em uma rede classe C que os IPs são 192.168.0.x fica 0.168.192.
    type master;
    file "/etc/bind/db.rev.0.168.192.in-addr.arpa";
};

Vamos então criar o arquivo para conter a definição da zona. Crie o arquivo /etc/bind/db.rede.empresa.com.br e insira o seguinte conteudo:

$TTL 604800
@ IN SOA rede.empresa.com.br. admin.rede.empresa.com.br. (
	2010030114		; Serial YYYYMMDDHH
	7200 			; Refresh
	120 			; Retry
	2419200 		; Expire
	604800  		; Default TTL
)
@ IN NS ns1.rede.empresa.com.br.

rede.empresa.com.br. IN MX 10 mail.rede.empresa.com.br ; Exemplo para no futuro colocarmos um servidor de e-mails interno
rede.empresa.com.br. IN A 192.168.0.1 ; IP do servidor 
www IN CNAME rede.empresa.com.br. ; subdomínio www do domínio rede.empresa.com.br
mail IN A 192.168.0.1 ; subdomínio mail do domínio rede.empresa.com.br

Agora vamos configurar o arquivo de zona reversa, para isso crie o arquivo /etc/bind/db.rev.0.168.192.in-addr.arpa e insira o seguinte conteúdo:

$TTL 604800;
$ORIGIN 0.168.192.IN-ADDR.ARPA.
@ IN SOA ns1.rede.empresa.com.br. admin.rede.empresa.com.br. (
	2010030114		; Serial YYYYMMDDHH
	7200 			; Refresh
	120 			; Retry
	2419200 		; Expire
	604800  		; Default TTL
)
IN NS ns1.rede.empresa.com.br.
1 IN PTR ns1.rede.empresa.com.br.

Pronto, com isso nosso servidor de nomes já esta configurado com o nosso domínio interno, basta reiniciar com o comando /etc/init.d/bind9 restart e testar com o comando dig www.rede.empresa.com.br por exemplo. Mas as maquinas da nossa rede só conseguiriam acessar esse domínio se fossem manualmente configuradas e é por isso que agora vamos tornar as coisas automáticas configurando um serviço DHCP para nossa rede.


Configurações de rede automáticas via DHCP

A função do servidor DHCP é fazer com que as maquinas recebam as configurações de rede automaticamente, assim não temos que ir de maquina em maquina informando cada detalhe das configurações.

Instalando o serviço DHCP

Como root execute o seguinte comando:

apt-get install dhcp3-server

Configurando uma subnet

Agora vamos configurar nossa subnet, edite o arquivo /etc/dhcp3/dhcpd.conf e insira as seguintes linhas:

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.101 192.168.0.200;
  option domain-name-servers 192.168.0.1;
  option domain-name "rede.empresa.com.br";
  option routers 192.168.0.1;
  default-lease-time 600;
  max-lease-time 7200;

# IPs fixos caso queira fixar algum basta trocar o XX:XX:XX:XX:XX:XX 
# pelo endereço arpa da interface de rede.

#  host maquina1 {
#    hardware ethernet XX:XX:XX:XX:XX:XX;
#    fixed-address 192.168.0.201;
#  }

#  host maquina2 {
#    hardware ethernet XX:XX:XX:XX:XX:XX;
#    fixed-address 192.168.0.202;
#  }

}

Pronto, agora esta tudo configurado, reinicie o servidor para todas as novas configurações entrarem em vigor e as maquinas da rede interna já devem conseguir navegar na Internet sem problemas.