Commit Graph

45 Commits

Author SHA1 Message Date
hahahrfool
447bd8749a 重构所有udp部分的代码! 摒弃了过去非常复杂的upd转发机制;
不再使用 UDP_Putter 等机制去转发udp,而是用一个 netLayer.MsgConn 结构

proxy.Server 和 proxy.Client 接口改动,

Client在握手udp时不再使用handshake方法, 而是用新的 EstablishUDPChannel 方法

Server 在 Handshake时会选择性返回两种接口,io.ReadWriteCloser 用于tcp, netLayer.MsgConn 用于 udp

此时vless、socks5、direct 的udp转发都已经成功经过了 go test 验证, 但是 main.go 还未修改。
2022-04-08 13:49:56 +08:00
hahahrfool
d3ec3fddcd 修订示例、代码;为添加trojan 作准备 2022-04-08 10:42:01 +08:00
hahahrfool
6291babff3 修订代码, 示例, 优化quic,设最大多路复用路数 为 4路.
之前代码使用纯单路且stream上限为320个,idle时间为2小时

现在自己思考发现完全不合理。

单个session内存在的stream数量 越少性能越高

重构了quic部分的代码。

添加一种主动记录服务端能承受的最大stream数量的机制,每次建立新stream时都试图找到 stream最少的一条可用session。

这种缓存session的做法实际上类似 连接池技术。

修复一些小问题.
2022-04-07 22:31:29 +08:00
hahahrfool
dc16dba65d 修订文档; 将大部分Fatal的代码改为Error. 2022-04-07 18:18:14 +08:00
hahahrfool
88f9ce8958 修订文档,示例,代码; 将hy默认速率降至100;优化quic 2022-04-04 08:17:08 +08:00
hahahrfool
57383320d0 添加hysteria阻控 手动挡功能!与交互模式结合着用. 2022-04-03 19:07:01 +08:00
hahahrfool
2b8d966909 修订代码 2022-04-03 17:10:25 +08:00
hahahrfool
f310803218 修订代码 2022-03-31 14:10:05 +08:00
hahahrfool
b31557df14 大范围修订代码,以试图防止内存逃逸到堆; 2022-03-31 13:33:58 +08:00
hahahrfool
f8ef685bdd 解决readv内存泄漏问题;解决转发时断连后的悬垂链接问题
在四点链接的情况下,我们只终端中间两点是不够的,要切三刀;
总之实践很简单,就是copy完成之后,要Close所有的链接

readv的话,系统readv数组和buffer不要在put进pool后相互引用

添加-bl 选项,可以自定义buf大小;注意越小可能越慢,建议buf大小保持在4k以上

添加-pp选项,可以生成cpu.pprof文件

修复其它小问题.
2022-03-31 01:32:58 +08:00
hahahrfool
3fa75b181f 修订代码,注释;修复小bug 2022-03-30 19:54:16 +08:00
hahahrfool
6ef8bf57c1 添加quic和hy阻控; 若tls证书配置未指明,会在内存生成随机rsa证书 2022-03-30 14:33:14 +08:00
hahahrfool
f2adcdcd45 防止udp转发时被裸奔;修缮socks udp associate
修订代码,文档,示例

添加 NumErr 结构; 从 handshakeInserver_and_passToOutClient 函数 分离出一个 dialClient 函数。

在socks5包中添加 client.go 文件,以及三个udp相关的客户端请求udp函数

之前的udp associate代码被证明是有很多bug的,现在被我一一修复,并通过了 udp_test.go的测试。
2022-03-29 19:00:14 +08:00
hahahrfool
81160e8db2 广泛修订代码, 注释 2022-03-28 22:07:18 +08:00
hahahrfool
e9c9467a72 修订代码,文档,注释 2022-03-27 14:09:53 +08:00
hahahrfool
3838c251ce 修订代码,文档,注释,示例 2022-03-26 13:27:14 +08:00
hahahrfool
074908ecdf 增加alpn配置; 修订示例,代码; 2022-03-25 22:55:38 +08:00
hahahrfool
63682dfae4 完整实现grpc;修订代码, 注释;修复udp的bug和windows中路径bug; 2022-03-25 20:34:54 +08:00
hahahrfool
95aae83eb8 尝试引入grpc; 尝试将handleNewIncomeConnection函数拆分;
把 handleNewIncomeConnection 拆出一个 handshakeInserver_and_passToOutClient 函数出来;
这是为了配合即将实现的 grpc的多路复用的情况.

修复一个 RelayUDP_to_Direct 函数中的小错误; 是当时疏忽了, 导致实际转发udp会闪退.
2022-03-25 15:55:23 +08:00
hahahrfool
146f7cf926 修复大量与websocket和回落相关的bug;
修复 websocket时无回落的问题
修复 websocket不匹配时直接返回内部错误字符串导致 可探测 的超级bug
修复回落不匹配问题
修复websocket时readv闪退问题

修复 命令行 loglevel参数被配置文件覆盖问题
修复获取tls 的 alpn和 sni时遇到空指针闪退问题

将默认fallback地址的赋值放到通用代码中;
移除 ErrSingleFallback, 改用utils.ErrFirstBuffer
使ws的server可以返回 预设的path
2022-03-24 13:42:34 +08:00
hahahrfool
363f0fac00 添加sni和alpn回落;修订代码
xray使用这种结构来匹配fallback: map[string]map[string]map[string]*Fallback

很繁琐,如果fallback匹配项目越来越多那不是就一大串了?

本作使用集合方式进行匹配,可扩展性更强
2022-03-24 09:02:38 +08:00
hahahrfool
8c6ed6377d 修订代码;将addr的赋值从各个proxy自己的方法中提出来 2022-03-23 18:54:38 +08:00
hahahrfool
4d2bbaeceb 完善对writev的支持;为vless和ws实现MultiWriter;修订代码 2022-03-22 22:39:26 +08:00
hahahrfool
5661c8737f 添加readv功能;给出测试数据;修订代码,注释;
toml 新增 app.noreadv项,命令行参数新增 -readv

默认readv是打开状态,可以选择性关闭。
2022-03-22 14:12:32 +08:00
hahahrfool
e75860ef7a 添加ws的0-rtt支持;兼容xray/v2ray; 修订示例文件
earlydata 的最大长度 本作直接固定为2048长度。

配置文件格式:

extra = { ws_earlydata = true }
2022-03-22 02:31:47 +08:00
hahahrfool
548675e002 添加自定义网络层功能;添加udp网络层支持
配置中,listen和dial中,可添加 network = "udp" 字段,不添加则默认tcp
2022-03-21 21:19:31 +08:00
hahahrfool
7f01079688 添加多服务器监听支持;给ProxyCommon添加一些打印全称的机制
给ProxyCommon接口添加 MiddleName,IsUDP 方法; 添加 GetFullName 函数

将 proxy.CmdTCP , CmdUDP, CmdMux 这三个常量从proxy移动到 vless

修订示例文件
2022-03-20 22:25:56 +08:00
hahahrfool
b1c4f5a5d1 feat:完整实现websocket.修订文档,注释,代码
添加了 ws.server.toml 和 ws.client.toml 这两个示例文件.
2022-03-20 16:59:58 +08:00
hahahrfool
85a1407ef8 修订注释,代码
给 ProxyConn 添加 ReadFrom 函数
2022-03-19 19:09:35 +08:00
hahahrfool
1eb6dfe164 移除config包,文件直接移动到proxy中
因为config包与proxy包耦合性实际上很强,说明实际上config就是应该属于proxy包的.
2022-03-19 16:53:11 +08:00
hahahrfool
a890d39ac7 添加toml标准配置格式支持;重构配置相关的代码;修订文档
添加了path分流部分的go test,简单修订 GetRequestPATH_from_Bytes 函数
2022-03-18 19:09:02 +08:00
hahahrfool
3fdeded6cf 将mycountry的配置同时用于顶级域名的国别分流;修订文档,代码; 2022-03-17 20:32:37 +08:00
hahahrfool
42236d5cd8 添加utls支持,直接用chrome指纹;修订代码 2022-03-17 18:40:54 +08:00
hahahrfool
af8aadb370 配置文件local->listen, remote->dial;localServer->inServer, remoteClient->outClient.
增加了 -L 和 -D 命令行参数。如果没有配置文件存在的话,就会默认查看是否给定了 -L和-D参数.

如果配置文件没给定dial的话,默认就认为是 direct://
2022-03-17 14:10:47 +08:00
hahahrfool
c9cf683a58 将common包改名为utils, 因为common太长了 2022-03-17 08:11:56 +08:00
hahahrfool
e664b9740e feat:添加回落和分流功能.
创建新子包netLayer, 将 proxy.Addr改为 netLayer.Addr
修订文档

RoutePolicy等分流机制也放到 netLayer

引入github.com/oschwald/maxminddb-golang 依赖,支持使用 GeoLite2-Country.mmdb 来进行ip分流

另外注意它默认的版本对于 golang.org/x/sys 包的依赖太老了,会导致go1.18中编译不通过,我在
go.mod 文件中新增了下面代码,就能通过编译了

```
require (
	golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86 // indirect
)
```

verysimple的可执行文件的相同目录下,必须有该mmdb文件才能够开启ip分流功能

新配置方式:配置文件新加一行 "route":{ "mycountry":"CN" }

mycountry指定的国家的ip会被直连发送,其他地址ip会被发送到代理.

新配置方式,回落,直接在 local 项的 url 的 query部分添加 fallback=:80, 或者 fallback=127.0.0.1:80
即可 回落到指定端口.

将tls_test重新挪动到tlsLayer包中

在main.go中添加了 logLevel变量,并且把关于配置文件的部分挪动到 config.go

出了上面的分流和回落以外,还新增支持了 #xxx 的尾缀,用于配置该url的tag. tag在未来会被用于精准分流

Makefile中新增了 PACK 参数用于编译出 打包版的发行包;可选 tag=embed_geoip 参数用于将mmdb.tgz文件内置到可执行程序里

同时,我开始直接使用go1.18编译本项目,期待性能提升,因为这是新发布的版本,看了介绍据说对 mac m1有20%的提升.
2022-03-16 19:28:26 +08:00
hahahrfool
405207bc56 将netLayer抽象出来,proxy.Addr现在变成netLayer.Addr
netLayer里包含关于 网络层 以及传输层 的各种定义.

这里为了添加 类似 v2simple的 common.Matcher的功能,特地抽象出来一个层.

而且增添了第一个外部依赖包,github.com/yl2chen/cidranger包.
2022-03-16 09:01:43 +08:00
hahahrfool
fa1c5db1ef 上一个commit修改了函数签名,不好,太笨,还是不改好
proxy.Server返回的 *bytes.Buffer只被用于Fallback,所以直接放到Fallback里就行
2022-03-16 08:19:09 +08:00
hahahrfool
861d5a74c5 添加fallback功能,修改了proxy.Server接口,修订文档 2022-03-16 04:16:19 +08:00
hahahrfool
43f475eec8 使用uuid作为特殊指令,避免0rtt时的探测攻击;新增Makefile
新增的Makefile可以自动将版本号写入程序中。目前默认编译四种环境下的可执行文件
2022-03-14 11:19:46 +08:00
hahahrfool
e558ba21cf 初步实现 tls lazy encrypt 功能 (splice) 2022-03-11 14:06:55 +08:00
hahahrfool
1dfc31a89d 更新注释 2022-03-10 19:48:17 +08:00
hahahrfool
0c1b106bec 添加注释 2022-03-10 18:07:27 +08:00
hahahrfool
f680b1a6e8 改进注释;给vlessv1的CRUMFURS 增加 udp长度头 2022-03-10 16:28:31 +08:00
hahahrfool
009162cf40 first 2022-03-09 21:27:13 +08:00