Você está na página 1de 6

Montando Uma Sub-Rede Com

Debian/Ubuntu, DHCP e iptables


Introdução
Outro dia numa das minhas threads de atividades (um cara tem de ganhar a vida :P), tive
de montar uma subrede num laboratório aqui da UFPE. Não foi nada extraordinário e o
povo que mexe com Linux deve estar careca de saber como faz: só um servidor DHCP e
Firewall com NAT. Mas como servidores não são minha praia foi uma novidade
interessante e resolvi anotar como foi caso precise depois, provavelmente num dia em
que já terei esquecido como fiz a primeira vez. :P Para esse trabalho instalei o Ubuntu
6.06 LTS Server Edition (mas também podia ter sido o Debian Etch) numa máquina
mais ou menos, com uma placa de rede onboard e outra off. Esse cenário é bem
parecido com uma rede doméstica ou de um pequeno escritório, com vários
computadores acessando a internet através de uma máquina modesta, então espero que
seja útil para o máximo de pessoas possível.
Interfaces de Rede
A primeira coisa a fazer é configurar as interfaces de rede, eth0 (para este tutorial, no
seu caso pode ser diferente) para receber IP dinâmico fornecido pelo DHCP da rede
exterior, e eth1, que será vista como gateway pela subrede, terá um IP estático. Como
nossa pequena rede vai estar atrás de um firewall podemos usar qualquer faixa de IP, o
mundo exterior só enxergará o IP da interface eth0 do firewall.

O arquivo de configuração de interfaces de rede no Debian/Ubuntu é o


/etc/network/interfaces:

# The loopback network interface


auto lo
iface lo inet loopback
#
# The primary network interface
auto eth0
iface eth0 inet dhcp
#
# The secondary network interface
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255

Depois das alterações reinicie as interfaces de rede:

/etc/init.d/networking restart
Firewall com iptables
Taí uma coisa que não vou explicar em detalhes aqui, até porque estou aprendendo
agora. :P É um assunto bem popular e você pode encontrar mais informações pela
internet afora. [1], [2], [3], [4] e [5]

Primeiro, edite o arquivo /etc/sysctl.conf e descomente a linha com a string


net.ipv4.ip_forward. Em seguida use o comando:

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Esta regra fará com que as requisições das máquinas na subrede sejam enviadas para
fora como se fossem provenientes do gateway, que por sua vez retornará as respostas
para os clientes apropriados.

Escrevendo as Regras na Pedra


Do jeito que fizemos as regras serão perdidas na primeira reinicialização do servidor.
Então vamos usar o comando iptables-save e colocá-las a salvo num arquivo em local
apropriado.

# iptables-save > /etc/network/iptables.rules

Então criamos um script para carregar as regras durante a inicialização. Salve-o com o
nome iptables no diretório /etc/network/if-up.d, que é onde ficam os scripts
relacionados com "levantar" as interfaces de rede; em contraste com if-down.d, onde
estão os de "derrubar".

#!/bin/sh
# script: iptables
/sbin/iptables-restore /etc/network/iptables.rules

Se quiser você pode usar iptables para fechar portas desnecessárias para quem está na
rede externa, mas isso fica como dever de casa.

Testando
Antes de prosseguir teste se o servidor está conectando usando o ping.

$ ping www.google.com

Agora conecte uma outra máquina no hub ou switch (você não espera fazer uma rede
sem isso, espera?[6]), onde também deve estar conectada a interface eth1 (em nosso
diagrama) do servidor.

Configure a máquina com um endereço estático da subrede que criamos, indicando o IP


do gateway, conforme este /etc/network/interfaces:

# The loopback network interface


auto lo
iface lo inet loopback
#
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.50
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.1
broadcast 192.168.1.255

Perceba que o valor gateway aponta para servidor. Abra um navegador e se tudo estiver
bem sua máquina cliente deve poder acessar a web.
Servidor DHCP
No teste anterior configuramos um cliente com IP estático, mas essa situação está longe
do ideal quando temos algumas máquinas na subrede. Para evitar configurar cada uma
delas manualmente (e fazer tudo de novo em caso de mudanças), vamos configurar um
servidor DHCP. Instale o pacote:

# apt-get install dhcp3-server

A primeira coisa é impedir o DHCP de oferecer IPs na interface de rede externa. Isso
causaria conflitos com o servidor DHCP da rede externa, e algum SysAdmin podia ficar
chateado com você e derrubar sua conexão para todo o sempre como castigo. Então
edite o arquivo /etc/default/dhcp3-server, procure a string INTERFACES, que diz para
onde o DHCP deve oferecer IPs e mude para:

INTERFACES="eth1"

Não canso de lembrar que eth1 é a interface para nossa rede interna.

[editar]

dhcpd.conf
As informações de IP, máscara de rede e gateway padrão fornecidas para os clientes da
rede interna são configuradas no arquivo /etc/dhcp3/dhcpd.conf.

# Nao atualiza DNS quando um IP eh concedido.


ddns-update-style none;
option domain-name "minharede.cinlug-br.org";
#
# Nome do servidor DNS, nesse caso usei o servidor da rede externa.
# Podemos ter varios servidores, separados por virgulas.
# Tambem eh possivel usar hostnames no lugar de IPs.
option domain-name-servers 150.161.6.1;
#
# Tempo padrao e maximo, respectivamente,
# da duracao da concessao do IP.
default-lease-time 3600;
max-lease-time 7200;
#
# Indica onde devem ser guardados os logs do DHCPD.
# A principio serao guardados em /var/log/daemon.log,
# mas o local pode ser alterado no arquivo /etc/syslog.conf
log-facility local7;
#
# Configuracoes da subrede para onde o DHCP concedera IPs.
subnet 192.168.1.0 netmask 255.255.255.0 {
# Faixa dos IPs a serem concedidos.
range 192.168.1.100 192.168.1.250;
# Endereco do gateway padrao.
option routers 192.168.1.1;
}
O servidor de DNS indicado para os clientes via DHCP pode ser o mesmo usado pelo
firewall (você pode ver qual é olhando /etc/resolv.conf). Indicar o nome do host é uma
alternativa mais prática, pois caso o IP do DNS mude, você terá de alterar o
dhcpd.conf.

Reinicie o servidor DHCP

# /etc/init.d/dhcp3-server restart

e pode colocar seus computadores na rede interna. Lembre-se de mudar o


/etc/network/interfaces daquele computador que você usou no teste para usar DHCP
em lugar de IP estático.

auto eth0
iface eth0 inet static

Se quiser ver que máquinas receberam IPs