config file checks and sample config
Changed the way the existence of config files is checked. It may be a bit slower than before when there are many config files but maybe it avoids other trouble. Updated the sample config.
This commit is contained in:
parent
1684ab6599
commit
ea6830ed92
@ -5,9 +5,16 @@ IP_CHECK_SITE="https://ip.dblx.io"
|
|||||||
|
|
||||||
# use drill instead of nslookup for hostname lookup
|
# use drill instead of nslookup for hostname lookup
|
||||||
USE_DRILL="YES"
|
USE_DRILL="YES"
|
||||||
|
|
||||||
|
# Use IPv6 connection
|
||||||
IPV6="NO"
|
IPV6="NO"
|
||||||
|
|
||||||
|
# Update an MX record
|
||||||
MX="NO"
|
MX="NO"
|
||||||
|
|
||||||
|
# Suppress all messages
|
||||||
|
SILENT=NO
|
||||||
|
|
||||||
# Login credentials for the inwx admin interface
|
# Login credentials for the inwx admin interface
|
||||||
INWX_USER="USERNAME"
|
INWX_USER="USERNAME"
|
||||||
INWX_PASS='PASSWORD'
|
INWX_PASS='PASSWORD'
|
||||||
|
205
nsupdate.sh
205
nsupdate.sh
@ -24,116 +24,113 @@
|
|||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
##################
|
# check required tools
|
||||||
# check required #
|
|
||||||
##################
|
|
||||||
command -v curl >/dev/null 2>&1 || { echo >&2 "I require curl but it's not installed. Note: all needed items are listed in the README.md file."; exit 1; }
|
command -v curl >/dev/null 2>&1 || { echo >&2 "I require curl but it's not installed. Note: all needed items are listed in the README.md file."; exit 1; }
|
||||||
command -v awk >/dev/null 2>&1 || { echo >&2 "I require awk but it's not installed. Note: all needed items are listed in the README.md file."; exit 1; }
|
command -v awk >/dev/null 2>&1 || { echo >&2 "I require awk but it's not installed. Note: all needed items are listed in the README.md file."; exit 1; }
|
||||||
command -v drill >/dev/null 2>&1 || command -v nslookup >/dev/null 2>&1 || { echo >&2 "I need drill or nslookup installed. Note: all needed items are listed in the README.md file."; exit 1; }
|
command -v drill >/dev/null 2>&1 || command -v nslookup >/dev/null 2>&1 || { echo >&2 "I need drill or nslookup installed. Note: all needed items are listed in the README.md file."; exit 1; }
|
||||||
##################
|
|
||||||
# check config #
|
|
||||||
##################
|
|
||||||
configfiles=$(shopt -s nullglob dotglob; echo nsupdate.d/*.config)
|
|
||||||
if (( ! ${#configfiles} ));then
|
|
||||||
echo "There does not seem to be any config file available." ; exit 1;
|
|
||||||
fi
|
|
||||||
##################
|
|
||||||
|
|
||||||
LOG=$0.log
|
LOG=$0.log
|
||||||
SILENT=NO
|
SILENT=NO
|
||||||
# Loop through configs
|
|
||||||
for f in $(dirname $0)/nsupdate.d/*.config
|
|
||||||
do
|
|
||||||
if [ "$SILENT" == "NO" ]; then
|
|
||||||
echo "Starting nameserver update with config file $f"
|
|
||||||
fi
|
|
||||||
## Set record type to IPv4
|
|
||||||
TYPE=A
|
|
||||||
CONNECTION_TYPE=4
|
|
||||||
|
|
||||||
source $f
|
# Check if there are any usable config files
|
||||||
|
if ls $(dirname $0)/nsupdate.d/*.config 1> /dev/null 2>&1; then
|
||||||
## Set record type to MX
|
|
||||||
if [[ "$MX" == "YES" ]]; then
|
|
||||||
TYPE=MX
|
|
||||||
fi
|
|
||||||
|
|
||||||
## Set record type to IPv6
|
|
||||||
if [[ "$IPV6" == "YES" ]]; then
|
|
||||||
TYPE=AAAA
|
|
||||||
CONNECTION_TYPE=6
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$USE_DRILL" == "YES" ]]; then
|
|
||||||
if [[ "$TYPE" == "MX" ]]; then
|
|
||||||
echo looking up MX records with drill currently not supported!
|
|
||||||
exit 1;
|
|
||||||
else
|
|
||||||
NSLOOKUP=$(drill $DOMAIN @ns.inwx.de $TYPE | head -7 | tail -1 | awk '{print $5}')
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [[ "$TYPE" == "MX" ]]; then
|
|
||||||
PART_NSLOOKUP=$(nslookup -sil -type=$TYPE $DOMAIN - ns.inwx.de | tail -2 | head -1 | cut -d' ' -f5)
|
|
||||||
NSLOOKUP=${PART_NSLOOKUP%"."}
|
|
||||||
else
|
|
||||||
NSLOOKUP=$(nslookup -sil -type=$TYPE $DOMAIN - ns.inwx.de | tail -2 | head -1 | cut -d' ' -f2)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# WAN_IP=`curl -s -$CONNECTION_TYPE ${IP_CHECK_SITE}| grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'`
|
|
||||||
WAN_IP=`curl -s -$CONNECTION_TYPE ${IP_CHECK_SITE}`
|
|
||||||
|
|
||||||
|
|
||||||
API_XML="<?xml version=\"1.0\"?>
|
|
||||||
<methodCall>
|
|
||||||
<methodName>nameserver.updateRecord</methodName>
|
|
||||||
<params>
|
|
||||||
<param>
|
|
||||||
<value>
|
|
||||||
<struct>
|
|
||||||
<member>
|
|
||||||
<name>user</name>
|
|
||||||
<value>
|
|
||||||
<string>$INWX_USER</string>
|
|
||||||
</value>
|
|
||||||
</member>
|
|
||||||
<member>
|
|
||||||
<name>pass</name>
|
|
||||||
<value>
|
|
||||||
<string>$INWX_PASS</string>
|
|
||||||
</value>
|
|
||||||
</member>
|
|
||||||
<member>
|
|
||||||
<name>id</name>
|
|
||||||
<value>
|
|
||||||
<int>$INWX_DOMAIN_ID</int>
|
|
||||||
</value>
|
|
||||||
</member>
|
|
||||||
<member>
|
|
||||||
<name>content</name>
|
|
||||||
<value>
|
|
||||||
<string>$WAN_IP</string>
|
|
||||||
</value>
|
|
||||||
</member>
|
|
||||||
</struct>
|
|
||||||
</value>
|
|
||||||
</param>
|
|
||||||
</params>
|
|
||||||
</methodCall>"
|
|
||||||
|
|
||||||
if [ ! "$NSLOOKUP" == "$WAN_IP" ]; then
|
# Loop through configs
|
||||||
curl -silent -v -XPOST -H"Content-Type: application/xml" -d "$API_XML" https://api.domrobot.com/xmlrpc/
|
for f in $(dirname $0)/nsupdate.d/*.config
|
||||||
echo "$(date) - $DOMAIN updated. Old IP: "$NSLOOKUP "New IP: "$WAN_IP >> $LOG
|
do
|
||||||
elif [ "$SILENT" == "NO" ]; then
|
if [ "$SILENT" == "NO" ]; then
|
||||||
echo "$(date) - No update needed for $DOMAIN. Current IP: "$NSLOOKUP >> $LOG
|
echo "Starting nameserver update with config file $f"
|
||||||
fi
|
fi
|
||||||
|
## Set record type to IPv4
|
||||||
|
TYPE=A
|
||||||
|
CONNECTION_TYPE=4
|
||||||
|
|
||||||
unset DOMAIN
|
source $f
|
||||||
unset IPV6
|
|
||||||
unset MX
|
## Set record type to MX
|
||||||
unset WAN_IP
|
if [[ "$MX" == "YES" ]]; then
|
||||||
unset NSLOOKUP
|
TYPE=MX
|
||||||
unset INWX_PASS
|
fi
|
||||||
unset INWX_USER
|
|
||||||
unset INWX_DOMAIN_ID
|
## Set record type to IPv6
|
||||||
done
|
if [[ "$IPV6" == "YES" ]]; then
|
||||||
|
TYPE=AAAA
|
||||||
|
CONNECTION_TYPE=6
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$USE_DRILL" == "YES" ]]; then
|
||||||
|
if [[ "$TYPE" == "MX" ]]; then
|
||||||
|
echo looking up MX records with drill currently not supported!
|
||||||
|
exit 1;
|
||||||
|
else
|
||||||
|
NSLOOKUP=$(drill $DOMAIN @ns.inwx.de $TYPE | head -7 | tail -1 | awk '{print $5}')
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [[ "$TYPE" == "MX" ]]; then
|
||||||
|
PART_NSLOOKUP=$(nslookup -sil -type=$TYPE $DOMAIN - ns.inwx.de | tail -2 | head -1 | cut -d' ' -f5)
|
||||||
|
NSLOOKUP=${PART_NSLOOKUP%"."}
|
||||||
|
else
|
||||||
|
NSLOOKUP=$(nslookup -sil -type=$TYPE $DOMAIN - ns.inwx.de | tail -2 | head -1 | cut -d' ' -f2)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# WAN_IP=`curl -s -$CONNECTION_TYPE ${IP_CHECK_SITE}| grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'`
|
||||||
|
WAN_IP=`curl -s -$CONNECTION_TYPE ${IP_CHECK_SITE}`
|
||||||
|
|
||||||
|
|
||||||
|
API_XML="<?xml version=\"1.0\"?>
|
||||||
|
<methodCall>
|
||||||
|
<methodName>nameserver.updateRecord</methodName>
|
||||||
|
<params>
|
||||||
|
<param>
|
||||||
|
<value>
|
||||||
|
<struct>
|
||||||
|
<member>
|
||||||
|
<name>user</name>
|
||||||
|
<value>
|
||||||
|
<string>$INWX_USER</string>
|
||||||
|
</value>
|
||||||
|
</member>
|
||||||
|
<member>
|
||||||
|
<name>pass</name>
|
||||||
|
<value>
|
||||||
|
<string>$INWX_PASS</string>
|
||||||
|
</value>
|
||||||
|
</member>
|
||||||
|
<member>
|
||||||
|
<name>id</name>
|
||||||
|
<value>
|
||||||
|
<int>$INWX_DOMAIN_ID</int>
|
||||||
|
</value>
|
||||||
|
</member>
|
||||||
|
<member>
|
||||||
|
<name>content</name>
|
||||||
|
<value>
|
||||||
|
<string>$WAN_IP</string>
|
||||||
|
</value>
|
||||||
|
</member>
|
||||||
|
</struct>
|
||||||
|
</value>
|
||||||
|
</param>
|
||||||
|
</params>
|
||||||
|
</methodCall>"
|
||||||
|
|
||||||
|
if [ ! "$NSLOOKUP" == "$WAN_IP" ]; then
|
||||||
|
curl -silent -v -XPOST -H"Content-Type: application/xml" -d "$API_XML" https://api.domrobot.com/xmlrpc/
|
||||||
|
echo "$(date) - $DOMAIN updated. Old IP: "$NSLOOKUP "New IP: "$WAN_IP >> $LOG
|
||||||
|
elif [ "$SILENT" == "NO" ]; then
|
||||||
|
echo "$(date) - No update needed for $DOMAIN. Current IP: "$NSLOOKUP >> $LOG
|
||||||
|
fi
|
||||||
|
|
||||||
|
unset DOMAIN
|
||||||
|
unset IPV6
|
||||||
|
unset MX
|
||||||
|
unset WAN_IP
|
||||||
|
unset NSLOOKUP
|
||||||
|
unset INWX_PASS
|
||||||
|
unset INWX_USER
|
||||||
|
unset INWX_DOMAIN_ID
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "There does not seem to be any config file available in $(dirname $0)/nsupdate.d/." ; exit 1;
|
||||||
|
fi
|
||||||
|
Loading…
x
Reference in New Issue
Block a user