(需要更新)从零开始建立自己的「自由」互联网
本文最后更新于 253 天前,其中的信息可能已经有所发展或是发生改变。

从GFW设立开始,翻墙就成为了一个人人都不得不面对的问题。有了网络审查的互联网就在一定程度上来说不再自由了。如果你能够安于现状,请左转离开。这篇文章是写给希望来到没有审查的互联网的人看的。
绕过GFW的方法有很多,从原理上来说都很简单,就是在中华人民共和国之外购买一台服务器(可以理解为一台电脑),然后用加密流量透过GFW,让GFW无法识别你的网络意图,一旦连接到你的服务器,再让服务器在国外较为自由的互联网访问国内无法访问的网站,再将加载好的界面发回国内的你的想上网了的设备,这样你就能“科学上网”了。
在这里,我们其实省略了很多具体步骤,这里可以参考Ednovas的文章电丸科技AK的视频
而实现这一过程,我们需要很多准备。当然你也可以全部省略,然后去机场直接购买。

说实话,花点钱并不会吃亏,反而很有可能是节省时间和精力的最好方法。现在的机场也并不贵,基本的套餐就已经够普通用户使用了(推荐:Ednovas云

但是作为有更高需求的用户来说,在机场使用节点的安全性和隐私性都不强,机场泄露用户信息的事件也不少见。我们折腾党也不是那种会因为方便就能够购买机场的人(我们学生党也不会因为便宜就选择不省钱)。在我看来只有先自己实践、了解原理之后才能真正拥有成就感

好吧接下来就开始讲解吧。
(这篇文章并不是用来讲解原理的,而是更加偏向于实践,有不懂的可以看不良林的博客不良林的YouTube频道这是一位注重原理的YouTuber,是我目前认为讲的最好的博主)


第一步:选择一台好的VPS

这是一张YABS测速图,我们就从它入手来讲述一台VPS的基本配置要求

CPU(Central Processing Unit)

这三项都是与CPU性能有关的,众所周知,我们购买的VPS全称为Virtual Private Server,虚拟私人服务器,也就是由一台独立服务器通过虚拟化得到的服务器,一般会配备服务器类的CPU,但一般只有少数几个核心(1C 2C 4C)。对于科学上网来说,CPU是加解密流量的重要部件。所以,有一颗好用的CPU,一定程度上决定了科学上网的速度和质量。

虚拟化

虚拟化在VPS的选择中也占很大的比例。Linux 下常见的虚拟化技术有OpenVZ、KVM、LXC、Xen。我们可以了解一下其中的关系。

OpenVZ 是一种基于 Linux 内核的虚拟化技术,它允许在单个物理服务器上运行多个独立的 Linux 系统实例,每个实例都可以拥有自己的 IP 地址、文件系统、进程等。OpenVZ 使用容器技术实现虚拟化,相比于传统的虚拟机技术,它的性能更高、开销更小,因为它不需要模拟硬件,而是直接利用宿主机的资源。OpenVZ 还提供了一些管理工具,如 vzctl 和 vzlist,方便用户管理和监控容器。
OpenVZ(通常简写成 OVZ) 只能虚拟化 Linux 操作系统,但是 KVM 可以虚拟化 Linux,Windows,和其他操作系统。
OpenVZ 使用共享的 kernel,所有虚拟化 VPS 中的用户都使用同一个 kernel,因此 kernel 是不可自定义的。
一旦你使用的 RAM 达到了 host 分配的额度,那么剩下的 RAM 就是自由竞争的。如果你运行一些小型程序可能不是问题,但是一定你运行资源密集型程序就可能产生问题。
——来自Verne In Github

也正因OVZ虚拟化本身的性质,OVZ也经常被称为“超售鸡”,因为它在超售后的现象很明显。

KVM 是 Kernel-based Virtual Machine 的缩写,是一个基于内核的虚拟化技术。借助 KVM 可以将 Linux 主机隔离成多个可以独立运行的虚拟环境,即虚拟机。
KVM 允许在单个物理服务器上运行多个独立的虚拟机,每个虚拟机都可以运行不同的操作系统。KVM 使用硬件辅助虚拟化技术,即 Intel VT 或 AMD-V,来提高虚拟机的性能和安全性。KVM 还提供了一些管理工具,如 virt-manager 和 virsh,方便用户管理和监控虚拟机。由于 KVM 是一种完全虚拟化技术,因此它可以运行几乎所有的操作系统,包括 Windows 和其他非 Linux 操作系统。
KVM 是 Linux 的一部分,Linux 2.6.20 版本及之后的版本包含了 KVM。KVM 在 2006 年首次公布,并且之后持续在更新和维护。
与 VMwareESX/ESXi、微软 Hyper-V 和 Xen 等虚拟化产品不同,KVM 的思想是在 Linux 内核的基础上添加虚拟机管理模块,重用 Linux 内核中已经完善的进程调度、内存管理、IO 管理等代码,使之成为一个可以支持运行虚拟机的 Hypervisor。因此,KVM 并不是一个完整的模拟器,而只是一个提供了虚拟化功能的内核插件,具体的模拟器工作需要借助 QEMU 来完成。
KVM 允许你设置使用资源的最小和最大值,这样虚拟化的系统就只能使用这些资源。并且在 KVM 下,RAM,CPU 和硬盘资源都是直接分配给用户,用户可以完全使用这些资源,而不用担心其他虚拟化机器的竞争。
KVM 提供了一个隔离的环境,用户可以自行替换 kernel。
但是要注意,KVM 不是一个完整的虚拟机,而是借助 QEMU 来完成虚拟化过程。KVM 是 Linux kernel 的一个模块,通过命令 modprobe 去加载 KVM 模块。加载模块之后,才能通过其他工具创建虚拟机。仅有 KVM 模块不行,用户还需要开源的虚拟化软件 QEMU。
——来自Verne In Github

可以说,KVM让超售成为几乎不可能(但其实也是可以做到的),也是我个人很喜欢的一种虚拟化方式。

LXC,一般指 Linux Container,即内核容器技术的简称。LXC 将 Linux 进程沙盒化,使得进程之间相互隔离,并且能够控制各进程的资源分配。
LXC(Linux Containers)是一种基于 Linux 内核的容器化技术,它允许在单个物理服务器上运行多个独立的 Linux 系统实例,每个实例都可以拥有自己的文件系统、进程等,但它们共享宿主机的内核。LXC 使用轻量级的虚拟化技术,相比于传统的虚拟机技术,它的性能更高、开销更小,因为它不需要模拟硬件,而是直接利用宿主机的资源。LXC 还提供了一些管理工具,如 lxc-start 和 lxc-stop,方便用户管理和监控容器。LXC 可以用于构建轻量级的虚拟化环境,比如用于开发、测试、部署等场景。
Linux 容器项目(LXC)提供了一组工具、模板、库和语言绑定。LXC 采用简单的命令行界面,可改善容器启动时的用户体验。
LXC 提供了一个操作系统级的虚拟化环境,可在许多基于 Linux 的系统上安装。在 Linux 发行版中,可能会通过其软件包存储库来提供 LXC。
在 Linux 内核中,提供了 cgroups 功能,来达成资源的区隔化。它同时也提供了名称空间区隔化的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括进程树,网络,用户 id,以及挂载的文件系统。但是 cgroups 并不一定需要引导任何虚拟机。
LXC 利用 cgroups 与名称空间的功能,提供应用软件一个独立的操作系统环境。LXC 不需要 Hypervisor 这个软件层,软件容器(Container)本身极为轻量化,提升了创建虚拟机的速度。软件 Docker 被用来管理 LXC 的环境。
——来自Verne In Github

Xen 最初是剑桥大学 Xensource 的开源项目,2003 年发布首个版本,2007 年 Xensource 被 Citrix 公司收购,开源 Xen 由 xen.org 继续维护。
Xen 是一种基于虚拟机监控器(Hypervisor)的虚拟化技术,它可以在一台物理服务器上运行多个独立的虚拟机,每个虚拟机都可以运行不同的操作系统。Xen 使用硬件辅助虚拟化技术,即 Intel VT 或 AMD-V,来提高虚拟机的性能和安全性。Xen 的虚拟机监控器可以直接访问物理硬件,而虚拟机则运行在虚拟化的环境中,因此可以获得接近于原生系统的性能。Xen 还提供了一些管理工具,如 xm 和 xl,方便用户管理和监控虚拟机。Xen 可以用于构建高性能、高可用性的虚拟化环境,比如用于云计算、虚拟桌面、数据库等场景。
Xen 是运行在裸机上的虚拟化管理程序(HyperVisor)。
Xen 会在 Guest VM 边上运行着管理端 VM,Xen 称这个 VM 为 Dom0,虚拟机操作系统叫做 DomU。这个管理 VM 会负责管理整个硬件平台的所有输入输出设备,半虚拟化中 Hypervisor 不对 IO 设备做模拟,只对 CPU 和内存做模拟。
半虚拟化还有一个叫法:操作系统辅助虚拟化(OS Assisted Virtualization),这是因为 Guest VM 自身不带设备驱动,需要向“管理 VM”寻求帮助。这种虚拟化技术允许虚拟化操作系统感知到自己运行在 XEN HyperVisor 上而不是直接运行在硬件上,同时也可以识别出其他运行在相同环境中的虚拟机。
软件 Docker 被用来管理 LXC 的环境。
——来自Verne In Github

内存、硬盘

内存是一台VPS的运行必须项,和正常的电脑是一样的。一般内存会和CPU组成配置,比如1C1G 2C1G 2C2G 2C4G 4C4G等等。一般来说,内存越大,性能越好。
硬盘是科学上网的基础,如果没有足够大的硬盘,就无法安装相关的依赖,无法安装后续要用的应用。一般来说,3-5G的硬盘对于科学上网来说就已经够了。

系统

VPS的性能无法和桌面级的设备相比较,所以想要在这里使用Windows系统几乎是不可能的。那怎么办呢?我们最好的选择就是Linux系统。这个系统占用少,对开发人员来说是不错的选择。但是,对于从来没有接触过Linux的小白来说这很艰难。所以建议在这之前先去学习一下基本的Linux命令。
我选择的是Debian系的Linux发行版,包括Debian、Ubuntu、Armbian等等。所以之后的命令都会在这些系统的基础上进行。
在这里还要介绍一个概念:DD系统。DD系统,就是通过网络重装系统,而不是传统的通过u盘或者是控制面板重装系统。而一键DD系统脚本就是通过自动化脚本执行所有的dd步骤,你只需要执行一行命令即可dd完成,方便快捷。在系统出现问题的时候,用这个脚本就能快速的重开。
这里推荐两个DD命令:

bash <(wget --no-check-certificate -qO- 'https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh') -d 11 -v 64 -p "password" -port "22" 

password可自行修改为想要的密码,在下次登录时仍然用SSH端口22+密码即可看到焕然一新的Debian系统。这里的参数可自行修改来安装想要的系统。

wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh 

脚本来自NodeSeek

到这里,我们应该按照自己的需要选好了一台(或几台)合适的VPS。如果没有缘好,也可以去看看BuyVM RackNerd CloudCone等良心卖家看看

接下来是基本环境的搭建

更新VPS系统

apt update && apt upgrade

拉取Ednovas的脚本

wget -N https://cdn.jsdelivr.net/gh/ednovas/vpstoolbox@main/ednovastool.sh && chmod +x ednovastool.sh && ./ednovastool.sh

这里有由Ednovas大佬收集的大量有用脚本供使用。
当然你也可以自己动手丰衣足食,具体步骤如下:
安装x-ui脚本

bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)
bash <(curl -Ls https://raw.githubusercontent.com/FranzKafkaYu/x-ui/master/install.sh)

安装Cloudflare WARP服务(适合给只有IPv6的小鸡添加IPv4访问)

wget -N https://raw.githubusercontent.com/fscarmen/warp/main/menu.sh && bash menu.sh

第二步:选择一个好的协议和支持的客户端

加密协议直接决定了你的科学上网有多大可能会被GFW发现并识别。最早的Shadowsocks协议现在已经可以被精确识别并封禁。由于GFW的黑箱状况,任何协议理论上都有自己的缺陷,2023.4的大规模封禁事件就是最好的证明(有关这件事可以参考不良林的博客这篇论文)。绝对的安全是不可能的,但我们可以尽可能地接近安全。

Vmess+ws+TLS

这是在2023年4月GFW大规模封禁TLS流量之前最为安全的协议方式,目前市面上绝大多数的客户端都支持这一协议。这样搭建的节点就算在现在也是大多数人和机场主的选择,毕竟其稳定性和安全性都是有保障的。其缺陷就在于TLS in TLS特征,目前有被识别的风险
与这一协议相关的还有Trojan协议,两者在缺陷没有明显的区别,Trojan协议的初衷是将富强流量伪装为正常的HTTPS流量来通过GFW的审查。
搭建也很简单 如下配置即可。

Vless+ws+TLS

Vless是继Vmess协议之后的一个分支,目前Clash.Meta V2ray等核心都支持Vless协议。
如其名,Vless是Vmess协议的轻量版

VLESS是一种无状态的轻量级传输协议,分为入站和出站部分,可以作为Xray客户端和服务器之间的桥梁。

VMess不同,VLESS 不依赖系统时间,认证方式也是 UUID
——来自X Project

Reality

Reality是最新的用于消除TLS in TLS特征的解决方案。

Server side implementation of REALITY protocol, a fork of package tls in Go 1.19.5.
——来自REALITY

若用 REALITY 取代 TLS,可消除服务端 TLS 指纹特征,仍有前向保密性等,且证书链攻击无效,安全性超越常规 TLS
可以指向别人的网站,无需自己买域名、配置 TLS 服务端,更方便,实现向中间人呈现指定 SNI 的全程真实 TLS
通常代理用途,目标网站最低标准:国外网站,支持 TLSv1.3 与 H2,域名非跳转用(主域名可能被用于跳转到 www)
加分项:IP 相近(更像,且延迟低),Server Hello 后的握手消息一起加密(如 dl.google.com),有 OCSP Stapling
配置加分项:禁回国流量,TCP/80、UDP/443 也转发(REALITY 对外表现即为端口转发,目标 IP 冷门或许更好)
REALITY 也可以搭配 XTLS 以外的代理协议使用,但不建议这样做,因为它们存在明显且已被针对的 TLS in TLS 特征
REALITY 的下一个主要目标是“预先构建模式”,即提前采集目标网站特征,XTLS 的下一个主要目标是 0-RTT
REALITY 客户端应当收到由“临时认证密钥”签发的“临时可信证书”,但以下三种情况会收到目标网站的真证书:

  1. REALITY 服务端拒绝了客户端的 Client Hello,流量被导入目标网站
  2. 客户端的 Client Hello 被中间人重定向至目标网站
  3. 中间人攻击,可能是目标网站帮忙,也可能是证书链攻击
    REALITY 客户端可以完美区分临时可信证书、真证书、无效证书,并决定下一步动作:
  4. 收到临时可信证书时,连接可用,一切如常
  5. 收到真证书时,进入爬虫模式
  6. 收到无效证书时,TLS alert,断开连接
    ——来自REALITY

注意,这个协议只在第二个版本的x-ui上有效,并且应该把目标网站改为支持TLS 1.3的网站(巨硬已经扛不住了,这样配置节点是不通的)如www.telsa.com

客户端的选择

IOS(iPadOS)

这是我最常用的客户端,所以放在最前面。

这其实也是许多果粉的痛点,因为在移动设备端,IOS与iPadOS几乎就没有开源、免费的客户端。我也没有找到好用的免费客户端。(其实也有,大家可以看一下OneClick和Potatso Lite,勉强能用)

接下来就是推荐几个付费的客户端了

iOS与iPadOS上的付费软件中,ShadowRocket脱颖而出,这是一款堪比瑞士军刀的软件,对于市面上的几乎所有协议都有支持。(售价$2.99)

然后是Loon,一款拥有丰富的插件的软件,同样拥有代理功能。实际体验还可以,有ShadowRocket没有的自动切换功能,但单个节点的速度慢于ShadowRocket。好坏兼有。($4.99)

最后推荐的是QuantumultX,目前的最强($7.99),没有用过(望而生畏)

在其他系统上都有免费客户端,网上教程很多,这里就不一一赘述了(明显就是偷懒


第三步:速度、质量(稳定性)优化

感谢电丸科技的AK给我们的这张图,这让我们清楚的意识到了……

好吧,在讲节点导入到我们自己的客户端中后,节点是能用了(只要你的IP本身没有被墙),但是速度不快,而且用一段时间后就被墙了,这样怎么办呢?

这时候就需要使用魔法了。

CF反代(利用CDN)

CloudFlare,一家在美国的网络公司,主要业务有CDN和DDOS防护等等。选择免费计划的用户也可以享有免费的CDN服务。(这TM不比贵的要命的国内的CDN服务商好)

CloudFlare的注册就不再赘述了,接下来点击左侧的Workers和Pages,选择添加Workers,添加后CloudFlare会为你生成一个以.workers.dev为后缀的域名。接下来点击快速编辑,删掉原有的内容,改为以下内容

addEventListener(
	"fetch",event => {
		let url=new URL(event.request.url);
		url.hostname="域名";
		let request=new Request(url,event.request);
		event. respondWith(
			fetch(request)
		)
	}
)

点击保存,随后进行优选IP的步骤(这一步其实可以跳过,直接使用speedip.eu.org即可)

来到https://github.com/XIU2/CloudflareSpeedTest/releases/tag/v2.2.4下载适合自己的版本,并开始测速,系统会自动选出最优的10个IP,用这个IP替换服务器地址,在ws的伪装域名中填入自己获得的域名,这样,一个套好CF的反代节点就配置好了,速度应该有不少的提升。

附图如下:

注意:这里需要注意的是,CF的CDN服务是有端口限制的,也就是说,只有在特定的端口上的节点才有效。

HTTP端口为:80 2052 2082 2086 2095 8080 8880 ,请不使用TLS的节点搭建在这些端口上

HTTPS端口为:443 2053 2083 2087 2096 8443,请使用TLS的节点搭建在这些端口上

(这是对于无域名的小白的教程,如果是对于有域名的,我相信你能自己找到利用域名解析的反代方法)

利用中转

这里推荐我自己在用的小稚中转,个人感觉还不错,点这里查看详细信息

中转的原理https://tech.a-better-planet.com/%E4%BB%80%E4%B9%88%E6%98%AF%E4%B8%AD%E7%BB%A7-%E4%B8%AD%E8%BD%AC%E8%8A%82%E7%82%B9-bgp%E4%B8%AD%E8%BD%AC-iplc%E4%B8%93%E7%BA%BF%E6%9C%BA%E5%9C%BA%EF%BC%9F.html


有一些内容将在之后的文章中补充

Author: Master
Link: https://blog.enormia0785.eu.org/2023/07/18/119/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%bb%ba%e7%ab%8b%e8%87%aa%e5%b7%b1%e7%9a%84%e3%80%8c%e8%87%aa%e7%94%b1%e3%80%8d%e4%ba%92%e8%81%94%e7%bd%91/

评论

  1. Edge 115.0.1901.203
    9 月前
    2023-8-15 19:14:18

    (顺着nodeseek爬过来的(x
    话说大佬在介绍ios和ipados端的软件时考不考虑介绍一下sing-box(开始了,这人又开始传教了(x
    顺便也推一下我自己的教程(什么aff行为(x))

    • 博主
      1391491061
      Safari 16.6
      9 月前
      2023-8-15 22:00:52

      最近才刚接触到sing-box
      有空加上

    • 1391491061
      Edge 115.0.1901.203
      9 月前
      2023-8-16 0:07:55

      (话说这个ip定位是不是有点问题(
      怎么就把我定位到US了(

  2. 博主
    Kindle 3.0
    9 月前
    2023-8-16 23:55:11

    可能是wordpress
    设置有问题吧

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇