IRCdns
is a low-budget dynamic dns tool for sysadmins. You install a simple
systemd service on any of the remote servers or workstations that you maintain.
The service waits until it receives a "ping" message from a special IRC client.
It then responds with a "pong" message that includes its hostname and ip
address.
To automatically use these results, you install a special plugin into libc's name service switch. When you make a DNS request, it automatically connects over IRC to retrieve the results from your servers.
This came about over frustration with constant failures of the ddclient
program, and the cost of finding a free dynamic dns service. They're either
expensive or not long-lived. IRC servers have been around much longer, and I
hope they stick around. Donate a few dollars to me
or Libera.
Come join us in the IRCdns
community!
Medium | Link |
---|---|
IRC | #ircdns on Libera |
GitHub | purpleidea on GitHub |
Patreon | purpleidea on Patreon |
Liberapay | purpleidea on Liberapay |
IRCdns is a small hack to make my life as a low-budget sysadmin easier. It's functional for me, however we could make it fancier in many ways. If you'd like to add features, let me know! It might be fun to sign your messages with your public GPG key, and have the servers sign theirs so you can avoid spoofing. It's common for IRC clients to expose their IP addresses, so encryption probably isn't a high priority.
There's an /etc/nsswitch.conf client that automatically runs the lookups from IRC for this to work transparently. A daemonized client version (running as a systemd service) to keep an up-to-date cache would be a fun addition for very fast performance, at the cost of always having it running. This could also run on-demand too.
You'll need a recent version of golang
which can be obtained from your distro
packaging. You'll also need the C headers for libc
which can be obtained by
installing the glibc-headers
package in the "redhat" family, or the
libc6-dev
package in the "debian" family.
The easiest way to get all the dependencies is to run:
./misc/make-deps.sh
If you get some errors like:
package _/root/ircdns: unrecognized import path "_/root/ircdns": import path does not begin with hostname
package _/root/ircdns/client: unrecognized import path "_/root/ircdns/client": import path does not begin with hostname
at the end of running this script then run:
go mod init ircdns
go get -u ./...
and then you should be able to make
safely.
You can install it with:
make && sudo make install
If you have problems use:
sudo systemctl status ircdns.service
And to follow the logs use:
sudo journalctl -fu ircdns.service
You can uninstall it with:
sudo make uninstall
You can install it with:
make client && sudo make client_install
Then add:
ircdns
to the hosts
line in /etc/nsswitch.conf
. You should add the entry
before other network backends like dns
or mdns
to ensure faster resolution.
If you know of a robust way to automate this step, please let me know.
You can uninstall it with:
sudo make client_uninstall
You'll have to undo any changes to your /etc/nsswitch.conf
manually.
If you're running the server somewhere, and it broadcasts a domain named
example
, then you should be able to resolve the associated ip address by
typing getent hosts example.ircdns
or via a ping
with ping example.ircdns
.
$ ping -c 1 -W 1 example.com.ircdns
PING example.com.ircdns (192.0.2.13) 56(84) bytes of data.
--- example.com.ircdns ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
I wrote a blog post about this. If you need more information, then please have a look at the source or contact me.
Performance of a single lookup on a cold-cache is around 10 seconds. This is mostly due to the performance of the IRC connect process. If you wish to have high performance results, you can cache heavily, or eventually run a background or on-demand IRC worker that keeps the cache warm for when you need your result.
For custom settings such as the use of a private IRC server or channel, different IRC nick's, and other features, please contact me, and I'll be happy to make you a custom build for a very low price.
Please ask in the community!
We'd love to have your patches! Please send them by email, or as a pull request.
Created by James Shubin. You can contact him for enterprise support.
Happy hacking!