SkillAgentSearch skills...

Haoel.github.io

No description available

Install / Use

/learn @haoel/Haoel.github.io
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<h1> 科学上网 </h1>

作者:左耳朵 http://coolshell.cn 更新时间:2023-05-02

这篇文章可以写的更好,欢迎到 https://github.com/haoel/haoel.github.io 更新

0. 序

首先,我们先明确一下,我科学上网的目的主要是为了学习、工作、交友、查资料、和丰富自己的眼界,不是其它的事。

对我来说,科学上网很重要,下面罗列一下需要科学上网,我才能真正学习工作和生活的网站:

  • Youtube 和 Vimeo 上的各种大会和教学视频,除了我自己要学,我的孩子也要学。
  • Wikipedia 维基百科是我目前唯一信得过的百科全书,我在上面可以比较系统地翻阅各种词条。
  • SlideShare 上有很多的技术文档和资料的PPT,是我的知识学习的地方。
  • Quora 问答网站,在上面有很多有趣的问答。
  • 博客和论文,很多博客和论文站点都被墙了,比如:Blogspot 和 Medium。
  • Google 的各种服务,比如:Gmail, Map, Docs,Driver,照片,图片搜索,Voices,论文搜索……包括Google官方的各种技术文档……
  • 一些云服务,比如:Dropbox,IFTTT,Imgur,archive.org……
  • Twitter 上 Follow 一些牛人和一些官方账号,比如:AWS、Docker……
  • 社交 Facebook, Telegram, Whatsapp, Slack……,有一些我在国外的亲戚和朋友……
  • Reddit 是一个聚合网站,一个新闻和文章的集散地,你可以认为是各种频道的今日头条……
  • Pinterest 和 Instagram 上面有很多不错的图片和视频新闻,是我减压力的地方……
  • 新闻,如BBC。 BBC是全球比较出众的媒体,有太多的有价值资源和内容了,比如纪录片、学英文……
  • 编程,有很多编程的场景需要翻墙,比如,Go语言编程时的 go get 中的很多库是放在 Google的服务器上, 然而Google是全部被墙,包括 Android 和其它一些文档和资源也是一样。包括 SourceForge 的某些项目也需要科学上网,Docker Registry也有部分被墙,还有偶尔抽风的Github,以及不能访问的gist……
  • ……等等

所以,科学上网后,英文是一件很重要的事。

为什么这么说?这主要是针对计算机相关的知识,逻辑是这样的,如果你上了Google还是在用中文关键词,那么你好不容易出来了,结果又回去了,所以没什么意义。 换言之,科学上网的目的是为了进入广阔的世界范围与全世界的人交流,所以,英文是必备的,如果你英文有问题,VPN过去的用处也不大。

所以,我把这个前提条件放在第一的位置,就是说—— 真正的墙不是GFW,而是人的大脑! 意思是,屏蔽你获得信息能力的不是墙,而很大一部分则是我们自己的语言能力!

1. 机场 vs 自建

对于科学上网,我强烈建议通过自建的方式。因为使用一些“机场”会有如下的几个问题:

  1. 机场主需要公开售卖,使用的人也比较多,所以,都会被重点关注,非常容易被封;
  2. 机场需要购买一堆服务器,所以,很容易经营不善跑路;
  3. 使用机场很容易泄漏自己的隐私,因为你的所有流量都经过了机场的服务器;

自建梯子会是一条很好的路,不过,问题就是,自建梯子需要一定的技术能力,成本和门槛都比机场要高,但是,在安全性方面会比较好一些。自己动手,自力更生,让人有更多的安全感。

所以,如果你不是很有技术能力,或者不想花钱,那么,还是使用“机场”吧。

本文主要是针对自建的文档!

2. 购买VPS

自建梯需要购买一台服务器 VPS。现在你买一台VPS也不贵了,一个月几十元钱。当然,如果需要好的线路得需要多花一些钱,但是也不贵。

购买的 VPS 有几个要点 - “流量” 和 “位置”:

  • 配置。服务器的配置不需要很高,用最小的型号就可以了,一般来说,1个CPU,1GB内存,50GB硬盘是足够了;
  • 流量。服务器主是要要年有没有足够的流量和带宽,很多VPS提供商在流量和带宽上会收额外的费用,要小心。一般来说,1TB流量和30Mbps带宽是足够了,如果不看电影的话,500GB左右一个月的流量也够了;
  • 位置。服务器的线路和地理位置还是比较重要的,一般来说,香港,台湾,日本,韩国,新加坡,美国,欧洲都是不错的选择。
    • 线路。 经过我长期的实践,GIA CN2 的线路是非常好的。但是你要小心,很多VPS提供商会在宣传上说自己是 CN2 的线路,但是,实际上并不是
    • 原生 IP。很多海外的应用都有地区限制,会屏蔽IP,所以,使用美国的原生 IP 也是很重要的。

上述的这些东西在后面都会讲到。另外,VPS 建议安装成 Ubuntu,版本用 18.04,20.04,22.04 都行

2.1 常规VPS

对于常规 VPS,主要是一个云服务提供商,大的原厂商都提供免费使用和赠金,所以,可以白嫖一段时间。

  • AWS LightSail 是一个非常便宜好用的服务,最低配置一个月 $3.5 美金,流量不限,目前的Zone不多,推荐使用日本,新加坡或美国俄勒冈(支持银联卡)。现对 2021/8/7 之后使用 LightSail 的用户提供3个月的免费试用。
  • Microsoft Azure提供免费一年的服务(B1S实例),而且每个月有 100G 的免费流量,并赠送200刀赠金。(需要国际信用卡)
  • Google Cloud Platform提供免费试用,赠送300刀赠金(需要国际信用卡)
  • Oracle Cloud两台VPS无限期使用,可选美日韩等地(需要国际信用卡)
  • RackNerd,价格在一年 10 刀-20 刀(如下所示)。支持支付宝、银联。购买的时候,有个 Location 选项,可以选择机房位置,后面有相应的 IP,你可以测试一下 ping 值,选择最低的那个。
  • AWS EC2香港、日本或韩国申请个免费试用一年的EC2 VPS (支持银联卡)
  • Linode买个一月USD5刀的VPS
  • Vultr上买一个日本的VPS,一个月5刀 - 6刀 (可以支付宝)

Note

  • 你要知道很多云厂商的 VPS 服务器和流量是分开计费的,所以,你要确认一下你的云帐单以免出现不预期的费用。所以,最好购买包流量的 VPS。比如:AWS 的 LightSail, RackNerd 等。

  • 在中国,因为有太多的网络提供商,所以,不同的地方,不同的网络,不同的时间,到不同的国家完全不一样,而且还经常性地调整路由,所以,经常性地有时候快有时候慢,简直就是随机的。如果你对上网要求比较高的人,最好会备 2-3个不同国家地区的VPS。

  • 香港网速应该是比较好的,但是香港的成本也是比较高的(使用 Microsoft Azure 的 East Asia 可以把 VPS 买在香港区)。台湾的网速也是不错的(可以通过 Google Cloud 购买),日本的网速其次,新加坡再次之,然后是美国的东海岸。但是,因为线路的问题,如果没有为中国区优化的线路,丢包率是非常大的,日本区 ping 值虽然很低,但是经常性的丢包,好的线路的美国的 ping 值虽然大,但是也会飞快。

  • Google Cloud Platform - GCP 的香港和台湾节点也是很快的。但是你要能买GCP的主机,你还得先翻墙,所以,感觉有点死锁了。所以,你可能先用其它方式翻墙,然后再到GCP上购买。

2.2 CN2 线路

如果你需要更好更高速的网络服务(比如你要看 Youtube 的 1080P),那么,你需要下面的这些服务器资源了(价格也会高一些)

CN2GIA 是两个关键词。CN2 GIA 全称 China telecom Next Carrier Network- Global Internet Access 电信国际精品网络,特征是路由线路上骨干节点均为59.43开头的IP。如果想要寻找接入CN2线路的国外VPS提供商,建议使用 Next Carrier Network 或者 CN2 这个关键词搜索即可。

多说一句, CN2本身又分为两种类型:

  • CN2 GT: CN2 里属于Global Transit的产品(又名GIS-Global Internet Service),在CN2里等级低,省级/出国节点为 202.97 开头,国际骨干节点有2~4个 59.43 开头的CN2节点。在出国线路上拥堵程度一般,相对于163骨干网的稍强,相比CN2 GIA,性价比也较高。

  • CN2 GIA: CN2 里属于Global Internet Access的产品,等级最高,省级/出国/国际骨干节点都以59.43开头,全程没有202.97开头的节点。在出国线路上表现最好,很少拥堵,理论上速度最快最稳定,当然,价格也相对 CN2 GT 偏高。

关于 CN2 线路的主机提供商,好些都不靠谱,只推荐下面两个,首推搬瓦工。

  • 搬瓦工 这应该是美区最好的一个用来科学上网的VPS提供商了,实测飞快,无论在中国哪个地方都很快。购买时你需要注意VPS规格上的 CN2GIA 的描述。(注:点击主页右上角的 regisiter 以后,你可以看到页面上方有两个导航条,在下面的导航条上点 Services -> Order New Services 就可以看到所有的列表了。买完后,你可能需要重装一下操作系统,装成64位带BBR的 )

  • HostDare 的 CN2 GIA 产品也是三网直连。专门有两个分类针对中国的 CN2 GIA,一个是 Premium China Optimized NVMeKVM,一组是 Premium China Optimized KVM。支持支付宝和银联。购买后要等一段时间(2-4个小时)才会创建好,IP 有可能会给你是一个已经被封了的,如果是这样,你要在3天内申请换IP,都是免费的。时间长了也可以换,就是时间比较长,而且还要花一定的费用(3美金)。线路质量还不错,不过没有搬瓦工快。

更多的可以参考这篇文章《CN2 GIA VPS主机收集整理汇总-电信,联通,移动三网CN2 GIA线路VPS主机》(注:随时间推移,这篇文章的内容可能会失效)

重点说一下,CN2 GIA + 香港机房,你会得到巨快无比的上网速度(无论你在中国的哪个位置,无论使用哪家运营商,CN2 GIA都是最优的),然而,香港地区的VPS的确是有点贵了。在 Youtube上看 4K 的视频毫无压力。虽然阿里云和腾讯的也有,但是被查到的风险基本上是100%,不建议使用,被抓了别怪我没警告过你。

3. 搭建相关代理服务

注:如下的搭建和安装脚本可参看本库的 scripts 目录下的脚本,如: Ubuntu 18.04 Installation Script (感谢网友 @gongzili456 开发),另外,这个脚本可能年久失修,不一定能用,但是可以参考,如果有问题,可以提交 PR

3.1 设置Docker服务

首先,你要安装一个Docker CE 服务,这里你要去看一下docker官方的安装文档:

然后开始设置你的VPN/SS服务

3.2 开启 TCP BBR 拥塞控制算法

TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google设计,于2016年发布的拥塞算法。以往大部分拥塞算法是基于丢包来作为降低传输速率的信号,而BBR则基于模型主动探测。该算法使用网络最近出站数据分组当时的最大带宽和往返时间来创建网络的显式模型。数据包传输的每个累积或选择性确认用于生成记录在数据包传输过程和确认返回期间的时间内所传送数据量的采样率。该算法认为随着网络接口控制器逐渐进入千兆速度时,分组丢失不应该被认为是识别拥塞的主要决定因素,所以基于模型的拥塞控制算法能有更高的吞吐量和更低的延迟,可以用BBR来替代其他流行的拥塞算法,例如CUBIC。Google在YouTube上应用该算法,将全球平均的YouTube网络吞吐量提高了4%,在一些国家超过了14%。

BBR之后移植入Linux内核4.9版本,并且对于QUIC可用。

如果开启,请参看 《开启TCP BBR拥塞控制算法

3.3 申请域名和证书

为了更为的隐蔽,使用 HTTPS 服务,你需要完成如下工作:

1) 一个域名(可以上 GoDaddy,但一定要使用美国版)

2) 然后在 GoDaddy 上修改域名解析服务器,把其指向 Cloudflare —— 当你注册完 Cloudflare 帐号后,Cloudflare 会告诉你怎么做。

3)然后,你在 Cloudflare 上创建一个子域名解析到你的 VPS 上 IP 上(注:不要开启 Cloudflare 的 Proxy 模式)

4)最后,使用 Let's Encrypt 来签 一个证书。使用 Let's Encrypt 证书你需要在服务器上安装一个 certbot,点击 certbot 这个链接,你可以选择你的服务器,操作系统,然后就跟着指令走吧。

接下来,你需要申请一个证书(我们使用standalone的方式,然后,你需要输入你的电子邮件和你解析到 VPS 的域名):

$ sudo certbot certonly --standalone

证书默认生成在 /etc/letsencrypt/live/<YOUR.DOMAIN.COM/> 目录下,这个证书90天后就过期了,所以,需要使用一个 cron job 来定期更新(稍后给出)

3.4 用 Gost 设置 HTTPS 服务

gost 是一个非常强的代理服务,它可以设置成 HTTPS 代理,然后把你的服务伪装成一个Web服务器,我感觉这比其它的流量伪装更好,也更隐蔽。这也是这里强烈推荐的一个方式

接下来就是启动 gost 服务了,我们这里使用 Docker 的方式建立 gost 服务器。

#!/bin/bash

# 下面的四个参数需要改成你的
DOMAIN="YOU.DOMAIN.NAME"
USER="username"
PASS="password"
PORT=443

BIND_IP=0.0.0.0
CERT_DIR=/etc/letsencrypt
CERT=${CERT_DIR}/live/${DOMAIN}/fullchain.pem
KEY=${CERT_DIR}/live/${DOMAIN}/privkey.pem
sudo docker run -d --name gost \
    -v ${CERT_DIR}:${CERT_DIR}:ro \
    --net=host ginuerzh/gost \
    -L "http2://${USER}:${PASS}@${BIND_IP}:${PORT}?cert=${CERT}&key=${KEY}&probe_resist=code:404&knock=www.google.com"

上面这个脚本,你需要配置:域名(DOMAIN), 用户名 (USER), 密码 (PASS) 和 端口号(PORT) 这几个变量。

关于 gost 的参数, 你可以参看其文档:Gost Wiki,上面我设置一个参数 probe_resist=code:404 意思是,如果服务器被探测,或是用浏览器来访问,返回404错误,也可以返回一个网页(如:probe_resist=file:/path/to/file.txt 或其它网站 probe_resist=web:example.com/page.html

Note

  1. 开启了探测防御功能后,当认证失败时服务器默认不会响应 407 Proxy Authentication Required,但某些情况下客户端需要服务器告知代理是否需要认证(例如Chrome中的 SwitchyOmega 插件)。通过knock参数设置服务器才会发送407响应。对于上面的例子,我们的knock参数配置的是www.google.com,所以,你需要先访问一下 https://www.google.com 让服务端返回一个 407 后,SwitchyOmega 才能正常工作。

  2. 如果认证信息(也就是用户名和密码)中包含特殊字符,则可以(应该是必须!否则客户端一侧会有很多不兼容)通过auth参数来设置,下面是使用 auth 参数的例子(注意,需要 gost 在 2.9.2+ 以上版本):

    DOMAIN="YOU.DOMAIN.NAME"
    
View on GitHub
GitHub Stars13.0k
CategoryDevelopment
Updated15h ago
Forks2.1k

Languages

Shell

Security Score

75/100

Audited on Apr 7, 2026

No findings