DHCP + NAT = Servidor de Internet
Escrito por meleu em 19 Mar 2009Essa pérola sobre o NAT eu li em http://www.revsys.com/writings/quicktips/nat.html.
A seguir é uma adaptação destas dicas para as minhas necessidades.
Cenário
Essa necessidade surgiu para mim quando eu passei a TER que usar conexão 3G por não chegar ADSL na minha nova moradia. Só que esse lance de ter um modem 3G tipo um pendrive é uma coisa meio individualista, e eu estava acostumado a ter a minha redezinha com vários computadores conectados a internet pra toda a família.
Pois bem, uma solução rápida e rasteira que encontrei foi me conectar a internet com meu laptop (Ubuntu GNU/Linux), conectar meu laptop na redezinha local (para isso é necessário um HUB ou algo do tipo), habilitar um servidor DHCP no laptop e habilitar NAT no laptop. Pronto! Tenho um servidor de internet!
É claro que não é muito interessante fazer isso em redes grandes! Na verdade eu só testei servindo internet para apenas um computador além do laptop com o GNU/Linux, mas não vejo problemas em servir para mais unzinho (dividir com mais de três deve tornar a navegação muito irritante).
Como Fazer
Só lembrando: estou conectado a internet via modem 3G utilizando a porta USB e tenho a interface ethernet livre.
Certifique-se que o dhcpd está instalado:
apt-get install dhcp3-server
Depois crie um arquivo de configuração para o dhcpd. Eu criei um arquivo chamado mdhcpd.conf da seguinte maneira (qualquer dúvida, olhar a fonte de consulta):
# Configuração do dhcpd para se tornar um servidor de internet
# para a rede local.
#
# feito por meleu, março/2009
#
# fonte de consulta:
# http://www.guiadohardware.net/dicas/configurando-servidor-dhcp.html
#
##########
ddns-update-style none;
# Tempo em segundos para revalidação dos endereços IP
default-lease-time 600;
# Tempo máximo em que uma estação usa um determinado IP
max-lease-time 86400;
# Este servidor será o servidor oficial de DHCP na rede local,
# caso contrário a diretica 'authoritative' deve ser comentada
authoritative;
# o endereço da rede local será 192.168.60
subnet 192.168.60.0 netmask 255.255.255.0 {
# os endereços IP dos clientes vai de 192.168.60.100-200
range 192.168.60.100 192.168.60.201;
# IMPORTANTE: é necessário que a interface do mubuntu com a
# rede local tenha IP 192.168.60.1
option routers 192.168.60.1;
# servidores DNS (são os que consegui pela conexão do Claro 3G)
# posteriormente posso tentar via OpenDNS
option domain-name-servers 200.169.118.22,200.169.117.22;
# broadcast, o óbvio
option broadcast-address 192.168.60.255;
}
Beleza. Até aqui eu só faço a primeira vez. As instruções daqui pra baixo é que eu faço quando quero tornar meu laptop um servidor de internet.
Primeiro defino um endereço IP para eth0. Pode ser desse jeito:
ifconfig eth0 192.168.60.1 netmask 255.255.255.0
Agora chamamos o dhcpd e dizemos para ele que o arquivo de configuração é o mdhcpd.conf:
dhcpd3 -cf mdhcpd.conf
E pra finalizar, habilitamos o NAT bem rápido e rasteiro. Vale ressaltar que eth0 é a minha interface com a rede local, e ppp0 é a interface conectada a internet (pode ser necessário fazer alguma adaptação). Qualquer dúvida, consultar a documentação do iptables.
sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
Pronto! Agora eu e minha esposa não ficamos mais brigando para ver quem vai acessar a internet!