1. DHCP com controle de IP e compartilhamento no Debian Squeeze
Autor: João <>
Data: 19/02/2013
Introdução
Você deverá ter duas placas de rede instaladas no computador, que será o servidor DHCP.
Todo servidor deve ser configurado para iniciar automaticamente em caso de queda de energia. A
configuração deve ser feita acessandose
o Setup do CMOS (o popular BIOS) da placamãe.
Geralmente, essa configuração está na aba "Power" ou "Energy" ou "Advanced" ou similar. A opção a
ser configurada, geralmente, aparece como "Restore on AC Power Loss" ou similar.
Esta opção deve ser colocada como "Power on". Isto fará com que a máquina seja reiniciada
automaticamente. Com essa opção ligada (Power on), a placamãe
detectará o retorno da energia e ligará
a máquina automaticamente colocando o servidor em funcionamento.
1. Instalar o pacote DHCP como root:
# aptitude safeupgrade
# aptget
update
# aptitude install iscdhcpserver
Aguarde terminar a instalação. Deverá dar falha: "failed", em vermelho Isso
é normal, uma vez que
ainda não configuramos o DHCP.
Antes do próximo passo, você já deverá ter sua subnet (subrede) planejada com seus endereços IPs. O IP
da placa de rede que irá servir o DHCP será também, automaticamente, o IP do
gateway/compartilhamento da nossa configuração (no caso, a eth0).
Tecnicamente falando, quando fazemos o compartilhamento, não estamos transformando o GNU/Linux
em um roteador, somente estamos compartilhando os dados de entrada de uma interface de rede com a(s)
outra(s).
2. Configure os endereços IPs das placas de rede:
# vim /etc/network/interfaces
Não mexa nas linhas iniciais do arquivo. As configurações abaixo das linhas iniciais devem ficar como
está abaixo.
2. * Lembrando que a placa de rede Onboard nem sempre é a eth0 e a Offboard nem sempre é a eth1.
O arquivo abaixo é somente o exemplo da nossa configuração:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The looback network interface
auto lo
iface lo inet loopback
# Primeira interface de rede offboard
auto eth0
allowhotplug
eth0
iface eth0 inet static
address 192.168.2.1
netmask 255.255.255.0
broadcast 192.168.2.255
# Segunda interface de rede onboard
auto eth1
allowhotplug
eth1
iface eth1 inet dhcp
Salve e saia do arquivo.
Os números de IPs devem estar de acordo com o arquivo /etc/dhcp/dhcpd.conf, que você mesmo irá
configurar mais adiante.
A placa de rede que recebe a Internet é a eth1. Deixei ela com IP dinâmico. Caso queira fixar o IP da
placa que recebe a Internet, no caso a eth1, ela deverá ter como gateway, o IP do roteador ADSL ou do
roteador da rede.
* Lembrando que, no arquivo /etc/network/interfaces, você deve acrescentar todas as placas de rede que
estiverem instaladas na máquina: eth0, eth1, eth2 e assim por diante.
3. Verifique também o arquivo /etc/resolv.conf, que deverá estar com um ou dois DNSs adicionados.
Exemplo:
# vim /etc/resolv.conf
Dentro do arquivo deverá ter:
domain xxxxxxxxxxxx
search xxxxxxxxxxxxx
nameserver xxx.xxx.xxx.xxx
3. nameserver xxx.xxx.xxx.xxx
Onde:
Em "domain" e "search", os xxx são nomes de domínio (se houver);
Em "nameserver", os xxx são números de IPs de DNS.
Caso não tenha nada no arquivo, acrescente o IP do Gateway (roteador) ou do DNS da rede (se houver).
Este arquivo se renova a cada reinicialização da máquina. Se não tiver esse arquivot você deve ciálo:
# vim /etc/resolv.conf
E acrescentar, pelo menos, um "nameserver". Na próxima reinicialização ele virá correto.
4. Para configurar o serviço DHCP, devemos alterar somente dois arquivos:
/etc/default/iscdhcpserver
/etc/dhcp/dhcpd.conf
Entre no arquivo com o seu editor de texto favorito, o Nano, o Pico, o Vim, etc. Usarei o Vim como
exemplo:
# vim /etc/default/iscdhcpserver
Na linha onde diz:
INTERFACES=""
Coloque entre as aspas a interface de rede que irá responder pelo DHCP. Exemplo:
INTERFACES="eth0"
Salve e saia do arquivo.
5. Abra o arquivo /etc/dhcp/dhcp.conf:
# vim /etc/dhcp/dhcpd.conf
Comente as duas linhas que iniciam com "option domain" colocando um "#" na frente.
Procure a linha onde tem escrito:
# authoritative;
E se já não estiver sem, tire o "#" da frente.
4. Após, procure a linha onde diz:
# This is a very basic subnet declaration
Dê um ENTER colocando uma linha em branco e acrescente (antes leia abaixo a definição das linhas do
arquivo):
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.5 192.168.2.125;
option routers 192.168.2.1;
option broadcastaddress
192.168.2.255;
option domainnameservers
192.168.2.2, xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx, 192.168.2.1;
}
deny unknownclients;
ignore unknownclients;
group servidores {
usehostdeclnames
true;
host dhcp {
hardware ethernet xx:xx:xx:xx:xx:xx;
fixedaddress
192.168.2.1;
}
host dns {
hardware ethernet xx:xx:xx:xx:xx:xx;
fixedaddress
192.168.2.2;
}
}
group clientes {
usehostdeclnames
true;
host maquina01 {
hardware ethernet xx:xx:xx:xx:xx:xx;
fixedaddress
192.168.2.5;
}
}
Acrescente tantos quantos hosts forem necessários para você.
Na primeira linha definimos:
A nossa subrede: 192.168.2.0
E a máscara dessa subrede: 255.255.255.0
Escolhemos isso dentro das 3 faixas de IPs reservadas para redes internas privadas de acordo com a RFC
1918:
10.0.0.010.255.255.255
172.16.0.0172.31.255.255
5. 192.168.0.0192.168.255.255
Definição:
Na linha "range", definimos a nossa faixa e a quantidade de IPs que queremos que o DHCP
distribua (depende do número de computadores que temos na rede). Esta linha deve ser
comentada, caso as opções "deny unknown" e "ignore" estejam descomentadas, senão o DHCP
continuará distribuindo IPs fora do cadastro dos grupos "servidores" e "clientes".
Na linha "option routers", definimos o IP do roteador que, no nosso caso, deve ser o mesmo da
placa de rede que responde pelo DHCP, no caso, a eth0.
Na linha "option broadcastaddress",
definimos o broadcast da rede.
Na linha "option domainnameservers",
definimos, por primeiro, o DNS interno da rede (se
houver) seguido de DNSs públicos e abertos (os xxx são endereços de IP de DNS públicos e
abertos) e terminando sempre com o IP do gateway/roteador para redundância. Caso não tenha
DNS interno na sua rede, retire o IP, no caso, 192.168.2.2 e o "host dns" não precisa ter.
As linhas "deny unknownclients"
e "ignore unknownclients",
fazem com que o DHCP distribua
IPs somente para as máquinas que estiverem com o MAC cadastrado nos grupos acima. Ao
acrescentar os IPs com os MACs na tabela ARP através do arquivo /etc/ethers (abaixo) você deve
comentar essas linhas colocando um "#" na frente delas.
* Importante: Se você deixar as linhas "deny ..." e "ignore ..." descomentadas, as máquinas clientes que
estiverem com IP automático e não estiverem cadastradas, NÃO obterão IP e, logicamente, só navegarão
se o IP for fixado manualmente na própria máquina.
No grupo "servidores" estamos fixando os IPs dos servidores através do MAC da placa de rede.
Para ver o MAC da placa de rede, execute ifconfig e veja o HW da placa de rede que responde pelo
servidor e coloque ali em cima. Caso não haja DNS interno na rede, o "host dns" deve ser omitido.
No grupo "clientes", definimos os IPs dos clientes através do MAC da placa de rede de cada máquina.
A opção GROUP serve para separar a configuração por grupos dentro da mesma rede/subrede. Por
exemplo, você quer que um determinado grupo composto por algumas máquinas tenha uma
configuração distinta de outro grupo ou do resto da rede e quer que usem, por exemplo, um outro
gateway (option routers), ou qualquer outra configuração permitida a somente uma máquina pelo
dhcpd.conf, você pode especificar isso através do "group" sem aplicar para toda a rede.
Salve e saia do arquivo.
Habilitando o compartilhamento
6. Compartilhando a conexão.
Criando o arquivo de configuração do IPtables:
# vim /etc/init.d/firewall.sh
6. Obs.: Aqui você pode dar o nome que quiser ao arquivo.
Dentro do arquivo coloque exatamente o seguinte:
#!/bin/bash
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables t
nat A
POSTROUTING o
eth1 j
MASQUERADE
Onde:
A placa eth1 é a placa que recebe a Internet. Se a sua for a eth0, você deve colocar: o
eth0
* Atente para isso: A interface que vai ali é SEMPRE a interface que recebe a Internet, ou seja, é
nesta placa de rede que deverá ser conectado o "fio" de entrada dos dados/Internet.
A primeira linha é somente um comentário que identifica o interpretador de comandos, no caso o
bash.
Na segunda linha estamos levantando o módulo de compartilhamento.
Na terceira linha estamos ativando o compartilhamento.
Na quarta linha estamos dizendo para o IPtables que tudo que entrar pela placa de rede eth1, deve
ser compartilhado com as outras placas de rede do computador.
Salve e saia do arquivo.
É uma configuração extremamente básica e sem segurança nenhuma. Para maior aprofundamento,
estude as regras do IPtables.
Vamos transformar o arquivo que criamos em um arquivo executável:
# chmod +x /etc/init.d/firewall.sh
Agora vamos fazer com que esse arquivo seja executado automaticamente na inicialização. Entre no
arquivo "rc.local":
# vim /etc/rc.local
Logo acima da linha "exit 0", coloque o caminho para o arquivo, ficando assim:
/etc/init.d/firewall.sh start
exit 0
Salve e saia do arquivo.
7. Reinicie o sistema:
7. # shutdown r
now
Com isso, o servidor deverá estar fazendo o compartilhamento e servindo endereços IPs para a rede local
(Lan).
A lógica é a seguinte: A Internet entra por uma placa de rede, o sistema "pega" essa Internet e através do
arquivo do IPtables, faz com que ela seja distribuída para as outras placas de rede, não importando
quantas mais tenha na máquina.
Para remover completamente o serviço de DHCP da máquina, se for o caso, execute:
# aptget
purge iscdhcpserver
Depois coloque todas as placas de rede com IP automático (DHCP) e reinicie:
# shutdown r
now
Daí é só reinstalar o serviço e fazer as configurações novamente.
Controle de IPs pela tabela ARP
8. Para evitar que algum cliente acesse a Internet fixando manualmente o IP na sua máquina, devemos
acrescentar na tabela ARP os IPs, criando o arquivo /etc/ethers:
# vim /etc/ethers
Coloque dentro do arquivo o IP e o MAC da seguinte maneira, um por linha:
192.168.2.2 xx.xx.xx.xx.xx.xx
192.168.2.3 xx.xx.xx.xx.xx.xx
E assim por diante.
Você pode também preencher com MACs falsos, os IPs que não estão em uso, por exemplo:
192.168.2.126 00:00:00:ff:ee:11
Ficaria assim o arquivo /etc/ethers:
192.168.2.5 xx.xx.xx.xx.xx.xx
192.168.2.6 xx.xx.xx.xx.xx.xx
192.168.2.126 00:00:00:ff:ee:11
192.168.2.127 00:00:00:ff:ee:11
* Lembrando que os IPs que não estão em uso, são os que não estão cadastrados nos grupos
"servidores" e "clientes".
8. Se você tem uma faixa de IPs classe C (recomendada para estes casos), então são 253 linhas para você
colocar no /etc/ethers, entre IPs em uso e nãouso.
O endereço do gateway, da rede e do broadcast não é
necessário colocar.
Agora, precisamos carregar o arquivo /etc/ethers na tabela ARP durante a inicialização. Entre no arquivo
/etc/rc.local e coloque "arp f"
acima da linha exit 0:
/etc/init.d/firewall.sh start
arp f
exit 0
Para o controle de MAC por ARP funcionar, o servidor GNU/Linux terá que ser o gateway da rede, ou
seja, deverá haver o compartilhamento.
E, não esqueça, quando a linha "range" estiver descomentada, as linhas "deny..." e "ignore..." devem
estar comentadas e viceversa.
Assim, se alguém não cadastrado no DHCP fixar manualmente um IP na máquina, mesmo estando
dentro da faixa de rede utilizada, a máquina não navegará na Internet.
Você pode fazer esse controle de IPs por MAC também pelo IPtables, porém, tendo muitas máquinas na
rede tornará o servidor um pouco lento. É preferível fazer pela tabela ARP.
http://www.vivaolinux.com.br/artigo/DHCPcomcontroledeIPecompartilhamentonoDebianSqueeze
Voltar para o site