User Tools

Site Tools


synology:pihole_synology

Pi-hole on Synology

Pi-hole is an ad-blocking DNS server for internal networks. It is available on http://www.pi-hole.net. There is no Synology package available at this time, so it needs to be installed via Debian chroot environment. This guide is adapted from https://discourse.pi-hole.net/t/how-do-i-install-pi-hole-on-a-synology-nas/

Debian chroot

Add the Synocommunity package source via DSM and install Debian chroot:

Add source: Package Center > Settings > Package Sources > add: http://packages.synocommunity.com/
In Package Center > Community > Install Debian Chroot

Open a terminal/use putty, ssh to your NAS
On the command line, make sure you are root.

sudo su -

Login with your admin password.

/var/packages/debian-chroot/scripts/start-stop-status start
/var/packages/debian-chroot/scripts/start-stop-status chroot

You may receive a locale error, can be ignored - the prompt should have changed.
Now you are on the chroot prompt, which enables you to install many packages that are available for Debian.

After installing chroot and entering it, run ps aux and if you see the following processes…

    root 30894 0.0 0.2 3040 560 ? S 08:25 0:00 /bin/sh /var/packages/debian-chroot/scripts/postinst
    root 30896 0.0 0.2 1552 620 ? S 08:25 0:00 /bin/sh /debootstrap/debootstrap --second-stage

You should probably wait until they're complete to ensure your new chroot environment is consistent. This might take about 5-10 minutes.

Enter one by one:

apt-get update
apt-get upgrade
apt-get install locales
sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen && locale-gen

This may take a while (5-10 minutes depending on CPU speed)

dpkg-reconfigure tzdata
apt-get install curl

mount /proc
cat /proc/mounts > /etc/mtab

This is to fix a filesystem issue.

Install Pi-hole

apt-get install lighttpd

Port 80 is already in use, so modify lighttpd config:

curl -L https://install.pi-hole.net | bash

Just follow the steps…

change admin password if desired:

pihole -a -p
vi /etc/lighttpd/lighttpd.conf

modify server.port = xxxx to a suitable port (higher than 1023)

crontab /etc/cron.d/pihole
crontab -l

Verify that you see several entries for pihole.

service cron restart
service lighttpd restart

This will restart the webserver and cron with the new config.
Now you should be able to access it with your browser on http://ip:port/admin/

If you see the admin page of Pi-hole you can modify your devices: change the DNS IP address to the NAS IP.

http://192.168.1.6:2080/

Autostart after reboot

As nothing in chroot is started automatically we need to make a startup script that survives a reboot:

exit (from chroot - should still be root)

Create an RC script (this file assumes that you use /volume1):

vi /usr/local/etc/rc.d/S99pihole.sh
/usr/local/etc/rc.d/S99pihole.sh
#!/bin/sh

. /etc.defaults/rc.subr

case $1 in
    start)
        /var/packages/debian-chroot/scripts/start-stop-status start
        chroot /volume1/@appstore/debian-chroot/var/chroottarget service cron start
        chroot /volume1/@appstore/debian-chroot/var/chroottarget service lighttpd start
        chroot /volume1/@appstore/debian-chroot/var/chroottarget service pihole-FTL start
    ;;
    stop)
        chroot /volume1/@appstore/debian-chroot/var/chroottarget service cron stop
        chroot /volume1/@appstore/debian-chroot/var/chroottarget service lighttpd stop
        chroot /volume1/@appstore/debian-chroot/var/chroottarget service pihole-FTL stop
        /var/packages/debian-chroot/scripts/start-stop-status stop
    ;;
    restart)
        $0 stop
        sleep 1
        $0 start
    ;;
    *)
        echo "Usage: $0 start|stop|restart"
    ;;
esac
chmod +x /usr/local/etc/rc.d/S99pihole.sh

Test the script:

/usr/local/etc/rc.d/S99pihole.sh restart

If succesful, pi-hole and all the services should automatically start after a reboot.

To get into chroot from your dsm you can use /var/packages/debian-chroot/scripts/start-stop-status chroot
or to enable ssh in chroot, follow this blog post: https://markpith.wordpress.com/2015/10/26/debian-chroot-on-synology-nas/

If you are using dhcp in your network, configure your router to use the DNS on your NAS.

Update Pi-hole

from chroot:

#Log into Chroot
sudo /var/packages/debian-chroot/scripts/start-stop-status chroot

#Regular update fails on synology due to not being able to check disk space, use override option 'do not follow recommendations' instead.
#pihole -up
curl -L https://install.pi-hole.net | bash /dev/stdin --i_do_not_follow_recommendations

#change the webserver port again:
#vi /etc/lighttpd/lighttpd.conf - change the port
sed -i 's/server.port\(.*\)= 80/server.port\1= 2080/g' /etc/lighttpd/lighttpd.conf

service lighttpd restart
service pihole-FTL restart

#leave chroot
exit

#update might require:
cd /etc/.pihole
git pull

to reconfigure pihole's main details, use:

pihole -r
service pihole-FTL restart
synology/pihole_synology.txt · Last modified: by 127.0.0.1