用 OpenResty 写了一个 SNI 代理

2016-06-06 04:51:22 +08:00
 fffonion

功能类似于dlundquist/sniproxy

推荐 OpenResty 加上 stream 模块和 ngx_stream_lua_module 模块。在 1.9.15.1 上测试通过。

测了一下比 nginx 的 stream 模块直接转发 443 速度低 20%。转发的部分现在还很 low ,需要读 TLS 的头取得包长度,然后一次性读完之后给对面。不知道各位有啥好的建议不。

Github→ https://github.com/fffonion/lua-resty-sniproxy.git

5291 次点击
所在节点    NGINX
16 条回复
ericFork
2016-06-06 06:04:52 +08:00
excited. +1s
fcicq
2016-06-06 06:24:04 +08:00
赞.
```
wait(
spawn(_upl, self),
spawn(_dwn, self)
)
```
能不能直接换成 port forwarding?
49
2016-06-06 06:53:31 +08:00
绝赞!
fcicq
2016-06-06 06:56:30 +08:00
好像没有这个能力. 只能去求一个类似 nodejs 的 xxx.pipe(yyy) 的 api 了, 直接挂在 read_event_handler 和 write_event_handler 上.
在这个 api 没有做出来之前可以把 send 和 receive 的字节数都去掉, 收到多少发多少.
fffonion
2016-06-06 08:09:22 +08:00
@fcicq
收到多少发多少好像不行? send 和 receive 在一个轻线程里是同步的
fcicq
2016-06-06 08:34:17 +08:00
@fffonion 可以直接调用 sock:receive() 而不需要 len 参数吧?
fffonion
2016-06-06 09:29:35 +08:00
@fcicq 不加参数的话是相当于`'*l'`,读到换行符为止
fcicq
2016-06-06 09:37:44 +08:00
@fffonion 写死 4096 如何?
fffonion
2016-06-06 11:13:22 +08:00
@fcicq 这样碰到一些小包可能会堵住吧?
如果有像 go 里面的 channel 一样的东西就好了
fcicq
2016-06-06 11:16:11 +08:00
@fffonion 那请问 echo server, socks5 server 都应该怎么写?
fffonion
2016-06-06 12:34:28 +08:00
@fcicq 这种我觉得要么是头上带长度然后 receive(length),要么有分隔符的 receiveuntil(分隔符)?个人感觉 openresty 的 socket 得用同步的思想来写
mengskysama
2016-06-06 13:10:07 +08:00
春哥说正则有 jo 参数(
fffonion
2016-06-06 13:16:27 +08:00
@mengskysama 好我去加一个
wujunze
2016-06-06 14:24:54 +08:00
mark
shanliang
2016-06-06 23:58:18 +08:00
mark
fengjianxinghun
2016-08-13 20:46:07 +08:00
自己改源码包装个 ioctl 出来得 fd buf 长度

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/283734

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX