「SCIENTIFIC-BROWSING」- 科学上网 | Scientific Browsing

该部分笔记将整理:与代理服务器、网络加速、上网有关的内容,以及相关问题的处理方法。

认识

—— 该部分将介绍科学上网是什么、其的由来、大致的发展过程,以帮助我们快速形成针对`科学上网`技术的基本认识。

作为 IT 从业人员,针对我们的工作场景,我们使用到的很多软件是由外国人开发,所以经过需要查看位于国外站点的官方文档。但是,现在受各国政策与网络的影响,访问国外站点存在各种网络连接失败的情况。

科学上网,Scientific Browsing,其正是该问题的解决方案,其通过代理服务器来建立相对高速的网络传输隧道,来提高网络质量。正如 Wikipedia 所说 … Internet censorship circumvention, also referred to as going over the wall (Chinese: 翻墙; pinyin: fān qiáng) or scientific browsing (Chinese: 科学上网; pinyin: kēxué shàngwǎng) in China, is the use of various methods and tools to bypass internet censorship …

补充说明,我们需要科学上网,仅是因为我们需要阅读外国的官方文档,需要学习跟多的知识及国外的先进技术。针对其他非技术相关的内容,我们并无兴趣,也不会参与。

组成

—— 该部分将介绍科学上网技术的组成,例如`软件架构`、`交互原理`等等,以帮助我们了解`科学上网`服务的内部原理。

针对科学上网相关技术,其本质是类似的(代理、VPN、隧道、加密、……),但是为了规避审查,所以其还引入很多其他技术。

架构体系

Client ⇒ Proxy Client ⇒ (Encrypted Traffic) ⇒ Firewall ⇒ (Encrypted Traffic) ⇒ Proxy Server ⇒ Destination Server

Redir Host

当我们使用 REDIR-HOST 模式时,

  1. 浏览器请求 DNS 解析,
  2. DNS 解析请求被 Proxy Client 截获,Proxy Client 向外部发送 DNS 解析请求,获得 IP Address 以后,返回给浏览器,
  3. 浏览器根据 IP 发起连接,请求被 Proxy Client 拦截,Proxy Client 根据 IP 在其映射表中反查出域名,再用 Rules 判断域名是否被 Proxy Client 处理
  4. 如果经过 Proxy Client 转发,代理服务器再次解析 dns 并完成后续请求。

根据 ip 在其映射表中反查出域名,进而判断流量是否经过代理,所以即便 DNS 被污染也无所谓,毕竟不会请求该 IP Address。

缺点

  • 同个 IP Address 会被多个域名使用,进而影响 IP 反查域名功能。

Fake IP

该 Fake IP 概念出自 RFC3089,早在 2001 年就被提出来。其为实现 Proxy Client 分流功能,以避免所有流量都经过 Proxy Server 转发。

  • 针对常规网站,无需经过代理,直接转发到 Destination Server 端;
  • 针对特殊网站,需要经过 Proxy Client 转发给 Proxy Server 再发往 Destination Server 端;

当使用 Fake-IP 模式时,其大致工作过程如下:

  1. 浏览器发起 DNS 解析请求,
  2. dns 解析请求被 Clash Client 截获,Clash Client 立刻返回一个 Fake IP 给浏览器,
  3. 浏览器向 Fake IP 发起网络连接,
  4. 请求被 Clash Client 拦截,Clash Client 根据 Fake IP 在自己的映射表中反查出域名,Clash Client 根据域名及 rules 判断是否走代理,
  5. 如果流量经过代理 Clahs Server 处理,则 Clash Server 正常 dns 解析,并完成后续工作。

简而言之,该技术并不会触发“真正”的 DNS 解析,进而避免 DNS 污染。间接地通过域名来判断是否要由 Proxy Server 处理。

优点:

  • 总之 Fake-IP 更快,因为少一次 clash 解析 dns。

缺点:

  • 返回 Fake IP 会污染本地 DNS 缓存。当代理断开后,DNS 缓存失效前,设备无法访问网络。

性质

提供科学上网功能

构建

—— 该部分将记录获得科学上网服务的方法。我们更加关注于“通过工具服务实现科学上网”,而非“从零构建科学上网的服务”。

科学上网客户端大全 | https://clashforwindows.org/all-proxy-client/

免费服务

https://nodefree.cc/

开源软件

Project X (Xray)
XTLS/Xray-core: Xray, Penetrates Everything.
vaxilu/x-ui: 支持多协议多用户的 xray 面板

Clash |
是个支持多种协议的客户端,通过配置规则将流量转发到不同的远程节点。

Project V (V2Ray) | https://www.v2ray.com/en/
包含“用于构建特定网络环境工具”的项目(挖加密隧道)。
https://github.com/v2ray/v2ray-core
V2Ray 完全使用教程
基于 v2ray 实现科学上网

Streisand | StreisandEffect/streisand
它实际是代理应用封装,可以用于快速部署 OpenVPN、Shadowsocks 等等服务。

php-proxy-app,Athlon1600/php-proxy-app
Web Proxy Application built on php-proxy library ready to be installed on your server

nurdism/neko: A self hosted virtual browser (rabb.it clone) that runs in docker.
这个项目也是不错的……

商业服务

DuangCloud | 一家专业的老牌优质 SS 机场

  • 弃用,站点无法访问 ⇒ 根据我们的了解,尽管提供代理服务,可能是已跑路的伪造站点。

XSUS | 极致简洁,互通世界

  • 正在使用
  • 8.00CNY/168G/mon

CuteCloud

LMout | ……

DuangCloud | …… |

ExpressVPN – A Fast and Secure VPN
VPN.AC – Secure, Fast, Reliable VPN Service
PandaVPN – 全球最快&最具隐私安全的 VPN

Curlie – Computers: Internet: Proxying and Filtering: Hosted Proxy Services: Free: Proxy Lists
https://curlie.org/Computers/Internet/Proxying_and_Filtering/Hosted_Proxy_Services/Free/Proxy_Lists

Shadowsocks.com | https://portal.shadowsocks.au/aff.php

自建隧道 | Secure Tunnels

网络加速,不管用什么技术,什么方法,什么协议,本质上都在在挖隧道:

  1. 挖条加密隧道,让流量通过加密隧道。只要能挖出加密隧道,就能用来网络加速;
  2. 然后在加密隧道中运行代理协议(HTTP、SOCKS)等等协议便能实现网络加速;

TLS + WebSocket,我们还未使用过该工具。
Stunnel + Squid,企业级翻墙服务部署文档

其他工具

系统级 Shadowsocks 代理。Shadowsocks:美国云主机,VPS,HHVPS,国外云主机购买、SS 搭建。
Glype 项目
HTTP & HTTPS:代理搭建。
lantern 代理;

// ONHD Proxy:解决 Linux 系统的全局代理问题。

方案

VPN | OpenVPN, L2TP/IPSec, …

这是我们最早听说的方法。现在(05/18/2021)提到网络加速已经很少用 VPN 这个术语,因为 VPN 多指虚拟私有局域网。

缺点:作为网络加速协议,协议特征过于明显,很容易被识别,被屏蔽。

HTTP(s) PROXY | Squid, …

这也是早期为网络加速而广泛使用的协议。最初为了解决问题,我们使用 HTTP(s) 实现网络加速。

缺点:作为网络加速协议,与 VPN 类似,协议特征过于明显,很容易被识别。我们部署该类型的代理,而后很快便被屏蔽。

实现:HTTP(S) Proxy with Squid

Dynamic Port Forwarding | SSH, …

后来我们开始使用 SSH 进行动态端口转发,以实现网络加速。

缺点:但是报文具有某些特征,依旧容易被识别。我们部署该类型的代理,而后很快便被屏蔽。

SOCKS | Shadowsocks, ShadowsocksR, …

后来我们开始使用 SOCKS 协议,使用 Shadowsocks 实现,坚持很久时间。

缺点:但是后来服务器被封禁了,大概是因为协议的原因:虽然流量是加密的,但是连接初始化的报文不是加密的,还是有很明显的协议特征。而且客户端是能够发送虚假的握手报文,只要服务端有“合理的回应”,就能证明服务器是 SOCKS 网络加速服务。

经测试 shadowsocks 协议已经完全被识别

Self-hosed Tunnel | HTTP over TCP Tunnel

kcptun + Squid,通过 kcptun 服务来提供加密隧道,通过 Squid 来提供 HTTP 代理。

改进

使用 cloudflare 加速你的网站隐藏你的网站 IP
使用 CDN 啊,CDN 提供 IP 地址,但是要使用国外的 CDN 服务器,这样封的也是 CDN 的 IP 地址。

参考

What is a transparent proxy?
Configure SQUID transparent proxy with basic auth
How to properly configure squid as transparent proxy with authentication
How to resolve the DNS locally when there is a proxy configured?
Wikipedia/Proxy server
关于 Clash 科学上网的最佳实践 ⇒ Jie Li’s Blog
【教程三】软路由科学上网,openclash,openwrt IPv6配置 ⇒ 阿修的博客
浅谈在代理环境中的 DNS 解析行为 ⇒ Sukka’s Blog