科学上网技术原理及配置教程
1.什么是科学上网?
由于中国大陆的一些政治原因,我们上国际互联网的流量在出国的时候一般会受到政府的审查。(其他的国家没有上网流量审查,中国特有,上国内的网站不会被屏蔽),类似于google,facebook,twitter的一些网站一般会都会被政府的屏蔽,导致我们在中国大陆是无法直接访问这些被屏蔽的网站的,因此我们需要借助一些特别的技术手段实现访问这些被屏蔽的网站
我们通常上网的流量在访问国际互联网首先要经过政府的流量审查设备GFW(Great FireWall),因此我们要访问那些被屏蔽的网站,如google,首先就要过GFW这一关
要绕过GFW我们首先要明白GFW的工作原理
- GFW工作原理
GFW通常通过域名、IP、关键字等进行流量审查(但不仅限于这些手段),因此我们要绕过GFW就要绕过GFW就要借助这些特点如果我们使用科学上网一般是这样的1
2
3sequenceDiagram
用户->> GFW:访问google
GFW -->> Google: 丢弃数据包1
2
3
4sequenceDiagram
用户 ->> GFW:访问代理服务器
GFW ->> 代理服务器: (正常访问)
代理服务器 ->> Google: (访问成功)
2.常用的科学上网手段
VPN
VPN(Virtual Private Network)虚拟专用网络,一般用于企业中为了实现多地区组网实现加密通讯的一种协议。正是由于VPN加密的特点,使得VPN可以用于科学上网,不过近些年由于GFW的不断升级,GFW现如今很容易识别到VPN流量,因此现如今使用VPN实现科学上网的方式并不安全。Shadowsocks协议
一种简单的基于socks5代理方式的加密传输协议,最早由clowwindy为了实现科学上网而开发,轻量而且抗封锁ShadowosocksR协议
Shadowsocks协议的加强版本VMess协议
VMess协议是v2ray原创的加密通讯协议(也是为了实现科学上网)VLess协议
VLESS是一种无状态的轻量级数据传输协议,被定义为下一代V2ray数据传输协议。Trojan协议
Trojan使用TLS加密模式模仿互联网最常见的https流量,以逃过防火墙的识别。hyster*
3.详细技术原理
1.以shadowsocks为例
shadowsocks程序中有两个核心程序分别为ss-server和ss-local
整个工作流程
1 | graph TD |
1.客户端需要代理的程序首先将需要代理的流量封装成socks5数据包发送给本地代理客户端ss-local
2.ss-local接收到来自客户端程序发送来的流量之后,将数据包解封装还原成原始流量,并将数据包重新封装成shadowsocks数据包,并将数据包进行加密,发送给远程shdowsocks服务器ss-server。
3.ss-server接收到ss-local客户端发送来的数据后,首先将数据解析,并将数据进行解密,还原成原始数据报文,并根据数据报文中的信息,请求客户端实际需要请求的服务器。
4.ss-server接收到实际请求的服务器返回来的数据报文,将数据报文首先进行加密,并将数据报文封装成shadowsocks数据包文,发送给远程客户端ss-local。
5.客户端ss-local接收到数据包后将数据包进行解密,还原数据原始报文,并将数据包文封装成socks5协议数据包返回给实际代理的应用程序。
4.科学上网服务器部署
以下部署环境均基于Ubuntu-20.04环境进行部署
1.shadowsocks
1.1 shadowsocks服务端
1.安装shadowsocks服务文件
1 | #获取源码 |
2.修改配置文件(服务端)
1 | { |
3.创建service文件
1 | vim /usr/lib/systemd/system/shadowsocks-libev-server@.service |
4.启动shadowsocks服务器
1 | systemctl start shdowsocks-libev-server@.service |
1.2 shadowsocks客户端
1.安装shadowsocks服务文件
1 | #获取源码 |
2.创建配置文件
1 | vim /etc/shadowsocks-libev/config.json |
3.创建service文件
1 | sudo vim /usr/lib/systemd/system/shadowsocks-libev-local@.service |
4.启动shadowsocks客户端
1 | sudo systemctl restart shadowsocks-libev-local@.service |
2.xray
2.1 xray服务端配置
1.获取Xray内核,这里直接从github下载二进制文件
1 | wget https://github.com/XTLS/Xray-core/releases/download/v1.7.5/Xray-linux-64.zip |
2.解压文件
1 | mkdir /usr/local/xray |
解压完一会得到几个文件
- xray xray的核心文件
- geosite.dat 用于流量分流的域名规则
- geoip.dat 用于流量分流的ip规则
- readme.md 说明文档
3.创建服务端配置文件
基于vless+kcp传输协议
1 | sudo mkdir /etc/xray |
4.创建service
1 | sudo vim /usr/lib/systemd/system/xray.service |
4.启动xray服务器
1 | sudo systemctl start xray.service |
2.2 xray客户端
1.获取Xray内核
这里直接从github下载二进制文件
1 | wget https://github.com/XTLS/Xray-core/releases/download/v1.7.5/Xray-linux-64.zip |
2.解压文件
1 | mkdir /usr/local/xray |
3.配置客户端配置文件
1 | vim /etx/xray/config.json |
1 |
|
4.启动客户端
1 | sudo systemctl start xray.service |
*5.配置透明代理(可选)
5.1 配置路由转发
1 | vim /etc/sysctl.conf |
5.2 配置流量重定向(使用iptables)
1 | iptables -t mangle -N XRAY |
5.3 配置路由策略
1 | sudo ip route add local default dev lo table 100 # 添加路由表 100(匹配到这个规则的数据包都被视为lo网卡发出的 |
*5.4 设置开机自启动(可选)
保存iptables规则
1 | sudo bash -c "iptables-save > /etc/iptabels/iptables.rules" |
创建service文件
1 | sudo vim /usr/lib/system/system/iptables.service |
1 | [Unit] |
1 | #配置xray开机自启动 |
*6.通过ocserv服务器进行中转(可选)
为了使用更加的方便,可以将xray客户端搭建在云服务器上,然后再云服务器上搭建ocserv服务端,通过配置路由规则,将ocserv客户端的流量通过ocserv服务器用xray进行转发,实现科学上网
整个技术架构
1 | sequenceDiagram |
实现通过ocserv进行中转的前提是服务器已经配置好透明代理,只要配置好透明代理,服务器上所有的流量都会走xray进行路由匹配,如果检测到需要路由的流量,xray会对流量进行自动代理。因此要实现通过ocserv对流量进行中转只需要将服务器的ocserv配置好即可,并且将ocserv和客户端通信的流量从xray过滤即可,防止ocserv直连客户端的流量同样走代理
6.常用的客户端软件配置(基于windows)
6.1 基于Windows
6.1.1.ClashForWindows
Clash for Windows是代理工具Clash在Windows系统的唯一图形客户端,同时还支持Windows、Linux、macOS三大系统,功能强大且支持多种代理协议,如Shadowsocks(SS)、ShadowsocksR(SSR)、Socks、Snell、V2Ray、Trojan等代理协议。以下是配置步骤
1.获取ClashForWindows
下载windows下clash客户端💻
2.点解clash主界面的profile选项
3.输入订阅链接(由购买的机场提供)后并点击下载
4.点击下载好的配置文件
5.返回节点列表,进行刷新,选择合适的可用的节点
6.1.2.V2rayN
v2rayN是Windows系统下的代理软件客户端,功能强大且支持多种代理协议,如VMess、VLESS、Trojan、Socks、Shadowsocks等代理协议
1.获取V2rayN文件
下载V2rayN
2.解压并启动V2rayN3.添加订阅连接
4.返回节点列表,选择节点
6.2.基于Linux
6.2.1 Clash
1.获取Linux平台下clash可执行文件
下载Linux下clash客户端💻
2.解压配置文件
1 | #解压 |
3.获取配置文件
1 | curl -o /usr/local/etc/clash/config.yaml $URL #URL由机场进行提供 |
4.第一次启动clash(去下载geoip库)
1 | clash -d /usr/local/etc/clash |
5.使用systemd管理clash启动与停止
1 | vim /usr/lib/systemd/system/clash.service |
6.启动clash
1 | systemctl start clash.service |
7.*配置透明代理
1 | iptables -t nat -N CLASH_TCP_RULE |
7.如何借助局域网已经科学上网设备设备实现科学上网?
1.代理模式
此次实例仍然基于clash进行演示。
对于不便于装上科学上网的客户端的设备可以使用局域网已经实现科学上网的设备实现科学上网,基本原理如下
配置流程
1.开启clash的局域网访问
2.获取主机的ip和端口
1.获取ip
对于windows系统,Win+R键,输入cmd,输入ipconfig
由于我这里连接的是网线,因此有效的ip应该是以太网,如果你使用的是wifi连接,则关注wlan连接的ip信息。
3.手机上配置相关代理
主机名为之前查看的ip地址,端口号为clash主界面配置的端口号
注意事项
配置完成即可实现科学上网,如果不行,请检查电脑端clash是否科学上网正常。
2.网关模式
网关模式即透明代理模式,需要配置好科学上网的设备上配置好路由转发和透明代理,其他的设备只需要将网关修改为目标主机的ip地址,即可实现科学上网
对于节点机场购买可以参考毒药官网