现在有很多可以 科学上网的DNS和Hosts,那么他们是如何实现的呢?一些人可能觉得是,找到谷歌等网站没有被墙的IP,但是实际上经过几年的封杀,谷歌等网站的可用IP现在非常有限,通过这种方式效率低而且麻烦。 所以那些可以 科学上网的DNS和hosts,都是使用的自建或者公共SNI代理。 原理简单说明 SNI详细的我也不懂,假如你有一台 海外的服务器 IP为: 233.233.233.233 ,上面搭建了 SNI Proxy,并且配置正常并启动。 然后你本地Hosts文件在最后添加一条: 233.233.233.233 www.google.com 保存Hosts文件并打开浏览器访问 https://www.google.com ,然后你就会发现你可以进入 https://www.google.com 网站了。 原理解析:Hosts设置 233.233.233.233 www.google.com 后,浏览器访问 https://www.google.com =>> 浏览器搜索Hosts文件发现设置的解析IP(233.233.233.233) =>> 浏览器访问 SNI Proxy(233.233.233.233) =>> SNI Proxy收到信息然后去访问 https://www.google.com 并获取网站数据,然后把网站数据原封不动的返回给你 =>> 浏览器收到 SNI Proxy返回的 网站数据并显示出来 =>> 你看到了 https://www.google.com 网页 简单的来说,SNI Proxy 会把请求的网站比如 https://www.google.com 获取并原封不动的返回请求者,不需要对证书进行解密和加密,所以不需要配置证书。 SNI Proxy 可以简单的实现这样的 反向代理功能。 安装环境 本教程只适用于 Ubuntu 14.04 + 以上版本的系统。 Debian 7 / 8 的安装方法请看这个:Debian 编译安装 SNI Proxy 反向代理教程(可用于Hosts/DNS服务器) 安装步骤apt-get install python-software-properties software-properties-common -yadd-apt-repository ppa:dlundquist/sniproxy 第二行代码执行后提示大概如下: [email protected]:~# add-apt-repository ppa:dlundquist/sniproxyMore info: https://launchpad.net/~dlundquist/+archive/ubuntu/sniproxyPress [ENTER] to continue or ctrl-c to cancel adding itgpg: keyring `/tmp/tmpnr3gi1cx/secring.gpg' createdgpg: keyring `/tmp/tmpnr3gi1cx/pubring.gpg' createdgpg: requesting key ED122FA0 from hkp server keyserver.ubuntu.comgpg: /tmp/tmpnr3gi1cx/trustdb.gpg: trustdb createdgpg: key ED122FA0: public key "Launchpad PPA for Dustin Lundquist" importedgpg: Total number processed: 1gpg: imported: 1 (RSA: 1)OK 继续安装 apt-get update && apt-get install sniproxy -y 配置说明 SNI Proxy的默认配置文件:/etc/sniproxy.conf vim的具体使用教程:Linux中VIM编辑器的真 · 简单使用教程 我们可以使用 VIM 等编辑器添加修改,也可以直接用 echo写入文件。 VIM操作简单说明(可选): echo "" > /etc/sniproxy.conf# 清空配置文件vi /etc/sniproxy.conf# 打开配置文件 然后按 I 键 进入编辑模式,复制下面的内容到配置文件中(手动把 echo -e "和 " > /etc/sniproxy.conf 去掉),然后按 Esc 键 推出编辑模式,然后输入 :wq 保存并退出vi。 下面是 echo 方式直接写入配置文件。 泛反向代理: 泛反向代理,指的是所有请求 SNI Proxy 的域名都会反向代理。 echo -e "user daemonpidfile /var/run/sniproxy.pidlisten 443 { proto tls table https_hosts access_log { filename /var/log/sniproxy/https_access.log priority notice }}table https_hosts { .* *:443}" > /etc/sniproxy.conf 自定义反向代理: 自定义反向代理,指的是自己指定域名,只有通过这些域名请求 SNI Proxy 的才会反向代理。 比如只设置了 (.*.|)google.com$ * ,那么你只能通过www.google.com、google.com 和其他以 google.com 为主的二级 三级域名 访问SNI Proxy并请求反向代理。其他没有设置的域名都会忽略。 要反向代理什么域名就在 table https_hosts {} 中添加规则,例如 我要反向代理任何以 google.com 为主的二级 三级域名 ,那么就写: (.*.|)google.com$ * 这样只要是以 google.com 为主的域名都会被反向代理,比如www.google.com news.google.com mail.google.com 都会反向代理。 echo -e "user daemonpidfile /var/run/sniproxy.pidlisten 443 { proto tls table https_hosts access_log { filename /var/log/sniproxy/https_access.log priority notice }}table https_hosts { .* *:443}table https_hosts { (.*.|)google.com$ * (.*.|)google.com.hk$ * (.*.|)googlemail.com$ * (.*.|)googlecode.com$ * (.*.|)blogspot.com$ * (.*.|)gmail.com$ * (.*.|)youtube.com$ *}" > /etc/sniproxy.conf 使用说明 使用命令service sniproxy start# 如果运行无反应并没有启动,那么请直接使用 sniproxy 来启动试试# 启动SNI Proxyservice sniproxy stop# 停止SNI Proxyservice sniproxy restart# 重启SNI Proxyservice sniproxy status# 查看状态 启动SNI Proxy后,查看一下 网络连接端口监听情况: netstat -lntp 当出现大概如下所示的信息时,代表正常启动并监听端口443,注意最后的sniproxy。 [email protected]:~# netstat -lntpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp6 0 0 :::443 :::* LISTEN 11673/sniproxy 如果没有发现 sniproxy 的监听端口信息,那么看一下是否有其他的 软件/服务 占用了 443 端口,如果有的话请关闭后再尝试启动 SNI Proxy。 如果没有异常情况,那么我们就可以使用 SNI Proxy 代理了。 运行优化说明 建议在运行 SNIProxy前,执行一下这个命令,作用是提高系统的文件符同时打开数量,对于TCP连接过多的时候系统默认的 1024 就会成为速度瓶颈。 ulimit -n 51200 这个命令只有临时有效,重启后失效,如果想要永久有效,请执行: echo "* soft nofile 51200* hard nofile 51200" >> /etc/security/limits.conf 然后最后再执行一下 ulimit -n 51200 即可。 Hosts 找到你电脑的Hosts文件,并打开(注意Hosts可能是隐藏文件,需要设置显示出来,还有win10修改Hosts文件需要管理员权限)。 Windows xp / 7 / 10 系统Hosts位置:C:\windows\system32\drivers\etc\hosts 在最后一行添加你要反向代理的网站,比如 www.google.com 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污染,所以没有国内服务器的可以看看下面这几个可以科学上网的DNS。
|