这几天实在不知道写什么教程,于是想啊想,突然想起来 dowsDNS了,当初写过一个 Windows 使用这个搭建本地DNS科学上网的教程,我就突然想起来,如果把监听的IP 127.0.0.1
改成 0.0.0.0
岂不是变成了可以外网访问的 远程DNS服务器啦,所以在 Linux系统上面试了试的确可以,于是又可以写教程了~
Windows 搭建本地DNS:一个搭建 本地DNS 以科学上网的小工具 —— dowsDNS
一键脚本:『原创』快速自建DNS服务器以 科学上网+屏蔽广告 —— dowsDNS 一键脚本
Github项目地址:https://github.com/dowsnature/dowsDNS
注意:DNS和Hosts这两种科学上网方式,都必须使用https
,比如访问谷歌:https://www.google.com
,使用http
明文传输会被墙拦截。
准备工作
首先你需要一个 国内的VPS(云服务器),否则你用海外VPS搭建DNS服务器会被墙拦截并伪造(DNS污染)。
系统建议为 Debian 7 x64 ,原因不多说,我经常用这个系统,常看我教程的人都知道。
如果你不是很懂的话,你只需要 安装依赖 - 下载/解压 - 修改监听IP为 0.0.0.0 - 启动dowsDNS 即可!其他的都可以不管。
安装依赖
dowsDNS是一个由 Python 编写的软件,所以Linux想要运行,就需要确定安装了最低版本2.7的 Python。
- python -V
- # 用上面的命令检查是否安装了 Python,如果返回如下的信息即代表已安装,可以跳过当前步骤继续下面的unzip步骤
- # Python 2.7.x
- # 如果返回 -bash: python: command not found ,即代表未安装,那么就用下面的命令来安装 Python
- # CentOS系统:
- yum install python -y
- # Debian/Ubuntu系统:
- apt-get install python -y
然后下面因为是下载的 zip 压缩包,要解压这个还需要安装 unzip :
- # CentOS系统:
- yum update && yum install unzip -y
- # Debian/Ubuntu系统:
- apt-get update && apt-get install unzip -y
下载安装
然后我们开始下载/解压 dowsDNS:
- wget -N --no-check-certificate https://github.com/dowsnature/dowsDNS/archive/master.zip
- unzip master.zip
- mv dowsDNS-master dowsDNS
假设你的安装目录为 /root
,那么dowsDNS的目录即为 /root/dowsDNS
。
配置修改
接下来可能需要根据需求修改配置文件,首先进入配置文件目录:
- cd dowsDNS/conf
基础配置文件
以下是dowsDNS的默认配置文件,可以根据需求来修改 上游DNS
- {
- "Remote_dns_server" : "114.114.114.114",
- # 上游DNS,即一些dowsDNS没有指定的域名都由上游DNS解析,比如百度啥的。
- "Remote_dns_port":53,
- # 上游DNS的端口,可以使用上游DNS为 208.67.222.222 搭配 5353 端口防DNS污染。
- "Rpz_json_path":"./data/rpz.json",
- "Local_dns_server" : "127.0.0.1",
- # 监听IP,127.0.0.1 代表仅本地和局域网才能访问,设置 0.0.0.0 即可外网访问。
- "Local_dns_port" : 53,
- # 监听端口,默认 53 ,可按需求修改,一般设备的DNS都只能设置 53 端口。
- "sni_proxy_on":false,
- # SNI代理开关,当开启(true)这个设置后,DowsDNS所有的自定义设置的泛域名解析和hosts(包括自带的)都会强制指向下面 sni_proxy_ip 参数指定的 SNI代理IP。
- "Public_Server":false,
- # 如果是局域网使用,写 false,如果是外网访问使用,写 true
- "sni_proxy_ip":"219.76.4.3"
- # SNI代理 IP,如果你搭建或者有其他的SNI代理IP,可以放到这里使用。
- }
修改配置文件的话,一般你只需要把 127.0.0.1
改成 0.0.0.0
即可,其他的不懂就多尝试或者不要动。
可以用 vim编辑器 手动修改,也可以用 sed 命令来修改。
- # vim编辑器打开配置文件修改,打开后按 I键 进入编辑模式,修改后按 ESC键 退出编辑模式,然后输入 :wq 保存并退出,输入 :q! 可以不保存强制退出。
- vi config.json
- # sed 直接替换修改
- sed -i 's/127.0.0.1/0.0.0.0/g' config.json
搭建SNI代理教程:一个 反代无需证书 适用于DNS/Hosts的小工具 —— SNI Proxy代理 安装教程
hosts配置文件(去广告)
以下是dowsDNS的默认hosts配置文件,可以根据需求来修改/添加 hosts的地址,如果不懂请不要修改!
新版本中作者因为一些原因删除了屏蔽广告的hosts在线文件,所以失去了广告屏蔽功能,如果你想要这个功能,那么手动添加上即可。
- vi hosts_repository_config.json
打开文件后,按 I键
进入编辑模式,添加下面的代码到文件中,添加位置看下面示例,添加后按 ESC键
退出编辑模式,然后输入 :wq
保存并退出。
- "adaway":"https://raw.githubusercontent.com/aoccin/adaway/master/hosts"
- # 把这行代码添加到文件内
示例配置文件(注意逗号):
- {
- "hosts":{
- "racaljk":"https://coding.net/u/scaffrey/p/hosts/git/raw/master/hosts",
- "adaway":"https://raw.githubusercontent.com/aoccin/adaway/master/hosts" # 这个是去广告用的
- #"xxx":"https://xxx.xxx/hosts" # 添加格式就是这样,需要注意的是 JSON格式最后一行不要逗号,注意上面三个默认配置的逗号。
- },
- "wrcd":"https://raw.githubusercontent.com/liuyunbin/dowsDNS/master/data/wrcd.json"
- }
自定义泛域名解析
当你想要对一些子域名/泛域名解析指定IP的时候,你可以修改 ~/dowsDNS/data/wrcd.json
文件
- cd ..
- # 返回上一级目录
- cd data
- # 重新进入 data目录
打开后会看到大概如下(可能会变动)格式:
- {
- "gvt0.com":"219.76.4.4",
- "*.gvt0.com":"219.76.4.4",
- "gvt1.com":"219.76.4.4",
- "*.gvt1.com":"219.76.4.4",
- "gvt2.com":"219.76.4.4",
- "*.gvt2.com":"219.76.4.4",
- "gvt3.com":"219.76.4.4",
- "*.gvt3.com":"219.76.4.4",
- "youtube.com":"219.76.4.4",
- "*.youtube.com":"219.76.4.4",
- "ytimg.com":"219.76.4.4",
- "*.ytimg.com":"219.76.4.4",
- "youtu.be":"219.76.4.4",
- "*.youtu.be":"219.76.4.4",
- "googlevideo.com":"219.76.4.4",
- "*.googlevideo.com":"219.76.4.4",
- "ggpht.com":"219.76.4.4",
- "*.ggpht.com":"219.76.4.4"
- }
假如你要给基于谷歌域名 google.com
的所有二级域名做泛域名解析,那么直接这样写:
这代表, www.google.com xxx.google.com 233.google.com
等任何基于 google.com
的域名都是解析为 1.1.1.1
这个IP。
注意:JSON格式的文件,最后一行不能有 , 逗号,注意看上面文件的 逗号格式!格式错误会导致无法启动。
- "*.google.com":"1.1.1.1",
但是上面的那个智能解析 xxx.google.com 这样的二级域名,不包括 顶级域名本身 google.com ,所以你可能需要把这个也给加上,同样这也是子域名的添加方法。
- "google.com":"1.1.1.1",
使用说明
- # 首先我们进入 dowsDNS的目录
- cd /root/dowsDNS
- # 调试运行
- python start.py
- # 调试运行是前台运行,关闭SSH后就会断开,要后台运行请看下面的命令。调试运行按 Ctrl+C键 退出。
- # 带日志运行
- nohup python start.py > /tmp/dns.log 2>&1 &
- # 当DNS请求很多的时候,日志就会很大,所以建议调试的时候用日志看看即可,平时建议不带日志运行!
- # 不带日志运行
- nohup python start.py > /dev/null 2>&1 &
- # 停止 dowsDNS
- kill -9 $(ps -ef|grep "python start.py"|grep -v grep|awk '{print $2}')
- # 查看日志(如果带日志运行)
- tail -f /tmp/dns.log
日志基本长这样:
- INFO:root:Query: www.google-analytics.com.
- INFO:root:Query: clients5.google.com.
- INFO:root:Revise: clients5.google.com.
- INFO:root:Query: lh3.googleusercontent.com.
- INFO:root:Revise: lh3.googleusercontent.com.
- INFO:root:Query: apis.google.com.
- INFO:root:Revise: apis.google.com.
- INFO:root:Query: notifications.google.com.
- INFO:root:Revise: notifications.google.com.
其他说明
dowsDNS还是很稚嫩的,处于开发初期,在DNS服务方面可能比不上目前主流几个DNS服务软件,不过配置简单也是优势之一,期待以后会更好!
运行无报错,但DNS解析没反应
这个可能是防火墙的问题,因为DNS是UDP传输的,所以只需要开放UDP即可。
- iptables -I INPUT -m state --state NEW -m tcp -p udp --dport 本地监听DNS端口 -j ACCEPT
- # 删除防火墙规则,内容一样把 -I 换成 -D 就行了:
- iptables -D INPUT -m state --state NEW -m tcp -p udp --dport 本地监听DNS端口 -j ACCEPT
提示 wget: command not found 的错误
这是你的系统精简的太干净了,wget都没有安装,所以需要安装wget。
- # CentOS系统:
- yum install -y wget
- # Debian/Ubuntu系统:
- apt-get install -y wget
升级 dowsDNS
- cd /root/dowsDNS
- # 进入dowsDNS目录(如果安装目录不一样请自行替换)
- python update.py
转载请超链接注明:逗比根据地 » Linux 使用 dowsDNS 快速自建DNS服务器以 科学上网+屏蔽广告
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!