【工具学习】Scientific Internet - hippowc/hippowc.github.io GitHub Wiki

主体思路

利用境外服务器代理的方法来绕过 GFW 的过滤 目前有这么几种不同的技术

ssh tunnel

SSH(Secure Shell)是一个提供数据通信安全、远程登录、远程指令执行等功能的安全网络协议

这个协议可以好好研究下,很好用,首先你需要有一台支持SSH的墙外服务器,此服务器啥都不需要,只要能SSH连接即可。 客户端SSH执行如下命令:

ssh -D 7001 username@remote-host

上述命令中-D表示动态绑定,7001表示本地SOCKS代理的侦听端口,可以改成别的,后面的 username@remote-host就是你登录远程服务器的用户名和主机。当然,这个命令后会提示输入密码,就是username这个用户的密码(除非你配置了SSH公钥认证,可以不输入密码),这样隧道就打通了。

由于 ssh 本身就是基于 RSA 加密技术,所以 GFW 无法从数据传输的过程中的加密数据内容进行关键词分析,避免了被重置链接的问题,但由于创建隧道和数据传输的过程中,ssh 本身的特征是明显的,所以 GFW 一度通过分析连接的特征进行干扰,导致 ssh 存在被定向进行干扰的问题。

GFW 最近弄的是先检测首部特征判断 SSL 和 SSH,然后统计包长度和方向,用实现训练好的模型去判断承载的流量是否为 HTTP。如果你用 SSH 翻墙,或者你的操作行为发的数据包过于接近 HTTP,就会被 reset。反过来,如果你想用 SSH 翻墙,只要在用来翻墙的那个 ssh 连接里做些别的操作(比如反复 tail 一个长文件,这样会不停的输出;或者用管道不停的往 ssh 里写命令,这样会不停的输入),就可以让这个模型失效,从而不会被判定为翻墙。

VPN

VPN(Virtual Private Network)即虚拟专用网络,它可以利用廉价接入的公共网络(主要使用Inter-net)来传输私有数据,相较于传统的专线连网方式具有成本优势,因此被很多企业和电信运营商采用。

VPN 比shadowsocks更加底层,它通过操作系统的接口直接虚拟出一张网卡,后续整个操作系统的网络通讯都将通过这张虚拟的网卡进行收发。这和任何一个代理的实现思路都差不多

  • VPN和SSH隧道翻墙有如下区别:

VPN的设置是全局的,即电脑一旦挂上VPN,所有的联网程序都将自动使用VPN;而建立好SSH隧道后,需要程序设定使用隧道才会使用隧道联网。如果使用商用的VPN一般要花钱,如果自己搭,VPN的搭建难度大于SSH隧道。因为SSH隧道只要一台可以SSH的服务器即可,根本不需要在服务器上配置任何东西。vpn在IP层工作,而shadowsocks在TCP层工作。

shadowsocks

ss与ssh tunnel的原理类似,区别在与ss分为 ss local和ss server,本地浏览器先通过socks协议与ss local通信,ss local负责将数据加密,并将所有数据内容加密,并转发至ss server,ss server需要解析socks协议,得到浏览器访问的目标地址,并发送请求,之后获得数据并加密返回。

linux安装: 对于ubuntu

sudo apt-get -y install python-gevent python-pip
sudo pip install shadowsocks
sudo apt-get -y install python-m2crypto

对于centos将apt-get 都换成yum

首先安装epel扩展源:
yum -y install epel-release

配置:

sudo mkdir /etc/shadowsocks
sudo vim /etc/shadowsocks/config.json
{
	"server":"0.0.0.0",
	"server_port":1194,
	"local_address":"127.0.0.1",
	"local_port":1080,
	"password":"qwe!@#$%123",
	"timeout":300,
	"method":"aes-256-cfb",
	"fast_open":false,
	"workers": 1
}

启动与停止:

ssserver -c /etc/shadowsocks/config.json -d start
ssserver -c /etc/shadowsocks/config.json -d stop

pac

代理自动配置(Proxy auto-config,简称PAC),是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。

一个PAC文件包含一个JavaScript形式的函数 FindProxyForURL(url, host)。这个函数返回一个包含一个或多个访问规则的字符串。用户代理根据这些规则适用一个特定的代理其或者直接访问。当一个代理服务器无法响应的时候,多个访问规则提供了其他的后备访问方法。浏览器在访问其他页面以前,首先访问这个PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通过网页的 网络代理自发现协议(Web Proxy Autodiscovery Protocol) 自动配置的。简单的讲,PAC就是一种配置,它能让你的浏览器智能判断哪些网站走代理,哪些不需要走代理。