项目简介
本项目是运行在本地的智能 DNS 服务器系统,采用 C 语言开发。该系统接收本地客户端的 DNS 查询请求,从多个上游 DNS 服务器获取查询结果,将访问速度最快的结果返回给客户端,以此提高网络访问速度。此外,它支持指定特定域名的 IP 地址,实现高性能匹配,达到过滤广告的效果。此系统具备多平台支持能力,适用于树莓派、openwrt、华硕路由器、Windows 等设备。
项目的主要特性和功能
- 多 DNS 上游服务器:支持配置多个上游 DNS 服务器同时查询,部分 DNS 服务器异常不影响查询。
- 返回最快 IP 地址:从域名所属 IP 地址列表中找出访问速度最快的 IP 地址返回给客户端,提高网络访问速度。
- 支持多种查询协议:支持 UDP、TCP、TLS、HTTPS 查询,以及非 53 端口查询。
- 特定域名 IP 地址指定:可指定域名的 IP 地址,实现广告过滤,避免访问恶意网站。
- 域名高性能后缀匹配:支持域名后缀匹配模式,简化过滤配置,过滤 20 万条记录时间小于 1ms。
- 域名分流:支持域名分流,让不同类型的域名到不同的 DNS 服务器进行查询。
- 多平台支持:支持标准 Linux 系统(树莓派)、openwrt 系统各种固件、华硕路由器原生固件,以及 Windows 10 WSL(Windows Subsystem for Linux)。
- 支持 IPV4、IPV6 双栈:支持 IPV4、IPV6 网络,支持查询 A、AAAA 记录,支持双栈 IP 速度优化,还能完全禁用 IPV6 AAAA 解析。
- 高性能,占用资源少:采用多线程异步 IO 模式,利用 cache 缓存查询结果。
安装使用步骤
假设用户已经下载了本项目的源码文件,以下是不同系统的安装使用步骤:
标准 Linux 系统安装(树莓派/X86_64 系统)
- 安装:下载配套安装包
smartdns.xxxxxxxx.arm - debian - all.deb
并上传到 Linux 系统,执行dpkg -i smartdns.xxxxxxxx.arm - debian - all.deb
安装;x86 系统下载配套安装包smartdns.xxxxxxxx.x86_64 - linux - all.tar.gz
并上传,执行tar zxf smartdns.xxxxxxxx.x86_64 - linux - all.tar.gz
、cd smartdns
、chmod +x./install
、./install -i
进行安装。 - 修改配置:安装完成后,可配置 smartdns 的上游服务器信息。一般增加
server [IP]:port
、server - tcp [IP]:port
配置项,尽可能配置多个上游 DNS 服务器,包括国内外的服务器。使用vi /etc/smartdns/smartdns.conf
进行配置修改。 - 启动服务:执行
systemctl enable smartdns
和systemctl start smartdns
启动服务。 - 将 DNS 请求转发到 SmartDNS 解析:修改本地路由器的 DNS 服务器,将其配置为 SmartDNS。登录到本地网络的路由器,配置树莓派分配静态 IP 地址,修改 WAN 口或者 DHCP DNS 为树莓派 IP 地址。若路由器不支持配置 DNS 为本地 IP,则修改 PC 端、手机端 DNS 服务器为树莓派 IP。
- 检测服务是否配置成功:使用
nslookup -querytype = ptr smartdns
查询域名,若命令结果中的name
项目显示为smartdns
或主机名
,则表示生效。
openwrt
- 安装:将软件使用 winscp 上传到路由器的
/root
目录,执行opkg install smartdns.xxxxxxxx.xxxx.ipk
和opkg install luci - app - smartdns.xxxxxxxx.xxxx.all.ipk
进行安装。注意,19.07 之前的版本,请安装luci - app - smartdns.xxxxxxxxx.all - luci - compat - all
界面。 - 修改配置:登录 openwrt 管理页面,打开
Services
->SmartDNS
进行配置。在Upstream Servers
增加上游 DNS 服务器配置,建议配置多个国内外 DNS 服务器;在Domain Address
指定特定域名的 IP 地址,可用于广告屏蔽。 - 启用服务:SmartDNS 服务生效方法有两种,可根据需求选择。
- 启用方法一:作为主 DNS(默认方案)
- 登录路由器,点击
Services
->SmartDNS
->redirect
,选择重定向 53 端口到 SmartDNS
启用 53 端口转发。 - 使用
nslookup -querytype = ptr smartdns
查询域名,若命令结果中的name
项目显示为smartdns
或主机名
,则表示生效。 - 若界面提示重定向失败,可检查 iptable、ip6table 命令是否正确安装;openwrt 15.01 系统不支持 IPV6 重定向,若网络需要支持 IPV6,可将 DNSMASQ 上游改为 smartdns,或把 smartdns 的端口改为 53 并停用 dnsmasq;LEDE 之后系统,需安装 IPV6 的 nat 转发驱动,点击
system
->Software
,点击update lists
更新软件列表后,安装ip6tables - mod - nat
;使用iptables -t nat -L PREROUTING | grep REDIRECT
检查路由规则是否生效。如转发功能不正常,可使用方法二。
- 登录路由器,点击
- 方法二:作为 DNSMASQ 的上游
- 登录路由器,点击
Services
->SmartDNS
->redirect
,选择作为 dnsmasq 的上游服务器
设置 dnsmasq 的上游服务器为 smartdns。 - 检测上游服务是否配置成功,方法一:使用
nslookup -querytype = ptr smartdns
查询域名,若命令结果中的name
项目显示为smartdns
或主机名
,则表示生效;方法二:使用nslookup
查询www.baidu.com
域名,查看结果中百度的 IP 地址是否只有一个,如有多个 IP 地址返回,则表示未生效,请多尝试几个域名检查。
- 登录路由器,点击
- 启用方法一:作为主 DNS(默认方案)
- 启动服务:勾选配置页面中的
Enable(启用)
来启动 SmartDNS。 - 注意:如已经安装 chinaDNS,建议将 chinaDNS 的上游配置为 SmartDNS。SmartDNS 默认情况,将 53 端口的请求转发到 SmartDNS 的本地端口,由
Redirect
配置选项控制。
华硕路由器原生固件/梅林固件
- 准备:使用此软件时,需确认路由器是否支持 U 盘,并准备好 U 盘一个。
- 启用 SSH 登录:登录管理界面,点击
系统管理
-> 点击系统设置
,配置Enable SSH
为Lan Only
。SSH 登录用户名密码与管理界面相同。 - 下载
Download Master
:在管理界面点击USB 相关应用
-> 点击Download Master
下载。下载完成后,启用Download Master
,若不需要下载功能,可卸载Download Master
,但要保证卸载前 Download Master 是启用的。 - 安装 SmartDNS:将软件使用 winscp 上传到路由器的
/tmp/mnt/sda1
目录(或网上邻居复制到 sda1 共享目录),执行ipkg install smartdns.xxxxxxx.mipsbig.ipk
安装。 - 重启路由器生效服务:待路由器启动后,使用
nslookup -querytype = ptr smartdns
查询域名,若命令结果中的name
项目显示为smartdns
或主机名
,则表示生效。 - 额外说明:上述过程中,smartdns 将安装到 U 盘根目录,采用 optware 的模式运行。如需修改配置,可 ssh 登录路由器,使用
vi /opt/etc/smartdns/smartdns.conf
修改;也可通过网上邻居修改,在文件管理器
中输入\\192.168.1.1\sda1\asusware.mipsbig\etc\init.d
访问。
optware/entware
- 准备:使用此软件时,需确认路由器是否支持 U 盘,并准备好 U 盘一个。
- 安装 SmartDNS:将软件使用 winscp 上传到路由器的
/tmp
目录,执行ipkg install smartdns.xxxxxxx.mipsbig.ipk
安装。 - 修改 smartdns 配置:执行
vi /opt/etc/smartdns/smartdns.conf
修改配置。如需支持 IPV6,可设置工作模式为2
,将 dnsmasq 的 DNS 服务禁用,smartdns 为主用 DNS 服务器。将文件/opt/etc/smartdns/smartdns - opt.conf
中的SMARTDNS_WORKMODE
修改为 2。 - 重启路由器生效服务:待路由器启动后,使用
nslookup -querytype = ptr smartdns
查询域名,若命令结果中的name
项目显示为smartdns
或主机名
,则表示生效。注意,若服务没有自动启动,则需要设置 optwre/entware 自动启动,具体方法参考 optware/entware 的文档。
Windows 10 WSL 安装/WSL ubuntu
- 安装 Windows 10 WSL ubuntu 系统:安装 Windows 10 WSL 运行环境,发行版本选择 ubuntu 系统。安装步骤请参考 WSL 安装说明。
- 安装 smartdns:下载安装包
smartdns.xxxxxxxx.x86 - linux - all.tar.gz
,并解压到 D 盘根目录。双击D:\smartdns\package\windows
目录下的install.bat
进行安装,要求输入密码时,请输入WLS ubuntu
的密码。 - 修改配置:使用记事本打开
D:\smartdns\etc\smartdns
目录中的smartdns.conf
配置文件配置 smartdns。一般增加server [IP]:port
、server - tcp [IP]:port
配置项,尽可能配置多个上游 DNS 服务器,包括国内外的服务器。 - 重新加载配置:双击
D:\smartdns\package\windows
目录下的reload.bat
进行安装,要求输入密码时,请输入WLS ubuntu
的密码。 - 将 DNS 请求转发到 SmartDNS 解析:将 Windows 的默认 DNS 服务器修改为
127.0.0.1
,具体步骤参考 IP 配置。 - 检测服务是否配置成功:使用
nslookup -querytype = ptr smartdns
查询域名,若命令结果中的name
项目显示为smartdns
或主机名
,则表示生效。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】