Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save devloco/ad46c3e9d25319a479dc6b5b3787c2e0 to your computer and use it in GitHub Desktop.
Save devloco/ad46c3e9d25319a479dc6b5b3787c2e0 to your computer and use it in GitHub Desktop.
Add a PiHole instance on a macvlan enabled Docker network (Synology eth0 example)
#!/bin/bash
# NAS IP: 192.168.1.10 in this example
# DHCP scope reservation for macvlan: 192.168.1.208/28 (Details below)
## Network: 192.168.1.208/28 11000000.10101000.00000001.1101 0000 (Class C)
## HostMin: 192.168.1.209 11000000.10101000.00000001.1101 0001
## HostMax: 192.168.1.222 11000000.10101000.00000001.1101 1110
## Hosts/Net: 14 (Private Internet)
# Create a macvlan Docker network using eth0
docker network create --driver=macvlan --gateway=192.168.1.1 --subnet=192.168.1.10/24 -o parent=eth0 macvlan
# Create a Synology macvlan0 bridge network attached to the physical eth0, and add the ip range scope (sudo)
ip link add macvlan0 link eth0 type macvlan mode bridge
ip addr add 192.168.1.208/28 dev macvlan0
ifconfig macvlan0 up
# It's also possible to create a scheduled task at startup as the root user, it's wise to append the following in front of the above commands
while ! ip link show eth0 | grep -q 'state UP'; do
sleep 1
done
# Perform a basic test with NGINX
docker run --net=macvlan -d --ip=192.168.1.210 -p 80:80 nginx
# Browse to http://192.168.1.210 in your local network, you should see the nginx welcome page! ...Don't forget to remove the container afterwards...
# Now start PiHole on a macvlan enabled IP address f.e.
# Also I've added a fake mac address so the container always uses the samen mac, handy to make a reservation in your DHCP scope or do whatever you like to do with it.
DOCKERHOME=<some path>
NAME=pihole-macvlan
IMAGE=pihole/pihole
docker run --detach \
--name ${NAME} \
--restart always \
--volume /etc/localtime:/etc/localtime:ro \
--volume ${DOCKERHOME}/data/${NAME}/config:/etc/pihole \
--volume ${DOCKERHOME}/data/${NAME}/dnsmasq.d:/etc/dnsmasq.d \
--cap-add NET_ADMIN \
--dns=127.0.0.1 \
--dns=1.1.1.1 \
--env "DNS1=1.1.1.1" \
--env "DNS2=1.0.0.1" \
--env "ServerIP=192.168.1.210" \
--env "DNSMASQ_LISTENING=all" \
--env "WEBPASSWORD=<secret>" \
--env "TZ=Europe/Amsterdam" \
--network macvlan \
--ip "192.168.1.210" \
--mac-address "02:42:c0:a8:01:d7" \
${IMAGE}
# Happy days!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment