分享一个 tun2socks 实现

2023-01-31 20:31:05 +08:00
 heiher

自用分享,一个 C 语言实现、基于协程和 LwIP 用户态协议栈的 tun2socks 实现,当前支持 Linux 和 Android 系统。

项目地址: https://github.com/heiher/hev-socks5-tunnel

功能

  1. IPv4/IPv6 双栈。
  2. 支持重定向 TCP 连接。
  3. 支持重定向 UDP 报文。(UDP over TCP ,需配合hev-socks5-server)

性能

详细信息

速率

CPU 使用率

5857 次点击
所在节点    分享创造
38 条回复
heiher
2023-02-16 21:42:26 +08:00
@TongNianShanHe 增加了的 udp relay over udp 的方式
TongNianShanHe
2023-02-17 22:18:32 +08:00
@heiher ( v2 的消息提醒好像有点问题,刚刚才看到)谢谢您,虽然我已经实现了 udp relay over tcp
testFor
2023-03-11 23:08:40 +08:00
从 badvpn 的切换过来,不清楚为什么感觉引入了一个 1s 的延迟,及时很小的网页也是,是为了吞吐量做了缓存么
heiher
2023-03-11 23:41:41 +08:00
@testFor 能否提供一个可量化的测试方法?
testFor
2023-03-12 00:28:22 +08:00
没有,刚切换过来,主观感觉延迟 1s,特别是打开 V2EX 这种小网页,表现为前 0.5s 什么也不发生,后 1.0s 集中加载
testFor
2023-03-12 00:31:50 +08:00
@heiher 是否可能因为开了 tcp 延迟
testFor
2023-03-12 01:04:15 +08:00
@heiher 可能也是这个延迟导致楼上说的沾包出现
heiher
2023-03-12 09:30:04 +08:00
@testFor 有关 TCP delay 都是系统默认配置,“粘包”效果是因为 socks5 客户端有意实现为预测发送,是有减少延迟作用的。不知道切换前怎样,切换后应该是 dns 经过 socks5 服务器端,不知道是不是因为 dns 的延迟。浏览器的开发者选项中网络传输页面应该可以显示每个资源的加载时间,不妨对比看看,需要注意的是尽可能网络环境的抖动影响,比如本地跑 socks5 服务器,访问本地或国内 http 资源。
testFor
2023-03-12 10:27:32 +08:00
@heiher 所以实现上还是主动延迟了发送时间?
heiher
2023-03-12 10:42:17 +08:00
@testFor #29 没有主动延迟的意思。

刚测了访问国内四个网站的传输时间情况,socks5 服务端在局域网另一主机,测试主机配置 tun0 为默认路由(ipv4 & ipv6),数据来自 firefox 开发者选项的 timing:

testFor
2023-03-12 10:47:05 +08:00
@heiher 可以关闭预测么.我的平台是安卓 ,型号为小米 12s.安卓 12. 测试方法可能只有切换 tun2socks 与你的新的 so 进行测试了.
heiher
2023-03-12 10:55:18 +08:00
@testFor #31 暂不支持,socks5 握手预测的实质是将多轮交互的客户端侧数据一次发送(大概率合并在一个报文中):

假设客户端与服务端通信的前、反向链路延迟都是 100ms 的话,两种方式的传输模式和延迟情况大致如下:

经典:
客户端:Hello ,我支持的鉴权方法有:123 (100ms)
服务端:Hello ,我选鉴权方法 1 (100ms)
客户端:请帮我建立与 xxx 的连接 (100ms)
服务端:好的,连接已经建立好 (100ms)
合计:400ms

预测:
客户端:Hello ,我支持的鉴权方法有:123 ;请帮我建立与 xxx 的连接 (100ms)
服务端:Hello ,我选鉴权方法 1 ;好的,连接已经建立好 (100ms)
合计:200ms
testFor
2023-03-12 10:59:50 +08:00
如何是本地连接 1ms 完成交互.会不会你的延迟合并的超时时间都大于连接开销
heiher
2023-03-12 11:04:09 +08:00
@testFor #31 说明一下没有主动延迟等待收集数据再合并的逻辑,这样理解与事实不符。事实是客户端将 socks5 握手中需多轮交互的多个数据片段一次准备好,并在 TCP 流中一次 send ,仅此而已。
Cormic
2023-04-11 15:53:01 +08:00
看配置文件似乎是 socks2tun ,名字又是 tun2socks ,是我理解错了吗?
heiher
2023-04-11 16:47:49 +08:00
@Cormic client -> virtual tunnel -> socks5 server
TongNianShanHe
2023-04-19 22:20:52 +08:00
你好作者,我又来了,这次来反馈一个问题,2.5.1 版本,android 端封装后,使用 TProxyStartService 启动没有任何问题,功能也能正常使用,但是通过 TProxyStopService 关闭时,应用会闪退,Logcat 报错如下图,使用您的 android demo 上的代码尝试,问题依旧,但老版本(具体应该是 2.4 左右,时间有点久我也忘记了)没有出现这个问题,如果您方便的话,还是烦请您看一下😂

![e6cb550c920dcd75a5923a95d24b4841.png]( https://s2.loli.net/2023/04/19/v3i5RQZFfTwujC8.png)
heiher
2023-04-19 22:25:28 +08:00
@TongNianShanHe 好的,我找时间看看,感谢反馈~

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

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

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

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

© 2021 V2EX