📡 OpenWrt Router Setup: DNS-based Adult Content Filtering

Overview

This guide describes how to use OpenWrt and SSH to set up network-wide adult content filtering using AdGuard Family DNS, DNS redirection, and the Adblock package.


✅ Step 1: Install Required Packages

opkg update
opkg install adblock luci-app-adblock
opkg install curl wget-ssl
opkg install tcpdump  # optional for DNS inspection

✅ Step 2: Configure AdGuard Family DNS

uci set dhcp.@dnsmasq[0].noresolv='1'
uci add_list dhcp.@dnsmasq[0].server='94.140.14.15'
uci add_list dhcp.@dnsmasq[0].server='94.140.15.16'
uci set dhcp.@dnsmasq[0].resolvfile='/dev/null'
uci commit dhcp
/etc/init.d/dnsmasq restart

✅ Step 3: Enforce DNS Redirection (Prevents Bypass)

uci add firewall redirect
uci set firewall.@redirect[-1].name='Force-Safe-DNS'
uci set firewall.@redirect[-1].src='lan'
uci set firewall.@redirect[-1].proto='tcp udp'
uci set firewall.@redirect[-1].src_dport='53'
uci set firewall.@redirect[-1].dest_port='53'
uci set firewall.@redirect[-1].target='DNAT'
uci set firewall.@redirect[-1].dest_ip='192.168.1.1'  # Router IP
uci commit firewall
/etc/init.d/firewall restart

✅ Step 4: Start & Enable Adblock

/etc/init.d/adblock enable
/etc/init.d/adblock start
/etc/init.d/adblock status

✅ Step 5: Set Active Blocklists

uci add_list adblock.global.blocklist='adult'
uci add_list adblock.global.blocklist='youtube'
uci add_list adblock.global.blocklist='reg_chn'
uci commit adblock
/etc/init.d/adblock restart

✅ Step 6: Verify Filtering is Working

From the router:

nslookup pornhub.com 127.0.0.1

From a device on the LAN:

nslookup pornhub.com

You should see responses like 0.0.0.0 or NXDOMAIN.


🧪 (Optional) View DNS Traffic with tcpdump

tcpdump -i br-lan port 53

🧠 Notes

  • Configuration files edited: /etc/config/dhcp, /etc/config/firewall
  • You can also manage Adblock from LuCI under Services > Adblock
  • Firewall redirection ensures no device can bypass your DNS settings

📦 Backup Config

sysupgrade -b /tmp/openwrt-backup.tar.gz
scp root@192.168.1.1:/tmp/openwrt-backup.tar.gz .