记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

Linux 自建DNS 并使用SNI Proxy实现科学上网

Linux 自建DNS 并使用SNI Proxy实现科学上网

DNSmasq是一款小巧且方便地用于配置DNS服务和DHCP服务器的工具,适用于小型网络,它提供了DNS解析功能和可选择的DHCP功能,并且提供本地缓存查询请求的功能。同时搭配 SNI Proxy代理的话,可以实现只使用DNS就能科学上网!

安装步骤

包管理器 安装

  1. # CentOS 系统:
  2. yum update
  3. yum install -y dnsmasq
  4.  
  5. # Debian/Ubuntu 系统:
  6. apt-get update
  7. apt-get install -y dnsmasq

 


包管理器 安装后,查看下DNSmasq的版本:

  1. dnsmasq -v
  2. # 以下是输出结果,只要不是提示 找不到命令就没事( -bash: dnsmasq: command not found )
  3. Dnsmasq version x.xx Copyright (c) 2000-2012 Simon Kelley
  4. Compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack
  5.  
  6. This software comes with ABSOLUTELY NO WARRANTY.
  7. Dnsmasq is free software, and you are welcome to redistribute it
  8. under the terms of the GNU General Public License, version 2 or 3.

配置文件

Dnsmasq的配置文件为:dnsmasq.conf

包管理器 方式安装的配置文件位置为:/etc/dnsmasq.conf

本教程只介绍配置DNS服务,以下部分只指出DNS服务的相关配置。

首先复制一份配置文件的备份,然后清空原配置文件,并根据下面的参数说明写入配置内容:

  1. cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
  2. echo "" > /etc/dnsmasq.conf
  3. # 打开配置文件并根据下面的参数说明写入配置内容,按 I键 进入编辑模式,改完后按 ESC键 退出并输入 :wq 保存并退出。
  4. vi /etc/dnsmasq.conf

配置文件参数说明:

  1. port=53
  2. # 指定DNSmasq的监听端口,默认为53端口,也可设置为5353端口从而防止53端口DNS污染(但某些设备如win并不支持非53端口)
  3.  
  4. resolv-file=/xxx/xx.conf
  5.  # 指定DNSmasq获取上游DNS服务器地址的文件,不配置此项则默认从 /etc/resolv.conf(linux默认DNS配置文件) 获取
  6.  
  7. strict-order
  8. # 严格按照 resolv-file 参数指定的文件中按从上到下的顺序发送DNS解析请求,直至获取解析应答成功为止
  9.  
  10. listen-address=
  11. # 指定DNSmasq监听的地址,若仅提供为本机使用可设置为 127.0.0.1 ,留空或设置为 0.0.0.0 即任何人都可访问
  12.  
  13. address=/xxx.xx/x.x.x.x
  14. # 自定义某些地址的解析服务器,可以 过滤或者指定 某些网站(支持ipv6,直接写ipv6的地址即可)
  15. # 过滤广告或者某域名,例如配置 address=/www.nanqinlang.com/127.0.0.1
  16. # 把广告域名解析请求发送到错误的解析服务器IP 127.0.0.1 即可屏蔽该域名的访问
  17. # 也可以把 www.google.com 等指向一个国外的SNI代理IP,即可实现DNS科学上网
  18.  
  19. server=208.67.222.222#5353
  20. # 指定上游DNS解析服务器,此处推荐设置为可使用5353端口的opendns
  21.  
  22. bogus-nxdomain=208.67.222.222
  23. # 用于防止DNS污染/劫持,参数和上面 server 项填写相同的 ip ,但不支持非53端口。
  24.  
  25. conf-dir=/etc/dnsmasq.d/
  26. # 加载 /etc/dnsmasq.d/ 文件夹内的配置文件

配置文件示例:

点击展开 查看示例

 

  1. port=53
  2. strict-order
  3. listen-address=127.0.0.1
  4. server=208.67.222.222#53
  5. bogus-nxdomain=208.67.222.222
  6. conf-dir=/etc/dnsmasq.d/

 

自定义地址解析 单独建立一个配置文件:

  1. vi /etc/dnsmasq.d/sni.conf

然后按格式写入自定义地址解析,示例如下:

这里可以配合我的另一个教程:一个 反代无需证书 适用于DNS/Hosts的小工具 —— SNI Proxy代理 安装教程

把谷歌等域名的解析IP指定为 SNI Proxy代理的IP,当你使用这个DNS时,就会通过解析为SNI代理 IP,然后通过SNI代理访问谷歌,这就是使用自建DNS实现科学上网(和Hosts方式原理是一样的,不过一个在云服务器上,一个在本地)。

注意:这里都是默认泛域名,比如 /google.com/1.1.1.1 代表 google.com, www.google.com, api.google.com 等域名全部解析为 1.1.1.1 

  1. address=/google.com/1.1.1.1
  2. address=/google.com.hk/1.1.1.1
  3. address=/google.co.jp/1.1.1.1
  4. address=/gmail.com/1.1.1.1
  5. address=/youtube.com/1.1.1.1
注意:如果 这个文件或配置文件 修改了,那么需要重启 DNSmasq后才能生效。

使用说明

启用DNSmasq服务

  1. service dnsmasq start

停止DNSmasq服务

  1. service dnsmasq stop

重启DNSmasq服务(当修改配置文件后,需要重启)

  1. service dnsmasq restart

卸载 DNSmasq

如果 /etc/dnsmasq.d 目录有文件,那么需要先删除这个目录才能正常卸载:

  1. # 先删除这个目录
  2. rm -rf /etc/dnsmasq.d
  3.  
  4. # CentOS 系统
  5. yum remove dnsmasq -y
  6.  
  7. # Debian/Ubuntu 系统:
  8. apt-get remove --purge dnsmasq -y

在PC/路由器/移动设备中设置DNS为你的VPS IP,端口设置53(如有) 即可。

 

 

一个 反代无需证书 适用于DNS/Hosts的小工具 —— SNI Proxy代理 安装教程

现在有很多可以 科学上网的DNS和Hosts,那么他们是如何实现的呢?一些人可能觉得是,找到谷歌等网站没有被墙的IP,但是实际上经过几年的封杀,谷歌等网站的可用IP现在非常有限,通过这种方式效率低而且麻烦。

所以那些可以 科学上网的DNS和hosts,都是使用的自建或者公共SNI代理。

原理简单说明

SNI详细的我也不懂,假如你有一台 海外的服务器 IP为: 233.233.233.233 ,上面搭建了 SNI Proxy,并且配置正常并启动。

然后你本地Hosts文件在最后添加一条:

  1. 233.233.233.233 www.google.com

保存Hosts文件并打开浏览器访问 https://www.google.com ,然后你就会发现你可以进入 https://www.google.com 网站了。

原理解析:

  1. Hosts设置 233.233.233.233 www.google.com 后,浏览器访问 https://www.google.com 
  2. =>> 浏览器搜索Hosts文件发现设置的解析IP(233.233.233.233)
  3. =>> 浏览器访问 SNI Proxy(233.233.233.233)
  4. =>> SNI Proxy收到信息然后去访问 https://www.google.com 并获取网站数据,然后把网站数据原封不动的返回给你
  5. =>> 浏览器收到 SNI Proxy返回的 网站数据并显示出来
  6. =>> 你看到了 https://www.google.com 网页

简单的来说,SNI Proxy 会把请求的网站比如 https://www.google.com 获取并原封不动的返回请求者,不需要对证书进行解密和加密,所以不需要配置证书。

SNI Proxy 可以简单的实现这样的 反向代理功能。

安装环境

Ubuntu 14.04 +

目前只有 Ubuntu 系统最容易安装,其他系统,折腾半天也没搞好,就算了。

安装步骤

  1. apt-get install python-software-properties -y
  2. add-apt-repository ppa:dlundquist/sniproxy

第二行代码执行后提示大概如下:

  1. root@ubuntu:~# add-apt-repository ppa:dlundquist/sniproxy
  2.  
  3. More info: https://launchpad.net/~dlundquist/+archive/ubuntu/sniproxy
  4. Press [ENTER] to continue or ctrl-c to cancel adding it
  5.  
  6. gpg: keyring `/tmp/tmpnr3gi1cx/secring.gpg' created
  7. gpg: keyring `/tmp/tmpnr3gi1cx/pubring.gpg' created
  8. gpg: requesting key ED122FA0 from hkp server keyserver.ubuntu.com
  9. gpg: /tmp/tmpnr3gi1cx/trustdb.gpg: trustdb created
  10. gpg: key ED122FA0: public key "Launchpad PPA for Dustin Lundquist" imported
  11. gpg: Total number processed: 1
  12. gpg: imported: 1 (RSA: 1)
  13. OK

继续安装

  1. apt-get update && apt-get install sniproxy -y

配置说明

SNI Proxy的默认配置文件:/etc/sniproxy.conf

vim的具体使用教程:Linux中VIM编辑器的真 · 简单使用教程

打开默认配置文件 vi /etc/sniproxy.conf ,然后直接输入 dddG 清空里面的内容,然后按 I 键 进入编辑模式,复制下面的内容到配置文件中,然后按 Esc 键 推出编辑模式,然后输入 :wq 保存并退出vi。

泛反向代理:

泛反向代理,指的是所有请求 SNI Proxy 的域名都会反向代理。

  1. user daemon
  2. pidfile /var/run/sniproxy.pid
  3.  
  4. listen 443 {
  5. proto tls
  6. table https_hosts
  7. access_log {
  8. filename /var/log/sniproxy/https_access.log
  9. priority notice
  10. }
  11. }
  12.  
  13. table https_hosts {
  14. .* *:443
  15. }

自定义反向代理:

自定义反向代理,指的是自己指定域名,只有通过这些域名请求 SNI Proxy 的才会反向代理。

比如只设置了 (.*.|)google.com$ * ,那么你只能通过www.google.com、google.com 和其他以 google.com 为主的二级 三级域名 访问SNI Proxy并请求反向代理。其他没有设置的域名都会忽略。

最后的 table xmpp_imap_smtp {} 设置,指的是发邮件用的,不过我不建议设置这个,避免被恶意滥发垃圾邮件,不需要的可以删掉。

要反向代理什么域名就在 table https_hosts {} 中添加规则,例如 我要反向代理任何以 google.com 为主的二级 三级域名 ,那么就写:

  1. (.*.|)google.com$ *

这样只要是以 google.com 为主的域名都会被反向代理,比如www.google.com news.google.com mail.google.com 都会反向代理。

  1. user daemon
  2. pidfile /var/run/sniproxy.pid
  3.  
  4. listen 443 {
  5. proto tls
  6. table https_hosts
  7. access_log {
  8. filename /var/log/sniproxy/https_access.log
  9. priority notice
  10. }
  11. }
  12.  
  13. table https_hosts {
  14. .* *:443
  15. }
  16.  
  17. table https_hosts {
  18. (.*.|)google.com$ *
  19. (.*.|)google.com.hk$ *
  20. (.*.|)googlemail.com$ *
  21. (.*.|)googlecode.com$ *
  22. (.*.|)blogspot.com$ *
  23. (.*.|)gmail.com$ *
  24. }
  25.  
  26. table xmpp_imap_smtp {
  27. (.*.|)google.com$ *
  28. (.*.|)googlemail.com$ *
  29. (.*.|)gmail.com$ *
  30. }

使用说明

使用命令

  1. sniproxy
  2. # 启动SNI Proxy
  3.  
  4. service sniproxy stop
  5. # 停止SNI Proxy

启动SNI Proxy后,查看一下 网络连接端口监听情况:

  1. netstat -lntp

当出现大概如下所示的信息时,代表正常启动并监听端口443,注意最后的sniproxy。

  1. root@ubuntu:~# netstat -lntp
  2. Active Internet connections (only servers)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  4. tcp6 0 0 :::443 :::* LISTEN 11673/sniproxy

如果没有发现 sniproxy 的监听端口信息,那么看一下是否有其他的 软件/服务 占用了 443 端口,如果有的话请关闭后再尝试启动 SNI Proxy。

如果没有异常情况,那么我们就可以使用 SNI Proxy 代理了。

Hosts

找到你电脑的Hosts文件,并打开(注意Hosts可能是隐藏文件,需要设置显示出来,还有win10修改Hosts文件需要管理员权限)。

Windows xp / 7 / 10 系统Hosts位置:C:\windows\system32\drivers\etc\hosts

在最后一行添加你要反向代理的网站,比如 www.google.com

  1. 233.233.233.233 www.google.com

其他想要反向代理的域名按这个格式添加(233.233.233.233是你的SNI Proxy服务器IP),当然Hosts设置比较麻烦,而且比如 youtube.com 看视频的话要设置很多 Hosts域名,很麻烦,所以如果只是访问谷歌,那么可以使用这个Hosts方法。

DNS

如果你有一台国内服务器的话,你可以搭建一个DNS服务器,然后把谷歌等域名的解析IP都指向你的SNI Proxy服务器,然后当你使用这个DNS的时候,就会解析到SNI Proxy服务器并反向代理去访问谷歌等网站。

我现在没有国内服务器,暂时没有写DNS服务器的教程,不过这里我可以提供几个可以科学上网的DNS。

Xsico DNS

官方网站 – 科学上网

Public Dns:115.159.157.26

Scholar Dns:115.159.158.38

Mogu DNS

官方网站 – 科学上网+广告过滤

北方推荐:122.114.245.45

南方推荐:115.159.96.69

Pure DNS

官方网站 – 科学上网+广告过滤

北方推荐:123.207.137.88

南方推荐:115.159.220.214

GoGo

GoGo新版本也是支持 SNI Proxy 代理的,所以可以添加自己的 SNI Proxy 代理来使用。

GoGo添加SNI Proxy代理很简单,首先进入管理面板-代理列表http://127.0.0.1:9092/proxies

然后点击右上角的 添加SNI代理 按钮,然后出现下图,按下图格式添加,比如你的SNI Proxy代理服务器IP为233.233.233.233 ,那么就填写 233.233.233.233:443 ,然后点击下面的  确认添加 按钮就行了。

添加完毕后,你可以在 代理列表的筛选中,选择 SNI代理 – 启用 ,然后点击 查看 按钮,筛选出刚才SNI代理。

然后找到我们刚才添加的 SNI代理,并设置 优先(否则可能不会使用这个代理)。

这就算添加完毕了,GoGo客户端使用教程:一个免费且快速的HTTP/SOCKS5代理软件 —— GoGotunnel

dowsDNS

作者说可以添加SNI Proxy代理,但是我不知道在哪里添加,我问问后再补充。

 

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):