From 0cb49accf78e0d64221696263c2df182190b69aa Mon Sep 17 00:00:00 2001 From: Bruno21 Date: Sun, 14 Sep 2025 18:27:41 +0200 Subject: [PATCH] 14-09-2025 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Recherche des sous-domaines supplementaires dans lan.list (d'après subdomains.photos-nas.ovh.txt) --- lan.list | 35 +++++++- subdomains.photos-nas.ovh.txt | 36 ++++++-- sync_pihole_lan.sh | 149 ++++++++++++++++++++++++---------- 3 files changed, 167 insertions(+), 53 deletions(-) diff --git a/lan.list b/lan.list index 825d828..711f5f5 100644 --- a/lan.list +++ b/lan.list @@ -1,43 +1,70 @@ 192.168.2.1 asus.photos-nas.ovh asus 192.168.2.1 www.asusrouter.com et12 +192.168.2.57 adventurelog.photos-nas.ovh adventurelog +192.168.2.57 adventurelogapi.photos-nas.ovh adventurelogapi 192.168.2.57 airdrop.photos-nas.ovh airdrop +192.168.2.57 bearlytics.photos-nas.ovh bearlytics +192.168.2.57 birdnet.photos-nas.ovh birdnet 192.168.2.57 books.photos-nas.ovh books 192.168.2.57 change.photos-nas.ovh changedetection +192.168.2.57 checkcle.photos-nas.ovh checkcle 192.168.2.57 chibisafe.photos-nas.ovh chibisafe -192.168.2.57 dcommander.photos-nas.ovh dcommander +192.168.2.57 compose.photos-nas.ovh compose +192.168.2.57 diun.photos-nas.ovh diun 192.168.2.57 dockge.photos-nas.ovh dockge -192.168.2.57 docspell.photos-nas.ovh docspell +192.168.2.57 dockpeek.photos-nas.ovh dockpeek 192.168.2.57 dozzle.photos-nas.ovh dozzle 192.168.2.57 ds923.photos-nas.ovh dsm +192.168.2.57 freshrss.photos-nas.ovh freshrss +192.168.2.57 ftp.photos-nas.ovh ftp 192.168.2.57 git.photos-nas.ovh git 192.168.2.57 glances.photos-nas.ovh glances 192.168.2.57 gokapi.photos-nas.ovh gokapi 192.168.2.57 gotify.photos-nas.ovh gotify +192.168.2.57 hoarder.photos-nas.ovh hoarder 192.168.2.57 igotify.photos-nas.ovh gotify-api 192.168.2.57 immich.photos-nas.ovh immich 192.168.2.57 invidious.photos-nas.ovh invidious 192.168.2.57 it-tools.photos-nas.ovh it-tools +192.168.2.57 linkwarden.photos-nas.ovh linkwarden +192.168.2.57 lunalytics.photos-nas.ovh lunalytics 192.168.2.57 maloja.photos-nas.ovh maloja 192.168.2.57 maps-server.photos-nas.ovh maps-server 192.168.2.57 maps.photos-nas.ovh maps +192.168.2.57 materialious.photos-nas.ovh materialious +192.168.2.57 mealie.photos-nas.ovh mealie 192.168.2.57 menu.photos-nas.ovh heimdall +192.168.2.57 metube.photos-nas.ovh metube 192.168.2.57 navidrome.photos-nas.ovh navidrome 192.168.2.57 nextcloud.photos-nas.ovh nextcloud +192.168.2.57 nmap.photos-nas.ovh nmap +192.168.2.57 ntfy.photos-nas.ovh ntfy +192.168.2.57 omnitools.photos-nas.ovh omnitools 192.168.2.57 paperlessngx.photos-nas.ovh paperlessngx 192.168.2.57 pastebin.photos-nas.ovh pastebin 192.168.2.57 photos.photos-nas.ovh photos +192.168.2.57 pinchflat.photos-nas.ovh pinchflat 192.168.2.57 pingvin.photos-nas.ovh pingvin +192.168.2.57 piped.photos-nas.ovh piped +192.168.2.57 pipedapi.photos-nas.ovh pipedapi +192.168.2.57 pipedproxy.photos-nas.ovh pipedproxy +192.168.2.57 portracker.photos-nas.ovh portracker 192.168.2.57 psitransfer.photos-nas.ovh psitransfer +192.168.2.57 rustpad.photos-nas.ovh rustpad 192.168.2.57 seafile.photos-nas.ovh seafile 192.168.2.57 search.photos-nas.ovh searxng 192.168.2.57 send.photos-nas.ovh send +192.168.2.57 shiori.photos-nas.ovh shiori +192.168.2.57 slink.photos-nas.ovh slink 192.168.2.57 snippet.photos-nas.ovh snippet -192.168.2.57 syno-dashboard.photos-nas.ovh syno-dashboard 192.168.2.57 tautulli.photos-nas.ovh tautulli 192.168.2.57 test.photos-nas.ovh test +192.168.2.57 trip.photos-nas.ovh trip 192.168.2.57 tube.photos-nas.ovh tube -192.168.2.57 uptime.photos-nas.ovh uptime-kuma 192.168.2.57 vault.photos-nas.ovh vaultwarten +192.168.2.57 whoogle.photos-nas.ovh whoogle +192.168.2.57 wud.photos-nas.ovh wud 192.168.2.57 yacy.photos-nas.ovh yacy +192.168.2.57 ytweb.photos-nas.ovh ytweb 192.168.2.116 pihole1.photos-nas.ovh dietpi1 192.168.2.216 pihole2.photos-nas.ovh dietpi2 diff --git a/subdomains.photos-nas.ovh.txt b/subdomains.photos-nas.ovh.txt index 4353bd5..16111eb 100644 --- a/subdomains.photos-nas.ovh.txt +++ b/subdomains.photos-nas.ovh.txt @@ -1,55 +1,79 @@ +adventurelog +adventurelogapi airdrop asus +bearlytics +birdnet books change +checkcle chibisafe -dcommander +compose +diun dockge -docspell +dockpeek dozzle drive ds916 ds923 files +freshrss ftp git gitea glances gokapi gotify +hoarder home-assistant homebridge igotify immich invidious it-tools +lunalytics +linkwarden maloja maps-server maps +materialious +mealie menu +metube musiiic navidrome nextcloud -notif +nmap +ntfy +omnitools paperlessngx pastebin photos pihole1 pihole2 +pinchflat pingvin +piped +pipedapi +pipedproxy portainer +portracker psitransfer +rustpad seafile search send +shiori +slink snippet -syno-dashboard tautulli test +trip tube tunes -uptime vault wg +whoogle +wud yacy -yatch +ytweb diff --git a/sync_pihole_lan.sh b/sync_pihole_lan.sh index 02649b7..b082a43 100755 --- a/sync_pihole_lan.sh +++ b/sync_pihole_lan.sh @@ -26,17 +26,26 @@ reset="\033[0m" absent=() delete=() +extra=() domain=".photos-nas.ovh" -not_required=("drive" "files" "gitea" "home-assistant" "homebridge" "portainer" "tunes" "wg" "www" "yatch") +not_required=("drive" "files" "gitea" "home-assistant" "homebridge" "portainer" "tunes" "wg" "www") not_used=("ds916" "musiiic" "notif") pihole1=192.168.2.116 pihole2=192.168.2.216 +ScriptPath="$(readlink -f "$0")" # /Users/bruno/Documents/Scripts/bashbirds/bashbirds.sh +ScriptWorkDir="$(dirname "$ScriptPath")" # /Users/bruno/Documents/Scripts/bashbirds + echo -e "${greenbold}Sync_pihole_lan.sh synchronise the /etc/pihole/lan.list file with your Subdomains ...${reset}\n" +echo -e " For Pihole 6:" +echo -e " - edit Pihole preferences (nano /etc/pihole/pihole.toml)" +echo -e " - set etc_dnsmasq_d = true ### CHANGED, default = false" +echo +echo : << 'COMMENTS' - +COMMENTS cat < /dev/null > /dev/tcp/1.1.1.1/53 if [[ $? -ne 0 ]]; then echo -e "\n${red}No Internet connection !${reset}" @@ -48,37 +57,37 @@ fi echo -e "${bold}Backup ${italic}lan.list...${reset}" # 1. Sauvegarde du /etc/pihole/lan.list de chaque pihole vers lan.list.1 et lan.list.2 -ping -q -c1 "$pihole1" &>/dev/null && ssh -p51322 root@"$pihole1" "cat /etc/pihole/lan.list" > lan.list.1 || echo -e "\n${red}Pihole1 is unreachable !'${reset}" -ping -q -c1 "$pihole2" &>/dev/null && ssh -p51522 root@"$pihole2" "cat /etc/pihole/lan.list" > lan.list.2 || echo -e "${red}Pihole2 is unreachable !'${reset}" +ping -q -c1 "$pihole1" &>/dev/null && ssh -p51322 root@"$pihole1" "cat /etc/pihole/lan.list" > $ScriptWorkDir/lan.list.1 || echo -e "\n${red}Pihole1 is unreachable !'${reset}" +ping -q -c1 "$pihole2" &>/dev/null && ssh -p51522 root@"$pihole2" "cat /etc/pihole/lan.list" > $ScriptWorkDir/lan.list.2 || echo -e "${red}Pihole2 is unreachable !'${reset}" # Si un lan.list.bak existe, on l'archive -if [ -f lan.list.bak ]; then - cp lan.list.bak /tmp/lan.list +if [ -f "$ScriptWorkDir/lan.list.bak" ]; then + cp "$ScriptWorkDir/lan.list.bak" /tmp/lan.list bzip2 /tmp/lan.list # lan.list.bz2 mv /tmp/lan.list.bz2 . fi # On backup le lan.list vers lan.list.bak (sinon lan.list.1 devient lan.list) -if [ -f lan.list ]; then - cp lan.list lan.list.bak -elif [ -f lan.list.1 ]; then - cp lan.list.1 lan.list -elif [ -f lan.list.2 ]; then - cp lan.list.2 lan.list +if [ -f $ScriptWorkDir/lan.list ]; then + cp $ScriptWorkDir/lan.list $ScriptWorkDir/lan.list.bak +elif [ -f $ScriptWorkDir/lan.list.1 ]; then + cp $ScriptWorkDir/lan.list.1 $ScriptWorkDir/lan.list +elif [ -f $ScriptWorkDir/lan.list.2 ]; then + cp $ScriptWorkDir/lan.list.2 $ScriptWorkDir/lan.list else echo "Error ! No lan.list file !" exit fi -COMMENTS -nb_dynhost=$(awk 'END { print NR }' lan.list) + +nb_dynhost=$(awk 'END { print NR }' $ScriptWorkDir/lan.list) echo -e "\n$nb_dynhost dynhost found in lan.list !" # 2. Suppression des 'not_required' et 'not_used' dans le lan.list -echo -e "${bold}\nFind extra dynhost in ${italic}lan.list...${reset}" +echo -e "${bold}\nFind not_used and not_required dynhost in ${italic}lan.list...${reset}" while IFS= read -r line; do @@ -89,7 +98,7 @@ while IFS= read -r line; do fi fi -done < lan.list +done < $ScriptWorkDir/lan.list if [ ${#delete[@]} -ge 1 ]; then @@ -110,7 +119,7 @@ if [ ${#delete[@]} -ge 1 ]; then echo "$nb_dynhost dynhost found in lan.list !" fi else - echo "None" + echo -e "${green}None !${reset}" fi @@ -119,12 +128,12 @@ fi echo -e "${bold}\nFind missing dynhost in ${italic}lan.list...${reset}" #dynhost_list=$(cat photos-nas.ovh_dns_data.txt | grep "60 IN A" | sed '1d') -dynhost_list=$(cat subdomains.photos-nas.ovh.txt) +dynhost_list=$(cat $ScriptWorkDir/subdomains.photos-nas.ovh.txt) while IFS= read -r line; do dynhost=$(echo "${line}" | awk '{print $1}') - grep -q $dynhost lan.list + grep -q $dynhost $ScriptWorkDir/lan.list if [ $? != 0 ]; then if [[ ! " ${not_required[*]} " =~ " $dynhost " ]] && [[ ! " ${not_used[*]} " =~ " $dynhost " ]]; then absent+=(${dynhost}) @@ -154,29 +163,70 @@ if [ ${#absent[@]} -ge 1 ]; then cat /tmp/temp_file.list # On ajoute le /tmp/temp_file.list au lan.list - cat /tmp/temp_file.list >> lan.list + cat /tmp/temp_file.list >> $ScriptWorkDir/lan.list # On trie le lan.list - cat lan.list | sort -k2 > lan.list.sorted - mv lan.list.sorted lan.list + cat $ScriptWorkDir/lan.list | sort -k2 > $ScriptWorkDir/lan.list.sorted + mv $ScriptWorkDir/lan.list.sorted $ScriptWorkDir/lan.list else echo -e "${green}No new dynhost !${reset}" fi +# 4. Recherche des sous-domaines supplementaires dans lan.list (d'après subdomains.photos-nas.ovh.txt) + +echo -e "${bold}\nRemove extra dynhost in ${italic}lan.list...${reset}" + +lan_list=$(cat $ScriptWorkDir/lan.list) + +while IFS= read -r line; do + + dynhost=$(echo "${line}" | awk '{print $2}' | awk -F"." '{print $1}') + + grep -q $dynhost $ScriptWorkDir/subdomains.photos-nas.ovh.txt + if [ ! $? != 0 ]; then + echo "${line}" >> /tmp/extra.txt + else + extra+=(${dynhost}) + fi + if [[ "$dynhost" == *www* ]]; then + echo "${line}" >> /tmp/extra.txt + + #extra=( "${extra[@]/$dynhost}" ) + # on supprime www et on reconstruit le tableau + new_array=() + for value in "${extra[@]}" + do + [[ $value != $dynhost ]] && new_array+=("$value") + done + extra=("${new_array[@]}") + unset new_array + fi + +done <<< "$lan_list" + +if [ ${#extra[@]} -ge 1 ]; then + echo "${extra[@]}" +else + echo -e "${green}No extra dynhost !${reset}" +fi + +cp /tmp/extra.txt $ScriptWorkDir/lan.list +[ -f /tmp/extra.txt ] && rm /tmp/extra.txt + + echo echo -e "${bold}Display ${italic}lan.list. Please verify IP and subdomains.${reset}" -cat lan.list +cat $ScriptWorkDir/lan.list - -nb_dynhost=$(awk 'END { print NR }' lan.list) +nb_dynhost=$(awk 'END { print NR }' $ScriptWorkDir/lan.list) echo -e "$nb_dynhost dynhost !\n" # Do you want to modify lan.list ? a=$(echo -e "Do you want to edit ${italic}lan.list${reset} ? (y/n)") read -p "$a" choice if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then - nano -l lan.list + nano -l $ScriptWorkDir/lan.list fi @@ -184,7 +234,7 @@ fi : << 'COMMENTS2' echo "toto" - +COMMENTS2 b=$(echo -e "Do you want to export ${italic}lan.list${reset} to ${bold}pihole1${reset} ($pihole1) and ${bold}pihole2${reset} ($pihole2) ? (y/n)") read -p "$b" choice @@ -192,12 +242,16 @@ if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then if ping -q -c1 "$pihole1" &>/dev/null; then echo "Export to pihole1..." - cat lan.list | ssh -p51322 root@"$pihole1" 'cat > /etc/pihole/lan.list' + cat $ScriptWorkDir/lan.list | ssh -p51322 root@"$pihole1" 'cat > /etc/pihole/lan.list' [ $? != 0 ] && echo -e "${red}Error during transfer to pihole1 ($pihole1)${reset}" || echo -e "${green}Ok${reset}" - echo "Restarting dns on pihole1..." - ssh -p51322 root@"$pihole1" 'pihole restartdns' - [ $? != 0 ] && echo -e "${red}Error during restarting dns on pihole1 ($pihole1)${reset}" || echo -e "${green}Ok${reset}" + # pihole 5 + #echo "Restarting dns on pihole1..." + #ssh -p51322 root@"$pihole1" 'pihole restartdns' + # pihole 6 + echo "Update the lists and flush the cache without restarting the DNS server on pihole1..." + ssh -p51322 root@"$pihole1" 'pihole reloaddns' + [ $? != 0 ] && echo -e "${red}Error during reloading dns on pihole1 ($pihole1)${reset}" || echo -e "${green}Ok${reset}" else echo -e "\n${red}Pihole1 is unreachable !'${reset}" fi @@ -205,20 +259,24 @@ if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then if ping -q -c1 "$pihole2" &>/dev/null; then echo "Export to pihole2..." - cat lan.list | ssh -p51522 root@"$pihole2" 'cat > /etc/pihole/lan.list' + cat $ScriptWorkDir/lan.list | ssh -p51522 root@"$pihole2" 'cat > /etc/pihole/lan.list' [ $? != 0 ] && echo -e "${red}Error during transfer to pihole2 ($pihole2)${reset}" || echo -e "${green}Ok${reset}" - echo "Restarting dns on pihole2..." - ssh -p51522 root@"$pihole2" 'pihole restartdns' - [ $? != 0 ] && echo -e "${red}Error during restarting dns on pihole2 ($pihole2)${reset}" || echo -e "${green}Ok${reset}" + # pihole 5 + #echo "Restarting dns on pihole2..." + #ssh -p51522 root@"$pihole2" 'pihole restartdns' + # pihole 6 + echo "Update the lists and flush the cache without restarting the DNS server on pihole2..." + ssh -p51522 root@"$pihole2" 'pihole reloaddns' + [ $? != 0 ] && echo -e "${red}Error during reloading dns on pihole2 ($pihole2)${reset}" || echo -e "${green}Ok${reset}" else - echo -e "n${red}Pihole2 is unreachable !'${reset}" + echo -e "\n${red}Pihole2 is unreachable !'${reset}" fi else echo -e "OK, let's continue..." fi -COMMENTS2 + # 5. On compare la liste principale des sous-domaines subdomains.photos-nas.ovh.txt avec la zone photos-nas.ovh sur ovh (via l'API) @@ -232,7 +290,7 @@ TIME=$(curl -s https://api.ovh.com/1.0/auth/time) ZONE_FILE="zone.photos-nas.ovh" ZONE="photos-nas.ovh" -source ovh_secrets.txt +source $ScriptWorkDir/ovh_secrets.txt export_zone() { HTTP_METHOD="GET" @@ -327,8 +385,8 @@ export_zone #ovh_cname_list=$(cat photos-nas.ovh_dns_data.txt | grep "CNAME" | sed '1d') -ovh_cname_list=$(cat $ZONE_FILE) -subdomains_list=$(cat subdomains.photos-nas.ovh.txt) +ovh_cname_list=$(cat $ScriptWorkDir/$ZONE_FILE) +subdomains_list=$(cat $ScriptWorkDir/subdomains.photos-nas.ovh.txt) extra_ovh=() absent_ovh=() @@ -337,7 +395,7 @@ echo -e "${bold}\nFind extra CNAME records in zone ${italic}$ZONE${reset}..." while IFS= read -r line; do dynhost=$(echo "${line}" | awk '{print $1}') - grep -q $dynhost subdomains.photos-nas.ovh.txt + grep -q $dynhost $ScriptWorkDir/subdomains.photos-nas.ovh.txt if [ $? != 0 ]; then if [[ ! " ${not_required[*]} " =~ " $dynhost " ]] && [[ ! " ${not_used[*]} " =~ " $dynhost " ]]; then @@ -379,7 +437,7 @@ echo -e "${bold}\nFind missing CNAME records in zone ${italic}$ZONE${reset}..." while IFS= read -r line; do dynhost=$(echo "${line}" | awk '{print $1}') - grep -q $dynhost zone.photos-nas.ovh + grep -q $dynhost $ScriptWorkDir/zone.photos-nas.ovh if [ $? != 0 ]; then if [[ ! " ${not_required[*]} " =~ " $dynhost " ]] && [[ ! " ${not_used[*]} " =~ " $dynhost " ]]; then @@ -416,7 +474,12 @@ fi # 6. On supprime les fichiers temporaires [ -f /tmp/temp_file.list ] && rm /tmp/temp_file.list -[ -f lan.list.sorted ] && rm lan.list.sorted +[ -f $ScriptWorkDir/lan.list.sorted ] && rm $ScriptWorkDir/lan.list.sorted + + +# 7. fin + +echo -e "\n${greenbold}Fin !${reset}" # https://www.nas-forum.com/forum/topic/80160-multiples-dynhost-ovh/#comment-1319505612