58 Commits

Author SHA1 Message Date
e1732a364fed
2e7dda7c18 修订代码,文档;logfile标准配置以及-sp行为改变,见下:
在标准 toml 配置中 配置 logfile 配置文件路径。 如 `logfile = "/var/log/verysimple/vs_log"`

将 -sp 的行为 改为 打印完毕后立即退出。
2022-04-29 21:40:01 +08:00
hahafool
27872e7dfc rename 2022-04-25 18:33:24 +08:00
hahafool
f0c7d47b7e 修复utils.RandPort 的log不当使用导致 空指针bug. 2022-04-24 20:25:14 +08:00
hahafool
22fc0722f3 修订文档, 代码; 添加reject协议,与v2ray的blackhole等价;
RejectClient 直接在 proxy包内实现,而不是放在子包。

把direct也放到了proxy中。因为 direct和 reject是两个通用client,不需要单列出来。
2022-04-22 13:51:36 +08:00
hahafool
a1a15770d2 修订代码, 文档.
令tls随机证书的国别和组织等信息随机化,在证书文件不存在时不退出程序, 而是使用随机证书继续运行。
不再提供 现成的 证书。
2022-04-22 12:40:23 +08:00
hahahrfool
d9f3b5d0e6 修订文档,代码;减少发布包编译的数量;修复“包头”变成“握手包”的漏洞
根据vless/trojan的协议标准,首包必须要包头和payload一起发送,而之前的vs架构分开发送了,这会导致可探测。已在本commit修复。

使用 captive.apple.com 和 http://www.msftconnecttest.com/connecttest.txt 作为测试url,而不用baidu和qq。这样在非中国国家进行测试 也可以正常了。
2022-04-16 22:25:37 +08:00
hahahrfool
8eecbacc57 netLayer.RandPort 添加 mustValid, isudp参数, 保证端口可用. 2022-04-16 10:10:06 +08:00
hahahrfool
6dc171e74a 修订文档,示例,添加 heap 泛型代码. 2022-04-15 23:51:46 +08:00
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
dc16dba65d 修订文档; 将大部分Fatal的代码改为Error. 2022-04-07 18:18:14 +08:00
hahahrfool
19eda8e356 修订文档,代码;添加交互模式中生成分享链接功能,添加交互输入字符串的验证 2022-04-06 11:51:14 +08:00
hahahrfool
2b8d966909 修订代码 2022-04-03 17:10:25 +08:00
hahahrfool
814bcb29f5 添加大量交互模式功能
为交互模式添加如下功能:生成uuid,生成随机tls证书,查询当前状态,交互式生成配置文件
2022-04-01 19:13:47 +08:00
hahahrfool
8ad0905ce9 feat:apiServer;修复生成的证书无法使用的问题;修复小bug
添加如下命令行参数

-i interactive mode (只是加了一个参数, 还未实现交互功能)
-ea enable api server
-spp api Server Path Prefix, must start with '/',默认值 /api

只有 -ea命令行参数给出后,才会运行api服务器

默认allstate 的api的url 为  https://127.0.0.1:48345/api/allstate

用到basic auth,用户名为admin
密码的toml配置是

[app]
admin_pass = "adfadfadfadfa"

修订 api草案
2022-04-01 17:52:18 +08:00
hahahrfool
e732ea3c3b 修订代码;修复loglevel为debug时失效问题;dns请求加锁,已经可用 2022-04-01 12:31:47 +08:00
hahahrfool
b97e990b44 尝试引入zap包作为log包 2022-03-31 18:28:57 +08:00
hahahrfool
f310803218 修订代码 2022-03-31 14:10:05 +08:00
hahahrfool
b31557df14 大范围修订代码,以试图防止内存逃逸到堆; 2022-03-31 13:33:58 +08:00
hahahrfool
8606e6e573 添加-mp参数进行memory pprof. 修订代码 2022-03-31 08:36:59 +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
1070942f4f 修复ws+vless裸奔时,开启readv时的闪退问题 2022-03-26 18:18:08 +08:00
hahahrfool
e82aba7370 修复utls中,无法重复使用相同config的bug;只好拷贝,放弃指针 2022-03-26 16:01:57 +08:00
hahahrfool
4a1f05fd08 修复无法加载同文件夹下的配置文件和证书的问题 2022-03-26 15:23:04 +08:00
hahahrfool
3838c251ce 修订代码,文档,注释,示例 2022-03-26 13:27:14 +08:00
hahahrfool
074908ecdf 增加alpn配置; 修订示例,代码; 2022-03-25 22:55:38 +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
536a84def6 修订代码,注释,文档 2022-03-22 16:46:05 +08:00
hahahrfool
b14c1d03c1 为godoc文档对注释进行修订 2022-03-21 09:13:10 +08:00
hahahrfool
89e3c8a4ed 添加导向某tag的dial的分流的支持;修订代码,文档,示例;
目前已经支持 ip,domain,network,country, inTags 这五种配置方式
2022-03-21 00:50:19 +08:00
hahahrfool
a890d39ac7 添加toml标准配置格式支持;重构配置相关的代码;修订文档
添加了path分流部分的go test,简单修订 GetRequestPATH_from_Bytes 函数
2022-03-18 19:09:02 +08:00
hahahrfool
b533b34e5f fix attempt1. (failed)issue: -lazy在fallback下闪退问题 2022-03-17 22:43:25 +08:00
hahahrfool
42236d5cd8 添加utls支持,直接用chrome指纹;修订代码 2022-03-17 18:40:54 +08:00
hahahrfool
6b53f3b03f 简单修订代码;从此commit开始,使用go1.18语法 2022-03-17 11:42:02 +08:00
hahahrfool
902b0d7d34 将所有的使用log的地方通通加上LogLevel的判断.
LogLevel在上个commit就已经被移动到了utils包.
2022-03-17 08:35:43 +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
861d5a74c5 添加fallback功能,修改了proxy.Server接口,修订文档 2022-03-16 04:16:19 +08:00
hahahrfool
e428bbc385 更新文档,注释 2022-03-15 20:26:14 +08:00
hahahrfool
57755801da 继续完善lazy_secure功能;仍未完成. 更新文档 2022-03-15 12:29:48 +08:00
hahahrfool
43f475eec8 使用uuid作为特殊指令,避免0rtt时的探测攻击;新增Makefile
新增的Makefile可以自动将版本号写入程序中。目前默认编译四种环境下的可执行文件
2022-03-14 11:19:46 +08:00
hahahrfool
c504424cc6 试图解决测速流量过大时,上传时服务器闪退bug;修订文档
没有测出是否解决了bug,因为我根本没再现出来这个bug。。
2022-03-14 08:09:03 +08:00
hahahrfool
a72db91512 实现lazy_secure代码,仍未完成,更新文档注释;测速
此时的 lazy_secure 代码会导致下面问题,不知原因。
tlsLayer: tls握手失败 : remote error: tls: unknown certificate authority

同时,我进行了测速, 发现lazy特性的速度确实能达到近似直连的速度,
但是同时发现了bug,在测速上传速度时,verysimple的服务端程序会出bug导致闪退,
进而导致上传速度测不到或者测到很低的上传速度。

这个bug在普通日常使用、看视频时是遇不到的,所以我也是首次接触这个bug。

bug内容显示slice问题,似乎是短时间流量过大导致缓存爆掉。
2022-03-13 21:57:06 +08:00
hahahrfool
2b235d4d5a 修订文档注释;将自签证书更换为ecc证书;
在代码中,新增了 tls lazy secure 的部分,但还未完成全部代码
2022-03-13 16:42:25 +08:00
hahahrfool
1e84e3b99a 更新文档与注释 2022-03-13 13:30:29 +08:00
hahahrfool
a8bb6fce78 移除多余代码 2022-03-12 22:26:27 +08:00
hahahrfool
fecd46666c 使用一种新办法来避免splice割包问题
本办法采取一种 特殊指令的办法,在一端检测到TLS数据后,会向另一端发送 “特殊指令”

而另一端收到特殊指令后,则从 原始数据中提取需要 裸奔的数据,并开始直连。

裸奔数据的读取采用了新的 TeeConn 以及 Recorder技术
2022-03-12 22:00:00 +08:00