<?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>mibus.org</title>
	<atom:link href="http://www.mibus.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mibus.org</link>
	<description>geek refuge</description>
	<lastBuildDate>Tue, 17 Jan 2012 04:20:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Linux.Conf.Au &#8211; IPv6 &amp; automatic reverse DNS mappings</title>
		<link>http://www.mibus.org/2012/01/17/linux-conf-au-ipv6-automatic-reverse-dns-mappings/</link>
		<comments>http://www.mibus.org/2012/01/17/linux-conf-au-ipv6-automatic-reverse-dns-mappings/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 04:20:39 +0000</pubDate>
		<dc:creator>mibus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[lca2012]]></category>
		<category><![CDATA[pymds]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://www.mibus.org/?p=1462</guid>
		<description><![CDATA[Today is the day for my IPv6/Automatic reverse DNS mappings presentation at LCA2012. Get the custom pymds fork here; it'll be merged upstream shortly-ish.]]></description>
			<content:encoded><![CDATA[<p>Today is the day for my IPv6/Automatic reverse DNS mappings presentation at LCA2012.</p>
<p>Get the <a href="http://users.on.net/~rmibus/pymds/">custom pymds fork</a> here; it'll be merged upstream shortly-ish.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mibus.org/2012/01/17/linux-conf-au-ipv6-automatic-reverse-dns-mappings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle Java 6 &amp; Ubuntu</title>
		<link>http://www.mibus.org/2011/12/31/oracle-java-6-ubuntu/</link>
		<comments>http://www.mibus.org/2011/12/31/oracle-java-6-ubuntu/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 02:31:08 +0000</pubDate>
		<dc:creator>mibus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.mibus.org/?p=1449</guid>
		<description><![CDATA[This is semi-draft, as I haven't gotten around to testing the packages I build... Caught out needing new "Sun" Java packages for Ubuntu, by the DLJ revocation? Grab a usable set of build source packages from http://archive.canonical.com/ubuntu/pool/partner/s/sun-java6/ - you'll need an *.orig.tar.gz, a *.dsc, and a *.debian.tar.gz file for the version you've picked. I used [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is semi-draft, as I haven't gotten around to testing the packages I build...</em></p>
<p>Caught out needing new "Sun" Java packages for Ubuntu, by the DLJ revocation?</p>
<p>Grab a usable set of build source packages from <em>http://archive.canonical.com/ubuntu/pool/partner/s/sun-java6/</em> - you'll need an <em>*.orig.tar.gz</em>, a <em>*.dsc</em>, and a <em>*.debian.tar.gz</em> file for the version you've picked. I used a 6.26 version from Natty.</p>
<p>Grab a latest (currently 6u30) "bin" Linux packages for each architecture from http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html (Note: needs Javascript!).</p>
<p><code>dpkg-source -x *.dsc<br />
cd sun-java6-6.26/<br />
rm *bin<br />
mv ~/Downloads/jdk-6u30-linux-i586.bin jdk-6u30-dlj-linux-i586.bin<br />
mv ~/Downloads/jdk-6u30-linux-x64.bin jdk-6u30-dlj-linux-amd64.bin<br />
</code></p>
<p>Edit debian/rules, comment out the section following the comment '<em>check if the sources are the "same"</em>'.<br />
<code><br />
dch -v 6.30<br />
</code><br />
(add in a stub changelog entry - this is just so it realises what version it's building)</p>
<p><code><br />
cd ../sun-java6-6.30<br />
dpkg-buildpackage -b -uc<br />
</code></p>
<p>Then you should be left with workable packages matching the last Ubuntu-released ones, but with a newer JRE/JDK.</p>
<p><b>Note #1:</b> I haven't so much as installed these packages, it's just theory. It built, it ships - I mean, hey, it's New Year's Eve! ;-)<br />
<b>Note #2:</b> This won't include a working web plugin - I pulled the build packages from after 6.26-1natty1, which was the last release with a working web plugin.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mibus.org/2011/12/31/oracle-java-6-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux.Conf.Au &#8211; +1!</title>
		<link>http://www.mibus.org/2011/09/09/linux-conf-au-1/</link>
		<comments>http://www.mibus.org/2011/09/09/linux-conf-au-1/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 02:40:23 +0000</pubDate>
		<dc:creator>mibus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://www.mibus.org/?p=1441</guid>
		<description><![CDATA[Just got this email...: We're pleased to announce that your proposal(s) has/have been ACCEPTED for LCA2012. &#60;SNIP&#62; --- IPv6 Dynamic Reverse Mapping - the magic, misery and mayhem --- So - wow! I'll see you there :)]]></description>
			<content:encoded><![CDATA[<p>Just got this email...:</p>
<pre>We're pleased to announce that your proposal(s) has/have been ACCEPTED for LCA2012.

&lt;SNIP&gt;

---
 IPv6 Dynamic Reverse Mapping - the magic, misery and mayhem
---
</pre>
<p>So - wow! I'll see you there :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mibus.org/2011/09/09/linux-conf-au-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How not to screw up DNS</title>
		<link>http://www.mibus.org/2011/01/04/how-not-to-screw-up-dns/</link>
		<comments>http://www.mibus.org/2011/01/04/how-not-to-screw-up-dns/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 10:46:09 +0000</pubDate>
		<dc:creator>mibus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://www.mibus.org/?p=1420</guid>
		<description><![CDATA[DNS is a wonderful distributed system, with plenty of safeguards and fallbacks to ensure continuous operation. But still, screwups happen. Here's some tips on what to do to try to ensure you aren't caught out in the cold. Tip 1: Have multiple servers. Without a doubt, this is the biggest tip about DNS. Designed in [...]]]></description>
			<content:encoded><![CDATA[<p>DNS is a wonderful distributed system, with plenty of safeguards and fallbacks to ensure continuous operation.</p>
<p>But still, screwups happen. Here's some tips on what to do to try to ensure you aren't caught out in the cold.</p>
<p><b>Tip 1:</b> Have multiple servers.</p>
<p>Without a doubt, this is the biggest tip about DNS. Designed in from the beginning was an assumption that you'd have multiple nameservers for a given zone. So... have them!</p>
<p>Put them as far apart as you reasonably can - different hosts, different networks, different power. The more they share, the more risk you're in.</p>
<p><i>Countertip: Hosting your DNS server only over your ADSL link.</i></p>
<p><b>Tip 2:</b> Do backups.</p>
<p>Pretty standard sysadmin fare. RAID isn't a backup, and neither is a slaved nameserver.</p>
<p><b>Tip 3:</b> Nameservers must all agree.</p>
<p>You know how kids will sometimes ask their parents the same question independently, hoping for a different answer? It's important that the parents always give the same answer, and it's downright vital that your nameservers do too. Don't let them get out of sync!</p>
<p>Typically, zone transfers fix all your woes here, but do make sure they're working.</p>
<p><b>Tip 4:</b> Test your changes directly against all nameservers.</p>
<p>It's just a small change, right? What could go wrong? Lots! So test each server individually. If one doesn't update, maybe you have a problem that you need to fix. (Or maybe it's just a bit laggy - it happens). "dig" is your friend.</p>
<p><i>Countertip: Not realising until too late that you're breaking Tip 3</i></p>
<p><b>Tip 5:</b> Make your NS records match your glue.</p>
<p>If you've told your domain registrar that your nameservers are ns1.example.org and ns2.example.org, then make sure you put that in your zone file too - all sorts of wacky caching issues can ensue when you don't.</p>
<p><b>Tip 6:</b> If you use a CNAME record, don't use anything else.</p>
<p>CNAMEs are a really convenient way of saying "www.example.org is really webserver.example.org". You can't then say "But www has an MX of foo.example.org" or "www is also a subdomain with nameservers at ...".</p>
<p>That'd be contradictory, because you've already said with the CNAME that it's really webserver.example.org. It can't be both, if it's both then it's actually something different altogether and needs its own records.</p>
<p>Relatedly, don't point a CNAME at anything other than a plain hostname - Don't try to CNAME www.example.org to example.org, it'll just break stuff.</p>
<p><b>Tip 7:</b> Don't firewall out DNS queries to your nameserver.</p>
<p>No, really. The whole internet needs to be able to look up domain names, not just some of it, not just most of it. (You're excused if it's a private nameserver, of course!).</p>
<p><i>Counterpoint: Using bogon filters on nameservers and ignoring genuine queries.</i></p>
<p><b>Bonus Tip:</b> Monitor your servers.</p>
<p>If you're running DNS servers in production, monitor them so you know that you haven't lost one. Once it's all set up right, you really can lose one without noticing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mibus.org/2011/01/04/how-not-to-screw-up-dns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recording Accurate CDRs</title>
		<link>http://www.mibus.org/2010/09/27/recording-accurate-cdrs/</link>
		<comments>http://www.mibus.org/2010/09/27/recording-accurate-cdrs/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 23:30:22 +0000</pubDate>
		<dc:creator>mibus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://www.mibus.org/?p=1416</guid>
		<description><![CDATA[If you're serious about your call data records - because you're billing customers, or because you want to automatically reconcile calls against your invoice - then they'd better be accurate. An easy win here is to normalise the numbers you call. In South Australia, a number listed as "(08) 5550 1234" can be dialled as [...]]]></description>
			<content:encoded><![CDATA[<p>If you're serious about your call data records - because you're billing customers, or because you want to automatically reconcile calls against your invoice - then they'd better be accurate.</p>
<p>An easy win here is to normalise the numbers you call. In South Australia, a number listed as "(08) 5550 1234" can be dialled as either 0855501234 or 55501234 - the "08" prefix is optional, since it merely clarifies the area code.</p>
<p>Since you don't want to have to reconcile against both forms (that just <a href="http://www.mibus.org/2010/03/15/asterisk-database-driven-callerid/">makes things messy</a>), let's clean it up so it always appears with the leading '08':</p>
<p><code>;; Handle 08XXXXXXXX calls by default, as this is our "native" area code here in SA.<br />
exten =&gt; _XXXXXXXX,1,Goto(08${EXTEN},1)<br />
</code></p>
<p>Easily done.</p>
<p>Another common issue is to 'answer' an outbound call (either explictly with <code>Answer()</code> or implicitly with something like <code>Playback()</code>) before actually dialling. Answering the call too early means your <code>billsec</code> - which you're potentially basing your customer billing on - is higher than it should be!</p>
<p>If you want to play a message back to the caller before the call itself is made, use <code>Progress()</code> to indicate that you're doing it as the call progresses, and that the call isn't actually connected yet.</p>
<p>A final example is much less common - when dialling one number actually calls another; you have several options available with different tradeoffs. For this example, pretend that the PSTN-looking number 0855501234 should actually be delivered to the VoIP-looking number 0870101234. (Maybe it's a cheaper internal-use-only equivalent number, and people forget to use it?)</p>
<p>This example will have your CDR showing the original number (the PSTN number that was dialled, rather than the number that was actually called). It assumes your upstream SIP provider is named <code>vsp1</code></p>
<p><code><br />
exten => 0855501234,1,Dial(SIP/0870101234@vsp1)<br />
</code></p>
<p>This example will have your CDR showing the number that was really called, not the number dialled:</p>
<p><code><br />
exten => 0855501234,1,Goto(0870101234,1)<br />
</code></p>
<p>The following will have a mix of the two - a CDR for 0870101234 for the ringing, and a CDR for 0855501234 covering the ringing and the billable call. This assumes <code>regular_outbound</code> is your context for outbound calls.<br />
<code><br />
exten => 0855501234,n,Dial(LOCAL/0870101234@regular_outbound)<br />
</code></p>
<p>So, that's a few easy ways to make sure that your CDRs are actually worth the bits they're saved with. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mibus.org/2010/09/27/recording-accurate-cdrs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asterisk &#8211; Using CallerID to make decisions</title>
		<link>http://www.mibus.org/2010/08/16/asterisk-using-callerid-to-make-decisions/</link>
		<comments>http://www.mibus.org/2010/08/16/asterisk-using-callerid-to-make-decisions/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 23:30:42 +0000</pubDate>
		<dc:creator>mibus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://www.mibus.org/?p=1285</guid>
		<description><![CDATA[CallerID information is carried along quite readily within the SIP protocol; most SIP providers pass that along to their customers for free. Other than just showing it as "This is the number the call is coming from", can we do something more useful? Absolutely! As an example, imagine the contexts incoming (where calls go to [...]]]></description>
			<content:encoded><![CDATA[<p>CallerID information is carried along quite readily within the SIP protocol; most SIP providers pass that along to their customers for free. Other than just showing it as "This is the number the call is coming from", can we do something more useful?</p>
<p>Absolutely!</p>
<p>As an example, imagine the contexts <code>incoming</code> (where calls go to when they come in to Asterisk from a SIP provider) and <code>outgoing</code> (which allows outbound calls from internal phones). There's also an <code>internal</code> context to allow calls between internal phones.</p>
<pre>
[internal]
exten => s,1,WaitForExten

;Internal extensions
exten => 1000,1,Dial(SIP/alice)
exten => 1001,1,Dial(SIP/bob)
exten => 1002,1,Dial(SIP/charlie)
exten => 1003,1,Dial(SIP/jack)

[outgoing]
include => internal
;External calls
exten => _XX.,1,Dial(SIP/${EXTEN}@voipprovider)

[incoming]
; Incoming calls go to Alice, our receptionist
exten => s,1,Dial(SIP/alice)
</pre>
<p>Let's add in an override for when an employee rings in from their mobile phone - instead of having to talk to Alice, they get put back into the <code>internal</code> context, so they get to directly dial an extension.</p>
<p>Within the <code>incoming</code> context, add:</p>
<pre>
exten => s/0491570156,1,Playback(please-enter-the)
exten => s/0491570156,n,Playback(number)
exten => s/0491570156,n,Goto(internal)
</pre>
<p>We can make it a bit better yet. Let's allow another employee's mobile phone in, and let's share the config by moving them to a different context. We can also reuse parts of the dialplan in the new context by only using the CallerID information to override the first part of the sequence.</p>
<pre>
[incoming]
exten => s/0491570156,1,Goto(employeemobiles)
exten => s/0491570157,1,Goto(employeemobiles)
exten => s/0491570158,1,Goto(employeemobiles)
[employeemobiles]
exten => s/0491570156,1,Set(CDR(accountcode)=alice)
exten => s/0491570157,1,Set(CDR(accountcode)=bob)
exten => s/0491570158,1,Set(CDR(accountcode)=charlie)
exten => s,2,Background(please-enter-the)
exten => s,3,Background(number)
exten => s,4,WaitForExten
include => internal
</pre>
<p>Note the <code>accountcode</code> being set - this way, you can readily choose to allow outgoing calls from your PABX for remote employees - and it all gets tracked separately (per employee) in your call data records.</p>
<p>You can also just as easily use <code>include =&gt; outgoing</code> so that calls in from the mobiles can make calls back out to any other number (eg. if you have great international rates from your PABX, or free calls to certain numbers).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mibus.org/2010/08/16/asterisk-using-callerid-to-make-decisions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAGE-AU Presentation</title>
		<link>http://www.mibus.org/2010/06/30/sage-au-presentation/</link>
		<comments>http://www.mibus.org/2010/06/30/sage-au-presentation/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 22:03:50 +0000</pubDate>
		<dc:creator>mibus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[sage-au]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://www.mibus.org/?p=1290</guid>
		<description><![CDATA[I did a presentation to the SA chapter of SAGE-AU last night - the first presentation I've given in a very long time! Download the slides here Overall, I think it went pretty well - it didn't seem too obvious that I hadn't had a chance to practice the talking that went with the presentation, [...]]]></description>
			<content:encoded><![CDATA[<p>I did a presentation to the SA chapter of SAGE-AU last night - the first presentation I've given in a <em>very</em> long time!</p>
<p><a href="http://www.mibus.org/wp-uploads/2010/06/2010-06-SAGE-AU-Presentation-Asterisk-Dialplans.pdf">Download the slides here</a></p>
<p><span id="more-1290"></span>Overall, I think it went pretty well - it didn't seem too obvious that I hadn't had a chance to practice the talking that went with the presentation, and only one of my demonstrations failed.</p>
<p>A handy hint for doing PDF exports from OpenOffice.org - Use the menu (File -&gt; Export as PDF...) rather than the toolbar button; you get shown a dialog with a large number of options that are useful in reducing filesize. (Reduce the DPI and allow OO,o to resize the images, lower the JPEG quality).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mibus.org/2010/06/30/sage-au-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacky IP forwarding with IP aliases and SSH</title>
		<link>http://www.mibus.org/2010/06/21/hacky-ip-forwarding-with-ip-aliases-and-ssh/</link>
		<comments>http://www.mibus.org/2010/06/21/hacky-ip-forwarding-with-ip-aliases-and-ssh/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 23:30:03 +0000</pubDate>
		<dc:creator>mibus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://www.mibus.org/?p=1286</guid>
		<description><![CDATA[We interrupt your regularly scheduled broadcast of quality sysadmin programming to bring you a brief announcement on using SSH and hacky port forwards to access something via a LAN IP over the Internet. If I have a server at home that can _only_ be accessed via 192.168.1.12 (say) - perhaps because it is a web [...]]]></description>
			<content:encoded><![CDATA[<p>We interrupt your regularly scheduled broadcast of quality sysadmin programming to bring you a brief announcement on using SSH and hacky port forwards to access something via a LAN IP over the Internet.</p>
<p>If I have a server at home that can _only_ be accessed via 192.168.1.12 (say) - perhaps because it is a web application that rewrites all internal URLs to always go to that IP - how do I get access?</p>
<p>Easy. My application listens on 192.168.1.12:8888, so I'll give it exactly that:</p>
<p><code><br />
ip addr add 192.168.1.12/32 dev lo<br />
ssh -L 192.168.1.12:8888:192.168.1.12:8888 user@example.net<br />
</code></p>
<p>So, I add 192.168.1.12/32 as a local IP address, bind SSH to it, forward all packets for 192.168.1.12:8888 over the SSH tunnel to the gateway server (example.net for this example), then it unbundles it from the SSH stream and passes it to the real 192.168.1.12.</p>
<p>It only works for that one port on that one IP address (though you can add individual IPs and ports easily enough!), but the key part is that <i>it works</i>.</p>
<p>To clean up, close your SSH links and run:</p>
<p><code><br />
ip addr del 192.168.1.12/32 dev lo<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mibus.org/2010/06/21/hacky-ip-forwarding-with-ip-aliases-and-ssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IPv6 is BORING!</title>
		<link>http://www.mibus.org/2010/06/07/ipv6-is-boring/</link>
		<comments>http://www.mibus.org/2010/06/07/ipv6-is-boring/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 23:30:26 +0000</pubDate>
		<dc:creator>mibus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://www.mibus.org/?p=1272</guid>
		<description><![CDATA[Please note that this is all personal opinion, and is not a reflection on the opinion, or policies, of any employer, past, present, future, or comma-less. What is IPv6? IPv6 is the next step after our current IPv4 addressing scheme - and not a lot more. Instead of the we-thought-it'd-be-ample 2^32ish addresses, we get the [...]]]></description>
			<content:encoded><![CDATA[<p><small><em>Please note that this is all personal opinion, and is not a reflection on the opinion, or policies, of any employer, past, present, future, or comma-less.</em></small></p>
<p><strong>What is IPv6?</strong></p>
<p>IPv6 is the next step after our current IPv4 addressing scheme - and not a lot more. Instead of the <em>we-thought-it'd-be-ample</em> 2^32ish addresses, we get the <em>it'll-be-enough-this-time-for-sure</em> 2^128ish addresses. If nothing else, it'll take us a long time to run out again!</p>
<p><strong>So how do we, as sysadmins, use it?</strong></p>
<p>Software developers have taken a lot of the fun out of this already. Most software - Apache, BIND, SSH, etc - have already had IPv6 support for a very long time. You can just add an IPv6 address to the "bind" or "listen" address of the vast majority of non-custom-built software and it will <em>Just Work</em>. Plenty of software doesn't even need that, and will bind to the IPv6 address just as soon as it exists on your system.</p>
<p>If you don't want to use IPv6's native autoconfiguration, statically configuring your address and gateway is a simple enough process on any vaguely modern OS. Probably Windows, too ;).</p>
<p><strong>What about gotchas?</strong></p>
<p>There are plenty of places this can fall down... but none that typically hurt too much.</p>
<p>When you add IPv6 support to a server, note that you're also adding IPv6 support for <em>it</em> to talk to <em>other</em> services. If it makes calls out to another server, <em>it will try to do so over IPv6</em>. So, make sure your IPv6 connectivity is good, and all of the services that your server might connect to work over IPv6 (if they have AAAA DNS records - if not, it will quickly fall back to IPv4 anyway). This is especially true if your servers chatter amongst themselves to share data (like caching resolvers and authoritative nameservers, or webservers and database servers). You'll also be at the mercy of the IPv6 support of any providers that you consume services from.</p>
<p>Anywhere that an IP address gets treated as "special" and not just an opaque block of text, could cause issues. For most, this won't be an issue. But, if you're storing it in a database, make sure you aren't using a short fixed-length string - IPv4 addresses max out at 15 characters but IPv6 goes to 11. I mean, 39.</p>
<p><strong>Why haven't you done it yet?</strong></p>
<p>There are plenty of reasons not to have IPv6 enabled your services.</p>
<p>The easiest answer is that <em>everyone</em> will need an IPv4 address to see <em>everyone else's</em> services, so they'll already have one to see mine. Right? Realistically, IPv4 will probably continue to be supplied behind a carrier-grade-NAT system (or "something"), and most stuff on the internet works just fine behind NAT anyway. It will be a long time before IPv4 addresses start getting dropped entirely from consumer broadband connections.</p>
<p>Not everyone has an IPv6-capable upstream provider. If you are with a particular hosting provider and they don't provide IPv6 connectivity, you're pretty much stuck. Find a new one (and migrate all of your hosts) or just wait it out.</p>
<p>Moving on, and a lot of "miscellaneous" equipment doesn't support IPv6. An up-front example of this is hardware load-balancers. Months out from the beginning of 'IPv4 exhaustion', you can buy new hardware that doesn't support hardware-accelerated IPv6. Sure, you can work around it, or buy from an alternate vendor - but really, that's pretty excessive just to support 128-bit addresses, when we all know that everyone will have IPv4 connectivity for years to come. Do your "appliance" boxes and VMs support IPv6?</p>
<p>The same lack of hardware applies in the consumer-space - seen very many DSL modems with native IPv6 lately? The biggest driver there will be gamers and P2P users wanting to restore end-to-end connectivity.</p>
<p>There are also potential security issues - how do you make sure your IPv4 and IPv6 firewalls are equivalent? Typically, they're treated as independent... changes to one but not the other can lead to breakage or security holes. (Forget to lock off SSH over IPv6 so only your corporate network can see it? Oops! Locked down IPv6 too tight, so upstream service connections over IPv6 suddenly fail? Oops!)</p>
<p><strong>You're being very negative.</strong></p>
<p>Yes, I am. IPv6 is crucial to the long-term health of the Internet. But its biggest driver (in most industries) is merely that it's the "new shiny", and not any real business-case. Even when there is a business case, it's typically for the <em>network</em>, not for <em>the systems</em>. IPv6 connectivity, *check*. IPv6ified webserver... come back next year. Maybe.</p>
<p><strong>So, what if I do find it fun?</strong></p>
<p>Seek professional help. Or, just admit you're a geek.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mibus.org/2010/06/07/ipv6-is-boring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Community Based Alerting</title>
		<link>http://www.mibus.org/2010/05/24/community-based-alerting/</link>
		<comments>http://www.mibus.org/2010/05/24/community-based-alerting/#comments</comments>
		<pubDate>Sun, 23 May 2010 23:30:41 +0000</pubDate>
		<dc:creator>mibus</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://www.mibus.org/?p=1256</guid>
		<description><![CDATA[There are so many ways to monitor whether a particular application is working properly or not. For the average website - Is the server pingable? Can you open a socket to port 80? Can you do a GET request and get a "200 OK" response? Some checks are more complicated again - "Does the page [...]]]></description>
			<content:encoded><![CDATA[<p>There are so many ways to monitor whether a particular application is working properly or not. For the average website - Is the server pingable? Can you open a socket to port 80? Can you do a GET request and get a "200 OK" response?</p>
<p>Some checks are more complicated again - "Does the page '/index.php' include the text 'Blog'?". A few even go so far as to simulate multiple page-loads, "clicking" along a path to ensure functionality.</p>
<p>Me, I'm too lazy for that. (Well, sometimes ;). A really sneaky way of checking that your app is working, is to measure the metrics around how much it's being used! How many concurrent users do you have, compared to normal? How many page/thread/post views per second do you currently have? <strong>If your site is broken in any way, these numbers are likely to drop of</strong>f - even if your checks above find nothing wrong.</p>
<p>Let's just say that you have an average of 1000 concurrent users. If the site is broken, people won't hang around. They'll disappear, coming back later to see if you've fixed your problem - so maybe you'll only have 300 concurrent users. Set up an alert that you <em>must</em> have at least [say] 500 users, and alert if the number drops below that. Bingo, you have a new alert that will catch failures <em>with very little effort on your part</em>.</p>
<p>Naturally, most sites don't have flat traffic all week long. Maybe your off-peak traffic is only 400 users, and your peak traffic is 1000. There's no sensible single threshold that can alert you that there's a problem, while also tolerating the normal fluctuations that you're likely to see. The solution, for a lot of sites, is as simple as making your threshold into a sine wave. For this example, the function <code>300*SIN(time())+400</code> sits at a pretty nice threshold for my sample data:</p>
<div id="attachment_1265" class="wp-caption aligncenter" style="width: 491px"><a href="http://www.mibus.org/wp-uploads/2010/04/stats.png"><img src="http://www.mibus.org/wp-uploads/2010/04/stats.png" alt="Example concurrent-users-online statistic" title="Example concurrent-users-online statistic" width="481" height="154" class="size-full wp-image-1265" /></a><p class="wp-caption-text">Example concurrent-users-online statistic</p></div>
<p>How you actually tie this into your alerting system, is obviously dependent on your alerting system! Any system that allows custom scripting is likely to support this pretty readily. As a random example, I've succesfully tied it into munin's alerting by adjusting the "users.critical" config fragment to be echo'd out with a dynamic number driven from a formula similar to the above; munin re-read it on each evaluation and quite happily emailed or SMS'd me when things "weren't quite right".</p>
<p>False alarms are moderately rare, but certainly do happen - usually I found that things like public holidays (including in other countries :) would trigger it. It's far from foolproof, but nifty - and pretty darn easy to implement.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mibus.org/2010/05/24/community-based-alerting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.466 seconds -->

