逗比云旧域名 [softs.loan] 被墙,已更换新域名为:[softs.wtf],旧域名在海外依然可用。
投稿文章 | 广告合作 | Telegram 群组 / 公告频道 / 使用教程
广告

Linux 使用 dowsDNS 快速自建DNS服务器以 科学上网+屏蔽广告

Linux教程 Toyo 8评论
广告
本文最后更新于 2017年5月14日 23:25 可能会因为没有更新而失效。如已失效或需要修正,请留言!

这几天实在不知道写什么教程,于是想啊想,突然想起来 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服务器以 科学上网+屏蔽广告
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!

赞 (26)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(8)个小伙伴在吐槽
  1. 为什们脚本执行到最后一步那个压缩文件总是下载失败?
    kingwong2018-04-08 09:56 回复
    • 贴出完整错误信息。
      Toyo2018-04-08 14:40 回复
  2. 我如果用vw虚拟机的linux 搭建个这个然后弄到本机可以用吗??
    akers2018-01-27 23:54 回复
    • 理论是可以的,但是我没试过。
      Toyo2018-01-28 15:07 回复
  3. 项目更新了,支持edns-client-subnet了
    downature2017-05-14 18:13 回复
  4. 拿 Openwrt的路由器 当作 国内的VPS 不知可行不可行
    lantudai2017-05-04 23:03 回复
    • 路由器可以,树莓派应该也行。
      Toyo2017-05-04 23:47 回复
  5. 再要不就是太复杂,比如unbound/pnsnd/dnscrypt. 想折腾unbound的话可以参考这个 https://www.nanqinlang.com/unbound.html pnsnd因为不更新了,我是没动力再入手了. 至于dnscrypt,加密传输还是挺实用,但是容易炸,之后可能会写帖子也可能不会写.
    南琴浪2017-04-23 15:27 回复