ipman

command module
v0.0.0-...-f471ae6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 12, 2024 License: MPL-2.0 Imports: 6 Imported by: 0

README

Mozilla Public License Go Report Card

ipman

Summary

IPman is a simple tool to automatically update DNS records (A and AAAA) based on the external local IPv4 and/or IPv6 address of the local machine. It uses ipify.com for the external address lookup and supports writing records to Cloudflare and GoDaddy's DNS API. Both backend providers are modeled as interfaces to allow adding additional backends as needed in the future.

Note: It appears GoDaddy has blocked API access for most customers. The GoDaddy API in this tool should still function, but I am no longer able to test it and have moved my domain hosting to Cloudflare.

Installing

Users with a proper Go environment (1.21+ required) ...

go get -u github.com/leprechau/ipman

Developers that wish to take advantage of vendoring and other options ...

git clone https://github.com/leprechau/ipman.git
cd ipman
make

Usage

Summary
ahurt$ ipman --help
Usage: ipman [--version] [--help] <command> [<args>]

Available commands are:
    check     Return current external ip address of local machine.
    update    Update DNS registry with external ip address of local machine.
Check Options
Option Description
4 Get external IPv4 address if available.
6 Get external IPv6 address if available.
ipbe IP lookup backend (ipify or local) default: ipify
Update Options
Option Description
4 Update external IPv4 address if available.
6 Update external IPv6 address if available.
key The DNS API access key. This defaults tp $IPMAN_DNS_KEY from the environment.
secret The DNS API access secret. This defaults to $IPMAN_DNS_SECRET from the environment.
zone The DNS zone ID or domain name. This defaults to $IPMAN_DNS_ZONE from the environment.
name The DNS record name. This defaults to the dns zone apex ("@").
ttl The DNS record ttl in seconds. This defaults to 600 seconds (5 minutes).
ipbe IP lookup backend (ipify or local). This defaults to ipify.
dnsbe DNS update backend (cloudflare or godaddy). This defaults to cloudflare.
Example
ahurt$ ./ipman update -4 -6 -secret=<CF token or GD secret> -zone=<CF zone ID or GD domain name>
time=2024-07-12T13:19:49.872-05:00 level=INFO msg="local" iType=IPv4 addr=151.182.28.185
time=2024-07-12T13:19:50.538-05:00 level=INFO msg="remote" iType=IPv4 addr=151.182.28.180
time=2024-07-12T13:19:50.628-05:00 level=INFO msg="updated remote" record=anbcs.com rType=AAAA data=151.182.28.185
time=2024-07-12T13:19:50.731-05:00 level=INFO msg="local" iType=IPv6 addr=2601:1702:22d2:3c60:94c6:6adc:c162:dcd6
time=2024-07-12T13:19:51.146-05:00 level=INFO msg="remote" iType=IPv6 addr=2601:1702:22d2:3c60:3ecc:effe:fe22:4810
time=2024-07-12T13:19:51.146-05:00 level=INFO msg="updated remote" record=anbcs.com rType=AAAA data=2601:1702:22d2:3c60:94c6:6adc:c162:dcd6

The key and secret flags are optional when using environment variables. This will keep your keys from potentially showing up in the system process list. Updates are only triggered when the local address differs from the remote record.

Crontab (automatic updates)

To dynamically update your records in near real time you can crontab the utility using something similar to the below in your local users crontab.

## ipman vars for cloudflare
export IPMAN_DNS_SECRET=<CF API Token>
export IPMAN_DNS_ZONE=<CF Zone ID>

## check and possibly update dns entries every 30 minutes
*/30 * * * * /path/to/ipman update -4 -6 >/dev/null 2>&1

Please see the crontab documentation of your local system for more information.

Documentation

Overview

Package main initializes and starts ipman

Directories

Path Synopsis
command
check
Package check provides the check cli command
Package check provides the check cli command
update
Package update provides the update cli command
Package update provides the update cli command
Package internal contains code shared between packages
Package internal contains code shared between packages
dns
Package dns defines the DNS service backend interface
Package dns defines the DNS service backend interface
dns/cloudflare
Package cloudflare provides a DNS backend via the Cloudflare DNS service
Package cloudflare provides a DNS backend via the Cloudflare DNS service
dns/godaddy
Package godaddy provides a DNS backend via the GoDaddy service
Package godaddy provides a DNS backend via the GoDaddy service
errors
Package errors contains common errors used within the application
Package errors contains common errors used within the application
ip
Package ip defines the IP lookup backend interface
Package ip defines the IP lookup backend interface
ip/ipify
Package ipify provides an IP lookup backend via the ipify.org service
Package ipify provides an IP lookup backend via the ipify.org service
ip/local
Package local provides a machine local IP lookup backend
Package local provides a machine local IP lookup backend

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL