HomeLab Dns Application

marinekev88

New member
Joined
Oct 23, 2021
Messages
22
Does anyone else run a Home Dev Lab with many different services?

I have a bunch of stuff connected to public DNS, most just for testing and development (hence the Dev name) but I also run a hosted Exchange server for email.
Now throughout my exploring I found the one draw back was that I am restricted to public Dynamic IP address (COX won't assign static IP's to residential and Business account are insanely $$$)

I developed an app that solves this issue and Id like to know if others would find this useful? It is currently published in NODE/NPM but I am in the process of the .net core version

What Does It Do?????

Well the premise behind it is a simple Getter and Dns Handler:

The Getter will "GET" the public IP address of its Host when called (similarly to whatsmyip.org)
- Based on your own developed logic (For the Node version is Used Node-Cron and for .net core I used Hangfire server, See below on my logic implementation)

Then the Dns Handler (Currently Only Supports GoDaddy and DNSExit DNS Api since those are my providers... Working on Ionos but would love input from others) is called when the Getter polls a new public and updates your "A" records to the new IP via DNS Api's.

What this does not do...
The logic of polling your host public IP and the initial Data (Root and Sub Domains that need to be monitored) as this goes against single responsibility and abstraction concepts.

Why am I posting this?? I have made this an NPM package and would like to not only help (if someone needs this) but also get feed back from people that may test it.

How am I implementing the NPM package??

For me I developed a docker Image that hosts the logic side app ( The cron scheduler and Domain Data Input and Slack Notifications when change is detected).
Basically it sets up the Host Ip check frequency for 5min intervals, then runs through some handling/caching to store the current public ip (I used Node-Cache for this but you can use Redis also since it should be lightweight).
The Domain data is initialized as an object from the "data" directory. If the public Ip doesn't match the cached Ip then it sends the new public Ip to the Dns handler instance, this pulls in the Domain data and then makes the HTTP request needed to update the DNS provider data. That way I can deploy it on any docker engine easily, and my Home lab (Mainly my Exchange server, is never down longer than 5 min if my IP changes randomly)

NPM package data >> https://npmjs.com/package/kms-ipmon

You can also build a simple node app and install as a dependency with npm install kms-ipmon but the README has a lot of info if you want to test it out.

As always Happy Coding
 
Top Bottom