<?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>IT-Blog &#187; script</title>
	<atom:link href="http://www.it-blog.be/tag/script/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.it-blog.be</link>
	<description>News from Fusa and the IT-World</description>
	<lastBuildDate>Wed, 25 Jan 2012 14:57:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PowerDNS housekeeping</title>
		<link>http://www.it-blog.be/2011/05/powerdns-housekeeping/</link>
		<comments>http://www.it-blog.be/2011/05/powerdns-housekeeping/#comments</comments>
		<pubDate>Sat, 28 May 2011 12:40:53 +0000</pubDate>
		<dc:creator>fusa</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[PowerDNS]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.it-blog.be/?p=54</guid>
		<description><![CDATA[PowerDNS is een DNS server welke gebruik maakt van een MySQL database voor de DNS recors bij te houden. Deze wordt door vele hosting providers gebruikt vanwege de goede performance en schaalbaarheid. Dankzij de master &#8211; slave opstelling is het mogelijk met het AXFR protocol automatisch DNS records binnen te krijgen van de masters. Op [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">PowerDNS is een DNS server welke gebruik maakt van een MySQL database voor de DNS recors bij te houden.</p>
<p style="text-align: center;"><a href="http://www.it-blog.be/wp-content/uploads/2011/05/powerdns-logo.jpg"><img class="size-full wp-image-66 aligncenter" title="PowerDNS logo" src="http://www.it-blog.be/wp-content/uploads/2011/05/powerdns-logo.jpg" alt="" width="174" height="27" /></a></p>
<p style="text-align: left;">Deze wordt door vele hosting providers gebruikt vanwege de goede performance en schaalbaarheid. Dankzij de master &#8211; slave opstelling is het mogelijk met het AXFR protocol automatisch DNS records binnen te krijgen van de masters. Op die manier is dit schaalbaar tot het oneindige. Het enige probleem hiermee is dat bij het verwijderen van een domein op de master DNS server deze niet op de slaves verwijderd wordt, dit is een tekortkoming van het AXFR protocol. Na verloop van tijd staan er vele DNS records en domeinen die er niet meer toe doen.</p>
<p>Hiervoor is er een klein scriptje gemaakt welke elke dag gaat controleren of de domeinen nog bestaan en op je master servers aanwezig zijn. Zoniet dan wordt deze genoteerd tot wanneer hij meer dan 5 keer dit opmerkt. Op deze manier voorkomen we dat er domeinen verwijderd worden wanneer de master DNS servers tijdelijk down liggen.</p>
<p><strong>Pas in het scriptje ook volgende configuratie items aan:</strong></p>
<ul>
<li><em># MySQL settings</em> : Hierin staan de mysql settings van je powerdns server</li>
<li><em>SHOWTIME=1</em> : Dit stellen we op 0 in als we de records effectief willen verwijderen, wanneer dit op 1 staat laat dit script gewoon zien wat hij wilt doen. Op deze manier kan je veilig testen.</li>
<li><em>TRY_IT=5 </em>: Na 5x de domein niet te vinden op de master DNS server zal hij deze verwijderen. Dit is instelbaar naar wens.</li>
</ul>
<p><strong>We installeren dit op deze manier:</strong></p>
<blockquote>
<pre>wget files.fusa.be/clean_pdns.sh -O /bin/clean_pdns;
chmod +x /bin/clean_pdns;
vi /bin/clean_pdns;
echo "12 0 * * * root /bin/clean_pdns" &gt;&gt; /etc/crontab
/bin/clean_pdns # We voeren een test uit of het werkt</pre>
</blockquote>
<p>Het scriptje vind je hier:<a href="http://files.fusa.be/clean_pdns.sh">Power DNS clean script</a></p>
<p><strong>Een verbeterde versie van dit scriptje is hier te vinden: </strong><br />
<strong> <a rel="nofollow" href="http://dennis.dehoux.be/files/pdns-tools.tar.gz" target="_blank">http://dennis.dehoux.be/files/pdns-tools.tar.gz</a> met dank aan <a href="http://www.all-in-one.be">all-in-one </a></strong></p>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 71px; width: 1px; height: 1px; overflow: hidden;">#!/bin/bash<br />
#<br />
# A small script to clean out the DNS records from a PowerDNS server<br />
#  Needed commands: mysql, host, sed, echo, cat<br />
#  By: Tim Bracquez &lt;tim@fusa.be&gt;<br />
#&nbsp;</p>
<p>#### START SETTINGS ####</p>
<p># MySQL settings<br />
MYSQL_HOST=localhost<br />
MYSQL_USER=pdnsuser<br />
MYSQL_PASS=pdnspassword<br />
MYSQL_DB=powerdns</p>
<p># Just show (1) or delete records (0)? [0-1]<br />
SHOWTIME=1</p>
<p># Working directory [/the/dir/]<br />
WORK_DIR=/var/run/pdns/</p>
<p># Delete after xx checks [0-9999]<br />
TRY_IT=5</p>
<p>#### DONE SETTINGS ####<br />
mkdir -p $WORK_DIR</p>
<p>for DOMAIN in $(mysql &#8211;batch -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS -D $MYSQL_DB -e &#8220;SELECT name FROM domains&#8221;); do</p>
<p>DOMAIN=$(echo $DOMAIN | sed &#8216;s/ //g&#8217;)</p>
<p>if [ "$DOMAIN" != "name" -a "$DOMAIN" != "" ]; then</p>
<p>SQL_MASTER=$(mysql &#8211;batch -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS -D $MYSQL_DB -e &#8220;SELECT master FROM domains WHERE name=&#8217;&#8221;$DOMAIN&#8221;&#8216;&#8221;)<br />
SQL_MASTER=$(echo $SQL_MASTER | sed &#8216;s/master //g&#8217;)</p>
<p>if [ "$SQL_MASTER" != "master" -a "$SQL_MASTER" != "" -a "$SQL_MASTER" != "NULL" ]; then</p>
<p>CHECK_DNS=$(host $DOMAIN $SQL_MASTER)<br />
CHECK_DNS_GREP=$(echo $CHECK_DNS | grep &#8220;$DOMAIN has address&#8221;)<br />
CHECK_DNS_EXEPT=$(echo $DOMAIN | grep &#8220;in-addr.arpa&#8221;)</p>
<p># DNS COMMAND = OK ; DNS RESULT = OK<br />
if [ "$CHECK_DNS" != "" -a "$CHECK_DNS_GREP" != "" -o "$CHECK_DNS_EXEPT" != "" ]; then<br />
echo 0 &gt; &#8220;$WORK_DIR$DOMAIN&#8221;</p>
<p># DNS COMMAND = OK ; DNS RESULT = NOK<br />
elif [ "$CHECK_DNS" != "" ]; then</p>
<p>if [ -e "$WORK_DIR$DOMAIN" ]; then</p>
<p>NUM=$(cat &#8220;$WORK_DIR$DOMAIN&#8221;)</p>
<p># MAX ATTEMPTS?<br />
if [ $NUM -ge $TRY_IT ]; then</p>
<p>if [ "$SHOWTIME" = "0" ]; then<br />
rm -rf &#8220;$WORK_DIR$DOMAIN&#8221;<br />
SQL_DID=$(mysql &#8211;batch -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS -D $MYSQL_DB -e &#8220;SELECT id FROM domains WHERE name=&#8217;&#8221;$DOMAIN&#8221;&#8216;&#8221;)<br />
SQL_DID=$(echo $SQL_DID | sed &#8216;s/id //g&#8217;)</p>
<p>if [ "$SQL_DID" != "" ]; then<br />
mysql &#8211;batch -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS -D $MYSQL_DB -e &#8220;DELETE FROM records WHERE domain_id=&#8217;&#8221;$SQL_DID&#8221;&#8216;&#8221;<br />
mysql &#8211;batch -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS -D $MYSQL_DB -e &#8220;DELETE FROM domains WHERE id=&#8217;&#8221;$SQL_DID&#8221;&#8216;&#8221;<br />
fi<br />
else<br />
echo &#8220;TO DELETE: $DOMAIN&#8221;<br />
fi</p>
<p>else<br />
NUM=$((NUM+1))<br />
echo $NUM &gt; &#8220;$WORK_DIR$DOMAIN&#8221;<br />
fi</p>
<p>else<br />
echo 1 &gt; &#8220;$WORK_DIR$DOMAIN&#8221;<br />
fi</p>
<p>fi</p>
<p>fi</p>
<p>fi</p>
<p># DNS requests overflow!?<br />
#sleep 5</p>
<p>done</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.it-blog.be/2011/05/powerdns-housekeeping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

