freedombone/src/freedombone-utils-dns

261 lines
7.7 KiB
Plaintext
Raw Normal View History

2016-07-03 17:13:34 +02:00
#!/bin/bash
#
# .---. . .
# | | |
# |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
# | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
# ' ' --' --' -' - -' ' ' -' -' -' ' - --'
#
# Freedom in the Cloud
#
# DNS functions
#
# License
# =======
#
2018-02-21 20:32:13 +01:00
# Copyright (C) 2014-2018 Bob Mottram <bob@freedombone.net>
2016-07-03 17:13:34 +02:00
#
# 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
2018-04-02 12:54:04 +02:00
NAMESERVER1='91.239.100.100'
NAMESERVER2='89.233.43.71'
2018-03-15 21:54:38 +01:00
NAMESERVER3='87.118.100.175'
NAMESERVER4='94.75.228.29'
2018-03-15 21:56:45 +01:00
NAMESERVER5='85.25.251.254'
NAMESERVER6='2.141.58.13'
2016-07-03 17:13:34 +02:00
# parameters used when adding a new domain
DDNS_PROVIDER="default@freedns.afraid.org"
DDNS_USERNAME=
DDNS_PASSWORD=
INADYN_REPO="https://github.com/bashrc/inadyn"
2017-05-18 10:53:27 +02:00
INADYN_COMMIT='fadbe17f520d337dfb8d69ee4bf1fcaa23fce0d6'
2016-07-03 17:13:34 +02:00
# 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=( \
2016-10-08 20:32:04 +02:00
'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')
2016-07-03 17:13:34 +02:00
function create_freedns_updater {
2016-10-08 20:32:04 +02:00
if [[ $ONION_ONLY != "no" ]]; then
return
fi
# currently inadyn doesn't work as expected with freeDNS, so this is a workaround
2018-02-25 13:50:46 +01:00
if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then
2016-10-08 20:32:04 +02:00
return
fi
if [[ $DDNS_PROVIDER != *"freedns"* ]]; then
2016-10-08 20:32:04 +02:00
return
fi
if [[ $SYSTEM_TYPE == "mesh"* ]]; then
return
fi
2016-10-17 14:50:09 +02:00
# remove any legacy command
if [ -f /usr/bin/dynamicdns ]; then
rm /usr/bin/dynamicdns
fi
if grep -q "dynamicdns" /etc/crontab; then
sed -i '/dynamicdns/d' /etc/crontab
fi
2016-10-17 14:50:09 +02:00
# add the update command to cron
if ! grep -q "/usr/local/bin/freedombone-freedns" /etc/crontab; then
2016-10-08 20:32:04 +02:00
function_check cron_add_mins
cron_add_mins 3 '/usr/local/bin/freedombone-freedns'
2016-10-08 20:32:04 +02:00
systemctl restart cron
fi
2018-02-25 13:50:46 +01:00
mark_completed "${FUNCNAME[0]}"
2016-07-03 17:13:34 +02:00
}
function add_ddns_domain {
2018-02-25 23:15:36 +01:00
if [ ! "$1" ]; then
2016-10-08 20:32:04 +02:00
echo $'ddns domain not specified'
exit 5638
fi
CURRENT_DDNS_DOMAIN="$1"
if [[ $ONION_ONLY != "no" ]]; then
return
fi
if [[ "$DDNS_PROVIDER" == 'none' ]]; then
return
fi
2016-10-08 20:32:04 +02:00
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
2018-02-25 23:15:36 +01:00
{ echo '';
echo "system $DDNS_PROVIDER";
echo ' ssl';
echo " checkip-url $GET_IP_ADDRESS_URL /"; } >> /etc/inadyn.conf
2016-10-08 20:32:04 +02:00
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
2016-07-03 17:13:34 +02:00
}
2016-11-06 15:03:51 +01:00
function remove_ddns_domain {
2018-02-25 23:15:36 +01:00
if [ ! "$1" ]; then
2016-11-06 15:03:51 +01:00
echo $'ddns domain not specified'
exit 5638
fi
CURRENT_DDNS_DOMAIN="$1"
if [[ $ONION_ONLY != "no" ]]; then
return
fi
if [[ "$DDNS_PROVIDER" == 'none' ]]; then
return
fi
2016-11-06 15:03:51 +01:00
if [ ! -f /etc/inadyn.conf ]; then
echo $'Unable to find inadyn configuration file /etc/inadyn.conf'
exit 5745
fi
if grep -q "$CURRENT_DDNS_DOMAIN" /etc/inadyn.conf; then
systemctl stop inadyn
sed -i "/alias $CURRENT_DDNS_DOMAIN/d" /etc/inadyn.conf
systemctl start inadyn
systemctl daemon-reload
fi
}
2016-07-03 17:13:34 +02:00
function configure_dns {
2018-02-25 13:50:46 +01:00
if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then
2016-10-08 20:32:04 +02:00
return
fi
2016-10-17 19:30:12 +02:00
2017-06-22 18:52:52 +02:00
apt-get -yq install resolvconf
resolvconf=/etc/resolvconf/resolv.conf.d/head
2017-06-14 11:48:41 +02:00
2016-10-17 19:30:12 +02:00
# allow changes to resolv.conf
2017-06-14 11:48:41 +02:00
chattr -i $resolvconf
2016-10-17 19:30:12 +02:00
2018-02-25 23:15:36 +01:00
{ echo 'domain localdomain';
echo 'search localdomain';
echo "nameserver $NAMESERVER1";
echo "nameserver $NAMESERVER2";
echo "nameserver $NAMESERVER3";
echo "nameserver $NAMESERVER4";
echo "nameserver $NAMESERVER5";
echo "nameserver $NAMESERVER6"; } > $resolvconf
2016-10-08 20:32:04 +02:00
# prevent resolv.conf from changing
2017-06-22 18:52:52 +02:00
resolvconf -u
2016-10-08 20:32:04 +02:00
2018-02-25 13:50:46 +01:00
mark_completed "${FUNCNAME[0]}"
2016-07-03 17:13:34 +02:00
}
function set_hostname {
2016-10-08 20:32:04 +02:00
DEFAULT_DOMAIN_NAME="$1"
2016-07-03 17:13:34 +02:00
2016-10-08 20:32:04 +02:00
echo "$DEFAULT_DOMAIN_NAME" > /etc/hostname
2018-02-25 23:15:36 +01:00
hostname "$DEFAULT_DOMAIN_NAME"
echo "$DEFAULT_DOMAIN_NAME" > /etc/mailname
2016-07-03 17:13:34 +02:00
2016-10-08 20:32:04 +02:00
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
2016-07-03 17:13:34 +02:00
}
function set_your_domain_name {
2018-02-25 13:50:46 +01:00
if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then
2016-10-08 20:32:04 +02:00
return
fi
2016-07-03 17:13:34 +02:00
2016-10-08 20:32:04 +02:00
function_check set_hostname
2018-02-25 23:15:36 +01:00
set_hostname "$DEFAULT_DOMAIN_NAME"
2016-07-03 17:13:34 +02:00
2018-02-25 13:50:46 +01:00
mark_completed "${FUNCNAME[0]}"
2016-07-03 17:13:34 +02:00
}
function configure_firewall_for_dns {
2018-02-25 13:50:46 +01:00
if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then
return
fi
if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then
# docker does its own firewalling
return
fi
iptables -A INPUT -p udp -m udp --dport 1024:65535 --sport 53 -j ACCEPT
function_check save_firewall_settings
save_firewall_settings
2018-02-25 13:50:46 +01:00
mark_completed "${FUNCNAME[0]}"
}
2016-07-03 17:13:34 +02:00
# NOTE: deliberately no exit 0