1 - Introdução:
Este é meu segundo tutorial para a comunidade do BFW e como ainda não possuo conhecimentos suficientes para compilar um BFW personalizado, resolvi abordar dois temas em apenas um tutorial, são a criação de um domínio para a sua rede local e, como o BFW reconstrói a maioria dos arquivos no boot, a personalização de arquivos "autorregeneráveis".
Portanto, se você quer criar um domínio local usando o BFW e/ou gostaria de personalizá-lo sem ter que recompilá-lo, este tutorial é uma boa ferramenta pois lhe propiciará alterar arquivos do BFW e caso algo dê errado bastará interromper um script e reiniciá-lo para que ele volte a condição normal.
2 - O que você vai precisar:
É primordial que você já esteja familiarizado com o Conceito de DNS - Domain Name System - bem como com todas as terminologias envolvidas no assunto (ex: FQDN, CNAME, ALIAS, TLD e etc); com o BIND que é a aplicação responsável pelo DNS no BFW e com o BFW propriamente dito.
É válido ressaltar que não serão abordadas todas as minúcias do BIND ficando a seu critério uma leitura mais aprofundada sobre o mesmo para uma compreensão mais ampla.
3 - Cenário Hipotético:
Para fins práticos será demonstrado um cenário genérico que poderá muito bem ser adequado a maioria dos casos:
Rede local configurada com o BFW como maior autoridade do backbone gerenciando LINKS, ROTAS, DNS, CACHE, QOS, DHCP. Adicionalmente o BFW rodará serviços Web, FTP e Samba.
Abaixo as configurações da rede e os dispositivos que já estão conectados e farão parte do domínio.
- Código: Selecionar todos
REDE --> IP: 10.0.0.0/8
GATEWAY --> IP: 10.0.0.1/8 - ALIASES: bfw, gateway
WEBSERVER --> IP: 10.0.0.1/8 - ALIASES: www
FTPSERVER --> IP: 10.0.0.1/8 - ALIASES: ftp
SMBSERVER --> IP: 10.0.0.1/8 - ALIASES: smb, samba, arquivos
SWITCH --> IP: 10.0.0.2/8 - ALIASES: sw, switch
ACCESPOINT --> IP: 10.0.0.3/8 - ALIASES: ap
HTPC --> IP: 10.0.1.1/8 - ALIASES: htpc, multimidia, kodibunto
CELULAR01 --> IP: 10.1.1.1/8 - ALIASES: cel01, celeular01
CELULAR02 --> IP: 10.2.1.1/8 - ALIASES: cel02, celeular02
TABLET01 --> IP: 10.1.2.1/8 - ALIASES: tab01, tablet01
TABLET02 --> IP: 10.2.2.1/8 - ALIASES: tab02, tablet02
COMPUTADOR --> IP: 10.3.1.1/8 - ALIASES: pc
NOTEBOOK --> IP: 10.1.4.1/8 - ALIASES: nt, note
Existe uma certa estrutura de subnets nos endereçamentos IP da rede, que por sinal foi inspirada na minha rede doméstica. Vou demonstrar abaixo:
- Código: Selecionar todos
10.0.0.0/8
| | | | |
| | | | '-> RANGE - IP:10.0.0.1 - 10.255.255.255, MASKARA: 255.0.0.0
| | | '---> HOST - 10.0.0.X:HOSTS DE INFRAESTRUTURA DO BACKBONE, 10.0.1.X:HOSTS DE SERVIÇOS DA REDE, 10.X.X.X:HOST TÍPICO DE ALGUÉM
| | '-----> TIPO DE HOST - 10.0.0:INFRAESTRUTURA, 10.0.1:SERVIÇOS, 10.X.1:CELULAR, 10.X.2:TABLET, 10.X.3:PC, 10.X.4:NOTEBOOK
| '-------> USUÁRIO - 10.0:BACKBONE, 10.1:EU, 10.2:ESPOSA, 10.3:AMBOS
'---------> REDE - 10:TODA A REDE
Você deve estar se perguntando porque eu coloquei esta quantidade absurda de dispositivos para fazer parte do domínio assim como alguns ficaram com mais de um "alias"; eu explico: Uma das vantagens do DNS é a capacidade mnemônica propiciada pelo mesmo, pois, mesmo tendo sido eu quem arbitrariamente designou todos os endereços IP, as vezes fica inviável lembrar-me de todos e, assim, o DNS cai como uma luva.
4 - Entendendo os responsáveis:
4.1 - O BFW:
Os arquivos de configuração do BIND no BFW, bem como a maioria das pastas e arquivos são "autorregeneráveis", ou seja, por mais que você edite, crie ou exclua aqueles arquivos "na unha", no próximo boot tudo desaparecerá voltando a condição padrão.
4.2 - Entendendo o BIND:
O BIND, que já está muito bem integrado ao BFW, será o responsável por traduzir os nomes dos dispositivos em IPs e vice-versa, porém, para tanto, será necessário editar um daqueles arquivos de configuração, que são autoregeneráveis, bem como a criação de dois outros para que ele possa executar o serviço.
5 - Botando a mão na massa:
Antes de colocar cada um dos passos a seguir, aconselho a leitura até o fim de cada ítem para entender o que deverá ser alterado para que seja adequado a sua rede
5.1 - Criando pasta
Um local que é imune a autorregeneração do BFW é a pasta "/partition", nela você criará uma nova pasta de nome "scripts".
- Código: Selecionar todos
# cd partition
# mkdir /scripts
5.2 - Criando o script de zonas e seus respectivos arquivos
Dentro da pasta "scripts" você criará um novo arquivo chamado "makezone.sh"
- Código: Selecionar todos
# edit makezone.sh
Cole o seguinte script:
- Código: Selecionar todos
##SCRIPT PARA CRIAR ZONAS NO NAMED.CONF E ARQUIVOS DE ZONAS
#CRIAR ZONA REVERSA
echo '
zone "10.in-addr.arpa" {
type master;
file "db.10";
};
#CRIAR ZONA DOMINIO
zone "meudominio.lan" {
type master;
file "db.meudominio.lan";
};
' >> /var/lib/named/etc/named.conf
#CRIAR ARQUIVO REVERSO MEUDOMINIO.LAN
echo ';
; BIND zone file for 10.0.0.0/8
;
$TTL 604800
@ IN SOA ns.meudominio.lan. root.meudominio.lan. (
1 ; serial para controle de atualizações entre master e slave
604800 ; tempo de atualizações entre master e slave (refresh)
86400 ; tempo de atualizações caso o refresh falhe
2419200 ; tempo de expiração do slave caso não se contate com o master
604800 ); tempo de vida das repostas negativas do servidor
@ IN NS ns.meudominio.lan.
1.0.0 IN PTR ns.meudominio.lan.
;DAQUI PRA BAIXO TUDO É OPCIONAL, EDITE CONFORME SUA PREFERÊNCIA
1.0.0 IN PTR bfw.meudominio.lan.
1.0.0 IN PTR gateway.meudominio.lan.
1.0.0 IN PTR www.meudominio.lan.
1.0.0 IN PTR ftp.meudominio.lan.
1.0.0 IN PTR smb.meudominio.lan.
1.0.0 IN PTR samba.meudominio.lan.
1.0.0 IN PTR arquivos.meudominio.lan.
2.0.0 IN PTR sw.meudominio.lan.
2.0.0 IN PTR switch.meudominio.lan.
3.0.0 IN PTR ap.meudominio.lan.
1.1.0 IN PTR htpc.meudominio.lan.
1.1.0 IN PTR multimidia.meudominio.lan.
1.1.0 IN PTR kodibunto.meudominio.lan.
1.1.1 IN PTR cel01.meudominio.lan.
1.1.1 IN PTR celular01.meudominio.lan.
1.1.2 IN PTR cel02.meudominio.lan.
1.1.2 IN PTR celular02.meudominio.lan.
1.2.1 IN PTR tab01.meudominio.lan.
1.2.1 IN PTR tablet01.meudominio.lan.
1.2.2 IN PTR tab02.meudominio.lan.
1.2.2 IN PTR tablet02.meudominio.lan.
1.4.1 IN PTR nt.meudominio.lan.
1.4.1 IN PTR note.meudominio.lan.
1.1.3 IN PTR pc.meudominio.lan.
;FIM DO ARQUIVO DE INSTRUÇÃO
' > /var/lib/named/conf/db.10
#CRIAR ARQUIVO ZONA MEUDOMINIO.LAN
echo ';
; BIND zone file for meudominio.lan
;
$TTL 604800
@ IN SOA ns.meudominio.lan. root.meudominio.lan. (
1 ; serial para controle de atualizações entre master e slave
604800 ; tempo de atualizações entre master e slave (refresh)
86400 ; tempo de atualizações caso o refresh falhe
2419200 ; tempo de expiração do slave caso não se contate com o master
604800 ); tempo de vida das repostas negativas do servidor
@ IN NS ns.meudominio.lan.
ns IN A 10.0.0.1
;DAQUI PRA BAIXO TUDO É OPCIONAL, EDITE CONFORME SUA PREFERÊNCIA
bfw IN CNAME ns
gateway IN CNAME ns
www IN CNAME ns
ftp IN CNAME ns
smb IN CNAME ns
samba IN CNAME ns
arquivos IN CNAME ns
sw IN A 10.0.0.2
switch IN CNAME sw
ap IN A 10.0.0.3
htpc IN A 10.0.1.1
multimidia IN CNAME htpc
kodibunto IN CNAME htpc
cel01 IN A 10.1.1.1
celular01 IN CNAME cel01
cel02 IN A 10.2.1.1
celular02 IN CNAME cel02
tab01 IN A 10.1.2.1
tablet01 IN CNAME tab01
nt IN A 10.1.4.1
note IN CNAME nt
pc IN A 10.3.1.1
;FIM DO ARQUIVO DE INSTRUÇÃO
' > /var/lib/named/conf/db.meudominio.lan
/etc/init.d/named reload
#EDITAR RESOLV.CONF
echo 'domain meudominio.lan
search meudominio.lan
nameserver 127.0.0.1 ' > /etc/resolv.conf
Salve e feche o arquivo.
5.2.1 - Vamos entender e alterar o script:
A) Tudo que precede uma "cerquilha" (#) ou um "ponto e vírgula" (;) é um comentário, portanto, siga a instrução e edite ou exclua a linha inteira conforme seu interesse;
B) #CRIA ZONA REVERSA
- Esta parte do script acrescentará o zona reversa para "10.0.0.0";
- Se você usa o IP padrão do BFW, a primeira zona deverá ser "0.168.192.in-addr.arpa", caso você utilize outra faixa recomendo aquela leitura inicial sobre o BIND antes de alterar esta parte do script.
- A zona "meudominio.lan" deverá ser alterada para o domínio que você utilizará na sua rede local (ex: "minharede.lan", "empresa.lan", "casa.lan"), mantendo o TLD ".lan" inalterado, ou se necessário usando um TLD de no máximo 3 (três) caracteres.
- Esta parte criará o arquivo de instrução de reverso para sua rede local;
- Atente para os seguintes fatos: Os IPs estão ao contrário e faltando o primeiro octeto; o mesmo host é citado várias vezes e todos os FQDN estão com um ponto (.) no final;
- A linha inciada por um arroba (@) indica o servidor DNS autoridade na rede, no nosso caso é o BFW, neste tutorial ele será identificado por "ns", porém você pode atribuir outro nome a ele e deverá indicar o IP setado no mesmo;
- AS linhas após ";DAQUI PRA BAIXO TUDO É OPCIONAL, EDITE CONFORME SUA PREFERÊNCIA" indicam os hosts que farão parte do domínio, edite a seu critério.
- Aqui é onde o trabalho acontece, novamente a linha iniciada por um arroba (@) é idêntica a da zona reversa e deverá ser usado o mesmo critério;
- Novamente as linhas subsequentes ao indicador apontam nossos hosts, atente, novamente, para a repetição de hosts.
- Aqui nós temos uma pequena alteração no arquivo resolv.conf do BFW;
- Deverão ser alterados todos os "meudominio.lan" para o domínio que você pretende utilizar na rede local.
5.3 - Criando um script para DHCP
Levando em consideração que não sou um heavy user linux, não me senti a vontade para usar o "sed" no arquivo de script do DHCP, porém, se você come linux no café da manhã, poderá usá-lo para fazer as alterações aqui indicadas.
- 1 - Copie o arquivo "006-dhcp" localizado em "/etc/init.d/" para a pasta "/partition/scripts";
- Código: Selecionar todos
# cp /etc/init.d/006-dhcp /partition/scripts
- Código: Selecionar todos
# mv 006-dhcp meu-dhcp
- Código: Selecionar todos
# edit meu-dhcp
- Código: Selecionar todos
echo 'ddns-update-style none;
...
ETHLOCAL=""- Código: Selecionar todos
echo "ddns-update-style none;"
echo "one-lease-per-client true;"
echo "ping-check true;"
echo "default-lease-time $DHCP_DEFAULT_LEASE;"
echo "max-lease-time $DHCP_DEFAULT_LEASE;"
echo "authoritative;"
echo 'ddns-domainname "meudominio.lan.";'
echo 'option domain-name "meudominio.lan.";'
ETHLOCAL=""- Código: Selecionar todos
# edit chgdhcp.sh
- Código: Selecionar todos
cp -f /partition/scripts/meu-dhcp /etc/init.d/006-dhcp
sh /etc/init.d/dhcp reload
2 - Renomeie o arquivo para algo de sua preferência, eu optei por "meu-dhcp";
3 - Abra o arquivo;
4 - Procure pelas seguintes linhas:
5 - Substitua todo o conteúdo para que fique com a seguinte aparência:
6 - Salve e feche o arquivo "meu-dhcp";
7 - Ainda na pasta "scripts", crie um novo arquivo com o nome "chgdhcp.sh";
8 - Cole o seguinte script:
9 - Salve e feche o arquivo chgdhcp.sh
5.3.1 - Entendendo e alterando o script para DHCP
- A última linha citada permanece inalterada;
- Aonde está "meudominio.lan." deverá ser substituído pelo seu domínio preservando-se as aspas ("")e o ponto (.) ao final
5.4 - O Toque final.
Se você seguiu corretamente todos os passos até aqui existem três arquivos na pasta "/etc/partition/scripts", são eles: "makezone.sh", "chgdhcp.sh" e "meu-dhcp", portanto, está na hora de dizer ao seu BFW o que fazer com os três arquivos que você criou.
5.4.1 - Adicione os scripts na inicialização do BFW:
- Opção Webadmin: <Configurações> <Sistema> <Script de inicialização>
- Código: Selecionar todos
# edit /etc/brazilfw/custom/rc.local
- Código: Selecionar todos
./partition/scripts/makezone.sh
./partition/scripts/chgdhcp.sh
Opção Terminal local ou remoto:
Cole o seguinte script:
5.4.2 - Atribua permissões aos arquivos criados:
- Código: Selecionar todos
# chmod +x /partition/scripts/*
5.4.3 - Reiniciando seu BFW e entendo o que está acontecendo.
Após reinicializar, seu BFW lerá o "rc.local" que ordenará a execução dos scripts que farão as alterações que esperamos. Para checar se tudo ocorreu bem acesse no Webadmin: <Sistema> <Registro de eventos> <aplicativos>.
As linhas que nos interessam são as seguintes:
- BIND Recarregando
- Código: Selecionar todos
gateway daemon.info named[2082]: received control channel command 'reload'
- Código: Selecionar todos
gateway daemon.info named[2082]: zone 10.IN-ADDR.ARPA/IN: (master) removed
- Código: Selecionar todos
gateway daemon.info named[2082]: reloading configuration succeeded
gateway daemon.info named[2082]: reloading zones succeeded
gateway daemon.info named[2082]: zone 10.in-addr.arpa/IN: loaded serial 1
gateway daemon.info named[2082]: zone meudominio.lan/IN: loaded serial 1
gateway daemon.notice named[2082]: all zones loaded
gateway daemon.notice named[2082]: running- Código: Selecionar todos
gateway daemon.info dhcpd: Internet Systems Consortium DHCP Server 4.2.1
gateway daemon.info dhcpd: Copyright 2004-2011 Internet Systems Consortium.
gateway daemon.info dhcpd: All rights reserved.
gateway daemon.info dhcpd: For info, please visit https://www.isc.org/software/dhcp/
gateway daemon.info dhcpd: Wrote 0 deleted host decls to leases file.
gateway daemon.info dhcpd: Wrote 0 new dynamic host decls to leases file.
gateway daemon.info dhcpd: Wrote 0 leases to leases file.
gateway daemon.info dhcpd: Listening on LPF/eth0/00:00:00:00:00:00/eth0
gateway daemon.info dhcpd: Sending on LPF/eth0/00:00:00:00:00:00/eth0
gateway daemon.info dhcpd: Sending on Socket/fallback/fallback-net
Após a leitura do arquivo, devidamente alterado, a zona foi removida
Se tudo estiver setado corretamente teremos a seguinte informação:
DHCP recarregado sem problemas:
E para a cereja do bolo, abra um terminal pra pingar nos host que você criou, ex: ns.meudominio.lan
- Código: Selecionar todos
$ ping ns.meudominio.lan
6 - Explicações adicionais:
Como pode ser visto anteriormente, foi criado mais de um "nome" para vários hosts, a idéia foi demonstrar o conceito de CNAME bem como reservar um nome para um futuro host que venha a substituir as funções ora desempenhadas pelo BFW tais como Web Server, FTP Server e SMB Server, bastando tão somente apontar os nomes para os novos hosts.
7 - Leituras Importantes:
Eu utilizei diversos sites para "aprender" em um final de semana como funciona o BIND, apartir daí usei de "macetes" para alterar a estrutura do mesmo no BFW, portanto, segue na ordem de detalhes as fontes:
http://ntcentral.com.br/knowledgebase/135/Servidor-Linux-Configurando-Zonas-de-DNS-e-VirtualHosts-no-Apache-2-Testado-em-Ubuntu-Intrepid-Ibex.html
http://www.primeirospassos.org/sessao9_2.html
http://concursosdeti.net/tutorial-de-configuracao-de-servidor-dns-bind9/
http://www.cooperati.com.br/2011/10/27/dns-criando-zonas-no-bind/
http://www.aprendendolinux.com/criando-um-servidor-de-dns-local-com-o-bind-no-debian-6/
8 - Pedido do autor:
Se você domina o "sed" e está com tempo livre, eu ficaria muito feliz em reescrever todo o passo 5.3 para um script mais simples com o "sed", portanto, esteja livre para alterá-lo e se possível enviar-me.
9 - Considerações finais:
Se por algum motivo você notar que seu BFW apresenta um comportamento estranho após as alterações aqui descritas, ou o domínio não responde, basta comentar as linhas do "rc.local" que indicam a carga dos scripts, salvar e reiniciar seu BFW.
Como você pode notar, não sou nenhum expert em linux, tão pouco sou desenvolvedor do BFW, eu mesmo classifico-me como "gambiarreiro profissional", todavia, o método aqui descrito foi desenvolvido, implementado e testado por mim, em mais de uma vez e utilizando hosts virtuais e reais, inclusive, hosts em produção, portanto, garanto que funciona e não causará qualquer alteração que venha a corromper sua instalação do BFW, logo.
Esteja livre para sugerir correções, alterações ou explicações adicionais sempre que você notar que algo está errado, incoerente ou necessitando de uma explicação mais ampla.
É válido ressaltar que tudo quanto aqui foi descrito foi desenvolvido para o BFW 3.0.258, todavia, acredito ser possível, utilizando-se de pequenas alterações, implementar a mesma idéia básica nas versões mais recentes.
Espero que com este tutorial você possa usufruir ainda mais de todas as capacidades do seu BFW tanto ou mais quanto eu.
Que a força esteja com você.