Initial Commit

main
Jay 1 year ago
commit 31e2d1f931

@ -0,0 +1,28 @@
BSD 3-Clause License
Copyright (c) 2023, Jay Moore
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

@ -0,0 +1,72 @@
# HE Dynamic DNS Updater
This script will update A and AAAA records on Hurricane Electric's DNS
for hosts with DDNS enabled. It will pull your IPv4 from a source and
your IPv6 from the local machine.
It also includes two files, getv4.php and getv4.sh; which will allow
you to run your own IP check service for IPv4 on a pfSense box if it
also has the public v4 you want to use. If it's behind a bridge or
DMZ, you'll have to use an external service.
## Installation & Usage
If you are using the pfSense IP Check Service, copy both the .sh and
.php file in to /usr/local/www. It will be available at
- https://[LAN.IP]/getv4.php
- http://[LAN.IP]/getv4.php
depending on if you use https or not.
Copy hedyn.sh to your server using the hostname; then make a copy
of it if you're updating/hosting multiple names. Edit the script
with your hostname, APIKey, the device you want to use for IPv6,
and which IPv4 check service you want to use. Add it to cron.
The script will only update either v4 or v6 if the records don't
match the machine's IP addresses.
To use with just v4 or just v6; comment out the appropiate parts.
## Caution
This comes with no warranty. Any usage or modification to pfSense
is done at your own risk.
## Changelog
```
10-APR-2023: Initial Version
```
## License
BSD 3-Clause License
Copyright (c) 2023, Jay Moore
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

@ -0,0 +1,12 @@
/*
GetV4: Check IP Service for pfSense
10-APR-2023 - dewdude@pickmy.org
https://git.pickmy.org/dewdude/HEDyn
*/
// Place this file along with getv4.sh in /usr/local/www
<?php
$output = shell_exec('/usr/local/www/getv4.sh');
echo "$output";
?>

@ -0,0 +1,12 @@
#!/bin/sh
# GetV4 IP Check Service for pfSense - shell script
# APR-10-2023 - Jay Moore (dewdude@pickmy.org)
# https://git.pickmy.org/dewdude/HEDyn
# Modify "em0" to match your interface name. Place in
# /usr/local/www along with getv4.php.
# Make sure script is +x
ifconfig em0 | grep inet | awk -F '[ \t]+|/' '{print $3}' | grep -v ^fe80

@ -0,0 +1,36 @@
#!/bin/bash
# HEDDNS Update Script
# 10-APR-2023 - Jay Moore (dewdude@pickmy.org)
# https://git.pickmy.org/dewdude/HEDyn
# FreeBSD 3-Clause License (see LICENSE)
# Hostname & APIKey Configuration:
hostname=DDNSHOSTNAME
APIkey=HOSTNAMEAPIKEY
# Set to your IPv6 Interface Name
dev=eth0
# One IP Check service returns just the ip; the other appends "Current IP Address:" we need to filter
v4=$(curl -s http://freemyip.com/checkip)
# v4=$(curl -s http://checkip.dyndns.org/ | awk -F '[:<>]' '/Current IP Address/{sub(/^[[:space:]]+/, "", $14); print $14}')
# v4=$(curl -s http://192.168.1.1/getv4.php) # This uses my scripts on pfSense
# Pull IPv6 from interface - Pulls first non-local v6 from specified device
v6=$(/sbin/ip -6 addr show dev $dev | awk '/inet6/ && !/fe80|::1/ {print $2}' | cut -f1 -d'/')
# Commands for curl
curl="curl -s -S -q -f https://dyn.dns.he.net/nic/update -d hostname=$hostname -d password=$APIkey"
v4cmd="-d myip=$v4"
v6cmd="-d myip=$v6"
# Puts current DNS records in to variable
loadips(){
A=$1
AAAA=$2
}
loadips $(nslookup $hostname | awk '/^Address: / { print $2 }') # Gets current A and AAA recoreds
[[ $v4 != $A ]] && $curl $v4cmd && echo "v4 Updated" # Update if different
[[ $v6 != $AAAA ]] && $curl $v6cmd && echo "v6 Updated" # Update if different
Loading…
Cancel
Save