diff options
author | DL6ER <dl6er@dl6er.de> | 2021-04-16 09:36:21 +0300 |
---|---|---|
committer | DL6ER <dl6er@dl6er.de> | 2021-04-16 09:42:16 +0300 |
commit | 7e535f2a7d2a9f53730ff3f4bc56e2c610bbdfbd (patch) | |
tree | b7c1ef62aae30fe40efbb606632e7b4d9331ddd1 | |
parent | 4736e03108763cc2d5659f48d8a1e8a64d9b2608 (diff) |
Instead of relying on the correct IP address being in setupVars.conf, we should add all available addresses to local.list. FTL uses the option "localise-queries" that will pick the most appropriate one (arriving interface dependent) for the requesting client.fix/gravity_noIP
Signed-off-by: DL6ER <dl6er@dl6er.de>
-rwxr-xr-x | gravity.sh | 58 |
1 files changed, 24 insertions, 34 deletions
@@ -47,16 +47,6 @@ domainsExtension="domains" setupVars="${piholeDir}/setupVars.conf" if [[ -f "${setupVars}" ]];then source "${setupVars}" - - # Remove CIDR mask from IPv4/6 addresses - IPV4_ADDRESS="${IPV4_ADDRESS%/*}" - IPV6_ADDRESS="${IPV6_ADDRESS%/*}" - - # Determine if IPv4/6 addresses exist - if [[ -z "${IPV4_ADDRESS}" ]] && [[ -z "${IPV6_ADDRESS}" ]]; then - echo -e " ${COL_LIGHT_RED}No IP addresses found! Please run 'pihole -r' to reconfigure${COL_NC}" - exit 1 - fi else echo -e " ${COL_LIGHT_RED}Installation Failure: ${setupVars} does not exist! ${COL_NC} Please run 'pihole -r', and choose the 'reconfigure' option to fix." @@ -564,7 +554,7 @@ compareLists() { # Download specified URL and perform checks on HTTP status and file content gravity_DownloadBlocklistFromUrl() { local url="${1}" cmd_ext="${2}" agent="${3}" adlistID="${4}" saveLocation="${5}" target="${6}" compression="${7}" - local heisenbergCompensator="" patternBuffer str httpCode success="" + local heisenbergCompensator="" patternBuffer str httpCode success="" ip # Create temp file to store content on disk instead of RAM patternBuffer=$(mktemp -p "/tmp" --suffix=".phgpb") @@ -582,7 +572,10 @@ gravity_DownloadBlocklistFromUrl() { blocked=false case $BLOCKINGMODE in "IP-NODATA-AAAA"|"IP") - if [[ $(dig "${domain}" +short | grep "${IPV4_ADDRESS}" -c) -ge 1 ]]; then + # Get IP address of this domain + ip="$(dig "${domain}" +short)" + # Check if this IP matches any IP of the system + if [[ -n "${ip}" && $(grep -Ec "inet(|6) ${ip}" <<< "$(ip a)") -gt 0 ]]; then blocked=true fi;; "NXDOMAIN") @@ -785,26 +778,11 @@ gravity_ShowCount() { gravity_Table_Count "vw_regex_whitelist" "regex whitelist filters" } -# Parse list of domains into hosts format -gravity_ParseDomainsIntoHosts() { - awk -v ipv4="$IPV4_ADDRESS" -v ipv6="$IPV6_ADDRESS" '{ - # Remove windows CR line endings - sub(/\r$/, "") - # Parse each line as "ipaddr domain" - if(ipv6 && ipv4) { - print ipv4" "$0"\n"ipv6" "$0 - } else if(!ipv6) { - print ipv4" "$0 - } else { - print ipv6" "$0 - } - }' >> "${2}" < "${1}" -} - -# Create "localhost" entries into hosts format +# Add additional LAN hosts provided by OpenVPN (if available) gravity_generateLocalList() { - local hostname + local addresses hostname + # Get hostname of this system if [[ -s "/etc/hostname" ]]; then hostname=$(< "/etc/hostname") elif command -v hostname &> /dev/null; then @@ -814,13 +792,25 @@ gravity_generateLocalList() { return 0 fi - echo -e "${hostname}\\npi.hole" > "${localList}.tmp" - # Empty $localList if it already exists, otherwise, create it : > "${localList}" chmod 644 "${localList}" - - gravity_ParseDomainsIntoHosts "${localList}.tmp" "${localList}" + echo "### Do not modify this file, it will be overwritten by pihole -g" > "${localList}" + + # Get addresses of currently active interfaces + # sed logic breakdown: + # /inet(|6) /!d; + # Removes all lines from ip a that do not contain either "inet " or "inet6 " + # s/^.*inet(|6) //g; + # Removes all leading whitespace as well as the "inet " or "inet6 " string + # s/\/.*$//g; + # Removes CIDR and everything thereafter (e.g., scope properties) + addresses="$(sed -r '/inet(|6) /!d;s/^.*inet(|6) //g;s/\/.*$//g;' <<< "$(ip a)")" + + while IFS= read -r addr ; do + echo "${addr} ${hostname}" >> "${localList}"; + echo "${addr} pi.hole" >> "${localList}"; + done <<< "${addresses}" # Add additional LAN hosts provided by OpenVPN (if available) if [[ -f "${VPNList}" ]]; then |