Giter Club home page Giter Club logo

ircdns's Introduction

IRCdns: reliable, inexpensive dynamic dns for sysadmins

About:

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.

Community:

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

Status:

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.

Dependencies:

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.

Server usage:

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

Client usage:

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.

Example usage:

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

Documentation:

I wrote a blog post about this. If you need more information, then please have a look at the source or contact me.

Performance:

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.

Custom settings:

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.

Questions:

Please ask in the community!

Patches:

We'd love to have your patches! Please send them by email, or as a pull request.

Author:

Created by James Shubin. You can contact him for enterprise support.

Happy hacking!

ircdns's People

Contributors

42wim avatar purpleidea avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

42wim

ircdns's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.