ChinaDNS解决DNS污染与在Linux上使用SS客户端的实践
墙里,那是一片和悦的地方。不管墙外如何地风吹雨打,雷电交加,墙里总是风和日丽。
综述
本篇的核心内容搬运自 隔壁大佬的chinaDNS折腾系列
可以说是看了大佬笔记然后去实践的个人总结,就是所谓的三手资料,如果发现不好懂,建议点上面的连接。
主要内容包括:
- 在Linux下搭建chinaDNS,然后以chinaDNS作为上层DNS来配置 DNSMasq
- 在Linux 命令行下使用Shadowsocks客户端使用PAC模式上网。
- 其它杂项,多为自身实践遇到的问题,趁着还没忘。
笔记主要基于windows 的linux子系统,不过也会提一下centOS7下的一些配置。
前言
第一次接触我们伟大长城是初二第一次去北京旅游回家后找盗版游戏的时候。至今记得随便下了个自由门就能随意的上网让年幼的我觉得不过如此。
然而次年在某地遇到了少有的大规模区域性局域网实验让我对它之伟大认知的深入骨髓....
你的墙可以高,可以厚,但不能封闭。
那次实验从七月持续到次年七月,期间别说什么狗狗,油土鳖,就是优酷,百度你也是上不去的。只有几个区域性门户比如某某地网通营业厅所附带的新闻主页,或者地区性政府网可以访问,不可谓不高,不可谓不厚。放到现如今似乎有些不可想象,然而这的确就发生在差不多十年前。
然而世界毕竟是互联的,纵然没有外界的连接,局域网内还是相对自由的,你只要在那个范围内你开个FTP或者建个HTTP服务墙内同胞还是能连接的。我估计那是目前稳定存在时间最长的局域网环境了,毕竟覆盖面积接近166.49万平方公里。然而世事无绝对,那段时间我接触了很多网络,以及ACG相关的更广阔的知识,比如怎么搭个FTP..路由器的端口映射,以及为什么FTP服务器非常讨厌迅雷,PT下载站也不欢迎迅雷的原因之类的。
同时看着..先进青年们把“不要低估一辆装满硬盘在高速公路上飞驰的小货车的带宽“得低配版付诸实践..背着硬盘去放假返乡的大学生家拷资源,再挂在自家的FTP,别人搭的PT服务器上..或者接待网友来拷资源..
整体来看其实那一年过的也蛮开心得,除了养成了下载强迫症,变得更宅了以外学到了不少受用得知识和方法论。
我无意讨论现在我们是不是在另一个非常非常大得局域网里,纵使现在那个地区还有很多比如百度网盘一类得网站无法直接访问我也觉得可以接受得,毕竟不是没有办法访问,只是不能直接访问罢了,比起完全没有办法访问还是强太多了。
触景生情废话稍微有些多了,闲言少叙,下面让我们来看看怎么在自己家win10子系统得Linux上搭一个chinaDNS来解决DNS污染问题。
Windows 下本机无污染DNS搭建方案
关于DNS污染,假如曾经你遇到过无论什么地方只要有网页信息它都能给你弹个窗出来,这不一定是中病毒,而有可能是你所处的地区的DNS被污染,植入了广告弹窗,如果只是做个广告弹窗那还是比较温柔的,其它危害还有很多在此不一一细表。GFW最基本的行事方式也是DNS污染,比如你请求一个网站在到达目标主机前它先给你拦截反给你个错误地址,你不就上不去了,一些不大重要的网站都只是DNS污染一些就完事了比如P站比如STEAM社区。这种情况就可以通过搭建无污染的DNS来访问,当然日后GFW拦截等级上升了你该上不去还是上不去。
首先你需要确认你得win10是1607版本以后得,虽然在印度人win10总是在你不知道得时候偷偷得升级的策略来看。基本不用操心这个..
然后:win10开启子系统我就稍微提一下吧..搞不明白就去百度,我就不重复得贴图说那么细了。
- Win10 系统设置(开始菜单得齿轮)->更新与安全->开发者选项->勾选“开发人员模式”
- 控制面板->程序和功能->启用或关闭 Windows 功能->勾选“适用于 Linux 的 Windows 子系统”->确定,然后等操作完成以后重启
- 打开 Win10 应用商店,右上角搜索“Linux”
虽然没几个选择,但你还是可以选一个你喜欢得。这里我选择了Debian
安装后打开系统,输入用户名可以直接使用root,不过需要注意,Debian使用SSH默认是不能登陆root用户的。
进入系统后第一件事更新软件源。对新人的话nano可能比较友好。ctrl+x退出,Y保存。其它操作可以查看帮助文档
nano /etc/apt/sources.list
# 将内容改成如下所示:这是阿里云的镜像
deb http://mirrors.aliyun.com/debian/ stretch main
deb http://mirrors.aliyun.com/debian/ stretch-updates main
deb http://mirrors.aliyun.com/debian-security/ stretch/updates main
# 保存后 更新软件源
apt-get update
apt-get upgrade -y
# 然后安装一下接下来要用到的包
apt-get install -y make gcc curl
前期准备结束,假如是直接在Linux系统上直接从安装依赖包开始就可以了...比如centOS只要吧apt-get 换成yum就好。
部署ChinaDNS
下载ChinaDNS源码解压编译
cd /root wget --no-check-certificate https://github.com/shadowsocks/ChinaDNS/releases/download/1.3.2/chinadns-1.3.2.tar.gz tar -zxvf chinadns-1.3.2.tar.gz mv chinadns-1.3.2 chinadns cd chinadns ./configure && make
更新chrouter和污染ip列表
# In /root/chinadns curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute.txt rm -f iplist.txt && wget --no-check-certificate https://raw.githubusercontent.com/YKilin/ChinaDNS/master/iplist.txt
配置supervisor进程守护
# 安装 supervisor apt-get install -y supervisor # 写入配置(8053是ChinaDNS监听端口,你可以修改成其他的,但是请注意端口冲突问题以及后续DNSMasq配置的同步修改) echo "[program:chinadns] command = /root/chinadns/src/chinadns -p 8053 -m -l /root/chinadns/iplist.txt -c /root/chinadns/chnroute.txt -s 114.114.114.114,208.67.222.222:443 user = root autostart = true autorestart = true" > /etc/supervisor/conf.d/chinadns.conf
启动supervisor服务
service supervisor start # 然后检查下 ChinaDNS 是否有正常运行 supervisorctl status
部署DNSMasq
# 安装 DNSMasq
apt-get install -y dnsmasq
# 写入配置(使用ChinaDNS做上游DNS)
echo "port=53
no-resolv
no-poll
server=127.0.0.1#8053" > /etc/dnsmasq.conf
编辑DNSMasq服务
nano /etc/init.d/dnsmasq
找到start()函数,修改为如图所示
启动 DNSMasq 服务
service dnsmasq start
修改系统DNS为本机
去网络设置里将IPV4 DNS 改为127.0.0.1
然后,去浏览器试试p站能不能上,就能得出结果。
开机自启
子系统得话没有rc.loacl所以,只能曲线救国。去新建个文件比如:nano /root/.root.sh写入
#!/bin/sh
service supervisor start
service dnsmasq start
在windows里打开“启动文件夹”: C:\Users\你的用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
根据情况中间可能有几个是中文。
新建个文本文件起名linux.vbs,写入
CreateObject("Wscript.Shell").run "bash ~/.boot.sh",vbhide
大概就是开机启个bash去执行前面保存在root里得那段脚本。
centerOS或者别的有rc.local的标准Linux系统的话。
在rc.local中exit 0 之前添加
service supervisor start
service dnsmasq start
就可以开机启动了。
Linux下使用Shadowsocks并配合privoxy来实现PAC模式的方案
在网上搜Linux使用Shadowsocks大都是服务的搭建,或者是基于privoxy的全局代理模式。总之先从安装说起。
shadowsocks服务的安装:
npm install shadowsocks -g
node版的shadowsocks,功能及配置和python版的一么一样,所以..我就懒得去折腾pip了直接Npm安装就好。
配置:
找到Npm全局包的安装路径,通常是node安装目录下的Lib/node_modules下。
我在树莓派里装的是/usr/local/lib/node_modules不记得是不是自己设的了
然后进入shadowsocks文件夹编辑config.json
{
"server":"", # 远程服务器地址
"server_port":, #远程服务器端口
"local_address":"", #本地地址 比如内网ip或者127.0.0.1
"local_port":1080, #本地端口
"password":"", #连接代理服务的密码
"timeout":600,
"method":"aes-256-cfb" #加密方式
}
然后
sslocal start
本地1080端口就起来了一个socket5 代理,值得一提的是ssserver start可以起一个ss服务...配置项依旧和上面差不多。
问题是socket5代理,Linux似乎不能直接使用这个时候就需要privoxy了。
首先安装:
apt-get install privoxy
然后是配置:
privoxy的配置文件在/etc/privoxy/下
首先新建一个PAC文件
nano pac.action
#输入
{+forward-override{forward-socks5 127.0.0.1:1080 .}}
.gimpshop.com
.directcreative.com
.speedpluss.org
.mingpaovan.com
.wikinews.org
.joachims.org
.maiio.net
.idv.tw
.mail-archive.com
.surfeasy.com.au
.stonegames.net
.hihistory.net
.alexlur.org
.finalion.jp
.nrk.no
.laogai.org
.cmule.com
.gappp.org
......
# 总之就是各种被墙的地址
# 可以只输几个比如狗狗,或者油土鳖之类的
# 也可以去https://github.com/snachx/gfwlist2privoxy这里获取生成gfwlist的方法。
# 项目里示例的列表是14年生成的..我也用的这个..
然后编辑config
# 在底部引入pac
actionsfile pac.action
# 需要注意的选项listen-address
listen-address 0.0.0.0:8118
# 默认socket5 监听1080端口要改的话 有这么一个选项,把注释去掉然后修改就行了。
forward-socks5t / 127.0.0.1:1080 .
# 这样你在局域网任何一台机子上都能访问这个http代理
# 不设置的话默认值是127.0.0.1:8118只允许本机访问
之后启动
# 可以直接键入 privoxy
privoxy
# 通过
systemctl status privoxy
# 查看状态,当然
systemctl start privoxy # 启动
systemctl stop privoxy # 停止
linux配置代理设置
linux处理全局变量的文件在是/etc/profile 在底部加入
proxy="http://127.0.0.1:8118"
export http_proxy=$proxy
export https_proxy=$proxy
export no_proxy="localhost, 127.0.0.1, ::1"
# 保存退出
source /etc/profile
出来可以wget www.google.com 看效果。
成功的话可以获得一个Index.html
结语
至此,我们搭建了一个无污染的DNS同时有了一个可以访问外网的梯子,当然,你需要在外网有一个跑着SS服务服务器,这就不在我们的讨论范围内了。在我找到便宜的(一个月10块以内)的SS服务前我尝试过各种免费的解决方案,或者免费的试用的SS服务,比如筑波大学那个项目,比如某些博客,随着定向干扰的升级,筑波大学那个项目基本没法用了,在某地区更是完全连不上,免费的SS服务突出一个不稳定,到后来收费的都说没就没了,更惶恐免费的。
不过,我对于这个的需求倒也不是非常的迫切,有就用,没有就凑合着用,这么多年也过来了..在一些特定地区的时候甚至在国内的云服务供应商上搭SS来实现上百度云的目的...
现在..一个地址在民主灯塔的云服务器,一年也不到200..拿来干这个已然足够。
其实我本想把让路由器走这个代理,奈何我买的路由器用的routerOS..完全没有网络基础知识的我着实玩不转,感觉就是用Nat包转发一下的事情..但就是作不来..
其它什么基于路由得web本地缓存服务一类的更是搞不起来..无奈之下只能在树莓派上搭ss代理转成http的..让linux用..对于PC也就是可以少开个客户端程度的方便。
之后如果有条件也许可以考虑组个ITX的迷你台式,多加一块网卡,放到路由器的上层来做代理..也算是曲线救国..虽然,这解决方案蛮傻的吧...
但真用起来,X86上啥没有,功能肯定是全的很。
端午就干这个了,虽然没什么新内容但也算满足,至此暂时可以搁下键盘了。