40 lines
1.2 KiB
Bash
Executable File
40 lines
1.2 KiB
Bash
Executable File
#!/bin/vbash
|
|
source /opt/vyatta/etc/functions/script-template
|
|
unalias exit
|
|
|
|
SCRIPT_PATH="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
|
|
echo "SCRIPT_PATH: $SCRIPT_PATH"
|
|
|
|
echo "Checking for updates to NAT rules."
|
|
|
|
PUBLIC_IP="$(curl -s ipinfo.io/ip)"
|
|
echo "" > /tmp/commands
|
|
while IFS= read -r rule; do
|
|
echo -n "Checking rule: $rule: "
|
|
if [[ "$(echo $rule | cut -d' ' -f8 | xargs)" != "$(echo $PUBLIC_IP)" ]]; then
|
|
echo "mismatched. Updating."
|
|
echo " $(echo $rule | cut -d' ' -f8 | xargs) != $(echo $PUBLIC_IP)"
|
|
echo "$(echo "$rule" | cut -d' ' -f-7) $PUBLIC_IP" >> /tmp/commands
|
|
echo " New rule: $(echo "$rule" | cut -d' ' -f-7) $PUBLIC_IP"
|
|
else
|
|
echo "matched. Nothing to do."
|
|
fi
|
|
done <<< "$(run show configuration commands | grep 'set nat destination' | grep 'destination address')"
|
|
|
|
if [[ "$(cat /tmp/commands | wc -l)" == "1" ]]; then # if our /tmp/commands file is empty, it will have 1 line.
|
|
echo "Nothing to do. Exiting."
|
|
exit 0
|
|
echo "exiting did not work as expected..."
|
|
fi
|
|
|
|
echo "Entering configuration mode and sourcing commands list."
|
|
configure
|
|
source /tmp/commands
|
|
rm /tmp/commands
|
|
|
|
source /opt/vyatta/etc/functions/script-template
|
|
commit || exit discard
|
|
save || exit discard
|
|
exit
|