防火长城(Great Firewall of China,简称GFW)是中国政府在互联网空间中发起的一项大规模干预措施,旨在审查并控制中国地区的互联网使用,以遏制虚假信息、不良内容和外部信息流入中国境内。防火长城被普遍认为是政府和监管机构利用技术工具监控国家居民上网行为的全球最大系统,而它的技术基础上,有多种关键的审查与监管工具,如域名解析服务(DNS)、网络流量检测和内容过滤系统(CFMS)等。
一般来说,中国为防止信息安全隐患,采取了从技术层面上审查与监管网络内容的做法,特别是采用了强制性的过滤系统,以筛选出被定义为不良的内容。据技术人员的研究显示,防火长城的技术基础上,有多种关键的分类与核准审查工具,如URL黑名单、内容过滤器(CFMS)、 DNS域名解析服务等。这些技术的实施,让中国的互联网用户在浏览网页时,无法访问一些被政府定义为“不良信息”而被封锁的网站,如网上正能量有关网站、时政类网站、购买影视类网站等,有被政府所定义的“不当信息”。同时,这些技术也被用于审查和删除政府认为可能危害网络安全的信息,例如政治敏感信息、暗恋可能引起的骚扰等。
以上是网上查到的介绍。想必通过这些你应该知道防火长城的作用了。
一方面,这阻止了国外一些虚假信息煽动人心,也就是信息战,这是很重要的一点。既然我们知道那些东西有问题,为什么不去拦截呢。
另一方面,这常常导致一些误伤。例如静态网页托管服务,由于某些人利用这些网站宣传不良内容,例如色情或反华,会导致整个域名被封,这样谁也别想使用这个托管网站了。
同时GitHub等网站本来是用于存储开源代码,可以供我们国内参考,但就是有人上传一些不合法的东西,导致网站被封,现在国内访问麻烦。
所以,访问不了外网不要怪国家。要怪你应该怪漂亮国,为什么要搞信息战呢,为什么搞对立呢;这些不法分子为什么抓到空就上传不良信息呢。这就是他们没有公德心的体现,几个人犯错连累全国人民,你看应该怪罪谁。
话回正题。我们由于需要用到外网的资源,不得不需要去访问外网网站时,怎样绕过封锁呢?
一:访问外网须知
网络不是法外之地,包括任何地方。因此访问外网也需要遵守一些规定,请务必阅读。
- 有正当的目的。记住,你的每次访问都会被国家的网络监管部门记录,你访问外网的时候是完全有人知情的。如果你是为自己一些需要而访问外网,监管部门一般也不会管。但是如果你的网络活动涉嫌犯罪等涉及到法律有关的事,司法机关完全有能力找到你。因此,法律和道德的红线,要长存在心里。
- 不要随意下载外网文件,及时关闭网页。外网网站的病毒与恶意程序比国内更多,而且网页页面也可能存在挖矿等病毒,因此尽量减少非官方文件下载或同时打开过多的网页,可以随手关闭标签页。
- 尽量少登录账号。访问外网时账号密码比较容易泄露,因此在外网登录账号会有一定风险,尽量减少这类行文。
- 明辨是非,判断信息真假。外网上更容易出现诈骗等犯罪活动,同时一些政治新闻难辨真假,需要树牢自己的观点,不要被外网言论左右,自觉维护国家安全。
- 清楚地认识自己的身份。可以利用访问外网的机会宣扬本国政治理论,理性探讨国家发展的有关问题等,为国家发展尽一份力。勿做一些出格的举动。
二:原理简介
那么,GFW是怎么拦截对外网的非法访问呢?
显然,并不是所有国外网站都无法访问,GFW是通过黑名单方式拦截的。
我们每个人的访问只要涉及到外网,都会经过GFW,对请求进行监测并决定是否放行。同时再配合上面提到过的DNS拦截,这就导致我们无法访问指定网站。
既然这样,我们绕过的方法就很明确了,就是防止GFW监测出我们访问的真实网站,从而欺骗过去。
1.VPN
VPN应该很多人听过这个大名。
VPN全称为“虚拟专用网络”。VPN设计之初是为了安全地通过公网进行内网的访问。VPN最大的特点是端到端加密,也就是说只要你启动VPN,从你设备发送出的信息都会进行加密,并发送到指定的VPN服务器。此时由于VPN的请求全部加密,GFW无法读取你将要访问的网站信息,所以是利用VPN这个协议的特点而绕过了GFW监测。
通过这个服务器你可以访问服务器所在的内网,同时也可以通过服务器解密请求之后,从服务器访问外网。因此,只要VPN服务器所在地访问外网不受到限制,你的设备就可以通过它访问外网。
VPN本来不是用于外网访问,也不是为此设计的,所以它在此方面有比较大的缺点。因为VPN开启后发出的数据能明显看出是被加密过的,所以GFW可以把这些加密的信息通通拦截掉,让你无法连接VPN服务器。同时由于VPN服务器地址是暴露的,如果这个服务器被用于访问外网,很可能遭到封禁。另外由于VPN服务器搭建麻烦等原因,实际上使用VPN协议访问外网的“VPN软件”也越来越少。
2.VPN和代理
VPN和代理是有区别的,但是它们都是通过连接一个服务器,这样你的网络流量就会交给这个服务器代替处理;只要这个服务器处在不被GFW管控的网络,那么它可以直接访问外网,你就可以打开外网的页面了。
同时我们也提到,GFW为了防止你进行这种连接,它会检测你连接代理的连接并进行阻止。VPN并没有设计反侦察的功能,很容易拦截。而我们下面介绍的专用代理协议,就是专门设计成用于欺骗GFW不去拦截你的请求,从而绕过监测。(实际上代理并不会把请求全部加密,所以说使用的是欺骗手段)
因此我们可以说,VPN访问外网的方法已经不可靠了,只要想,就可以分分钟掐掉所有跨境VPN访问。而专用的代理则更可能幸存。
3.代理和本地代理软件
代理总体上都是把你的请求经过一次代理服务器,再访问目标服务器。但是代理也分为多重协议。如我们常见的HTTP协议,SOCKS协议等,是我们电脑(浏览器)自带支持的协议。
而这几种协议只是基础协议,只为了把流量导向到代理服务器使用,比较简易。我们用于访问外网的协议,如vmess,vless,trojan,shadowsock等协议,系统是不自带的,需要我们安装额外软件。
这类代理软件的原理大概是:通过自身的核心连接到使用高级代理协议的代理服务器,之后在本地建立一个虚拟的本地代理,这个本地代理就使用系统自带协议(http或socks),IP则是本地回环IP(127.0.0.1或称为localhost)。通过这个接口,系统再连接到本地的代理软件,便可以通过这个代理交换数据。
总之,代理软件就是自身使用高级代理协议连接服务器,并在本地把多种代理协议转接成系统支持的基础代理协议。这样就通过代理软件实现了把多种代理协议转接到系统。
三:使用代理连接外网(Windows)
Windows最常用的代理软件,应该是v2ray。v2ray是一个代理核心,支持多种协议。以这个核心,有许多开发者编写了GUI版软件。这里最有名的应该是v2rayN了。
下面就简单介绍一下v2rayN的使用,此处就以v2rayN V6.x为例,因为V5已经停止更新。
0.下载v2rayN
下载v2rayN,请到GitHub Release页面:https://github.com/2dust/v2rayN/releases
release页面有一些黄色标记的pre-release是测试版,可能不稳定。我们向下翻,找到绿色标记的latest来下载即可。
或者使用这个链接一键跳转到最新的稳定release:https://github.com/2dust/v2rayN/releases/latest/
第一次使用软件,可以下载压缩包“v2rayN-with-Core.zip”(以下默认电脑为64位系统)
若使用了上一篇文章提到的GitHub下载加速脚本,可以点击右侧的按钮加速下载,否则点击文件名从官方下载
下载后运行v2rayN,如果提示没有安装.NET Runtime,可到微软官网页面下载:https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0
翻到右侧下面的“.NET 桌面运行时”栏,点击“x64”蓝字下载即可。
1.代理服务器与订阅
使用之前,我们显然要添加一些代理服务器地址。点击左上角“服务器”按钮即可看到添加的选项。
但是这里添加需要输入很多参数,而我们获得代理服务器地址都追求简便。因此许多人分享代理服务器时,会使用一串特殊的base64编码,这串编码包含了代理服务器要设置的所有信息。
此时你只需要复制这串字符,之后点击服务器-从剪贴板导入批量URL即可,或者直接在软件界面按下ctrl+v快捷键。(你可以只复制一个服务器信息,也可以用换行为分割一次性添加多个服务器)
添加成功后,中间的服务器列表就会出现你添加的服务器信息了。列表里可以保存多个服务器,但是每次你只能连接一个(只需要连接一个)。选择方法就是单击选中要启用的服务器,之后按下键盘回车键。同时看到下方状态窗口提示已经切换服务器,即说明切换成功。
不过,由于我们都知道的原因,代理服务器失效是非常快的,基本上每天都要更新。这样如果每天手动添加删除,着实很麻烦。因此就出现了“订阅”。
订阅实际上就是用来保存服务器列表的地方,它往往是一个链接,用浏览器输入链接打开你就会发现,这里以文本形式储存了许多base64字码,它们就包含有服务器信息。一个订阅链接往往包含有许多服务器信息。(也就是说,如果你复制这里的所有文字,是可以正常粘贴导入v2rayN的,但这就失去了订阅的意义了。)
订阅的方便之处在于,它将服务器信息存储在网上,这样就可以随时更新。只要负责更新订阅链接的人向订阅文本中添加服务器,或者删去失效服务器,你就可以直接获取并使用了。
在v2rayN中添加订阅也很简单。点击订阅分组-订阅分组设置,添加一个订阅分组即可。这里的别名是给你自己看的,可以随便起一个名字。订阅链接填写你获得的链接。如果你想更改这个订阅排序的位置,可以输入一个排序位置,其他的则不需要更改,点击确定即可。之后在主页面第二副栏你就能看到对应的按钮,和你起的“别名”是一致的。
此时软件可能还没有获取订阅文本。需要你点击订阅分组-更新全部订阅(不通过代理),程序会自动获取服务器信息并添加到列表。
通过点击不同订阅按钮,可以查看到不同订阅提供的服务器信息。“所有”则可以查看你添加的所有代理服务器信息。在某个订阅的服务器页面,点击订阅分组-更新当前分组订阅,可以只更新当前页面的服务器信息。实际上,如果你距离上次更新订阅时间超过一天,我们就建议你务必更新一次订阅。
2.检测服务器可用性
提示:如果添加了多个订阅地址,可能会产生重复的服务器,因为部分服务器地址都是从同一个地方抓取得到的。
为了加快检测速度并简化列表条目,可以在检测可用性前,全选服务器(ctrl+a),右键选择“移除重复的服务器”。
订阅添加之后,服务器地址有了,但是我们不一定能连接上外网:或许是服务器失效,或者是我们所在地区的网络条件等就是无法正常连接服务器。那我们如何快速选出可用的服务器呢?
首先我们需要检测本机和代理服务器之间是否能正常连接。
单击一下服务器列表栏任意处,按快捷键ctrl+a,可以全选本页所有服务器(如果你要检测所有已知的服务器,记得把“订阅页面”切换到“所有”)。之后右键选择“测试服务器延迟Tcping”,也就相当于快捷键ctrl+o。软件会自动检测延迟,如果延迟为-1则意为无法连接到服务器。
此时左键点击表头中的“延迟”一项,列表会自动按照延迟大小排序,这样所有无法连接的服务器就被分开了。
之后我们需要测试服务器到外网之间能否正常连接。软件使用的原理是分别通过每个代理服务器向google发送一个请求,来测算延迟。
通过点选列表中第一个可用的服务器,并按住shift点选列表中最后一个可用的服务器(tcp延迟不为-1的那个),你可以选中这两项中间的所有服务器,也就是选择了所有可连接上的服务器。之后在选择到的区域里右键,点击测试真连接延迟(ctrl+R),此时状态窗口开始滚动,稍等一段时间之后即可测算出服务器连接到google的延迟。同样,数值为-1代表无法访问外网。
我们再次左键点击表头中的“延迟”一项,列表会自动按照延迟大小排序,这次筛选出的服务器就是既能连接本机、又能成功访问外网的有效服务器了。
这两步在上面示意图中分别表示为代理服务器的两条连线。
3.使网络流量通过代理
上面的步骤我们解决了代理软件和代理服务器之间的连接问题,实际上电脑中的其他软件还没有连上代理服务器,因为它们的设置还没有改。下面我们解决代理软件转接到系统代理这一步,电脑就算真正可以使用代理了。
我们单击一个延迟不为-1的服务器,并按下回车来选中。
正常来说,延迟低(延迟数值小)的服务器访问应该更快。但是,服务器的访问速度不仅与延迟有关,还与带宽等因素有关。并且,服务器的延迟是实时变动的,测试时得到的延迟无法代表服务器的平均延迟,因此列表中延迟最低的一个服务器很可能并不是连接最快的一个,甚至可能发生无法连接的情况。
因此,如果使用某个服务器无法连接上网,可以忽视延迟的高低,果断切换到下一个服务器。不过,我是仍然从延迟最低的服务器开始一个一个尝试,因为我们上面已经按照延迟排序了,只需要按列表顺序一个一个往下即可。
之后所述,我们要更改设置,让它们的数据都流向本地回环IP的对应端口,这样数据就会被代理软件再次发送到代理服务器。
这个代理设置,在系统设置界面可以找到,在一些联网软件自己的设置里也能找到。如果某些软件自身没有类似的设置,就代表它要么会跟随系统的设置(大多数软件);要么是不支持使用代理(多见于某些联机游戏),这种软件就无法通过代理方式连上代理服务器了。若某些软件设置里能找到这个选项,那么这个软件一定是支持代理了;但是这个设置就不一定会跟着系统的设置走了,需要根据情况判断。
v2rayN提供了一键配置的功能,就是在下方“清除系统代理”的下拉框,若选择“自动配置系统代理”,即可自动更改系统的代理配置,导向到代理核心,以便传输到代理服务器;选择清除系统代理,则配置系统不使用代理,也就恢复了正常。
如果软件的代理设置会依照系统设置来自动更改,那么选择“自动配置系统代理”之后,这些软件的通信就会被代理软件接管,如果之前的配置都正确,就可以访问外网了。
对于一个支持使用代理的软件,如果更改了系统代理后,软件没有成功连接外网,v2rayN的状态信息栏也没有滚动,那么往往是软件自身设置里的代理没有按照系统的自动更改,需要你手动配置。下面介绍代理手动配置方法。
此处以firefox浏览器为例,只是为了演示设置过程。对于其他软件,操作基本相同,可以参考此方法。
浏览器的代理设置往往可以选择跟随系统或者自定义代理两种。平时使用跟随系统配置即可。在判断外网是否连通时,最有效的软件往往是浏览器。
顺带一提的是,微信、钉钉等即时聊天软件的代理设置,是在登录前的界面手动输入的。
先找到软件设置中有关网络代理的选项。选择手动配置代理。
如下图,这里有http(s)代理、socks代理可供选择。http和https同样配置即可,这里为了方便,就勾选了选框。默认框里应该都是空白的。对我们来说这几种代理协议都是一样的,设置其中一个即可。(其他软件可能只支持其中一种代理,并不影响)
首先,代理主机IP均需要输入本地回环IP127.0.0.1。
之后我们需要解决端口号的问题。本地回环都回环到127.0.0.1这个地址,那么区分“回环给谁”,就要靠端口号。
v2rayN中,v2ray代理核心占用的端口号就显示在左下角。这个端口号可以手动修改,但是不建议随意变动,避免与其他软件占用发生冲突。
我们只需要依照对应协议的端口号,将其填入对应的代理设置就可以了。按照我的端口号,代理设置配置如下:(正常情况下只需填写其中一个)
那么,对于只支持http代理的软件,可以按照第一行的逻辑来设置。实际上不少软件都只支持http代理。
总之:代理协议和端口号必须对应上。
配置完成后,保存即可。某些软件还可能要求重新打开一次软件。在设置完成后,软件就可以访问外网了。
可以看到,我们上面这三步就是为了分别解决示意图中的三条连线。三条线打通,我们就能成功连接。
4.FAQ
如何更新v2rayN?
软件主界面有更新按钮,但更新比较容易失败,这是因为更新会强制通过代理连接github,而代理连接可能不稳定。
如果使用更新按钮无法正常更新,可以手动到其github页面下载新版本,主程序覆盖到安装目录即可。
另外,可以关注一下开发者的更新日志,如果没有更新需要的功能或者bug修复,可以不更新。
TUN模式如何使用?
主界面下方有一个TUN模式开关,打开开关并稍等,当网络界面出现名为sing box tun的网卡,即成功切换到TUN模式。
TUN模式是虚拟了一个网卡,可以让所有软件的通信都通过这个网卡来进行,这样可以实现让不支持代理的软件,也通过代理服务器发送数据。
v2rayN的TUN模式可以算是一个新功能,使用的并不是ray内核而是sing box,相当于软件添加的第三方功能。平常使用浏览器等本身支持自定义代理的软件,不建议开TUN模式。
如何开机隐藏启动
首先设置开机启动,建议使用管理员运行v2rayN后,在设置-参数设置-v2rayN设置中,勾选开机启动。如果开启了杀毒软件,可能会弹出确认对话框,选择允许或者信任即可。之后向下翻,找到“启动后隐藏窗口”选项打开。设置完点击确定即可。
设置后可以测试一下软件能否正常开机启动。如果无法启动,可以关闭开机启动项并重新打开。
四:使用代理(Android)
在手机上连接代理,某些时候是比较有用的。这里我们可以使用同一个开发者开发的软件v2rayNG来使用代理。
0.下载v2rayNG
同样是到GitHub页面下载:https://github.com/2dust/v2rayNG/releases
找到latest下载:https://github.com/2dust/v2rayNG/releases/latest/
一般是下载不带后缀的apk即可,如果显示无法安装不兼容,可以尝试其他apk。
1.导入订阅获取配置
与上面的v2rayN相同,我们需要获取可用服务器信息,所以先添加订阅。
v2rayNG可以点击左上角菜单-订阅分组设置,添加订阅。订阅名称可以自选,链接则填写订阅链接。
另外,软件还可以通过扫描二维码添加配置。点击主界面加号-扫描二维码即可。
在订阅分组设置界面,可以通过点击暂时禁用某个订阅。订阅左侧为灰色即被禁用,为绿色则启用。
添加完订阅后,回到主界面,点击右上角菜单,选择更新订阅,即可获取到所有已启用订阅的服务器信息。
若要用粘贴方法添加服务器,则从主界面加号点击“从剪贴板导入”即可。
2.检测服务器可用性
由于软件默认提供的是一键检测所有服务器的连通性,所以此处可以跳过tcp检测,直接检测服务器真连接延迟即可。从右上角选择“测试全部配置真连接”即可。
点击后主页面所有服务器的左上角都会出现延迟信息,向下翻动,确认所有服务器的延迟都测试完毕之后,再从左上角点击“按测试结果排序”,即可将所有可用的服务器筛选出来。
3.启动代理
这一步就比较简单了。点击选中一个能连接的服务器,点击灰色的按钮(V)即可开始连接。按钮变绿并有文字提示证明已连接。
连接后,可以点击屏幕下端的文字测试连接延迟。如果测试显示无法连接的情况,可以直接点击其他服务器按钮进行切换。若测试显示有延迟,就可以正常使用了。
使用结束时再次点击绿色按钮,关闭代理。
由于Android的特殊性,在手机端使用v2rayNG也需要进行一些配置。
4.v2rayNG配置
点击左上角菜单-设置,来配置更多选项。
设置运行模式
向下翻,找到“模式”选项。
可以选择VPN模式或者代理模式。两者的区别,官方解释可看链接:https://github.com/2dust/v2rayNG/wiki/Mode
VPN模式:可以理解为全局模式,使用VPN模式开启后,系统的VPN设置会将所有流量(TCP,UDP)导向v2rayNG的代理,设置方便并且支持一些无法使用代理的软件。另外VPN模式可能会对DNS解析有所影响。
代理模式:启动v2rayNG的代理。如果在其他软件或者系统设置中手动设置代理,可以将流量导向v2rayNG,实现代理连接。
官方的介绍是,使用代理模式可能会更快,并且更加省电、减少系统占用,但需要进行手动的设置。而VPN模式只需一键启动。可以自行选择一个模式。(短时间使用,使用完就关闭的,使用VPN模式即可。)
VPN模式设置
在开启VPN模式时,若仅对某些应用进行代理,可以在此处设置黑名单\白名单。
设置界面中,点击VPN设置中的分应用代理,打开上方的对应开关即可,之后勾选相应应用即可。对于两种模式的说明,可以参考设置项下方的灰色文字。
本地DNS:使用v2rayNG本地的DNS服务来进行DNS解析。本地的DNS模块会内置一些规则,有助于DNS解析,可以启用。若软件发生DNS解析错误或无法访问网络,可以尝试关闭此选项。
虚构DNS:本地返回的DNS解析结果是虚构的。平常可以不用开启。具体原理可看文章。(此文需要开代理访问)
仅代理模式-设置代理
上面说过,若选择了仅代理模式,需要手动配置代理设置。对于某些支持手动配置的软件,可以在软件设置中找到代理设置并进行设置。这里主要介绍Android系统代理设置。
WiFi下代理设置:从设置中打开WLAN设置,或者从系统下拉栏中长按WLAN图标,打开WLAN设置。
长按已经连接的WiFi,选择修改配置/修改网络/配置网络/配置连接或者类似的选项,打开网络设置界面。如果有“高级选项”或者“显示高级选项”的复选框,需要先勾选。之后点击下面的“代理”选项。手动输入:
服务器主机名:127.0.0.1
服务器端口:10809(软件默认)
其他选项留空即可。
点击确定,保存设置。另外,在不启动v2rayNG时,需要改回此设置。可以参考网络文章:《如何在安卓系统上设置代理服务器》
此处的端口与电脑端相同,也是可以手动修改的。在设置界面中向下翻,会看到SOCKS5代理端口设置项和HTTP代理端口设置项。此处设置的即为HTTP代理的端口。不建议随意更改,以免与其他软件冲突。
移动网络下代理设置:使用流量时,想要改变代理设置,必须配置手机接入点(APN)。
你可以从手机设置中打开移动网络设置/移动数据设置,或者在系统下拉栏中长按“移动数据”图标打开设置界面。找到配置项“接入点名称(APN)”并进入。
此处的设置与你的手机运营商有关。点击或者长按已经选中的那个设置,进入设置界面。
这里的设置很可能是无法改变的,你可以先把整个页面截图备用。之后回到配置界面,点击右上角的菜单(或者在屏幕底端有菜单按钮),选择“新建APN”,进入APN设置界面。
APN名称要设置为与刚才不同的名称,其他设置项则需要与刚才的设置相同。可以参照截图进行配置。只有此处的代理选项,可以按照软件配置手动更改。(参照上面WiFi环境的配置进行输入)
设置完成后,点击确定保存配置,并切换到新建的APN,即可使用代理。不使用代理时,可以切换回原来的APN。
可参考:stackoverflow (没啥好参考的)