sagezhong

科学上网原理以及服务器部署
这篇文章是我搭建个人博客网站后的第一篇文章,想了一下要写什么东西。决定第一篇写关于代理服务器部署的步骤,因为正是搭...
扫描右侧二维码阅读全文
12
2018/05

科学上网原理以及服务器部署

这篇文章是我搭建个人博客网站后的第一篇文章,想了一下要写什么东西。决定第一篇写关于代理服务器部署的步骤,因为正是搭建了自己的翻墙服务器后,我决定在服务器上部署一个个人的博客网站,通过写博客记录一些学到的东西。但是,这篇文章不仅仅只是关于服务器的部署,我还会用自己所了解的知识(可能会有错误和遗漏),简单讲述几种常见的翻墙原理。在这个互联网时代,不掌握一些科学上网的方法怎么行呢。

GFW

什么是GFW

下面一段话引用自维基百科

防火长城(英语:Great Firewall (of China),常用简称:GFW,中文也称中国国家防火墙,中国大陆民众俗称墙、防火墙、功夫网等等),是对中华人民共和国政府在其互联网边界审查系统(包括相关行政审查系统)的统称。此系统起步于1998年,其英文名称得自于2002年5月17日Charles R. Smith所写的一篇关于中国网络审查的文章《The Great Firewall of China》,取与Great Wall(长城)相谐的效果,简写为Great Firewall,缩写GFW。随着使用的拓广,中文“墙”和英文“GFW”有时也被用作动词,网友所说的“被墙”即指网站内容被防火长城所屏蔽,“翻墙”也被引申为突破网络审查浏览境内外被屏蔽的网站或使用服务。

从维基百科的概述我们大概可以了解到我们平时所说的是一种怎样的存在。关于GFW的详细的机制就不在这里引入了,这是一个很庞大而且非常复杂的东西,我简单解释一下最基本的封锁机制。

上网限制的方式

最常用的两种限制方式,一个是DNS的污染与劫持,另一个是封锁目标IP。

DNS的污染与劫持

DNS指的是域名系统(Domain Name System)。什么是域名?我相信上网的人都知道,因为通常我们有想去的网站的时候直接在浏览器输入域名就可以进入了,例如google.com。假如我在申请域名的时候没有设置DNS,那么你直接通过访问我的域名sagezhong.top是访问不到我的网站的。我的整个网站是部署在一台拥有公网IP的服务器上的,例如我的服务器IP是45.76.152.43,你直接在浏览器输入http://45.76.152.43就能直接访问到我的网站了,但是IP地址又长又难记,所以有了域名这个东西。所以我申请域名后想要让别人通过域名可以访问到我的网站,第一件要做的事就是域名解析。就是让一些专门的服务器去解析我的域名然后给访问我域名的人返回我的服务器IP。

所以当你在浏览器里输入一个域名的时候第一件会干的事是通过DNS去解析你输入的域名,最后返回你所访问的网站的IP地址,你就顺利进入到那个网站了。DNS的污染与劫持简单的说就干了这么一件事,当你访问被封锁的域名例如google.com那么它会返回一个假的IP给你,所以你就访问不了被封锁的域名了。那么,我直接通过目标网站的IP访问不就行了吗?所以,有了一种更简单粗暴的方式,直接封锁网站所有的服务器IP

封锁IP

封锁IP就更容易理解了,GFW直接把被封锁的网站的所有服务器IP给封锁了。所以,只要你在墙内访问这些服务器的IP,GFW都给你拦截了,你的网络请求根本就出不去了。但是,IP地址这么多,GFW是不可能全部都封锁了的,而且我们还是有很多国外的网站是可以直接访问的,被封锁的基本都是色情暴力,比较敏感的网站。因为这样,所以我们可以通过一个没有被GFW封锁的国外服务器去帮助我们进行网络访问,再通过这个服务器把访问结果传回给你。

个人理解

关于这个东西,一直以来都被很多人争论,尤其是在国外的一些中文网站只要有关于TG的都会对这个东西进行一些无止境的争论。在以前我也会对TG建立这么一个东西嗤之以鼻,尤其是刚接触到外世界了解了很多黑历史的时候。不过,随着时间的推移,自己所了解到的越来越多,我逐渐改变了以往的看法。总的来说,以我主观的看法,我认为的存在对于我们国家来说是利大于弊的。当然,每个人的看法都不一样。

好了,关于的话题就到了。

常用科学上网方式及其原理

科学上网,也就是我们通常说的翻墙。下面我将通过自己的语言简单解释什么是翻墙以及几种常用的翻墙方式的原理。

翻墙与VPN

翻墙简单来说就是一种突破网络封锁的技术,也是我们平时的学习生活中经常用到的东西。通过翻墙技术,我们就能够访问到被封锁的网站了。比如,我们只要打开一个VPN软件,通过连接就能够访问被封锁的网站了。

VPN的原理

我相信绝大多数人第一次翻墙都是通过VPN软件实现的,其实VPN在我们互联网中运用是非常广泛的,只不过VPN刚好可以帮我们实现翻墙的功能。

什么是VPN

虚拟私人网络(英语:Virtual Private Network,缩写为VPN)是一种常用于连接中、大型企业或团体与团体间的私人网络的通讯方法。虚拟私人网络的讯息透过公用的网络架构(例如:互联网)来传送内部网的网络讯息。它利用已加密的通道协议(Tunneling Protocol)来达到保密、发送端认证、消息准确性等私人消息安全效果。这种技术可以用不安全的网络(例如:互联网)来发送可靠、安全的消息。需要注意的是,加密消息与否是可以控制的。没有加密的虚拟专用网消息依然有被窃取的危险。

简单来说VPN就是公网中架设了一个局域网,在这个局域网内,假如我们要访问公网的话,是通过连接公网的那一台VPN服务器实现的。再举一个简单的例子,如果我们的单机游戏想要和别人联机游戏的话一般只能通过局域网,但是我们通过对战平台就能实现和非局域网内的人联机了,这个对战平台其实就是起了VPN的作用。

当我们启动VPN软件的时候,它会在我们的电脑上虚拟出一张网卡,然后与VPN服务器进行加密连接。等连接成功了以后,我们电脑的网络请求通过这张虚拟的网卡,发送给VPN服务器,然后它再将访问结果通过我们与VPN之间架设的加密通道传回给你,从而实现了翻墙。这个加密通道实际上是绕开了防火墙,所以叫做翻墙。下面用张图看一下整个流程

我们与VPN之间的数据传输都是通过一个遵守VPN协议的通道里面的,这些协议包括传输协议和加密协议,所以GFW是很难直接获取里面的内容的。

VPN的隐患

虽然GFW很难直接获取里面的内容,但是它还是会采取监控的方式,去监控这些VPN通道。而且一些比较老的加密协议,对于GFW背后的超级计算机群破解来说也就是几秒钟的事,所以一些采用老的加密协议的VPNGFW是可以直接暴利破解的。破解以后,如果发现里面传输的是被封锁的内容,那么这条通道也就没用了,防火墙可以进去拦截你的请求。

我们在通过VPN软件与VPN服务器进行连接的时候,流量特征是比较明显的,因为是VPN专用的加密与传输协议。所以,一旦某个VPN服务器被大量的人连接,GFW就知道很多人通过这个VPN进行翻墙操作,然后实施干扰。所以VPN经常会比较慢而且不稳定。

通过VPN翻墙还有一点不好的是,因为我们的电脑或者手机要跟VPN服务器进行连接,所以服务器有流量监管工具的话,这个服务器的管理员就能知道我们都干了什么。所以,最好不要用来路不明的VPN。在通过VPN上网的时候也不要进行比较敏感的操作。

GoAgent

作为曾经的翻墙神器,GoAgent还是非常好用和强大,之所以说是曾经是因为它在15年8月它的作者迫于压力就停止维护了。不过在15年的3月份,随着GoAgent的不稳定性他开发了另一个项目叫做GoProxy。不过,由于有SS的存在基本都会采用SS这个方式了。

GoAgnet翻墙原理

GoAgent从字面理解就是去代理,我们使用GoAgent是需要代理服务器的,包括SSSSR(稍后会讲)都是需要代理服务器的。要使用GoAgent的话我们首先需要有谷歌的账号,然后去注册APPID。有了这些以后,我们需要去下载GoAgent的客户端,然后通过客户端输入我们的谷歌账号以及激活我们的APPID,然后在配置文件里填入我们的这些APPID,之后使用谷歌或者火狐浏览器,装上插件设置本地代理就可以通过浏览器翻墙了。

这是GoAgent的一个大致流程,对于当年的我来说还是很繁琐的一个步骤,而且我也不懂它的原理是什么,但是当你搭建好了之后,它的速度是非常快的而且重点是免费。因为GoAgent使用的是谷歌的服务器,所以我们无需花钱去搭建自己的服务器,我们通过注册的APPID使用客户端就可以与服务器进行连接。

当我们使用GoAgent客户端连接成功,我们通过浏览器进行访问,发出请求的时候,它会将我们的HTTP请求进行伪装。为了方便后面的理解,我用自己的话来简单解释一下什么是HTTP

HTTP全称是HyperText Transfer Protocol,译为超文本传输协议。它是互联网协议族中位于应用层的协议,也是我们现在网络通信的基础。说它是应用层的协议是因为它规定了我们在互联网中传输的内容。你会发现平时我们用浏览器上网访问网站的时候,域名前面都会带有http:字样,因为我们的网页是通过这个协议传输的。我们平时使用网络访问目标网站的时候都是通过http对网站服务器发送请求的,然后服务器再通过http给你返回结果。

所以GoAgent把我们HTTP请求进行了伪装,把我们的对被封锁的网站的请求隐藏了在里面,当我们的HTTP请求通过GFW的时候它会以为这是一个正常的访问请求,而且正因为是HTTP请求GFW难以下手因为基本所有的出口流量都是HTTP。它不像VPN那样有很明显的流量特征,而是基于最基本的HTTP协议。所以它比VPN更加高效,稳定。当然这个稳定是在说以前的那个时候,而且相较与VPN这种方式它可以说是穿墙

GoAgent还有一个优点就是可以使用PAC模式,国内的网络不走代理,需要翻墙的网络才走代理,提高了我们的访问效率。

GoAgent的缺点

最大的缺点就是在2015年的时候就已经彻底死掉了,因为当谷歌从中国退出的时候,GFW已经开始慢慢封锁谷歌的服务器IP了,所以会有论坛更新可以用IP,而我们要经常在配置文件里更换可以用的IP才可以保证GoAgent可以正常的使用。GoAgent的泛滥也间接导致了我们无法使用谷歌的云服务,因为全部IP都被封杀了。

配置比较复杂,对于很多人来说可能看到教程就已经放弃了。而且GoAgent不能实现全局代理,所以我们只能通过浏览器去访问,一些需要翻墙的软件就没有办法使用了。

虽然GoAgent已经死了,但是它在科学上网的历史中还是值得被记住的,据说它的开发者是当时在南京大学读书的一名学生。

SS和SSR

好了终于到这篇文章重点要讲到翻墙方式,这应该是现在最方便高效的方式了,而且安全性也非常高。

SS的作者

为什么要先写它的作者呢?因为这里面有一些不为人知的事情,而且我们用的都是他创造出来的东西,还是有必要了解一下。

SS的作者网名叫做clowwindy 这是他的GitHub地址,说到GitHub有必要介绍一下这是什么,通过我自己的语言简单介绍一下

GitHub是世界上最大的代码存放网站和开源社区,它的官网是:https://github.com,我觉得这是世界上最具有共产主义精神的地方了,无论你是不是程序员,都可以来学习GitHub的使用,这对你是非常有帮助的。有兴趣的可以认真去了解一下,相信你会有收获的。

说完GitHub我们继续来讲讲clowwindy,在2012年当时流行的翻墙方式还是VPNGoAgent,两者的弊端在上面都讲述了,所以他为了能更更加稳定的翻墙想出了一个更加巧妙的方式ShadowSocks,他是这样命名的,所以简称为SS,中文译名为影梭

2012年,他在GitHub上开源了他的项目,之后SS的翻墙方法便在互联网中散播了开来。不过在2015年8月,clowwindy把GitHub上所有的项目代码都删除了,停止了维护。他之前就一直在吐槽中国的开源环境,下面贴一张他在GitHub上的评论,不想要看的可以直接略过。

聊天截图

可以想象他当时的心情,后来他说他被请去喝茶了,所以迫于压力把代码全删了。不过还有很多人继续帮他维护着这个项目,GitHub上能找到很多,所以SS是不可能被封杀完的。过了三天,GoAgent的作者也把GitHub上所有的代码都删除了。

SS的翻墙原理

SS的翻墙原理比起之前介绍的方式更加的巧妙以及高效,而且更加安全与隐秘。SS的全名叫做ShadowSocks,其中的这个SocksHTTP不一样,是一个工作在更底层的协议,位于传输层,现在是Sock5SS是在SSH的基础上进行改造的,本来想单独写一下SSH,不过感觉可以一起写了先引入一张图,来看一下SSH翻墙的整个流程。

SSH流程

SSH是一种加密传输协议,一般我们都是用在远程连接服务器上,包括下面会介绍怎么部署自己的翻墙服务器也是用的SSH连接。

当我们用SSH连接上服务器后,就可以通过服务器访问网络然后再通过服务器把结果返回给我们,在数据传输过程中,我们的数据是在SSH的加密通道中的,目前GFW也是无法破解SSH,所以直接利用SSH与服务器进行连接,然后通过服务器代理可以实现翻墙。

但是GFW升级之后,我们在创建隧道和数据传输的过程中,流量特征是明显的,和VPN一样。所以GFW可以通过分析连接的特征进行干扰,就是如果我们在SSH通道里传输HTTP的数据,GFW虽然无法破解,但它识别到我们的传输数据类型和HTTP类似就会给你进行定向干扰,导致翻墙失败。

为了解决这个问题clowwindy想出了一个解决办法,先给出一张示意图。

SS翻墙示意图

SS采取了一种措施,把整个过程拆分为了服务器端和客户端。当我们启动了我们本地的客户端后,客户端会把我们的网络请求包装成Sock5,而且进行了进一步加密,因为整个过程是在我们的电脑上或者局域网内完成的,所以解决了会被GFW定向干扰的问题。当我们的数据从GFW经过的时候,它无法去破解我们的数据,而且没有明显的特征,所以GFW只能把我们的数据放了过去。等我们的数据到达服务器,服务器再通过服务器端的SS解密里面的内容帮你完成网络请求,再把结果加密传回给你。

所以目前为止GFW还没有很好的办法阻止解决我们通过SS翻墙,有效的措施就是封锁我们的服务器IP,但是IPV4地址那么多,GFW是不能可能全部都封锁的,而且还会造成误封。这也许就是为什么GFW的人会找到clowwindy让他把所有的代码都删除了。

因为SS就是为了翻墙而设计的,更形象的说法可以说是穿墙,所以比起其他的翻墙方式它的效率会更快,而且安全性也很高,因为我们是通过自己的服务器去进行中转,而且数据在传输过程中被进行过加密。

SS和SSR的区别

SSR是其他人在SS 的基础上进行的改进,或许说改进不太合适,因为曾经就分为了SSSSR两派。SSR是在SS上的基础上进行了混淆以及进一步的加密,理论上翻墙的效率比SS 更加的快。我现在用的也是SSR ,不过SSR是可以兼容SS的,只要混淆方式改一下就行了。然后在SSR 的基础,又有人开发出了新的SSRRSSRR是在SSR的基础上又进一步进行了扩展。

SS和SSR的缺点

我个人觉得SSR 是很完美的翻墙方式了,速度快而且稳定。缺点要说的话就是需要一些成本,我们买境外的服务器是需要钱的,而且稍微需要一点动手能力。

部署科学上网服务器

好了到了本文最后一个问题了,如何搭建一个属于自己的科学上网服务器,用SS/SSR 的方法,然后开始科学上网。其实就分为四个步骤:

  1. 购买VPS服务器
  2. 部署SSR服务器程序
  3. 部署服务器加速程序
  4. 安装客户端连接服务器

购买VPS

什么是VPS

引用自维基百科

虚拟专用服务器(英语:Virtual private server,缩写为 VPS),是将一台服务器分区成多个虚拟专享服务器的服务。实现VPS的技术分为容器技术和虚拟机技术 。在容器或虚拟机中,每个VPS都可分配独立公网IP地址、独立操作系统、实现不同VPS间磁盘空间、内存、CPU资源、进程和系统配置的隔离,为用户和应用程序模拟出“独占”使用计算资源的体验。VPS可以像独立服务器一样,重装操作系统,安装程序,单独重启服务器。

简单来说就是提供服务器服务的厂商把一台物理服务器用这个技术分割成了几个虚拟服务器,但是每一台虚拟服务器都拥有独立的公网IP,所以我们通过服务器的IP就能找到它了。

Vultr

Vultr是全球知名的提供VPS的服务器商家。最重要的是,在这里买的VPS是按小时计费的,所以我们买了之后可以先进行测试能不能联通,不行的话,之前说过是因为GFW会封锁一些国外的IP,这时候我们就可以把服务器删了重新建一个,几乎是零成本。等你熟悉了搭建过程后,就可以不断测试翻墙的速度,找到最合适的一个VPS,把其他的都删了。

购买安装过程

首先进入Vultr的官网:Vultr官网,官网界面如下:

然后进行注册,再登录。进去之后选择Billing,选择Alipay作为支付方式,充值十美元即可。如下图:

接下来选择服务器的位置,推荐选择比较近的地址,延迟比较低,如下图:

然后往下拉,选择服务器的系统,推荐选择CentOS6.9版本,如下图:

然后再点击上图中的Deploy Now 就开始安装你的VPS

这里在说明一下,选择服务器的时候可以选择支持IPV6协议的,不过选择IPV6协议首先你的电脑需要改成IPV6协议的。走IPV6协议有很多好处,在我们国家只有高校才支持IPV6,如果我们通过IPV6上网是免流量的,而且可以突破网速的限制。不过IPV6在我们国家还不流行,因为GFW全面不能拦截它,在解决这个问题之前,我想暂时是不会全面推进IPV6的。如果我们通过IPV6去访问那些有IPV6服务器的网站,速度会快很多,因为访问的人少,例如Baidu。想突破网速限制的人可以选择支持IPV6的VPS,在这里就不引入这个教程 了。不过我们的服务器带宽最大是100M,所以你能达到最大的速度也是100M。

然后就开始安装着了,安装完成后进入你的服务器界面:

在这里可以复制你的服务器IP地址和密码

部署SSR服务器程序

接着就要开始进行本地电脑的操作,首先我们需要连接上我们的服务器。LinuxMac操作系统直接使用终端即可进行操作。Windows的用户需要去下载Xshell。直接百度搜索前几个就有下载。

下面我用Mac操作系统为例讲一下部署过程

首先打开终端,输入以下命令

ssh root@45.76.149.204(这里换成你的VPS的IP地址)

出现下图说明VPS的可以连通,没有被封锁。

然后去复制你的密码,粘贴进去,出现我上面的图的结果即表示连接成功。

如果不行的话直接摧毁你的VPS,然后重新买一个,几乎是零成本的。摧毁操作如图:

连接成功后,接着输入下面指令

yum -y install wget

wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ssr.sh && chmod +x ssr.sh && bash ssr.sh

直接复制粘贴进去即可,回车之后我们的SSR部署管理脚本就会开始自动安装,这个脚本是开机自动启动的,部署好了之后我们就不用去管它了。出现下图说明脚本部署成功:

然后输入1开始我们的SSR的配置,如下图:

不懂的人直接按照我的方式配置即可,端口号随便填,你自己记得住就行。不过有一些特殊的端口不能够使用,例如常用的808080端口。

设置的密码是你之后用客户端要填的密码

接着设置加密方式

然后设置协议混淆,如果你想兼容SS的话就设置为originplain。不想的话如下图设置即可

接着设置限制的设备数,单线程限速和每个端口的总速度,直接回车默认的就行

  

这下来会开始一系列下载安装,等待即可,成功会出现下图界面:

这些就是你的配置信息,是你接下来要在客户端要填的。

你要重新配置或者修改的话直接输入下面的指令即可

bash ssr.sh

部署服务器加速程序

通过上面的部署,我们已经可以通过服务器科学上网了,通过下面的设置可以让我们的科学上网网速更加快。这个脚本也是服务器开机自动启动的,只要部署一次即可。连接上VPS后输入一下指令然后回车:

yum -y install wget

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh

chmod +x bbr.sh

./bbr.sh

出现下图继续按回车:

在下面这个界面要等久一些:

安装完成之后,会提示你要不要重启系统,这时候输入y重启VPS:

重新通过SSH指令连接服务器,然后输入以下指令:

lsmod | grep bbr

如果出现下图结果则说明加速成功

到这里我们的服务器端的部署就全部完成了,接下来我们要进行客户端的设置。

SSR客户端设置

打开客户端的服务器设置,下面以Mac系统为例,按照你之前在服务器上的设置填入即可

输入完保存即可

接下来再打开PAC模式即可

到这里,打开你的浏览器输入google.com看看有没有成功吧~

如果不行的话,仔细检查一下有没有地方输错了。

客户端的下载地址

iOS

iOS关于SSR客户端国内商店是没有的,可以用其他地区账号下载Potatso Lite,免费好用。

安卓

安卓客户端:安卓SSR客户端

Mac和Windows

Mac 客户端:Mac客户端地址
Windows客户端:Windows客户端地址

结束语

通过一天的码字,终于完成了这篇文章。不过使用Markdown来写文章真的是很舒服的一件事。推荐喜欢在网上写文章的朋友都去学习一下Markdown。只需要通过简单的语法,就能轻松地对文章进行排版。我的文章评论也支持Markdown语法哦,为了让博客支持Markdown,也折腾了挺久,还有自定义样式~。简书,知乎,CSDN都支持Markdown语法。不过感觉最舒服的还是GitHub的样式。

今天是5-12地震十周年,在码字的时候无意中听到一首歌,名字叫做城南花已开,然后点了进去,有种说不出的感觉。愿逝者安息

这篇文章还有很多不足之处,有些地方可能是错的,如果有人知道,还望指正。感谢前人的付出,才有了今天。

Last modification:May 10th, 2019 at 12:55 am
请随意赞赏

5 comments

  1. xxxsmphpzp

    博主真是太厉害了!!!

  2. Drem

    你好,我想问一下现在利用torjan科学上网是否也可以搭建自己的博客

  3. Ming

    了解一下

  4. Beam

    1. sagezhong
      @Beam

      嘿嘿

Leave a Comment