Staying connected while you are away, using an IRC Proxy

Internet Relay Chat (IRC) has been around for just about ever.  In the 90s it was used for chat rooms and warez sites mostly.  For the past decade it’s become one of the key pillars of communication for the Open Source Community.  It has the advantage that the client and server are free and open, and there is an inherent redundancy system built in.

One of the challenges of IRC, over say email, is that you need to be online to see the discussion.  On a really global project this is a problem, because of the pesky fact that daytime is determined by facing the Sun, and living on an orb, only 1/2 the earth gets to do that at a time.  Life would be so much simpler if the flat earthers were actually right.  But there is a way to stay connected, even when you are not, which is using an IRC proxy.

Using an IRC Proxy

The get started you will need a Linux machine, that you can run code on, that is always on.  It doesn’t need to be on your network, but you need shell access.  If you are a Linux geek level 4 or higher, this is probably not an issue.  You probably either have a Linode or a home server that’s always on.  If not… well sorry… your journey ends here.  There is not, as of yet, a cloud service to provide this for you.  Please come back once you level up.

The next step is the actual IRC proxy.  IRC is a simple enough protocol, which goes over clear text, that many people have written a man in the middle server for it.  You connect the proxy to the IRC server as you, then you point your IRC client at the proxy.  When you are connected to the proxy, everything works as normal.  Your messages are sent back and forth in real time.  When you disconnect from the proxy, the proxy keeps you logged into irc and logs everything that goes on.  The moment you reconnect to the proxy all those messages are replayed to your client.  You now have a full offline ability.

My favorite IRC Proxy

There are many out there.  A few years back I spent some time trying to get one that I didn’t hate, and I landed on miau.  I’ve even packaged it for ubuntu, so if you are on that platform, it should be easy to install.  Once installed, read the same miaurc on configuration, it’s really well documented, and should be easy enough to get rolling.

Although miau supports a password to connect to it, I don’t really trust running another service connected to the internet that just has a password in clear text.  My solution here is to have miau only listen to localhost (127.0.0.1), and ssh proxy to the machine.  Pick a port (like 4098) on your local machine and have that forwarded whenever you connect to that server.  In linux this would look like the following in you .ssh/config.

Host your.server.name.com
LocalForward 4098 localhost:4098

The have your IRC client (like XChat) connect to localhost:4098.  This will mean that you will only be connect to IRC when you have an ssh link to your proxy server.  It works quite well, and is about as secure as you’ll get.

Why bother?

If you made it this far, you probably already know why.  When development conversations happen at 4am your time on IRC, you are probably never going to participate directly.  But, having access to the conversation when you connect in the morning is a very good thing, and I’ve walked people through this setup enough times in the past, writing it down for posterity seemed like a good thing.