Subversion Repositories ALCASAR

Rev

Rev 2559 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2223 tom.houday 1
#!/bin/bash
2
# $Id: alcasar-dns-local.sh 2688 2019-01-18 23:15:49Z lucas.echard $
1607 franck 3
 
2688 lucas.echa 4
# alcasar-dns-local.sh
1607 franck 5
# by Rexy - 3abtux
6
# This script is distributed under the Gnu General Public License (GPL)
7
 
8
# active ou desactive la redirection du service DNS sur le réseau de consultation
9
# enable or disable the redirector of internal DNS service on consultation LAN
10
 
11
SED="/bin/sed -i"
12
 
13
ALCASAR_CONF_FILE="/usr/local/etc/alcasar.conf"
2688 lucas.echa 14
LOCAL_DOMAIN_CONF_FILE="/etc/unbound/conf.d/common/local-forward/dns-redirector.conf"
2559 rexy 15
LOCAL_HOSTNAME_FILE="/etc/hosts"
2688 lucas.echa 16
LOCAL_DNS_FILE="/etc/unbound/conf.d/common/local-dns/global.conf"
1607 franck 17
 
18
# define DNS parameters (LAN side)
19
 
2688 lucas.echa 20
INT_DNS_DOMAIN=`grep INT_DNS_DOMAIN $ALCASAR_CONF_FILE|cut -d"=" -f2`           # Nom du domaine DNS interne
1607 franck 21
INT_DNS_IP=`grep INT_DNS_IP $ALCASAR_CONF_FILE|cut -d"=" -f2`                           # Adresse du serveur DNS interne
2688 lucas.echa 22
INT_DNS_ACTIVE=`grep INT_DNS_ACTIVE $ALCASAR_CONF_FILE|cut -d"=" -f2`           # Activation de la redirection DNS interne
1607 franck 23
 
2688 lucas.echa 24
usage="Usage: alcasar-dns-local.sh {--on | -on} | {--off | -off} | {--add | -add} ip domain | {--del | -del} ip domain | {--reload | -reload}"
1607 franck 25
nb_args=$#
26
args=$1
27
if [ $nb_args -eq 0 ]
28
then
29
        echo "$usage"
30
        exit 1
31
fi
2688 lucas.echa 32
 
2559 rexy 33
function restart_dns(){
2688 lucas.echa 34
        for dns in unbound unbound-blacklist unbound-whitelist dnsmasq-whitelist unbound-blackhole
2559 rexy 35
        do
36
                systemctl restart $dns
37
        done
38
}
39
 
2688 lucas.echa 40
function hosts_to_unbound(){
41
        # Empty the local DNS file
42
        echo "server:" > $LOCAL_DNS_FILE
43
 
44
        while read -r line
45
        do
46
                ip_address=$(echo $line | awk '{ print $1 }')
47
                domain=$(echo $line | awk '{ print $2 }')
48
 
49
                if ! echo $line | grep -E -q "^([0-9\.\t ]+alcasar( |$)|127\.0\.0)"
50
                then
51
                        echo -e "\tlocal-zone: \"$domain\" redirect" >> $LOCAL_DNS_FILE
52
                        echo -e "\tlocal-data: \"$domain A $ip_address\"" >> $LOCAL_DNS_FILE
53
                fi
54
        done < $LOCAL_HOSTNAME_FILE
55
}
56
 
1607 franck 57
case $args in
58
        -\? | -h | --h)
59
                echo "$usage"
60
                exit 0
61
                ;;
2559 rexy 62
        --add|-add) # add a local host resolution
63
                if [ $nb_args -ne 3 ]
64
                then
65
                        echo "$usage"
66
                        exit 1
67
                else
2688 lucas.echa 68
                        # removing if already exists
69
                        $SED "/^$2\t$3/d" $LOCAL_HOSTNAME_FILE
70
 
71
                        # adding to the hosts file
2559 rexy 72
                        echo -e "$2\t$3" >> $LOCAL_HOSTNAME_FILE
2688 lucas.echa 73
                        hosts_to_unbound
2559 rexy 74
                        restart_dns
75
                fi
76
                ;;
77
        --del|-del) # remove a local host resolution
78
                if [ $nb_args -ne 3 ]
79
                then
80
                        echo "$usage"
81
                        exit 1
82
                else
2688 lucas.echa 83
                        $SED "/^$2\t$3/d" $LOCAL_HOSTNAME_FILE
84
                        hosts_to_unbound
2559 rexy 85
                        restart_dns
86
                fi
87
                ;;
2688 lucas.echa 88
        --reload|-reload)
89
                        hosts_to_unbound
90
                        restart_dns
91
                ;;
1607 franck 92
        --off|-off) # disable DNS redirector
2688 lucas.echa 93
                #$SED "s?^#filterwin2k.*?filterwin2k?g" $DNSMASQ_CONF_FILE
94
                rm -f $LOCAL_DOMAIN_CONF_FILE
1607 franck 95
                $SED "s?^INT_DNS_ACTIVE.*?INT_DNS_ACTIVE=off?g" $ALCASAR_CONF_FILE
2559 rexy 96
                restart_dns
2688 lucas.echa 97
 
98
                # Reload firewall
99
                /usr/local/bin/alcasar-iptables.sh
1607 franck 100
                ;;
2688 lucas.echa 101
        --on|-on) # enable DNS redirector
102
                #$SED "s?^filterwin2k.*?#filterwin2k?g" $DNSMASQ_CONF_FILE
103
                cat > $LOCAL_DOMAIN_CONF_FILE << EOF
104
server:
105
    local-zone: "$INT_DNS_DOMAIN." transparent
106
forward-zone:
107
        name: "$INT_DNS_DOMAIN."
108
        forward-addr: $INT_DNS_IP
109
EOF
1607 franck 110
                $SED "s?^INT_DNS_ACTIVE.*?INT_DNS_ACTIVE=on?g" $ALCASAR_CONF_FILE
2559 rexy 111
                restart_dns
2688 lucas.echa 112
 
113
                # Reload firewall
114
                /usr/local/bin/alcasar-iptables.sh
1607 franck 115
                ;;
116
        *)
2688 lucas.echa 117
                echo "Argument inconnu : $1";
1607 franck 118
                echo "$usage"
119
                exit 1
120
                ;;
121
esac