One of the things that bothered me for quite some time with my Pi-Hole was that using it with Google Wifi (first gen), it wouldn’t automatically detect device hostnames. I’d done a lot of googling and never could get it to work even after a lot of different trials with multiple settings.
Eventually I gave up and instead wrote a command that would use nmap to help fill in the gaps, and output to /etc/pihole/custom.list:
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
echo -n "Looking up MAC and IPs"
for ip in "192.168.1.0" "192.168.2.0" "192.168.3.0"; do
echo -n .
nmap -sP "$ip"/20 > "$ip"-nmap.txt
done
echo
cat 192.168.?.0-nmap.txt \
| sed '/^Starting Nmap/ d' \
| sed '/^Host is up/ d' \
| sed '/^Stats:/ d' \
| sed '/^Ping Scan Timing:/ d' \
| sed '/^Nmap done:/ d' \
| sed -z 's/\nMAC/,MAC/g' \
| sed -e 's/Nmap scan report for //g' \
| sed -e 's/MAC Address: //g' \
| sed -e 's/ (/,(/g' \
| grep -Ev $'^[0-9.]+$' \
| sort -u > ip-mac-mapping.csv
rm /etc/pihole/custom.list 2> /dev/null
while IFS=, read -r col1 col2 col3
do
col3="${col3//[\(\)]/}"
col3="${col3//[^[:alnum:]]/-}"
case "$col2" in
"24:05:88:XX:XX:XX")
col3="Google-Wifi"
;;
"B0:19:C6:XX:XX:XX")
col3="Derricks-iPhone"
;;
"CC:44:63:XX:XX:XX")
col3="iPad-Pro"
;;
"C8:D0:83:XX:XX:XX")
col3="Apple-TV-Den"
;;
"50:32:37:XX:XX:XX")
col3="Apple-TV-Bedroom"
;;
"DC:A6:32:XX:XX:XX")
col3="Ubuntu-Server"
;;
"38:F9:D3:XX:XX:XX")
col3="Derrick-MBP"
;;
*)
echo -n
;;
esac
case "$col1" in
"192.168.1.1")
col3="Google-Wifi"
;;
*)
echo -n
;;
esac
echo "$col1 $col3 # $col2"
echo "$col1 $col3" >> /etc/pihole/custom.list
done < ip-mac-mapping.csvCode language: PHP (php)
This will attempt to grab some info about all the devices on your network via nmap, but also allow you to manually override that per IP or per MAC. I have of course stripped out some devices and semi-anonymized my MACs in the above example.
The nmap can be pretty slow, especially if you’re running this on a first gen Raspberry Pi like I am.