Explanation: I run a number of services behind a NAT at home which are only accessible through a WireGuard VPN. My IP rarely if ever changes, but if it does, this script will send me a Discord notification so I can update my VPN endpoint while away from home.
Yes, obviously this problem is solved with a DDNS service, of which there are many. But, I don't have any public DNS records and only need the IP endpoint for WireGuard.
Runs in a Docker container running cron every 30 minutes.
Can just as easily be adapted to run on the host instead.
Makes use of Mullvad or Proton ip-lookup service.
Repo has moved to Codeberg, the Github mirror may not be updated indefinitely. See: Give up GitHub
- The script
ip_notify.pyruns as a oneshot service. It caches the current ip to a file and checks for differences on next run - Run as a cron job
- Or run the supplied docker image and/or Compose project (cron in docker)
--serviceThe desired service to send the notification to (discord | msteams. Default:discord)--webhookThe webhook endpoint (Required)-o | --cache-fileThe file to write save the previous ip to (Default:$XDG_CACHE_HOME/ip_notify_cache)--testSend the webhook even if the IP hasn't changed
Most useful when running in Docker (See docker-compose.yml).
# The webhook url. Include here or in .env file
WEBHOOK_URL=${WEBHOOK_URL}
# The service used to post webhooks to
WEBHOOK_SERVICE=discord
# The color of the Discord Embed in hex
EMBED_COLOR=1bb106
# The link when clicking the Embed author
AUTHOR_URL=https://github.com/jack-mil/ip-notify
# The icon for the Embed and User avatar
ICON_URL=https://1.1.1.1/favicon.ico
# The file (in the container) to store the previous ip
IP_CACHE=/data/ip.txt
# An additional log file (in the container)
LOG_FILE=/data/logs.txt
- Select the settings icon of the channel you'd like to receive the webhook in
- Go to "Integrations"
- Click "Webhooks"
- Press the "New Webhook" button
- A new webhook should appear; select this and press the "Copy Webhook URL" button
- Press the meatball menu icon (3 dots, horizontal) next to a Teams channel
- Select "Workflows"
- Search for "webhook"
- Select "Send webhook alerts to a channel"
- Configure the desired Teams and channel
- Copy the webhook URL and make sure the workflow is activated
-
Since this is a simple single-file script, the easiest method is to use uv to manage the dependencies. Inline script metadata is provided, and a lock file for dependencies.
-
Dockerfile and an example Docker Compose project are provided if preferred
Thanks to these projects for inspiration: