diff --git a/README.md b/README.md index 72d5b67..61a789f 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ verysimple, 实际上 谐音来自 V2ray Simple (显然只适用于汉语母语者), 意思就是极简. -verysimple 是一个 代理内核, 对标 v2ray/xray,功能较为丰富。 +verysimple 是一个 代理内核, 对标 v2ray/xray,功能较为丰富,轻量级,极简,用户友好,新手向。 本作的想法是,使用自己的代码,实现v2ray的所有的好的功能(并摒弃差的功能),而且使用自主研发的更简单的架构,结合自主研发的新技术,实现反超。 @@ -281,7 +281,7 @@ openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.crt -CAkey ca.key -se ### 架构 -使用了简单的架构,单单因为架构简单 就可以 提升不少性能。 +使用了简单的架构,单单因为架构简单 就可以 提升不少性能。而且可执行文件比其他内核小不少。 本作使用了分层架构,网络层,tls层,高级层,代理层等层级互不影响。 @@ -461,9 +461,16 @@ tls lazy encrypt 特性 运行时可以用 -lazy 参数打开(服务端客户 ## 开发标准以及理念 +KISS, Keep it Simple and Stupid + 文档尽量多,代码尽量少. 同时本作不追求极致模块化, 可以进行适当耦合. 一切以速度、浅显易懂 优先 -KISS, Keep it Simple and Stupid +如果你阅读代码,你有时可能看到一些“比较脏” 的代码,如包含一些 goto 跳跃,或者步骤比较繁琐的函数。 +但仔细思考比较,就会发现,这种代码的不是运行速度更快,就是更加直观易懂。 + +比如某些需要defer的地方,我们故意不defer,而是单独放在每个return前面。这是因为defer会降低性能。类似的地方有很多。 + +当然,如果美化代码利大于弊,我们肯定在后期慢慢改进。 ### 文档 @@ -507,7 +514,20 @@ MIT协议,即你用的时候也要附带一个MIT文件,然后作者不承 ## 历史 -启发自我fork的v2simple,不过原作者的架构还是有点欠缺,我就直接完全重构了,完全使用我自己的代码。 +首先阅读v2simple项目,一个很好的启蒙项目: +https://github.com/jarvisgally/v2simple + +读了v2simple后, 我fork了一个版本, 不过原作者没附带任何开源协议,而且原作者的架构还是有点欠缺。 + +后来就直接完全重构了,新建了本项目,完全使用自己的代码。没想到大有发展,功高盖主。 + +但是,本作继承了v2simple的精神,即尽量simple。我极力支持这种精神,也试图让这个精神在verysimple项目中处处体现。 + +本作继承了它的如下特点: + +1. url配置的方式 +2. 转发逻辑直接放在main.go 中 +3. 架构简单 ## 开发计划 @@ -631,7 +651,7 @@ MIT协议!作者不负任何责任。本项目 适合内网测试使用,以 为了支持hysteria 的阻塞控制,从 https://github.com/HyNetwork/hysteria 的 pkg/congestion里拷贝了 brutal.go 和 pacer.go 到我们的 quic文件夹中. -grpcSimple的客户端实现部分 借鉴了 clash 的gun的代码,该文件单独属于MIT协议。clash的gun又是借鉴 Qv2ray的gun的) +grpcSimple的客户端实现部分 借鉴了 clash 的gun的代码,该文件单独属于MIT协议。(clash的gun又是借鉴 Qv2ray的gun的) tproxy借鉴了 https://github.com/LiamHaworth/go-tproxy/ , (trojan-go也借鉴了它) diff --git a/docs/install.md b/docs/install.md index 8766295..ff0cbd3 100644 --- a/docs/install.md +++ b/docs/install.md @@ -75,7 +75,7 @@ sudo cp examples/vlesss.server.toml server.toml 同样,视你的权限来酌情在命令前面添加 `sudo` -上面这个nohub这行命令,可以写到一个文件里,比如 run.sh, 然后用 `chmod +x run.sh` 将其变为可执行文件, 之后你只要运行 run.sh 就可以后台运行了。 +上面这个nohup这行命令,可以写到一个文件里,比如 run.sh, 然后用 `chmod +x run.sh` 将其变为可执行文件, 之后你只要运行 run.sh 就可以后台运行了。 如果你会crontab,还可以在里面设置开机运行该脚本。这种方式就比 systemctl轻量多了,而且还适用于openwrt。 diff --git a/docs/url.md b/docs/url.md index 1fa16d5..ae87ae5 100644 --- a/docs/url.md +++ b/docs/url.md @@ -3,6 +3,8 @@ vs的通用url格式,并不遵循现存市面上的其他格式,而是针对vs的架构逻辑所设计的新格式。如果你是一个vs老手,则使用vs的通用url格式你会感觉得心应手。 +本通用格式既可以用于listen,也可以用于dial + 注意,要想读懂本文档,需要了解url的基础知识。 https://datatracker.ietf.org/doc/html/rfc1738 @@ -25,6 +27,8 @@ vlesss://a684455c-b14f-11ea-bf0d-42010aaa0003@127.0.0.1:4433?insecure=true&v=0&u vlesss://a684455c-b14f-11ea-bf0d-42010aaa0003@127.0.0.1:4433?adv=quic&v=0&extra.maxStreamsInOneConn=6&extra.congestion_control=hy&extra.mbps=1024#my_vless_quic +vmess://a684455c-b14f-11ea-bf0d-42010aaa0003@127.0.0.1:4433?http=true&header.host=myhost.com + dokodemo://?target.ip=1.1.1.1&target.port=80#my_doko shadowsocks://aes-128-gcm:mypasswordxxxxx@127.0.0.1:8000#my_ss @@ -39,7 +43,7 @@ socks5://127.0.0.1:1080#my_socks5 ### scheme -即冒号前的部分,表示proxy所使用的具体协议,如 vmess, vless, ss, http, socks5, trojan +即冒号前的部分,表示proxy所使用的具体协议,如 vmess, vless, shadowsocks, http, socks5, trojan 等 如果后加上了s,就表示使用tls层,比如https,或者 vlesss。注意,vless和trojan都必须要加s,才能在公网中不被发现,否则就是裸奔。任何proxy都可以加s。 diff --git a/proxy/shadowsocks/server.go b/proxy/shadowsocks/server.go index 75c9fe6..bdd770e 100644 --- a/proxy/shadowsocks/server.go +++ b/proxy/shadowsocks/server.go @@ -22,6 +22,11 @@ func (ServerCreator) MultiTransportLayer() bool { return false } func (ServerCreator) NewServer(lc *proxy.ListenConf) (proxy.Server, error) { + + if lc.Network == "" { + lc.Network = netLayer.DualNetworkName + } + uuidStr := lc.Uuid var mp MethodPass