Use DNS to force youtube into restricted mode - and Pi-Hole


I made it with chmod +x executable

But when I enter sudo bash

It gives the following error:
sed: -e expression #1, char 41: unterminated `s’ command

What does this mean?

Redirect with regex

I’ve never tested the script with duckduckgo, this was added later by @picante here. The script can’t handle the output from dig, hence, the error message.

I’ve modified the script (I’m NOT a script guru, there might be a better way). Here is the summary of things you need to have, in order for this to work.

  1. Modify /etc/hosts, it should contain:
# restricted youtube, bing, google and duckduckgo search
  1. Create an aditional dnsmasq configuration file, for example /etc/dnsmasq.d/98-restrict.conf.
    Use any number you haven’t used yet, apart from 01, 02 and 03 (see earlier for an explanation). This new file should contain the following:
# YouTube
# you can also implement a moderate setting
# replace with,,,,,

# SafeSearch,

# Bing Family Filter,

# duckduckgo,

You can test the new configuration file by running:

dnsmasq --test
  1. restart dnsmasq, if you’re still using the current production version:
sudo service dnsmasq restart

if you’re already using FTLDNS, restart FTLDNS (I’m not running FTLDNS, I found the restart command here):

sudo systemctl start pihole-FTL.service
  1. You might want to update the IP addresses, using a script, but I don’t think this is necessary. I wrote the original guidelines over a year ago, the addresses have not changed. Here is the updated script:

update_ip_address() {
if [[ $(grep $1 $file) ]]; then
	IP=$(nslookup -query=A $1 | grep 'Address:' | tail -1 | \
		grep -oE '((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){3}((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]))')
	sed -i "/$1/ s/.*/$IP\t$1/g" $file


Hope this helps…

@DL6ER: as suggested somewhere in this topic, this might be a nice feature to add to the web interface, so users can activate / deactivate safe search with a single click.

How can I use Pi-hole for all my devices except one (or more)?

I didn’t get duck to work. My post had a link to duck settings, which states you have to append to the URL to force safe searches, not sure if the approach discussed here can do that.


According to this, using is a solution, among others.

I use edge, just typed ‘nude’ in the address bar, this is the result:

I have no idea how to remove the possibility to turn off the option to disable the safe search. Anybody?


any step by step tuto or full install script by any chance ?


&kp=0 does the trick.

You can put in front but then cname won’t work.

I hope it works.


Update: it won’t help you much but there is also a page by duckduckgo that has no javascript and seems to run default in safe.

The HTML version is also as search plug-in available for browser. In Firefox it works great.


Unfortunately, this doesn’t help. pihole handles DNS entries and isn’t capable of adding/modifying stuff to URL’s, at least not that I know of.

The idea is to provide safe search without any local user interaction, local installation on the target machine(s), or possibility to tamper with the result.


Pinhole can’t do this but DNSmasq still can set a cname. Duckduckgo blocked this by using also a cname for the safe. sub domain. I tested with and cname was used and I had the IP off

.com/lite/. com/html/ .com/?kp=0 will all three will not show the ability to switch to an other not safe search level.


Hey folks, I have made a script to make this much easier!


That looks nice and I have not tested it and was browsing through the code and you could replace: silently service pihole-FTL restart by pihole restartdns reload so you don’t have to use service/systemctl.

This replacement will do the same, but then done by Pi-hole itself.

There is a safesearch version of duckduck.go:

Something like this?



Thanks for the feedback, @msatter! I will work to implement this into the next version within an hour or so. I am not 100% sure if DuckDuckGo can be forced into SafeSearch all the time, but for now we will just add it to the CNAME’s in “/etc/dnsmasq.d/05-restrict.conf” and will be added to the hosts file, per your request. You are more than welcome to collaborate with me on this on GitHub as well.


I think your idea works!
And when I try to turn safesearch off, it stays on! DuckDuckGo must have recently added this functionality as it did not work earlier this year (May/June)


I tried it myself and I don’t see it using and when I am searching, it searches not safe.

I tried above the earlier cname implementation but never got a working solution like you in May/June.

If it is working for the other search engines then it is great then leave the duckduckgo exclusion enforced.


You will never see it using or in the web browser, DNS does that behind the scenes. That is because it is a CNAME record. I may have mislead you, I attempted to to it in May/June but it did not work. Now it does work. This has been an open feature request with duckduckgo for some time now.

As you can see below, it is working for me:

How do the last lines of /etc/dnsmasq.d/05-restrict.conf and /etc/hosts look?

I have tried this with two pi-holes and I can confirm it is working. Is your devices’ DNS cache cleared and is it using Pi-hole as it’s ONLY dns server? This would cause conflict.

Try my main Public Pi-hole at, and only use if that does not respond… They should have Safesearch enabled…


My bad. I didn’t implement the entries in the host file so I had only a half of the needed implementation.

I will have a new go at it.


It works great and I have found a way to not have to edit the /etc/hosts file and compact the lines even more:,,,,,

So you only have to edit the 05-restrict.conf file to make CNAME working for safesearch.

Also the regex part could be more efficient if those are TLD.


They are anchored at the end with “$” so that makes it more easy.


Thanks for checking it out! I will work on that tomorrow… So can you really eliminate the hosts entries now? How about google since there are 300+ domains…


I did only test the duckduckgo part and if it works there then it should also work on other domains you want to CNAME.

I did not see a long list +300 of Google domains. In regex I have the following lines for Google:

### Google ####################################################################

\.[a-z]{2,7}$ matches any TLD between between 2 and 7 characters long.


And where would this be added?


This goes in the /etc/pihole/regex.list file.

If you have for me the +300 Google list then I can check it against this regex filter.

I got also one for Facebook complete blocker, because that is spying as bad as Google does. The Google regex only blocks spying stuff and I am going far in that.