富强搭建记录
一些名词术语
HTTP,WebSocket是应用层协议,TCP,UDP是传输层协议,IP是网络层协议
TCP和UDP
TCP是面向连接的一种传输控制协议。TCP连接之后,客户端和服务器可以互相发送和接收消息,在客户端或者服务器没有主动断开之前,连接一直存在,故称为长连接。特点:连接有耗时,传输数据无大小限制,准确可靠,先发先至。
UDP是无连接的用户数据报协议,所谓的无连接就是在传输数据之前不需要交换信息,没有握手建立连接的过程,只需要直接将对应的数据发送到指定的地址和端口就行。故UDP的特点是不稳定,速度快,可广播,一般数据包限定64KB之内,先发未必先至。
WebSocket
即富强里的缩写ws。基于TCP协议:具体流程是WebSocket通过HTTP先发送一个标记了 Upgrade 的请求,服务端解析后开始建立TCP连接,省去了HTTP长连接每次请求都要上传header的冗余,可以理解为WebSocket是HTTP的优化,但WebSocket不仅仅在Web应用程序上得到支持。
理论上,使用 Websocket 会比 TCP 性能差一些,单纯所以如果不是搭配 CDN、nginx 或者在 PaaS 上使用,那还是使用 TCP 吧。
但是事无绝对,比如这个案例:
由于近期TCP阻断频繁,于是部署基于WebSocket+TLS+nginx的v2ray,将代理流量通过TLS加密
TLS
传输层安全性协议(英语:Transport Layer Security,缩写作TLS),及其前身安全套接层(Secure Sockets Layer,缩写作SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。
h2 (HTTP/2)
h2便是HTTP/2 (原名HTTP/2.0)即超文本传输协议 2.0,是下一代HTTP协议。对于V2Ray,使用h2必须同时使用TLS。h2本质是HTTP协议,对于传统http1.1协议传输速度快了不少。h2的下层协议是TCP,因此大家应该知道这类协议的共同缺点了。
较之类似的WebSocket协议,传输效率略逊于WebSocket。但是它却有比WebSocket更加好的伪装,由于大部分网站使用HTTP协议,因此h2+TLS这种协议能使V2Ray流量伪装在正常流量中,并且难以察觉。
QUIC
2018年11月,国际互联网工程任务组(The Internet Engineering Task Force,简称 IETF )将HTTP-over-QUIC 实验性协议将被重命名为 HTTP/3,并有望成为 HTTP 协议的第三个正式版本,代表了互联网的未来。
QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议。此协议基于UDP,但较之KCP更为可靠。由于现今V2Ray的QUIC并不是真正意义上的HTTP/3,因此存在一定的兼容问题。
mKCP
V2Ray 引入了 KCP 传输协议,并且做了一些不同的优化,称为 mKCP。如果你发现你的网络环境丢包严重,可以考虑一下使用 mKCP。由于快速重传的机制,相对于常规的 TCP 来说,mKCP 在高丢包率的网络下具有更大的优势,也正是因为此, mKCP 明显会比 TCP 耗费更多的流量,所以请酌情使用。要了解的一点是,mKCP 与 KCPTUN 同样是 KCP 协议,但两者并不兼容。
Mux
Mux 意为多路复用(multiplexing),它能够将多条 TCP 连接合并成一条,节省资源,提高并发能力。
VLESS
VLESS是一种无状态的轻量级数据传输协议,被定义为下一代V2ray数据传输协议。作者对该协议的愿景是 “可扩展性空前,适合随意组合、全场景广泛使用,符合很多人的设想、几乎所有人的需求,足以成为v2ray的下一代主要协议,乃至整个XX界的终极协议。”
VLESS和VMESS区别如下:
- VLESS协议不依赖于系统时间,不使用alterId。一些人的V2ray用不了,最后找出原因是电脑时间和服务器只相差两分钟,简直要让人抓狂;VLESS协议去掉了时间要求,双手举赞;
- VLESS协议不带加密,用于科学上网时要配合TLS等加密手段;
- VLESS协议支持分流和回落,比Nginx分流转发更简洁、高效和安全;
- 使用TLS的情况下,VLESS协议比VMESS速度更快,性能更好,因为VLESS不会对数据进行加解密;
XTLS
据官网说是比TLS更好的技术,但是可能也正因为相较于传统TLS的变化,导致其特征容易被探测。网上搜索XTLS被识别探测很多个例。虽说不一定都是它的锅,但是宁可信其有不可信其无。还是选择TLS这种方式吧。
甲骨文开实例
如上图操作,保存私钥key和公钥pub,然后上传公钥pub。
放行端口
甲骨文的镜像,默认关闭了端口。除了要在控制面板放行端口,如下
还要在ssh登录系统后,如下操作(系统选择的是Ubuntu,其他Linux语法可能不同。而要选择ARM机器,最好选择Ubuntu)
sudo su
sudo iptables -I INPUT -s 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT //开放tcp端口80
sudo iptables -I INPUT -s 0.0.0.0/0 -p tcp --dport 443 -j ACCEPT //开放tcp端口443
sudo iptables-save //保存iptables规则
当我们写入iptables规则后如果我们的系统重启后iptables规则将会被清理掉,即使我们使用了“iptables-save”命令将iptables规则到了文件,在系统重启后需要执行“iptables-restore”来恢复保存的规则。
所以我们需要“iptables-persistent”这个工具来让我们的iptables规则重启后依旧有效
sudo apt-get update //更新软件源
sudo apt-get install iptables-persistent -y //安装iptables-persistent工具
sudo netfilter-persistent save //保存规则文件
sudo netfilter-persistent reload //载入规则文件
一键安装脚本
https://github.com/mack-a/v2ray-agent
在这里吐槽一下这个脚本:https://github.com/trojanpanel/install-script ,这个脚本在甲骨文云的系统里装好以后,无法打开配置后台,导致我一直认为是端口没有放行好!
另外是 https://www.toolsdaquan.com/ipcheck/ 这个端口检查工具,做好上一步放行端口用这个工具检查是不行的,会显示端口TCP不通。但实际上上面步骤是没问题的,猜测可能是需要安装后续程序,有程序在使用端口,才能被检测到。
v2ray-agent这个脚本,安装注意事项:
- 因为不选XTLS,所以必须选择v2ray的核心
- 实际使用发现,安装完后,重新再安装另一个核心,没有影响,一切正常。
更换伪装站点
如需自定义,请手动复制模版文件到 /usr/share/nginx/html