242 lines
8.0 KiB
Bash
Executable File
242 lines
8.0 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# .---. . .
|
|
# | | |
|
|
# |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
|
|
# | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
|
|
# ' ' --' --' -' - -' ' ' -' -' -' ' - --'
|
|
#
|
|
# Freedom in the Cloud
|
|
#
|
|
# DNS functions
|
|
#
|
|
# License
|
|
# =======
|
|
#
|
|
# Copyright (C) 2014-2016 Bob Mottram <bob@robotics.uk.to>
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# DNS
|
|
NAMESERVER1='213.73.91.35'
|
|
NAMESERVER2='85.214.20.141'
|
|
|
|
# parameters used when adding a new domain
|
|
DDNS_PROVIDER="default@freedns.afraid.org"
|
|
DDNS_USERNAME=
|
|
DDNS_PASSWORD=
|
|
|
|
INADYN_REPO="https://github.com/bashrc/inadyn"
|
|
INADYN_COMMIT='fadbe17f520d337dfb8d69ee4bf1fcaa23fce0d6'
|
|
|
|
# web site used to obtain the external IP address of the system
|
|
GET_IP_ADDRESS_URL="checkip.two-dns.de"
|
|
|
|
# other possible services to obtain the external IP address
|
|
EXTERNAL_IP_SERVICES=( \
|
|
'https://check.torproject.org/' \
|
|
'https://www.whatsmydns.net/whats-my-ip-address.html' \
|
|
'https://www.privateinternetaccess.com/pages/whats-my-ip/' \
|
|
'http://checkip.two-dns.de' \
|
|
'http://ip.dnsexit.com' \
|
|
'http://ifconfig.me/ip' \
|
|
'http://ipecho.net/plain' \
|
|
'http://checkip.dyndns.org/plain' \
|
|
'http://ipogre.com/linux.php' \
|
|
'http://whatismyipaddress.com/' \
|
|
'http://ip.my-proxy.com/' \
|
|
'http://websiteipaddress.com/WhatIsMyIp' \
|
|
'http://getmyipaddress.org/' \
|
|
'http://www.my-ip-address.net/' \
|
|
'http://myexternalip.com/raw' \
|
|
'http://www.canyouseeme.org/' \
|
|
'http://www.trackip.net/' \
|
|
'http://icanhazip.com/' \
|
|
'http://www.iplocation.net/' \
|
|
'http://www.howtofindmyipaddress.com/' \
|
|
'http://www.ipchicken.com/' \
|
|
'http://whatsmyip.net/' \
|
|
'http://www.ip-adress.com/' \
|
|
'http://checkmyip.com/' \
|
|
'http://www.tracemyip.org/' \
|
|
'http://checkmyip.net/' \
|
|
'http://www.lawrencegoetz.com/programs/ipinfo/' \
|
|
'http://www.findmyip.co/' \
|
|
'http://ip-lookup.net/' \
|
|
'http://www.dslreports.com/whois' \
|
|
'http://www.mon-ip.com/en/my-ip/' \
|
|
'http://www.myip.ru' \
|
|
'http://ipgoat.com/' \
|
|
'http://www.myipnumber.com/my-ip-address.asp' \
|
|
'http://www.whatsmyipaddress.net/' \
|
|
'http://formyip.com/' \
|
|
'http://www.displaymyip.com/' \
|
|
'http://www.bobborst.com/tools/whatsmyip/' \
|
|
'http://www.geoiptool.com/' \
|
|
'http://checkip.dyndns.com/' \
|
|
'http://myexternalip.com/' \
|
|
'http://www.ip-adress.eu/' \
|
|
'http://www.infosniper.net/' \
|
|
'http://wtfismyip.com/' \
|
|
'http://ipinfo.io/' \
|
|
'http://httpbin.org/ip')
|
|
|
|
function create_freedns_updater {
|
|
if [[ $ONION_ONLY != "no" ]]; then
|
|
return
|
|
fi
|
|
|
|
# currently inadyn doesn't work as expected with freeDNS, so this is a workaround
|
|
if grep -Fxq "create_freedns_updater" $COMPLETION_FILE; then
|
|
return
|
|
fi
|
|
if [[ $DDNS_PROVIDER != "default@freedns.afraid.org" ]]; then
|
|
return
|
|
fi
|
|
if [[ $SYSTEM_TYPE == "mesh"* ]]; then
|
|
return
|
|
fi
|
|
|
|
FREEDNS_WGET='wget -q --read-timeout=0.0 --waitretry=5 --tries=4 https://freedns.afraid.org/dynamic/update.php?'
|
|
|
|
echo '#!/bin/bash' > /usr/bin/dynamicdns
|
|
echo 'cd /tmp' >> /usr/bin/dynamicdns
|
|
if [ $DEFAULT_DOMAIN_CODE ]; then
|
|
echo "# $DEFAULT_DOMAIN_NAME" >> /usr/bin/dynamicdns
|
|
echo "$FREEDNS_WGET$DEFAULT_DOMAIN_CODE=" >> /usr/bin/dynamicdns
|
|
fi
|
|
if [ $WIKI_CODE ]; then
|
|
if [[ $WIKI_CODE != "$DEFAULT_DOMAIN_CODE" ]]; then
|
|
echo "# $WIKI_DOMAIN_NAME" >> /usr/bin/dynamicdns
|
|
echo "$FREEDNS_WGET$WIKI_CODE=" >> /usr/bin/dynamicdns
|
|
fi
|
|
fi
|
|
if [ $FULLBLOG_CODE ]; then
|
|
if [[ $FULLBLOG_CODE != "$DEFAULT_DOMAIN_CODE" ]]; then
|
|
echo "# $FULLBLOG_DOMAIN_NAME" >> /usr/bin/dynamicdns
|
|
echo "$FREEDNS_WGET$FULLBLOG_CODE=" >> /usr/bin/dynamicdns
|
|
fi
|
|
fi
|
|
if [ $HUBZILLA_CODE ]; then
|
|
if [[ $HUBZILLA_CODE != "$DEFAULT_DOMAIN_CODE" ]]; then
|
|
echo "# $HUBZILLA_DOMAIN_NAME" >> /usr/bin/dynamicdns
|
|
echo "$FREEDNS_WGET$HUBZILLA_CODE=" >> /usr/bin/dynamicdns
|
|
fi
|
|
fi
|
|
if [ $MICROBLOG_CODE ]; then
|
|
if [[ $MICROBLOG_CODE != "$DEFAULT_DOMAIN_CODE" ]]; then
|
|
echo "# $MICROBLOG_DOMAIN_NAME" >> /usr/bin/dynamicdns
|
|
echo "$FREEDNS_WGET$MICROBLOG_CODE=" >> /usr/bin/dynamicdns
|
|
fi
|
|
fi
|
|
if [ $GIT_CODE ]; then
|
|
if [[ $GIT_CODE != "$DEFAULT_DOMAIN_CODE" ]]; then
|
|
echo "# $GIT_DOMAIN_NAME" >> /usr/bin/dynamicdns
|
|
echo "$FREEDNS_WGET$GIT_CODE=" >> /usr/bin/dynamicdns
|
|
fi
|
|
fi
|
|
if [ $MEDIAGOBLIN_CODE ]; then
|
|
if [[ $MEDIAGOBLIN_CODE != "$DEFAULT_DOMAIN_CODE" ]]; then
|
|
echo "# $MEDIAGOBLIN_DOMAIN_NAME" >> /usr/bin/dynamicdns
|
|
echo "$FREEDNS_WGET$MEDIAGOBLIN_CODE=" >> /usr/bin/dynamicdns
|
|
fi
|
|
fi
|
|
echo 'exit 0' >> /usr/bin/dynamicdns
|
|
chmod 600 /usr/bin/dynamicdns
|
|
chmod +x /usr/bin/dynamicdns
|
|
|
|
if ! grep -q "/usr/bin/dynamicdns" /etc/crontab; then
|
|
function_check cron_add_mins
|
|
cron_add_mins 3 '/usr/bin/dynamicdns'
|
|
systemctl restart cron
|
|
fi
|
|
|
|
echo 'create_freedns_updater' >> $COMPLETION_FILE
|
|
}
|
|
|
|
function add_ddns_domain {
|
|
if [ ! $1 ]; then
|
|
echo $'ddns domain not specified'
|
|
exit 5638
|
|
fi
|
|
CURRENT_DDNS_DOMAIN="$1"
|
|
if [[ $ONION_ONLY != "no" ]]; then
|
|
return
|
|
fi
|
|
if [ ! -f /etc/inadyn.conf ]; then
|
|
echo $'Unable to find inadyn configuration file /etc/inadyn.conf'
|
|
exit 5745
|
|
fi
|
|
if ! grep -q "$DDNS_PROVIDER" /etc/inadyn.conf; then
|
|
echo '' >> /etc/inadyn.conf
|
|
echo "system $DDNS_PROVIDER" >> /etc/inadyn.conf
|
|
echo ' ssl' >> /etc/inadyn.conf
|
|
echo " checkip-url $GET_IP_ADDRESS_URL /" >> /etc/inadyn.conf
|
|
if [ $DDNS_USERNAME ]; then
|
|
echo " username $DDNS_USERNAME" >> /etc/inadyn.conf
|
|
fi
|
|
if [ $DDNS_PASSWORD ]; then
|
|
echo " password $DDNS_PASSWORD" >> /etc/inadyn.conf
|
|
fi
|
|
fi
|
|
|
|
if ! grep -q "$CURRENT_DDNS_DOMAIN" /etc/inadyn.conf; then
|
|
echo " alias $CURRENT_DDNS_DOMAIN" >> /etc/inadyn.conf
|
|
fi
|
|
chmod 600 /etc/inadyn.conf
|
|
systemctl restart inadyn
|
|
systemctl daemon-reload
|
|
}
|
|
|
|
function configure_dns {
|
|
if grep -Fxq "configure_dns" $COMPLETION_FILE; then
|
|
return
|
|
fi
|
|
echo 'domain localdomain' > /etc/resolv.conf
|
|
echo 'search localdomain' >> /etc/resolv.conf
|
|
echo "nameserver $NAMESERVER1" >> /etc/resolv.conf
|
|
echo "nameserver $NAMESERVER2" >> /etc/resolv.conf
|
|
|
|
# prevent resolv.conf from changing
|
|
chattr +i /etc/resolv.conf
|
|
|
|
echo 'configure_dns' >> $COMPLETION_FILE
|
|
}
|
|
|
|
function set_hostname {
|
|
DEFAULT_DOMAIN_NAME="$1"
|
|
|
|
echo "$DEFAULT_DOMAIN_NAME" > /etc/hostname
|
|
hostname $DEFAULT_DOMAIN_NAME
|
|
|
|
if grep -q "127.0.1.1" /etc/hosts; then
|
|
sed -i "s/127.0.1.1.*/127.0.1.1 $DEFAULT_DOMAIN_NAME/g" /etc/hosts
|
|
else
|
|
echo "127.0.1.1 $DEFAULT_DOMAIN_NAME" >> /etc/hosts
|
|
fi
|
|
}
|
|
|
|
function set_your_domain_name {
|
|
if grep -Fxq "set_your_domain_name" $COMPLETION_FILE; then
|
|
return
|
|
fi
|
|
|
|
function_check set_hostname
|
|
set_hostname $DEFAULT_DOMAIN_NAME
|
|
|
|
echo 'set_your_domain_name' >> $COMPLETION_FILE
|
|
}
|
|
|
|
# NOTE: deliberately no exit 0
|