V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
heiher
V2EX  ›  分享创造

Android VPN 转 Socks5 代理应用分享

  •  2
     
  •   heiher ·
    heiher · 101 天前 · 2220 次点击
    这是一个创建于 101 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,我又来分享轮子啦~

    SocksTun是我最近开源的一个基于HevSocks5Tunnel实现的 Android VPN ,用于将手机端的 TCP 、UDP 流量通过 Socks5 代理进行转发。其实它只是一个参考实现,主要用于演示如何用 HevSocks5Tunnel 实现 VPN 。它可以对接明文的标准 Socks5 协议,比如 Socks5 服务(或映射)部署在本地局域网,也是能具有一些实用性的吧。

    特性支持

    • 支持重定向 TCP 连接。
    • 支持重定向 UDP 报文。(Fullcone NAT ,UDP 从 UDP 转发、UDP 从 TCP 转发)
    • 支持简单用户名 /密码认证。
    • 支持指定 DNS 地址。
    • IPv4/IPv6 双栈。
    • 全局 /按应用双重模式。

    使用方法

    服务端

    HevSocks5Server

    HevSocks5Server支持 UDP 从 TCP 转发,可以运行在 Linux/BSD 和 macOS 系统上,配置、使用方法也比较简单。

    # 下载、编译
    git clone --recursive https://github.com/heiher/hev-socks5-server
    cd hev-socks5-server
    make
    
    # 运行
    hev-socks5-server conf.yml
    

    conf.yml:

    main:
      workers: 4
      port: 1080
      listen-address: '::'
    
    misc:
      limit-nofile: 65535
    

    其它

    任意支持标准 Socks5 协议的 TCP(Connect)和 UDP(Associate)的服务端即可。

    手机客户端

    1. 从项目发布页下载 APK 并安装。
    2. 打开应用,配置 Socks5 地址、端口和 DNS 地址。
    3. 如果使用 HevSocks5Server 服务端,钩选 UDP relay over TCP ;使用其它服务端则去掉。
    4. 保存配置后,点击启用开启 VPN 服务。

    性能评测

    Android VPN App 目前还没有做过性能、能耗的评测(其实是不会~),之前在低性能的 RK3399(AArch64 架构)设备做过几款 tun2socks 的评测,结论是只有 HevSocks5Tunnel 可以几乎跑满物理网卡的最大带宽,并且对应的 CPU 资源使用最少。那么,基于它实现的 Android VPN 应该具有相对较好的节能效果吧。

    速率

    CPU 使用率

    最后

    最开心的事情当然是开源的这些小轮子能跑起来,确实对大家有用,期待支持与反馈~

    8 条回复    2023-04-04 23:02:55 +08:00
    HXHGTS
        1
    HXHGTS  
       101 天前 via Android   ❤️ 3
    建议改成 socks2tun ,和 tun2socks 反过来,哈哈
    Achophiark
        2
    Achophiark  
       100 天前 via Android
    支持开源。
    mogging
        3
    mogging  
       100 天前 via Android
    感觉可以用于抓包?
    studyingss
        4
    studyingss  
       100 天前 via Android
    DNS 那一栏不支持填端口号,没办法和其他代理配合使用。
    参考 https://www.pishifu.org/Logs/clash-and-adguard.html
    原因是需要接管 dns 实现分流。
    heiher
        5
    heiher  
    OP
       99 天前 via Android
    @mogging 确实可能,一些使用 VPN 方案的抓包应用就是使用 tun2socks 方案实现的 TCP 流重组并直接对接到物理网络。
    heiher
        6
    heiher  
    OP
       99 天前 via Android
    @studyingss 是的,DNS 两项是配置的 VPN 网络的 DNS 地址,不支持直接指定端口。就分流的需求来说,其实可以实现在服务端,因为 DNS 流量也是通过 Socks5 的。
    t6attack
        7
    t6attack  
       56 天前
    一直有疑惑,为什么此类应用必须设置 DNS 呢? socks5 代理不应该是直接把域名传到代理端吗?
    为什么要在本地解析域名?
    heiher
        8
    heiher  
    OP
       55 天前 via Android
    @t6attack 因为 IP 网络的地址类型只有 uint32 和 uint128 两种,假设支持 domain string 就像 socks5 一样,那么你这个想法就可以实现啦。
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3106 人在线   最高记录 5634   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 133ms · UTC 11:39 · PVG 19:39 · LAX 04:39 · JFK 07:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.