<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog do Brandi &#187; Unix</title>
	<atom:link href="http://blog.ebrandi.eti.br/category/unix/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ebrandi.eti.br</link>
	<description>Unix, RPG, MMORPG, Bolsa de Valores</description>
	<lastBuildDate>Thu, 09 Sep 2010 03:49:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Como implementar GeoDNS usando o Bind</title>
		<link>http://blog.ebrandi.eti.br/2010/05/como-implementar-geodns-usando-o-bind/</link>
		<comments>http://blog.ebrandi.eti.br/2010/05/como-implementar-geodns-usando-o-bind/#comments</comments>
		<pubDate>Thu, 06 May 2010 14:58:03 +0000</pubDate>
		<dc:creator>Edson Brandi</dc:creator>
				<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://blog.ebrandi.eti.br/?p=5567</guid>
		<description><![CDATA[Ontem a noite um colega de lista de discussão me perguntou se eu conhecia uma forma simples de implementar a funcionalidade de GeoDNS no Bind, isto é, se eu sabia como fazer o Bind resolver um mesmo nome de host com um endereço IP diferente dependendo do pais de origem do usuário que está consultando [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem a noite um colega de lista de discussão me perguntou se eu conhecia uma forma simples de implementar a funcionalidade de GeoDNS no Bind, isto é, se eu sabia como fazer o Bind resolver um mesmo nome de host com um endereço IP diferente dependendo do pais de origem do usuário que está consultando o servidor de DNS.</p>
<p>Essa funcionalidade quando implementada adequadamente permite ao administrador distribuir o trafego dos seus usuários entre vários servidores e mesmo entre mais de um data center, usando como critério de segmentação o pais ou até mesmo a cidade do usuário final, é fácil de imaginar o que se pode fazer com essa &#8220;flexibilidade&#8221; <img src='http://blog.ebrandi.eti.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Como achei que o assunto poderia interessar a outras pessoas estou colocando aqui a dica que dei a ele de um site <a href="http://phix.me/geodns/">http://phix.me/geodns</a> no qual está disponível um tutorial bem detalhado de como implementar essa funcionalidade no Bind através do uso de ACLs.</p>
<p>Para o caso do site acima sair do ar no futuro, eu coloquei uma cópia do script disponibilizado no tutorial e que é responsável pela geração das ACLs a partir do banco de dados gratuito da Maxmind disponível para download <a href="http://blog.ebrandi.eti.br/downloads/geodns.sh">neste link</a>, a diferença entre o banco de dados pago e o gratuito é basicamente a frequência de atualização.</p>
<p>O script em questão gera ACLs para GeoDNS por pais, se precisar fazer por cidade você vai precisar fazer alguns pequenos ajustes, mas não é nada do outro mundo se você está acostumado com scripts em awk.</p>
<p>O processo em si de configuração do bind depois de gerado o arquivo com as ACLs é simples, basta incluir o arquivo na configuração do Bind inserindo no named.conf a linha abaixo:</p>
<pre>include "/path/to/GeoIP.acl";
</pre>
<p>E depois seguir o exemplo la do tutorial para criar um view no named.conf para cada grupo geográfico que você quiser segmentar, no exemplo ele cria uma view para a América do Norte, uma view para a América do Sul, e uma view para o resto do mundo:</p>
<pre>view "north_america" {
  match-clients { US; CA; MX; };
  recursion no;
  zone "example555.com" {
    type master;
    file "pri/example555-north-america.db";
  };
};

view "south_america" {
  match-clients { AR; CL; BR; PY; PE; EC; CO; VE; BO; UY; };
  recursion no;
  zone "example555.com" {
    type master;
    file "pri/example555-south-america.db";
  };
};

view "other" {
  match-clients { any; };
  recursion no;
  zone "example555.com" {
    type master;
    file "pri/example555-other.db";
  };
};
</pre>
<p>Como podem perceber a configuração do Bind em si é simples depois que o script disponibilizado pelo Mark automatiza a geração de um arquivo de ACL contendo as classes IP de cada pais <img src='http://blog.ebrandi.eti.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bom divertimento</p>
<p>[]´s Edson</p>
<p>PS. Se preferir pegar o arquivo de ACL pronto, eu coloquei uma cópia do arquivo gerado hoje 06 de maio de 2010, disponível para download <a href="http://blog.ebrandi.eti.br/downloads/GeoIP.zip">neste link</a>.</p>
<div class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FcSa2Fk&amp;via=ebrandi&amp;text=Como+implementar+GeoDNS+usando+o+Bind&amp;lang=en&amp;count=horizontal&amp;counturl=http://blog.ebrandi.eti.br/2010/05/como-implementar-geodns-usando-o-bind/"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ebrandi.eti.br/2010/05/como-implementar-geodns-usando-o-bind/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como resetar sua senha de root no mysql</title>
		<link>http://blog.ebrandi.eti.br/2010/05/como-resetar-sua-senha-de-root-no-mysql/</link>
		<comments>http://blog.ebrandi.eti.br/2010/05/como-resetar-sua-senha-de-root-no-mysql/#comments</comments>
		<pubDate>Wed, 05 May 2010 17:17:55 +0000</pubDate>
		<dc:creator>Edson Brandi</dc:creator>
				<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://blog.ebrandi.eti.br/?p=5561</guid>
		<description><![CDATA[Esqueceu a senha de root / administrador daquele seu banco de dados mysql que você não acessa a meses? Não tem problema, o processo de reset é bem simples Basta seguir os 4 passos abaixo: 1) Pare o mysqld: # /etc/init.d/mysqld stop 2) Inicialize o banco de dados ignorando as tabelas de permissões: # mysqld_safe [...]]]></description>
			<content:encoded><![CDATA[<p>Esqueceu a senha de root / administrador daquele seu banco de dados mysql que você não acessa a meses? Não tem problema, o processo de reset é bem simples <img src='http://blog.ebrandi.eti.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Basta seguir os 4 passos abaixo:</p>
<p>1) Pare o mysqld:<br />
<strong><em># /etc/init.d/mysqld stop</em></strong></p>
<p>2) Inicialize o banco de dados ignorando as tabelas de permissões:<br />
<em><strong># mysqld_safe &#8211;skip-grant-tables &amp;</strong></em></p>
<p>3) Logue no banco de dados com o usuário root (não vai pedir a senha):<br />
<em><strong># mysql -u root mysql</strong></em></p>
<p>3) Altere a senha do usuário root executando no mysql:<br />
<em><strong>mysql&gt; UPDATE user SET password=PASSWORD(&#8220;SUA-NOVA-SENHA&#8221;) WHERE user=&#8221;root&#8221;;</strong></em></p>
<p>4) Carregue as tabelas de permissões executando no mysql:<br />
<strong><em>mysql&gt; FLUSH PRIVILEGES;</em></strong></p>
<p>Pronto, você já resetou sua senha de administrador, bom divertimento no seu mysql <img src='http://blog.ebrandi.eti.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>[]´s Edson</p>
<div class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FaFPtaj&amp;via=ebrandi&amp;text=Como+resetar+sua+senha+de+root+no+mysql&amp;lang=en&amp;count=horizontal&amp;counturl=http://blog.ebrandi.eti.br/2010/05/como-resetar-sua-senha-de-root-no-mysql/"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ebrandi.eti.br/2010/05/como-resetar-sua-senha-de-root-no-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>X Windows Server gratuito para MS Windows</title>
		<link>http://blog.ebrandi.eti.br/2010/04/x-windows-server-gratuito-para-ms-windows/</link>
		<comments>http://blog.ebrandi.eti.br/2010/04/x-windows-server-gratuito-para-ms-windows/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 14:02:33 +0000</pubDate>
		<dc:creator>Edson Brandi</dc:creator>
				<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://blog.ebrandi.eti.br/?p=5514</guid>
		<description><![CDATA[Outro dia me perguntaram qual X Server eu uso quando preciso acessar a interface gráfica de algum aplicativo num servidor Unix remoto. Como outras pessoas podem ter a mesma duvida estou postando aqui para ficar de referencia. O aplicativo que eu uso é o Xming , estou usando a versão 7.5.0.19 O aplicativo é leve [...]]]></description>
			<content:encoded><![CDATA[<p>Outro dia me perguntaram qual X Server eu uso quando preciso acessar a interface gráfica de algum aplicativo num servidor Unix remoto.</p>
<p>Como outras pessoas podem ter a mesma duvida estou postando aqui para ficar de referencia.</p>
<p>O aplicativo que eu uso é o <a href="http://www.straightrunning.com/XmingNotes/">Xming</a> , estou usando a versão 7.5.0.19</p>
<p>O aplicativo é leve e bem eficiente <img src='http://blog.ebrandi.eti.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>[ ]´s Edson</p>
<div class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2F976JGL&amp;via=ebrandi&amp;text=X+Windows+Server+gratuito+para+MS+Windows&amp;lang=en&amp;count=horizontal&amp;counturl=http://blog.ebrandi.eti.br/2010/04/x-windows-server-gratuito-para-ms-windows/"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ebrandi.eti.br/2010/04/x-windows-server-gratuito-para-ms-windows/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Provedor de Cloud Computing com suporte a Virtual Machines com FreeBSD</title>
		<link>http://blog.ebrandi.eti.br/2010/02/provedor-de-cloud-computing-com-suporte-a-virtual-machines-com-freebsd/</link>
		<comments>http://blog.ebrandi.eti.br/2010/02/provedor-de-cloud-computing-com-suporte-a-virtual-machines-com-freebsd/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 18:35:27 +0000</pubDate>
		<dc:creator>Edson Brandi</dc:creator>
				<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://blog.ebrandi.eti.br/?p=5496</guid>
		<description><![CDATA[Eu vinha já há algum tempo procurando uma empresa de cloud computing que me permitisse rodar uma virtual machine com o sistema operacional FreeBSD,  se possivel com a mesma flexibilidade e escalabilidade que eu consigo com as maquinas Linux que eu contrato da RackSpaceCloud , que oferece um serviço fantastico baseado no XEN. Ontem encontrei [...]]]></description>
			<content:encoded><![CDATA[<p>Eu vinha já há algum tempo procurando uma empresa de cloud computing que me permitisse rodar uma virtual machine com o sistema operacional <a href="http://www.freebsd.org/">FreeBSD</a>,  se possivel com a mesma flexibilidade e escalabilidade que eu consigo com as maquinas Linux que eu contrato da <a href="http://www.rackspacecloud.com/310.html">RackSpaceCloud</a> , que oferece um serviço fantastico baseado no <a href="http://xen.org/">XEN</a>.</p>
<p>Ontem encontrei uma empresa inglesa, chamada <a href="https://www.elastichosts.com">ElasticHosts</a>, que montou uma solução de cloud computing usando Linux com <a href="http://www.linux-kvm.org/page/Main_Page">KVM</a>, e para minha alegria eles suportam VMs com <a href="http://www.freebsd.org/">FreeBSD</a> <img src='http://blog.ebrandi.eti.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Fiz alguns testes e fiquei satisfeito com o resultado e o preço é justo.</p>
<p>Uma das grandes vantagens que vi no serviço deles  é que você pode desligar sua maquina virtual, e enquanto elas  estiverem desligadas você paga apenas pelo storage consumido. Você também pode ter uma <a href="http://pt.wikipedia.org/wiki/Virtual_LAN">VLAN</a> privada, permitindo alguns setups interessantes,</p>
<p>Para quem quizer conhecer fica aqui a dica.</p>
<p>[]´s Edson</p>
<div class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fd5a4EU&amp;via=ebrandi&amp;text=Provedor+de+Cloud+Computing+com+suporte+a+Virtual+Machines+com+FreeBSD&amp;lang=en&amp;count=horizontal&amp;counturl=http://blog.ebrandi.eti.br/2010/02/provedor-de-cloud-computing-com-suporte-a-virtual-machines-com-freebsd/"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ebrandi.eti.br/2010/02/provedor-de-cloud-computing-com-suporte-a-virtual-machines-com-freebsd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Como configurar um servidor de DNS Dinâmico com o Bind 9.x</title>
		<link>http://blog.ebrandi.eti.br/2010/01/como-configurar-um-servidor-de-dns-dinamico-com-o-bind-9-x/</link>
		<comments>http://blog.ebrandi.eti.br/2010/01/como-configurar-um-servidor-de-dns-dinamico-com-o-bind-9-x/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 20:10:26 +0000</pubDate>
		<dc:creator>Edson Brandi</dc:creator>
				<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://blog.ebrandi.eti.br/?p=5425</guid>
		<description><![CDATA[O processo de configuração do bind para aceitar atualizações dinâmicas é bem simples de ser feito, os passos abaixo podem ser executados em um FreeBSD 8.0 &#8220;out of the box&#8221; que já traz no sistema base o Bind , mas a configuração é semelhante em outros sistemas operacionais. Para facilitar os exemplos vamos considerar os [...]]]></description>
			<content:encoded><![CDATA[<p>O processo de configuração do bind para aceitar atualizações dinâmicas é bem simples de ser feito, os passos abaixo podem ser executados em um FreeBSD 8.0 &#8220;out of the box&#8221; que já traz no sistema base o Bind , mas a configuração é semelhante em outros sistemas operacionais.</p>
<p>Para facilitar os exemplos vamos considerar os seguintes dados para o nosso Servidor de DNS:</p>
<pre>IP do servidor Primário de DNS:      192.168.192.100
IP do servidor Secundário de DNS: 192.168.192.101
Dominio: fugspbr.org</pre>
<p>Vejamos o passo a passo para a configuração</p>
<p><strong>1.o Passo: Criar o arquivo de seed para o named</strong></p>
<p>Para isso vamos criar o arquivo /etc/namedb/zones/fugspbr.org.hosts com o seguinte conteudo:</p>
<pre>$ORIGIN .
$TTL 300       ;
fugspbr.org.    IN      SOA     ns01.fugspbr.org.       hostmaster.fugspbr.org. (
                                2501201001 ;
                                300        ;
                                300        ;
                                300        ;
                                300        ;
                                )
fugspbr.org.         IN      NS      ns01.fugspbr.org.
fugspbr.org.         IN      NS      ns02.fugspbr.org.
ns01.fugspbr.org.    IN      A       192.168.192.100
ns02.fugspbr.org.    IN      A       192.168.192.101</pre>
<p><strong>2.o Passo: Gerar a chave de criptografia</strong></p>
<p>A criação da chave de criptografia é feita com através do comando dnssec-keygen, e a chave publica e privada é gerada no diretório no qual o comando foi executado. Sugiro armazená-las num diretório separado dentro da area de configuração do named, como por exemplo no diretório /etc/namedb/zones/keys.</p>
<p>A sintaxe é bem simples, basta executar:</p>
<pre># <strong>dnssec-keygen -b 512 -a HMAC-MD5 -v 2 -n HOST fugspbr.org.
</strong>Kfugspbr.org.+157+45086
# ls -l
-rw-------  1 root  wheel  120 Jan 24 11:05 Kfugspbr.org.+157+45086.key
-rw-------  1 root  wheel  156 Jan 24 11:05 Kfugspbr.org.+157+45086.private</pre>
<p>Ao ser executado o dnssec-keygen gerou 2 arquivos, um com a extensão .key e outro com a extensão .private. Vamos precisar da chave de criptografia na próxima etapa, ela está destacada abaixo <span style="color: #008000;">na cor verde</span>:</p>
<pre># <strong>cat Kfugspbr.org.+157+45086.private
</strong>Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: <span style="color: #008000;">vG4tx7SVi1YKXMn+2ig4dQ+pejRpNmRNCpWcyTfTXfIThXHc7YDrOMJUlRypXIqe8aqtJJr0PuA9tjxlvfxqnA==</span>
Bits: AAA=</pre>
<p>Obs: é óbvio, mas não custa reforçar, o hash acima não é o que eu uso no meu servidor real de DNS <img src='http://blog.ebrandi.eti.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>3.o Passo: Configurar o named</strong></p>
<p>O arquivo de configuração do named no FreeBSD é o /etc/namedb/named.conf, não se preocupe com o numero de linhas abaixo pois o arquivo está completo, a configuração em si necessária para habilitar as atualizações dinâmicas é bem simples e <span style="color: #ff0000;">está destacada em vermelho</span> e <span style="color: #008000;">em verde</span>:</p>
<pre>// /etc/namedb/named.conf
// ACLs

acl "xfer" {
    192.168.192.101;
    };

acl "trusted" {
    127.0.0.1;
    };

// Opcoes do named

options {
    directory       "/etc/namedb";
    pid-file        "/var/run/named/pid";
    dump-file       "/var/dump/named_dump.db";
    statistics-file "/var/stats/named.stats";
    notify no;
    listen-on port 53 { 192.168.192.100; 127.0.0.1; };
    zone-statistics yes;
    transfer-format many-answers;
    max-transfer-time-in 60;
    interface-interval 0;
    allow-transfer { xfer; };
    allow-query { trusted; };
};

// Controle da atualização dinamica

<span style="color: #ff0000;">key fugspbr.org. {
        algorithm "HMAC-MD5";
        secret "<span style="color: #008000;">vG4tx7SVi1YKXMn+2ig4dQ+pejRpNmRNCpWcyTfTXfIThXHc7YDrOMJUlRypXIqe8aqtJJr0PuA9tjxlvfxqnA==</span>";
};</span>

// Visao interna - Permite queries recursivas se feitas pelo proprio server

view "internal-in" in {
    match-clients { trusted; };
    recursion yes;
    additional-from-auth yes;
    additional-from-cache yes;

};

// Visao Externa - Nao permite queries recursivas

view "external-in" in {
    match-clients { any; };
    recursion no;
    additional-from-auth no;
    additional-from-cache no;

<span style="color: #000000;">zone "fugspbr.org" {
        type master;
        file "zones/fugspbr.org.hosts";
<span style="color: #ff0000;">        allow-update{
                key fugspbr.org;
        };</span>
        notify yes;
        also-notify { 192.168.192.101; };
        allow-query { any; };
        };</span>
};

// Visao Caos - Nao permite queries por "."

view "external-chaos" chaos {
    match-clients { any; };
    recursion no;
          zone "." {
              type hint;
              file "/dev/null";
          };
};

// FIM DO ARQUIVO</pre>
<p>Vocês podem perceber que usei algumas ACLs na configuração acima, costumo usá-las para evitar que pessoas não autorizadas realizem consultas recursivas no meu servidor de DNS.</p>
<p>Normalmente trabalho com uma view interna a qual permite consultas recursivas do próprio servidor, uma view externa a qual só permite consultas aos dominios para os quais o servidor é autoritativo, e uma view caos que trata as requisições de resolução para os root servers (consultas por &#8220;.&#8221;).</p>
<p>Por razões óbvias se você precisar usar o seu servidor para resolver outros dominios de forma recursiva você vai precisar alterar as ACLs, observe que as requisições do nsupdate estão sujeitas as mesmas regras que uma query normal, pelas regras acima a requisição do nsupdate tem que cair no view &#8220;external-in&#8221; para que a atualização funcione uma vez que é a view na qual declaramos a zona fugspbr.org .</p>
<p>Como eu defini o ip 127.0.0.1 na ACL trusted e esta ACL dá match no view &#8220;internal-in&#8221;, você deverá especificar o IP publico do seu servidor (no nosso exemplo o 192.168.192.100)  na hora de usar o nsupdate, se usar localhost como server, você terá como resultado uma falha de autenticação.</p>
<p>Se você não quizer se preocupar com regras de ACL (ou não precisar controlar o acesso das consultas recursivas ao seu servidor), você pode usar como configuração o arquivo abaixo:</p>
<pre>// Arquivo /etc;namedb/named.conf
// Opcoes do Bind

options {
    directory       "/etc/namedb";
    pid-file        "/var/run/named/pid";
    dump-file       "/var/dump/named_dump.db";
    statistics-file "/var/stats/named.stats";
    notify no;
    listen-on port 53 { 192.168.192.100; 127.0.0.1; };
    zone-statistics yes;
    transfer-format many-answers;
    max-transfer-time-in 60;
    interface-interval 0;
    allow-transfer { 192.168.192.101; };
    allow-query { any; };
};

// Controles

<span style="color: #ff0000;">key fugspbr.org {
        algorithm "HMAC-MD5";
        secret "<span style="color: #008000;">vG4tx7SVi1YKXMn+2ig4dQ+pejRpNmRNCpWcyTfTXfIThXHc7YDrOMJUlRypXIqe8aqtJJr0PuA9tjxlvfxqnA==</span>";
};
</span>
// Zonas

zone "fugspbr.org" {
        type master;
        file "zones/fugspbr.org.hosts";
<span style="color: #ff0000;">        allow-update{
                key fugspbr.org;
        };</span>
        notify yes;
        also-notify { 192.168.192.101; };
        allow-query { any; };
        };

// FIM</pre>
<p>Ao subir o servidor com esta configuração ele irá responder a todas as requisições recursivas que receber independente da origem das mesmas, o que pode ser bom ou ruim dependendo da situação <img src='http://blog.ebrandi.eti.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Lembre-se de verificar se o usuário através do qual você executa o named (normalmente é o usuário/grupo chamado bind) tem permissão de escrita no diretório /etc/namedb/zones , se ele não tiver permissão de escrita o named não vai conseguir gerar o arquivo de journal  (<em>fugspbr.org.hosts.jnl</em>) e a atualização dinâmica não vai funcionar.</p>
<p><strong>4.o Passo: Habilitar o named no /etc/rc.conf</strong></p>
<p>Para que o named seja iniciado quando seu servidor FreeBSD for iniciado, você deve adicionar a seguinte linha ao seu arquivo /etc/rc.conf:</p>
<pre>named_enable="YES"</pre>
<p>Para inciá-lo manualmente basta executar o comando:</p>
<pre># <strong>/etc/rc.d/named start</strong></pre>
<p><strong>5.o Passo: Testar se o named está resolvendo seu dominio</strong></p>
<p>A maneira mais simples de testar o seu servidor é através do aplicativo dig, para isso basta executar o comando abaixo:</p>
<pre># dig @192.168.192.100 ns01.fugspbr.org

; &lt;&lt;&gt;&gt; DiG 9.6.1-P1 &lt;&lt;&gt;&gt; @192.168.192.100 ns01.fugspbr.org
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 45187
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;ns01.fugspbr.org.              IN      A

;; ANSWER SECTION:
<em><strong>ns01.fugspbr.org.       300     IN      A       192.168.192.100</strong></em>

;; AUTHORITY SECTION:
fugspbr.org.            300     IN      NS      ns01.fugspbr.org.
fugspbr.org.            300     IN      NS      ns02.fugspbr.org.

;; ADDITIONAL SECTION:
ns02.fugspbr.org.       300     IN      A       192.168.192.101

;; Query time: 3 msec
;; SERVER: 192.168.192.100#53(192.168.192.100)
;; WHEN: Sun Jan 24 12:13:13 2010
;; MSG SIZE  rcvd: 99</pre>
<p>Como podem ver o servidor está respondendo corretamente pelo dominio fugspbr.org.</p>
<p><strong>6.o Passo: Testar a atualização dinâmica</strong></p>
<p>A atualização dinâmica de uma zona DNS no named é feita através do comando nsupdate.<br />
Como o arquivo de seed que usamos no setup inicial não possuia nenhuma entrada de host além das entradas para ns01.fugspbr.org e ns02.fugspbr.org, se fizermos uma consulta por exemplo por www.fugspbr.org teremos a seguinte resposta:</p>
<pre># <strong>dig @192.168.192.100 www.fugspbr.org</strong>

; &lt;&lt;&gt;&gt; DiG 9.6.1-P1 &lt;&lt;&gt;&gt; @192.168.192.100 www.fugspbr.org
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NXDOMAIN, id: 5139
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;www.fugspbr.org.               IN      A

;; AUTHORITY SECTION:
fugspbr.org.            300     IN      SOA     ns01.fugspbr.org. hostmaster.fugspbr.org. 2501201003 300 300 300 300

;; Query time: 0 msec
;; SERVER: 192.168.192.100#53(192.168.192.100)
;; WHEN: Sun Jan 24 11:50:41 2010
;; MSG SIZE  rcvd: 85</pre>
<p>Vejam que a resposta do dig não exibe uma &#8220;<em><strong>ANSWER SECTION</strong></em>&#8221; , para criarmos de forma dinâmica uma entrada para www.fugspbr.org apontando por exemplo para o ip 192.168.192.103, devemos usar a seguinte sintaxe no nsupdate:</p>
<pre><strong># nsupdate -k /etc/namedb/zones/keys/Kfugspbr.org.+157+45086.private</strong>
&gt; <strong>server 192.168.192.100</strong>
&gt; <strong>update add www.fugspbr.org 3600 A 192.168.192.103</strong>
&gt; <strong>show</strong>
Outgoing update query:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: UPDATE, status: NOERROR, id:      0
;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; UPDATE SECTION:
www.fugspbr.org.        3600    IN      A       192.168.192.103
&gt; <strong>send</strong>
&gt; <strong>quit</strong>
#</pre>
<p>Agora se repetirmos a consulta que fizemos inicialmente veremos que já vai aparecer o host que criamos (<span style="color: #0000ff;">destacado em azul</span>)<em><strong> </strong></em>:</p>
<pre><strong># dig @192.168.192.100 www.fugspbr.org</strong>

; &lt;&lt;&gt;&gt; DiG 9.6.1-P1 &lt;&lt;&gt;&gt; @localhost192.168.192.100 www.fugspbr.org
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 34467
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;www.fugspbr.org.               IN      A
<em>
<span style="color: #0000ff;">;; ANSWER SECTION:
www.fugspbr.org.        3600    IN      A       192.168.192.103</span></em>

;; AUTHORITY SECTION:
fugspbr.org.            300     IN      NS      ns02.fugspbr.org.
fugspbr.org.            300     IN      NS      ns01.fugspbr.org.

;; ADDITIONAL SECTION:
ns01.fugspbr.org.       300     IN      A       192.168.192.100
ns02.fugspbr.org.       300     IN      A       192.168.192.101

;; Query time: 10 msec
;; SERVER: 127.0.0.192.168.192.100#53(192.168.192.100)
;; WHEN: Sun Jan 24 11:49:06 2010
;; MSG SIZE  rcvd: 119
#</pre>
<p>Uma vez que o seu servidor de DNS está configurado para aceitar atualizações dinâmicas com o nsupdate, vamos dar uma olhada num script simples para simplificar o processo de update.</p>
<p><strong>7.o Passo: Exemplo de shell script para atualização de um registro no DNS<br />
</strong></p>
<p>Lembre-se que existem infinitas formas de criar um script para interagir com o nsupdate, abaixo coloquei o código de um shell script que eu fiz a muito tempo atrás para atualizar meu DNS com IP dinâmico do meu box FreeBSD aqui de casa, no meu caso o IP publico fica no meu roteador e o servidor tem um ip inválido, eu executo este script no boot do FreeBSD, e depois a cada 15 minutos via cron.</p>
<p>Para pegar o IP publico da minha conexão o script acessa um script php que eu hospedei no servidor onde rodo o blog, o qual retorna como resultado o <em>REMOTE_ADDR</em> da pessoa que fez a requisição http.</p>
<pre>----- Corte aqui -----
#!/bin/sh

# Definicao de variaveis -- Customize!!!

<span style="color: #800080;">key="fugspbr.org"
secret="vG4tx7SVi1YKXMn+2ig4dQ+pejRpNmRNCpWcyTfTXfIThXHc7YDrOMJUlRypXIqe8aqtJJr0PuA9tjxlvfxqnA=="
servidor="ns01.fugspbr.org"
zona="fugspbr.org"
host="$1.fugspbr.org"</span>
<span style="color: #800080;">ttl="300"</span>

case $2 in
  add)
  # Obtem ip externo
  ip="`/usr/local/bin/lynx -dump http://blog.ebrandi.eti.br/meuip.php | /usr/bin/head -1 | /usr/bin/awk -F" " '{print $1}'`"

  # Banner
  /bin/echo
  /bin/echo "Atualizando registro $host para o ip $ip"
  /bin/echo
  /bin/echo "#############################################################"
  /bin/echo

  # Prepara o update
  /bin/echo "server $servidor" &gt; /tmp/nsupdate.tmp
  /bin/echo "key $key $secret" &gt;&gt; /tmp/nsupdate.tmp
  /bin/echo "zone $zona" &gt;&gt; /tmp/nsupdate.tmp
  /bin/echo "update delete $host A" &gt;&gt; /tmp/nsupdate.tmp
  /bin/echo "update add $host $ttl A $ip" &gt;&gt; /tmp/nsupdate.tmp
  /bin/echo "show" &gt;&gt; /tmp/nsupdate.tmp
  /bin/echo "send" &gt;&gt; /tmp/nsupdate.tmp
  /bin/echo "quit" &gt;&gt; /tmp/nsupdate.tmp

  # Executa update #
  /bin/cat /tmp/nsupdate.tmp | /usr/bin/nsupdate

  /bin/echo "#############################################################"
  /bin/echo

  # remove arquivo temporario
  /bin/rm /tmp/nsupdate.tmp
  ;;

del)
  # Banner
  /bin/echo
  /bin/echo "Removendo o registro $host"
  /bin/echo
  /bin/echo "#############################################################"
  /bin/echo

  # Prepara update #
  /bin/echo "server $servidor" &gt; /tmp/nsupdate.tmp
  /bin/echo "key $key $secret" &gt;&gt; /tmp/nsupdate.tmp
  /bin/echo "zone $zona" &gt;&gt; /tmp/nsupdate.tmp
  /bin/echo "update delete $host A" &gt;&gt; /tmp/nsupdate.tmp
  /bin/echo "show" &gt;&gt; /tmp/nsupdate.tmp
  /bin/echo "send" &gt;&gt; /tmp/nsupdate.tmp
  /bin/echo "quit" &gt;&gt; /tmp/nsupdate.tmp

  # Executa update #
  /bin/cat /tmp/nsupdate.tmp | /usr/bin/nsupdate

  /bin/echo "#############################################################"
  /bin/echo

  # remove arquivo temporario
  /bin/rm /tmp/nsupdate.tmp
  ;;
esac
----- corte aqui -----</pre>
<p>Para usá-lo é muito simples, o script aceita apenas 2 parametros na linha de comando, o primeiro deve ser nome do host desejado, e o segundo é a ação desejada (add ou del), vejam um exemplo:</p>
<pre><strong>% ./update ftp add</strong>

Atualizando registro ftp.fugspbr.org para o ip 201.6.215.146

#############################################################

Outgoing update query:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: UPDATE, status: NOERROR, id:      0
;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; ZONE SECTION:
;fugspbr.org.                   IN      SOA

;; UPDATE SECTION:
ftp.fugspbr.org.        0       ANY     A
ftp.fugspbr.org.        300     IN      A       201.6.215.146

#############################################################

<strong>% dig @192.168.192.100 ftp.fugspbr.org</strong>

; &lt;&lt;&gt;&gt; DiG 9.6.1-P1 &lt;&lt;&gt;&gt; @192.168.192.100 ftp.fugspbr.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 51116
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;ftp.fugspbr.org.               IN      A

;; ANSWER SECTION:
ftp.fugspbr.org.        300     IN      A       201.6.215.146

;; AUTHORITY SECTION:
fugspbr.org.            300     IN      NS      ns02.fugspbr.org.
fugspbr.org.            300     IN      NS      ns01.fugspbr.org.

;; ADDITIONAL SECTION:
ns01.fugspbr.org.       300     IN      A       192.168.192.100
ns02.fugspbr.org.       300     IN      A       192.168.192.101

;; Query time: 0 msec
;; SERVER: 192.168.75.130#53(192.168.192.100)
;; WHEN: Sun Jan 24 17:53:06 2010
;; MSG SIZE  rcvd: 119</pre>
<p>Para remover o registro que foi criado basta executar com o parametro del:</p>
<pre><strong>% ./update ftp del</strong>

Removendo o registro ftp.fugspbr.org

#############################################################

Outgoing update query:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: UPDATE, status: NOERROR, id:      0
;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; ZONE SECTION:
;fugspbr.org.                   IN      SOA

;; UPDATE SECTION:
ftp.fugspbr.org.        0       ANY     A

#############################################################

<strong>% dig @192.168.192.100 ftp.fugspbr.org</strong>

; &lt;&lt;&gt;&gt; DiG 9.6.1-P1 &lt;&lt;&gt;&gt; @192.168.192.100 ftp.fugspbr.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NXDOMAIN, id: 20920
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;ftp.fugspbr.org.               IN      A

;; AUTHORITY SECTION:
fugspbr.org.            300     IN      SOA     ns01.fugspbr.org. hostmaster.fugspbr.org. 2501201029 300 300 300 300

;; Query time: 0 msec
;; SERVER: 192.168.192.100#53(192.168.192.100)
;; WHEN: Sun Jan 24 17:56:25 2010
;; MSG SIZE  rcvd: 85</pre>
<p>Como comentei antes, o script acima é só um exemplo de como automatizar a atualização, no meu caso não tenho problemas em atualizar o registro do host mesmo que o IP não tenha sido alterado, mas outras pessoas podem ter problema com isso&#8230;o script pode ser alterado facilmente para só fazer a atualização do DNS se for detectada uma alteração do IP externo, não é nada que um &#8220;if&#8221; e um arquivo temporário de apoio não resolvam <img src='http://blog.ebrandi.eti.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Bom divertimento</p>
<p>[]´s Edson</p>
<div class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fbk1ecd&amp;via=ebrandi&amp;text=Como+configurar+um+servidor+de+DNS+Din%C3%A2mico+com+o+Bind+9.x&amp;lang=en&amp;count=horizontal&amp;counturl=http://blog.ebrandi.eti.br/2010/01/como-configurar-um-servidor-de-dns-dinamico-com-o-bind-9-x/"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ebrandi.eti.br/2010/01/como-configurar-um-servidor-de-dns-dinamico-com-o-bind-9-x/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
