¶简化安装篇
¶1、v2ray
¶安装方式
服务端 docker 版 v2ray + 客户端 v2rayN
¶服务端
1 | mkdir -p /opt/v2ray |
¶客户端
以 v2rayN 客户端为例,配置设置如下:
¶代理测试
运行 v2rayN 并设置好以上节点配置后,浏览器可直接科学上网。
¶参考:
¶2、trojan
¶安装方式
服务端 docker 版 trojan-go + 客户端 v2rayN
¶服务端
1 | 提前运行一个nginx,目的是trojan依赖一个http的80端口用作代理伪装 |
- 如果 TLS 握手成功,检测到 TLS 的内容非 Trojan 协议(有可能是 HTTP 请求,或者来自 GFW 的主动探测)。Trojan-Go 将 TLS 连接代理到
remote_addr:remote_port
上的 HTTP 服务。这时在远端看来,Trojan-Go 服务就是一个 HTTPS 网站。- 如果 TLS 握手成功,并且被确认是 Trojan 协议头部,并且其中的密码正确,那么服务器将解析来自客户端的请求并进行代理,否则和上一步的处理方法相同。
注意:服务端上的 remote_addr 和 remote_port 配置是用于反向代理到HTTP 服务上的,和客户端上的含义不一样。
¶客户端
以 v2rayN 客户端为例,配置设置如下:
¶代理测试
客户端运行 v2rayN 并设置好以上节点配置后,浏览器可直接科学上网。
¶参考:
https://github.com/p4gefau1t/trojan-go
¶定制安装篇
¶1、v2ray
¶安装方式
服务端 v2ray + 客户端 v2ray
💁♂ 说明:
V2Ray 不区分服务器版和客户端版,也就是说在服务器和客户端运行的 V2Ray 是同一个软件,区别只是配置文件的不同。因此 V2Ray 的安装在服务器和客户端上是一样的。
¶服务端
1 | cd /opt |
1 | { |
alterId 参数是用于增加随机性和安全性的参数,在之前的版本中建议设置为 30 到 100 之间,在 v4.28.1 版本之后必须设置为 0 以启用 VMessAEAD(VMessAEAD 是一种基于 VMess 协议并使用 AEAD 加密算法的传输方式)。
运行服务端
1 | #运行(Ctrl+C 即可停止运行) |
¶客户端
这里客户端以 Linux 为例,Windows 和 MacOS 同理。
1 | cd /opt |
config.json 内容如下:
1 | { |
在客户端执行如下命令进行代理测试:
1 | #运行v2ray |
💁♂ 说明:对于浏览器代理,客户端运行 v2ray 后,浏览器还不能直接进行科学上网。v2ray 并不像 v2rayN 那样会自动设置系统代理(v2rayN 是集成了 v2ray 的图形化软件,其有设置系统代理的功能),所以还需要手动设置代理(系统代理设置或浏览器代理设置)或者使用浏览器代理扩展插件(如 SwitchyOmega)来设置代理才能使用。
¶其他说明
v2ray 代理中数据包的流向:
1 | {浏览器} <--(socks)--> {V2Ray 客户端 inbound <-> V2Ray 客户端 outbound} <--(VMess)--> {V2Ray 服务器 inbound <-> V2Ray 服务器 outbound} <--(Freedom)--> {目标网站} |
¶参考:
¶2、trojan
¶安装方式
服务端 trojan-go + 客户端 trojan-go
¶服务端
1 | #提前运行一个nginx,目的是trojan依赖一个http的80端口用作代理伪装 |
配置说明:
“run_type”:运行类型,"client"表示客户端,"server"表示服务端。
“local_addr"和"local_port”:本地监听地址和端口。
“remote_addr"和"remote_port”:远程监听地址和端口。(注意:服务端上的 remote_addr 和 remote_port 配置是用于反向代理到HTTP 服务上的,和客户端上的含义不一样)
“password”:密码,用于加密传输数据。
“log_level”:日志等级,可选项为"trace"、“debug”、“info”、“warn”、“error"和"none”。
“ssl”:是否启用SSL/TLS加密。
“cert"和"key”:对应服务器的证书和私钥文件,用于SSL/TLS加密。
“sni”:指的是服务器中证书绑定的域名,一般和证书的Common Name相同
¶客户端
1 | wget https://github.com/p4gefau1t/trojan-go/releases/download/v0.10.6/trojan-go-linux-amd64.zip |
在客户端中,如果你在
remote_addr
中填写的是域名,sni
可以省略
¶参考:
¶终端命令使用代理
¶方式一:使用终端命令时添加代理参数
终端网络请求命令使用 http协议代理 和 socks5协议代理 的方式:
1 | #通过http协议代理 |
curl 和 wget 使用代理
1 | #curl添加代理 |
¶方式二:终端会话代理
1 | ##一、终端设置代理 |
💁♂ 代理变量说明:
- http_proxy:设置 HTTP 协议的代理服务器地址
- https_proxy:设置 HTTPS 协议的代理服务器地址
- ALL_PROXY:设置所有协议的代理服务器地址,包括 HTTP、HTTPS、FTP 等。如果设置了
ALL_PROXY
,则会覆盖http_proxy
和https_proxy
的设置- no_proxy:设置不需要代理的主机名或 IP 地址列表,通常包括本地主机和局域网内部的地址。多个地址之间用逗号分隔
💁♂ 特别说明:
v2rayN 默认只能手动修改 socks 代理端口,而不能手动修改 http 代理端口,http 代理端口的值会被软件设定为 socks 代理端口值+1。比如 socks 代理端口是 10808,则 http 代理端口是 10809。
Clash 客户端默认都会使用 http+socks 混合端口(也就是说一个端口就能同时支持 http 和 socks 两种协议)。当然除了混合端口,Clash 也支持单独配置 http 端口和 socks 端口。
Clash 客户端的代理模式需要设置为“全局模式”,终端命令(如 curl)才能正常使用。在使用 curl 通过 Clash 客户端代理时,无法通过 socks5 协议地址访问 google 但却能访问 youtube。而使用 http 协议地址则 google 和 youtube 都能成功访问,具体原因目前不清楚,具体操作如下:
1
2
3
4 curl --proxy http://127.0.0.1:7890 https://www.google.com #可正常访问
curl --proxy socks5://127.0.0.1:7890 https://www.google.com #无法访问
curl --proxy http://127.0.0.1:7890 https://www.youtube.com #可正常访问
curl --proxy socks5://127.0.0.1:7890 https://www.youtube.com #可正常访问
¶图形代理客户端
¶1、Windows
Clash for Windows(CFW):https://github.com/Fndroid/clash_for_windows_pkg/releases/latest 文档:https://docs.cfw.lbyczf.com/contents/tap.html
v2rayN:https://github.com/2dust/v2rayN/releases/latest 下载 v2rayN-Core.zip 文档:https://v2rayn.org
¶2、MacOS
ClashX:https://github.com/yichengchen/clashX/releases/latest
V2rayU:https://github.com/yanue/V2rayU/releases/latest
V2RayX:https://github.com/Cenmrev/V2RayX/releases/latest
Clash for Windows(mac 版本):https://github.com/Fndroid/clash_for_windows_pkg/releases/latest
¶3、Linux
Qv2ray:https://github.com/lhy0403/Qv2ray
v2rayA:https://github.com/v2rayA/v2rayA 文档:https://v2raya.org
Clash for Windows(linux 版本):https://github.com/Fndroid/clash_for_windows_pkg/releases
¶4、Android
Clash for Android:https://github.com/Kr328/ClashForAndroid/releases/latest
¶5、IOS
Shadowrocket :https://shadowrocketios.org/shadowrocket-download
Quantumult X:https://quantumultx.org
¶参考:
¶浏览器使用代理
¶一、自动代理管理
对于 v2rayN、Clash for Windows 这种高度集成的图形代理客户端而言,它们有设置系统代理的功能,只要将其运行并选择“系统代理”后,浏览器即可科学上网。
¶二、手动代理管理
进行手动代理设置或者使用代理插件的方式,主要是针对于 v2ray、shadowsocks 这种未高度集成的代理工具,这类客户端运行后,浏览器还不能直接进行科学上网。它们没有设置系统代理的功能,所以还需要手动设置代理(系统代理设置或浏览器代理设置)或者使用浏览器代理扩展插件(如 SwitchyOmega)来设置代理才能使用。
¶1、手动代理设置
¶(1)系统代理设置
¶(2)浏览器代理设置
💁♂ 说明:这种方式对于所有网站的访问都是会走代理,即使国内的网站也会走代理,除非配置了不代理地址列表,但是国内网站那么多一个一个配置是一件很麻烦的事情,另外这种方式还会极大地消耗代理流量,所以建议使用下面的代理插件“配置规则代理”方式。
¶2、使用代理插件
这里主要讲 SwitchyOmega 这款常用的代理插件:
¶(1)安装代理插件
访问其 github 项目获取安装方式:https://github.com/FelisCatus/SwitchyOmega ,比如 Chrome 浏览器,则 Chrome 应用商店 在线安装或者下载插件进行离线安装都可以。
¶(2)配置代理服务器
¶(3)配置全局代理
操作如下:
💁♂ 说明:这种方式对于所有网站的访问都是会走代理,即使国内的网站也会走代理,除非配置了不代理地址列表,但是国内网站那么多一个一个配置是一件很麻烦的事情,另外这种方式还会极大地消耗代理流量,所以建议使用下面的代理插件“配置规则代理”方式。
¶(4)配置规则代理
规则列表网址:https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt
¶参考:
¶clash 客户端配置
对于自建节点,clash 客户端感觉没有 v2rayN 那样容易配置,clash 客户端的一大特点就是UI操作简单而配置文件复杂,所以主要难点在于怎样配置clash配置文件。这里提供了两种方式,一种是手动配置clash配置文件,另一种是自动生成clash配置文件。
¶一、手动配置clash配置文件
以下是自用的 clash 配置模板,可根据自己节点的情况对如下配置的 proxies 里的节点进行修改即可。
1 | ##配置参考:https://v2xtls.org/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3clash%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6/ |
¶二、自动生成 clash 配置文件(生成 clash 订阅链接)
这里主要讲解通过 v2ray 节点信息和 trojan 节点信息生成 clash 订阅链接,操作如下:
¶1、运行订阅服务器
1 | docker run -d --name=sub-server --restart=always -p 25500:25500 tindy2013/subconverter:latest |
¶2、运行订阅转化网站
1 | docker run -d --name subweb --restart=always -p 58080:80 careywong/subweb:latest |
¶3、生成代理协议链接
¶(一)手动生成协议链接方式
(1)对于v2ray节点
v2ray节点的协议链接格式:vmess://节点信息json配置的base64编码
v2ray节点json配置如下:
1 | { |
需修改的配置如下:
ps:节点别名,无特殊作用,仅仅方便人记
add:服务器地址,可以是IP地址或域名
port:服务器端口号
id:用户 ID(可视为密码,用于数据加密)
aid:即alterId,随机参数(同id共同用于数据加密)
可根据v2ray节点信息修改如上json配置,根据然后对这个json字符串进行base64编码(base64编码可借助在线网站生成,如:https://www.iamwawa.cn/base64.html),最终v2ray的vmess协议链接为 vmess://节点base64编码字符串
,如下:
1 | vmess://ewoidiI6ICIyIiwKInBzIjogImRvZ3l1bi12MnJheSIsCiJhZGQiOiAid3d3LnFjbW9rZS5zaXRlIiwKInBvcnQiOiAiODAwMSIsCiJpZCI6ICI5MDAwMTMxOS1mODYxLTQ0OGUtYjJkMS1lMTZlNjFmMWNlYmUiLAoiYWlkIjogIjAiLAoic2N5IjogImF1dG8iLAoibmV0IjogInRjcCIsCiJ0eXBlIjogIm5vbmUiLAoiaG9zdCI6ICIiLAoicGF0aCI6ICIiLAoidGxzIjogIiIsCiJzbmkiOiAiIiwKImFscG4iOiAiIgp9 |
(2)对于trojan节点
trojan链接的格式为:trojan://password@remote_host:remote_port?security=tls&sni=ssl_domain&type=tcp&headerType=none#remarks
。
链接参数如下:
password
:连接密码,由数字、大小写字母和特殊字符组成,用于验证和加密连接。
remote_host
:服务器地址,可以是IP地址或域名,表示Trojan客户端要连接的服务器的地址。
remote_port
:服务器端口号,表示Trojan服务器的监听端口号,默认为443。
sni
:域名标识符,指定服务器启用SNI流量伪装的域名,一般与服务器证书中的域名相对应。
type
:用于设置节点类型,可以是"ss"、“vmess”、“trojan”、"http"或"snell"等。其中,"ss"表示Shadowsocks协议,"vmess"表示V2Ray协议,"trojan"表示Trojan协议,"http"表示HTTP代理协议,而"snell"则是一种基于TLS的安全代理协议。
security
:用于设置代理协议的加密方式,可选值包括"none"、“tls”、"xtls"等。其中,"none"表示不加密流量传输,"tls"表示使用基于TLS的加密方式进行传输,而"xtls"则是一种更为安全可靠的TLS扩展加密方式。
headerType
:用于设置代理协议的Header类型,可以是"http"、“tls"或"none”。其中,"http"表示使用HTTP Header进行伪装,"tls"表示使用TLS Header进行伪装,而"none"则表示不进行任何Header伪装。
remarks
:节点别名,无特殊作用,仅仅方便人记。
可根据trojan节点信息对链接进行参数设置,一般情况只需设置password、remote_host、remote_port、sni、remarks等参数即可,如下:
1 | trojan://qcmoke123456@www.qcmoke.site:4456?security=tls&sni=www.qcmoke.site&type=tcp&headerType=none#dogyun-trojan |
¶(二)自动生成协议链接方式
除了以上手动生成链接的方式还可以通过 v2rayN 获取链接:只需选中要分享的节点,然后右键 “批量导出分享 URL 至剪切板(多选)”就能得到批量的代理协议链接。
¶4、生成订阅链接并获取 clash 配置文件
访问订阅转化网站:http://www.qcmoke.site:58080 (设部署的服务器域名为:www.qcmoke.site)
“订阅链接” 填写要分享协议链接(多个链接每行一个或用 | 分隔),如下:
1
2 trojan://password@server_addr:server_port?security=tls&type=tcp&headerType=none&host=sni#node-name
vmess://xxxxxxxxxxxxxxxxxx“客户端” 选择 Clash
“后端地址” 填写:
http://www.qcmoke.site:25500/sub?
填好后点击 “生成订阅链接” 就能得到 clash 订阅链接,将此订阅链接复制至 clash 客户端即可下载为 clash 配置文件。
¶参考:
¶代理相关知识
¶为什么代理软件启动后有的软件能科学上网,有的不行?
网络应用程序通常会使用默认的代理设置来发送 HTTP 请求,默认的代理设置通常为“不使用代理”(no proxy),即直接通过本地网络连接到目标服务器,不经过任何中间代理。这些应用程序不会使用系统代理的设置进行网络请求,但一般这些程序会支持手动代理设置功能,只要设置了就会根据用户自定义的代理进行网络访问。
但也会有一些应用程序(如浏览器)默认会使用系统代理的设置来发送请求。只要代理软件启动就会创建一个本地的代理服务器,并把自己的 ip 和端口号设置到系统代理设置中。如此一来,应用程序就会根据系统代理的设置将其网络请求转发给代理软件,最终代理软件再转发给外部网络的真实代理服务器,进而完成网络代理处理。
¶HTTP 代理和 SOCKS 代理的区别
HTTP 代理:HTTP 代理是最常见的代理类型,只能代理 HTTP 协议和 HTTPS 协议的请求。
SOCKS 代理:SOCKS 代理协议支持代理与任何应用层协议(例如 HTTP、SSH、FTP 等)相关的 TCP 和 UDP 流量。socks 协议是一种通用的代理协议,通过它可以将 TCP 或 UDP 连接路由到远程主机,并在本地主机上实现对连接的控制和修改。
具体来说,socks 代理服务器支持代理以下类型的网络流量:
- HTTP:通过 socks 代理服务器可以路由 HTTP 请求和响应。
- HTTPS:通过 socks 代理服务器可以路由 HTTPS 请求和响应。
- SSH:通过 socks 代理服务器可以路由 SSH 会话流量。
- FTP:通过 socks 代理服务器可以路由 FTP 命令和数据传输流量。
- DNS:通过 socks 代理服务器可以路由 DNS 查询和响应。
需要注意的是,socks 代理并不像 HTTP 代理那样支持 HTTP 缓存和其他 HTTP 优化功能,因为 socks 代理只是简单地转发网络流量,而不会对其进行解析和处理。此外,某些特定的应用层协议可能会对 socks 代理产生特殊的要求和限制,因此请根据实际情况选择最适合的代理配置方式。
¶代理时使用 socks 协议还是 http 协议?
如果需要代理所有的网络流量(包括 HTTP、HTTPS、FTP、SMTP 等),则应该使用 socks 协议。但如果只需要代理 Web 浏览器的 HTTP 流量,则使用 http 协议即可。
¶代理 HTTP 请求代理变量可以使用 Socks5 协议地址吗
比如:export http_proxy=socks5://127.0.0.1:10808
代理软件在转发数据时使用的代理协议并不是由代理变量的协议类型决定的,而是由代理软件节点配置中的协议类型决定的。比如:curl --proxy socks5://127.0.0.1:10808 https://www.google.com
这条命令,curl 会将 HTTP 协议请求数据转换为 SOCKS5 协议请求数据,如果本地没有使用代理软件,那么就会连接失败,如果有使用代理软件,则 curl 会发送给监听 10808 端口的代理软件,代理软件再根据节点配置的协议类型将 SOCKS5 协议请求数据转换为相应的协议数据最后发送给代理服务器(不是所有的代理软件都具有协议转换功能,比如 Shadowsocks 需要借助 privoxy 进行协议转换,ShadowsocksR 则支持通过内置的混淆插件实现协议转换,而 Clash、V2ray 等则本身支持协议转换)。
¶代理软件支持哪些网络协议
一般代理软件支持应用层和传输层的各种网络协议,比如应用层的 HTTP、FTP、SMTP 等,传输层则包括 TCP 和 UDP 等。一般不支持网络层及其以下的网络通信协议层,比如网络层的 ICMP、ARP 等协议都是不支持的。要实现网络层和数据链路层的网络协议代理则需要使用 TUN 和 LAP 等技术的支持,TUN 和 LAP 技术其实就是建立本地虚拟网卡的一种技术,TUN 网卡主要处理网络层协议,TAP 网卡主要处理数据链路层协议,可以用 TUN、LAP 与代理软件配合来实现网络层和数据链路层的代理。
网络 5 层模型:
- 物理层:负责传输比特流,并进行电气、机械和功能性接口的定义。常见的协议有 RJ45、CLOCK、IEEE802.3 等
- 数据链路层:提供可靠的数据传输,通过帧同步、流量控制、差错检测等技术保证数据的正确性。常见的协议有 PPP、FR、HDLC、VLAN、MAC 等。
- 网络层:管理不同网络之间的数据传输,实现路由选择、拥塞控制等功能。常见的协议有 ICMP、ARP。
- 传输层:提供端到端的数据传输服务,包括错误校验、流量控制、拥塞避免等功能,常见的协议有 TCP 和 UDP。
- 应用层:提供应用程序与网络之间的接口,处理各种应用层协议,如 HTTP、FTP、SMTP 等。