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

Android VPN 转 Socks5 代理应用分享

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

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

    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 使用率

    最后

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

    16 条回复    2023-09-06 14:47:08 +08:00
    HXHGTS
        1
    HXHGTS  
       220 天前 via Android   ❤️ 3
    建议改成 socks2tun ,和 tun2socks 反过来,哈哈
    Achophiark
        2
    Achophiark  
       220 天前 via Android
    支持开源。
    mogging
        3
    mogging  
       219 天前 via Android
    感觉可以用于抓包?
    studyingss
        4
    studyingss  
       219 天前 via Android
    DNS 那一栏不支持填端口号,没办法和其他代理配合使用。
    参考 https://www.pishifu.org/Logs/clash-and-adguard.html
    原因是需要接管 dns 实现分流。
    heiher
        5
    heiher  
    OP
       218 天前 via Android
    @mogging 确实可能,一些使用 VPN 方案的抓包应用就是使用 tun2socks 方案实现的 TCP 流重组并直接对接到物理网络。
    heiher
        6
    heiher  
    OP
       218 天前 via Android
    @studyingss 是的,DNS 两项是配置的 VPN 网络的 DNS 地址,不支持直接指定端口。就分流的需求来说,其实可以实现在服务端,因为 DNS 流量也是通过 Socks5 的。
    t6attack
        7
    t6attack  
       175 天前
    一直有疑惑,为什么此类应用必须设置 DNS 呢? socks5 代理不应该是直接把域名传到代理端吗?
    为什么要在本地解析域名?
    heiher
        8
    heiher  
    OP
       174 天前 via Android
    @t6attack 因为 IP 网络的地址类型只有 uint32 和 uint128 两种,假设支持 domain string 就像 socks5 一样,那么你这个想法就可以实现啦。
    cxc520589
        9
    cxc520589  
       86 天前
    这用途我正需要,请问安卓手机怎么部署?使用 termux 来部署吗
    heiher
        10
    heiher  
    OP
       85 天前 via Android
    @cxc520589 APK 直接安装
    cxc520589
        11
    cxc520589  
       85 天前
    @heiher 我的意思是安卓上的服务端
    cxc520589
        12
    cxc520589  
       85 天前
    @heiher 我的用途是把手机上的 Google oneVPN 转接到局域网上
    ClarkAbe
        13
    ClarkAbe  
       68 天前
    挺不错, 但是 DNS 那里能不能继承 WIFI 或者 4G 的 DNS...
    heiher
        14
    heiher  
    OP
       68 天前
    @ClarkAbe 如果网络出口变成了 Socks5 代理服务器,那么客户端本地的 WIFI 或 4G 的 DNS 未必是合适的。
    ClarkAbe
        15
    ClarkAbe  
       67 天前 via Android
    @heiher #14 但是会有可能用家庭内网 DNS 的情况
    anciusone
        16
    anciusone  
       20 天前
    已 star ,试了下,挺简单方便的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2994 人在线   最高记录 6067   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 13:32 · PVG 21:32 · LAX 06:32 · JFK 09:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.