lala.im:使用Pi-hole自建带广告过滤功能的DNS服务器并应用到SS/SSR服务端

運維技術·lala.im · 2017-12-04 · 131 人浏览

原文地址:https://lala.im/1854.html,請支持原作者!該處僅作轉載。

Pi-hole是一个可以用来简单搭建DNS服务器并通过WEB面板管理各项功能的开源软件。使用Pi-hole自建DNS服务器主要有以下好处:
1、屏蔽互联网上绝大多数的烦人广告、弹窗等等。
2、有效防止DNS劫持,自建的就是安心~
3、自定义屏蔽或是放行某个域名,用处你懂的~
4、记录访客的DNS解析信息,用户在什么时间访问了哪些网站,你都可以一览无余的查看到。
今天LALA写一下将Pi-hole应用到SS/SSR服务端的方法,一旦搭建成功,你的机场用户在使用你的SS节点访问网站的时候,可以明显的感觉到整个互联网上干净了许多~
如果你仅仅只是想个人使用Pi-hole的DNS或是个人SS想过滤广告,也可以参照本文章进行搭建哦。
话不多说,进入正题~
首先准备一台VPS,系统选择CentOS7,注意,一定要是7。使用Xshell以root用户的身份登录到机器内,接着进行一些搭建前的准备工作:

ifconfig

查看当前服务器的网卡信息,如果是GCE、阿里云这类内网IP的机器,你可以直接放弃,因为这些机器不能正常使用Pi-hole。一定要确保inet后面的IP地址是公网IP。

範例
更新系统软件:

yum update

接着查看SELinux的运行状态:

getenforce

或者直接vi编辑:

vi /etc/selinux/config

可以看到我们这台机器的SELinux是开启的:

範例
一定要确保SELinux是关闭状态,关闭方法:

vi /etc/selinux/config

将:

SELINUX=enforcing

改为:

SELINUX=disabled

如图所示:

範例
退出vi并保存然后重启服务器:

:wq
reboot

重新使用Xshell登录到你的机器内开始安装Pi-hole:

curl -sSL https://install.pi-hole.net | bash

Pi-hole的安装就只需要这一个命令,如果你已经做了我上面所说的这些准备工作后,依旧安装失败,或是安装出现一些莫名其妙的问题,请直接放弃。换台VPS重新来过吧。。。这个Pi-hole虽然安装过程简单,但是实际上这个软件对系统非常挑剔,经常各种毛病不断,我都是换了3个系统才安装成功的,所以这里我也懒得去解决那些不成功的安装过程中出现的各种奇葩问题了。。。
看到如图界面,恭喜你闯过了第一个难关,这是Pi-hole的图形化安装界面:

範例
OK下一步,可以看到软件作者正在请求你向他捐赠一些Money:

範例
以后再说吧,觉得好用并且有闲钱的大佬们可以捐赠一下,LALA这里就继续回车下一步了:

範例
告诉你这个Pi-hole需要静态IP地址才能正常安装,一般VPS都是静态IP,如果你无法进入到接下来的安装界面就说明VPS不支持,请果断放弃。

範例
这是让你选择一个上游DNS服务商,这里我们直接选择Google的DNS不做更改,所以还是直接回车下一步:

範例
这是让你选择Pi-hole在安装完成后提供的服务是基于ipv4还是v6的,如果你的VPS有ipv6就可以双选,没有的话就选择一个ipv4即可。
注:键盘上下键是移动,空格是选择或取消,回车是确定。
继续下一步可以看到如图界面:

範例
这是提示让你确认一下接下来Pi-hole将以这个IP地址来安装DNS服务,并且在安装完成后,这个IP地址也就是你的DNS服务器地址。直接OK回车下一步:

範例
这是一个关于IP地址冲突的提示,无视就好,直接OK下一步:

範例
这里是让你选择是否安装WEB管理界面的地方,这里我们一定要选择On。OK下一步:

範例
问你是否需要开启DNS请求日志,这里我们也选择On,接下来稍等一会儿程序就开始自动安装了。在安装接近尾声的时候程序会提示你是否需要配置一个防火墙规则,这里我们要选择Yes:

範例
最后在安装成功后,程序会回显告知你的DNS服务器地址、WEB管理地址以及登录密码等等相关信息:

範例
现在我们就可以通过浏览器访问到WEB的管理界面了:

範例
输入密码登录:

範例
如果你觉得系统自动生成的密码不安全或是不好记忆,可以通过命令来修改:

pihole -a -p

那么至此,Pi-hole的安装就告一段落了,接着我们来让SSR服务端使用这个Pi-hole的DNS地址来解析网站域名。
首先是安装SSR后端,这些我想大家都是轻车熟路吧,就不多介绍了,直接执行一下下面的这些命令就好:

cd /root
yum -y groupinstall "Development Tools"
wget https://github.com/jedisct1/libsodium/releases/download/1.0.13/libsodium-1.0.13.tar.gz
tar xf libsodium-1.0.13.tar.gz && cd libsodium-1.0.13
./configure && make -j2 && make install
echo /usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig
cd /root
yum -y install python-setuptools
easy_install pip
git clone -b manyuser https://github.com/glzjin/shadowsocks.git
cd shadowsocks
pip install -r requirements.txt
cp apiconfig.py userapiconfig.py
cp config.json user-config.json

编辑配置文件:

vi userapiconfig.py

接着使用vi在当前目录中新建一个dns.conf:

vi dns.conf

将我们的Pi-hole的DNS地址填写到里面,退出vi并保存。
接着关闭CentOS7系统防火墙:

systemctl stop firewalld.service

最后运行SSR后端:

./run.sh

如果你是使用的SS而不是SSR,那么可以直接更改系统全局DNS来实现相同的效果:

vi /etc/resolv.conf

写入:

nameserver 8.8.8.8
nameserver 8.8.4.4

注:将8.8.8.8、8.8.4.4改为你的Pi-holeDNS地址。
现在我们可以连接这个SS节点来看看广告过滤是否有效果了。同时我们可以登录到Pi-hole的管理界面看到一些相关信息:

範例
一些屏蔽的广告域名和浏览域名按屏蔽次数和浏览次数进行的排名:

範例
点击左边栏的Query Log可以查看到更详细的实时解析记录:

範例
并且你可以直接在这里把这些域名添加到黑名单或是白名单中去。只需要点击右侧的Blacklist或是Whitelist即可。
当然我们也可以自己手动指定要屏蔽的域名:

範例
LALA建议这里直接用wildcard的方式来屏蔽。这种通配符屏蔽的方式更彻底,只需要屏蔽这个域名的顶级域名,而这个域名旗下的所有子域名都会被屏蔽。当然你也可以选择只屏蔽单个域名,即使用exact方式。
同理将某个域名加入白名单的方法也是如此:

範例
这里演示一下被我们屏蔽的域名,当通过浏览器访问的时候是提示这样的界面:

範例
点击Pi-hole左侧的Tools-Update Lists可以更新Pi-hole内置的广告过滤规则,达到一个最佳过滤效果:

範例
点击Pi-hole左侧的Settings,然后打开Block Lists可以添加或是删除广告过滤规则:

範例
Pi-hole长期运行会产生大量日志信息,定期登录后台进行日志清理是必要的步骤哦:

範例
我们再来加强一下Pi-hole的广告过滤功能,添加几个适合中国用户的广告过滤规则进去。
首先在root目录下新建一个sh脚本文件:

cd /root
vi adblock.sh

在这个文件内写入:

curl -s -L https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt https://easylist-downloads.adblockplus.org/malwaredomains_full.txt https://easylist-downloads.adblockplus.org/fanboy-social.txt > adblock.unsorted
sort -u adblock.unsorted | grep ^\|\|.*\^$ | grep -v \/ > adblock.sorted
sed 's/[\|^]//g' < adblock.sorted > adblock.hosts
rm adblock.unsorted adblock.sorted

保存然后运行:

bash adblock.sh

待脚本执行完毕后,我们可以查看一下adblock.hosts内的域名列表:

cat adblock.hosts

可以看到这些域名都是即将被我们屏蔽掉的:

範例
进入到Pi-hole的程序目录:

cd /etc/pihole/

编辑adlists.list

vi adlists.list

在这个文件的末尾加入一行:

file:///root/adblock.hosts

範例
退出并vi并保存,然后执行更新命令:

pihole -g

範例
至此,我们就将easylistchina+easylist、malwaredomains_full、fanboy-social这三个新的广告过滤规则添加到了Pi-hole中。
写在最后:
Pi-hole的安装其实很简单,但此软件非常挑剔系统环境,不一定每次都能安装成功。别在一根树上吊死,安装不成功果断换系统就是了。
本文参考文献:
http://www.hostloc.com/thread-411757-1-1.html
https://www.bilibili.com/video/av10290338/
感谢以上作者的无私奉献,没有他们的知识,我也写不出来这篇文章,另外我写本文章的目的只是自己练练手记录一下过程和方便自己以后可能会用到相关的东西,留一个可以按照我自己使用习惯来查漏补缺的地方,没有别的用意。

運維技術 lala.im
Theme Jasmine by Kent Liao