目前最好的方案:
使用路由的 DNSmasq 解析设置白名单
此方案对安卓无效(安卓设置了dns,在解析失败后估计还会尝试内部默认dns)
此方案需要在pc端设置dns,并且使用非管理员帐号登录(非管理员帐号没有权限修改网络连接配置)
(1)DNSmasq 是很多智能路由器自带的dns服务器,DNSmasq缓存dns查询结果,并返回向上级dns请求的结果给局域网用户.
(2)小米路由器修改DNSmasq配置需要root权限
(3)我的小米r2d 的配置路径在 /var/etc/dnsmasq.conf
修改配置后需要执行 /etc/init.d/dnsmasq restart 重启服务
(4)相关配置说明
dns分流
server=/cn/114.114.114.114 指定*.cn域名使用114dns解析
server=/taobao.com/114.114.114.114 指定*.taobao.com使用114dns解析
address=/ad.youku.com/127.0.0.1 解析ad.youku.com到127(相当于hosts)
address=/.weibo.com``/10.1.1.222 解析*.weibo.com到10.
address=/``#/10.1.1.1 劫持所有域名(解析所有域名)到10.1.1.1
(5)具体方案
address=/``#/10.1.1.1
server=/taobao.com/114.114.114.114 设置白名单域名到本地dns服务器
查看小米路由器启动命令
/etc/init.d/dnsmasq
找到其中一个配置目录
/etc/dnsmasq.d/
在这个目录随便新建一个文件(例如 aaa.conf)
写入
address=/#/10.1.1.1
server=/taobao.com/114.114.114.114
保存
运行 /etc/init.d/dnsmasq restart 重启dns
本地运行 nslookup taobao.com测试
尝试过的方案(缺点比较多):
1.使用windows自带的ip防火墙
缺点:
(1).如果域名指向的ip变化 需要手动更新
(2).不支持通配符(需要一个一个的设置)
2.使用智能路由器自带的iptables屏蔽dns查询
iptables 实现域名过滤_iptables 域名-CSDN博客
上面的方案要改一下:
先放过白名单域名,然后添加一条屏蔽所有的dns查询.
缺点:
(1)测试对某个域名无效(设置白名单后仍然屏蔽 不知道原因)
(2)屏蔽后的域名相当于服务器堵塞,当某个白名单域名(例如 www.baidu.com)页面中有 非白名单域名的资源(例如 www.baidu.com 引用了 www.hao123.com图片),网页会因为dns查询一直没有返回,卡死很久