在家庭网络里,经常会遇到一个需求:
👉 限制小朋友访问某些游戏或娱乐网站,并引导到学习页面或提示页。
这篇文章基于 OpenWrt,整理一套稳定、可维护、可扩展的实现方案,同时避开常见坑。
拦截以下网站:
实现效果:
实现分为三层:
/etc/dnsmasq.conf很多人第一反应是修改:
/etc/dnsmasq.conf
但在 OpenWrt 中:
/etc/config/dhcp 动态生成👉 正确做法是使用:
/etc/config/dhcp)/etc/dnsmasq.d/mkdir -p /etc/dnsmasq.d
编辑:
vi /etc/config/dhcp
在 config dnsmasq 中添加:
option confdir '/etc/dnsmasq.d'
vi /etc/dnsmasq.d/block.conf
写入:
address=/arras.io/192.168.1.1
address=/florr.io/192.168.1.1
address=/neal.fun/192.168.1.1
说明:
👉 将域名解析到路由器本身(假设 LAN IP 为 192.168.1.1)
/etc/init.d/dnsmasq restart
nslookup arras.io
如果返回:
192.168.1.1
说明劫持成功 ✅
DNS 只能控制 IP,不能直接做 URL 跳转,所以需要 Web 服务。
opkg update
opkg install nginx
编辑:
vi /etc/nginx/nginx.conf
添加:
server {
listen 80;
server_name arras.io www.arras.io florr.io www.florr.io neal.fun www.neal.fun;
return 302 https://study.example.com;
}
/etc/init.d/nginx enable
/etc/init.d/nginx restart
上述网站全部是 HTTPS:
👉 会出现:
这是 HTTPS 的正常安全机制。
iptables -I FORWARD -d arras.io -j REJECT
iptables -I FORWARD -d florr.io -j REJECT
iptables -I FORWARD -d neal.fun -j REJECT
效果:
return 200 "This site is blocked.";
不推荐:
如果不做这一步,小朋友很容易绕过限制。
iptables -I FORWARD -p udp --dport 53 -j REJECT
iptables -I FORWARD -p tcp --dport 53 -j REJECT
可封锁常见服务,例如:
iptables -I FORWARD -p udp --dport 443 -j REJECT
某些设备会通过 IPv6 绕过:
解决方法:
address=/arras.io/#
或直接禁用 IPv6。
推荐组合方案:
/etc/dnsmasq.d/ 管理域名规则这套方案可以进一步增强:
在 OpenWrt 上实现网站拦截的关键点:
如果你希望进一步做到:
可以在这套基础上继续扩展策略。