From 50387429fe925b5e50c6274589eb895062943a82 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Sat, 5 Aug 2017 15:47:45 +0200 Subject: [PATCH] Fix ipv6 and /etc/hosts Thanks to rafi59 for having found out this bugs --- manifest.json | 3 +-- scripts/backup | 6 ++++++ scripts/install | 21 ++++++++++++++++++++- scripts/remove | 18 +++++++++++++++++- scripts/restore | 33 ++++++++++++++++++++++++++++----- scripts/upgrade | 2 +- 6 files changed, 73 insertions(+), 10 deletions(-) diff --git a/manifest.json b/manifest.json index e3cc563..ef264f8 100644 --- a/manifest.json +++ b/manifest.json @@ -19,8 +19,7 @@ "multi_instance": false, "services": [ "nginx", - "php5-fpm", - "dnsmasq" + "php5-fpm" ], "arguments": { "install" : [ diff --git a/scripts/backup b/scripts/backup index da914a0..9b05af7 100644 --- a/scripts/backup +++ b/scripts/backup @@ -90,3 +90,9 @@ ynh_backup "/var/run/pihole-FTL.pid" "${YNH_APP_BACKUP_DIR}/var/run/pihole-FTL.p ynh_backup "/var/run/pihole-FTL.port" "${YNH_APP_BACKUP_DIR}/var/run/pihole-FTL.port" ynh_backup "/etc/dnsmasq.d/01-pihole.conf" "${YNH_APP_BACKUP_DIR}/etc/dnsmasq.d/01-pihole.conf" +if test -e "/etc/dnsmasq.d/02-pihole-dhcp.conf"; then + ynh_backup "/etc/dnsmasq.d/02-pihole-dhcp.conf" "${YNH_APP_BACKUP_DIR}/etc/dnsmasq.d/02-pihole-dhcp.conf" +fi +if test -e "/etc/dnsmasq.d/03-pihole-wildcard.conf"; then + ynh_backup "/etc/dnsmasq.d/03-pihole-wildcard.conf" "${YNH_APP_BACKUP_DIR}/etc/dnsmasq.d/03-pihole-wildcard.conf" +fi diff --git a/scripts/install b/scripts/install index abd9388..522582e 100644 --- a/scripts/install +++ b/scripts/install @@ -178,7 +178,7 @@ echo "PIHOLE_INTERFACE=$main_iface" > $setupVars # Trouve l'ipv4 associée à l'interface trouvée localipv4=$(ifconfig | grep -A 1 "$main_iface" | tail -1 | awk '{print $2;}' | cut -d: -f2) echo "IPV4_ADDRESS=$localipv4" >> $setupVars -echo "IPV6_ADDRESS=::/0" >> $setupVars +echo "IPV6_ADDRESS=" >> $setupVars echo "PIHOLE_DNS_1=" >> $setupVars echo "PIHOLE_DNS_2=" >> $setupVars if [ $query_logging -eq 1 ]; then @@ -216,6 +216,25 @@ ynh_store_file_checksum "$pihole_dnsmasq_config" # Enregistre la somme de contr # Pour éviter un conflit entre les config de dnsmasq, il faut commenter cache-size dans la config par défaut. ynh_replace_string "^cache-size=" "#pihole# cache-size=" /etc/dnsmasq.conf +#================================================= +# CONFIGURE DNS FOR THE LOCAL DOMAINS +#================================================= + +# Liste les domaines de yunohost +while read perdomain +do + # Commente les résolutions du domaine sur 127.0.0.1, qui risquerait de bloquer la résolution sur le réseau local + sed -i "s/^127.0.0.1.*$perdomain/#Commented by pihole# &/g" /etc/hosts + + # Et ajoute une résolution sur l'ip local à la place, si elle n'existe pas déjà + grep -q "^$localipv4.*$perdomain" /etc/hosts || \ + echo "$localipv4 $perdomain #Added by pihole#" >> /etc/hosts +done <<< "$(sudo yunohost domain list | grep "\." | sed 's/.*: \|.*- //')" + +#================================================= +# RESTART DNSMASQ +#================================================= + systemctl start dnsmasq #================================================= diff --git a/scripts/remove b/scripts/remove index 5aceaac..a2cb9f1 100755 --- a/scripts/remove +++ b/scripts/remove @@ -109,10 +109,26 @@ ynh_secure_remove "/etc/sudoers.d/pihole" #================================================= systemctl stop dnsmasq -ynh_secure_remove "/etc/dnsmasq.d/01-pihole.conf" +rm -f "/etc/dnsmasq.d/01-pihole.conf" +rm -f "/etc/dnsmasq.d/02-pihole-dhcp.conf" +rm -f "/etc/dnsmasq.d/03-pihole-wildcard.conf" ynh_replace_string "#pihole# " "" /etc/dnsmasq.conf +#================================================= +# CLEAN /etc/hosts +#================================================= + +# Restaure les résolutions qui avaient été commentées par pihole +sed -i "s/#Commented by pihole# //g" /etc/hosts + +# Et supprime les lignes ajoutées par pihole +sed -i "/#Added by pihole#/d" /etc/hosts + +#================================================= +# RESTART DNSMASQ +#================================================= + systemctl start dnsmasq #================================================= diff --git a/scripts/restore b/scripts/restore index 215303d..070a28d 100644 --- a/scripts/restore +++ b/scripts/restore @@ -136,10 +136,38 @@ ynh_restore_file "/var/run/pihole-FTL.port" systemctl stop dnsmasq ynh_restore_file "/etc/dnsmasq.d/01-pihole.conf" +test -e "${YNH_APP_BACKUP_DIR}/etc/dnsmasq.d/02-pihole-dhcp.conf" && \ + ynh_restore_file "/etc/dnsmasq.d/02-pihole-dhcp.conf" +test -e "${YNH_APP_BACKUP_DIR}/etc/dnsmasq.d/03-pihole-wildcard.conf" && \ + ynh_restore_file "/etc/dnsmasq.d/03-pihole-wildcard.conf" # Pour éviter un conflit entre les config de dnsmasq, il faut commenter cache-size dans la config par défaut. ynh_replace_string "^cache-size=" "#pihole# cache-size=" /etc/dnsmasq.conf +#================================================= +# CONFIGURE DNS FOR THE LOCAL DOMAINS +#================================================= + +# Trouve l'interface réseau par défaut +main_iface=$(route | grep default | awk '{print $8;}' | head -n1) +# Trouve l'ipv4 associée à l'interface trouvée +localipv4=$(ifconfig | grep -A 1 "$main_iface" | tail -1 | awk '{print $2;}' | cut -d: -f2) + +# Liste les domaines de yunohost +while read perdomain +do + # Commente les résolutions du domaine sur 127.0.0.1, qui risquerait de bloquer la résolution sur le réseau local + sed -i "s/^127.0.0.1.*$perdomain/#Commented by pihole# &/g" /etc/hosts + + # Et ajoute une résolution sur l'ip local à la place, si elle n'existe pas déjà + grep -q "^$localipv4.*$perdomain" /etc/hosts || \ + echo "$localipv4 $perdomain #Added by pihole#" >> /etc/hosts +done <<< "$(sudo yunohost domain list | grep "\." | sed 's/.*: \|.*- //')" + +#================================================= +# RESTART DNSMASQ +#================================================= + systemctl start dnsmasq #================================================= @@ -148,13 +176,8 @@ systemctl start dnsmasq setupVars="/etc/pihole/setupVars.conf" -# Trouve l'interface réseau par défaut -main_iface=$(route | grep default | awk '{print $8;}' | head -n1) echo "PIHOLE_INTERFACE=$main_iface" > $setupVars ynh_replace_string "^PIHOLE_INTERFACE=.*" "PIHOLE_INTERFACE=$main_iface" $setupVars - -# Trouve l'ipv4 associée à l'interface trouvée -localipv4=$(ifconfig | grep -A 1 "$main_iface" | tail -1 | awk '{print $2;}' | cut -d: -f2) ynh_replace_string "^IPV4_ADDRESS=.*" "IPV4_ADDRESS=$localipv4" $setupVars ynh_store_file_checksum "$setupVars" # Enregistre la somme de contrôle du fichier de config diff --git a/scripts/upgrade b/scripts/upgrade index 86e21f7..5923d34 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -133,7 +133,7 @@ echo "PIHOLE_INTERFACE=$main_iface" > $setupVars # Trouve l'ipv4 associée à l'interface trouvée localipv4=$(ifconfig | grep -A 1 "$main_iface" | tail -1 | awk '{print $2;}' | cut -d: -f2) echo "IPV4_ADDRESS=$localipv4" >> $setupVars -echo "IPV6_ADDRESS=::/0" >> $setupVars +echo "IPV6_ADDRESS=" >> $setupVars echo "PIHOLE_DNS_1=" >> $setupVars echo "PIHOLE_DNS_2=" >> $setupVars if [ $query_logging -eq 1 ]; then