大发龙虎首页    注册   登录
大发龙虎 = way to explore
大发龙虎 是一个大发龙虎关于 分享和探索的地方
现在注册
已注册用户请  登录
大发龙虎  ›  程序员

内网穿透大发龙虎工具 (替代 ngrok 和花生壳)

  •  5
     
  •   lswang · 4 天前 · 6604 次点击

    大发龙虎简介

    由于 IPv4 资源的有限性,目前大部分的大发龙虎本地 电脑都是没有公网 IP。所以想要访问自己的大发龙虎本地 大发龙虎服务 (ssh、http、vnc、NAS、智能家居接口回调 - 比如天猫精灵自定义语义),需要有个大发龙虎服务 来进行内网穿透。 目前有一些大发龙虎工具 比如花生壳、ngrok 等。但是,

    1. 花生壳是收费的;
    2. ngrok 第二版也开始收费(第一版据说有一些严重 bug)。

    所以,需要一款开源的方案( 当然还需要一个固定的公网 IP >_<)。

    解决方案

    本人用 netty 写了一个 tcp 的穿透大发龙虎工具 叫 Tcp Through,直接大发龙虎下载 可用。安装方式下面有介绍

    该项目分 server 端和 client 端,想要看详细信息的话,可以去 github 上查看

    这个大发龙虎工具 有以下一些比较实用的功能

    1. 支持 http api 管理大发龙虎服务 端,还支持 命令行来管理(自己写的 python 库,自己感觉还挺炫)
    2. 支持安全模式。只有在信任列表的 IP 大发龙虎地址 才可以访问 client (防止攻击的最好方式)
    3. 支持速度限制,功能已经测试可用。只是目前在代码中没有限速,可自己修改代码,具体代码在 server 库中的 OuterServer 中,注释中有说明。
    4. client 可设定不允许 server 控制 (client 端的 isRemoteManage 参数)
    5. 支持查看实时速率(不需要用总量来计算)
    6. 管理通道进行了 SSL 加密,防止注册信息被抓包
    7. 数据平面和控制平面分离,提高性能(mac 下测速能达到 10Gb/s+)。
    8. 管理平面和控制平面都进行了安全性校验,不正确的连接会被 kill 掉,拒绝攻击。
    9. Server 可以增加密码校验,不允许其他的 client 注册。Server 启动时候加上 -s 参数。

    备注: 如果是公网虚拟机(阿里云或者腾讯云),记得要开放相应的端口

    Server 安装和运行

    # 大发龙虎下载
    并解压
    > wget http://github.com/longshengwang/tcpthrough-server/releases/download/v1.0/server-1.0.zip
    > unzip server-1.0.zip
    > cd server-1.0
    # 启动 server 端,会占用 3 个端口,用途分别是 控制面(默认 9000)、数据面(9009)、http 大发龙虎服务
    (8080)。可以使用 --help 查看如何设定
    > bin/server
    

    注: 详细参数可以通过 bin/server --help 来查看

    下面的例子是通过 大发龙虎服务 器端的 333 端口来访问内网的 localhost22端口

    Client 安装和运行

    # 大发龙虎下载
    并解压
    > wget http://github.com/longshengwang/tcpthrough-client/releases/download/client-1.0/client-1.0.zip
    > unzip client-1.0.zip
    > cd client-1.0
    # 启动 client 端, 下面的字段表示:通过大发龙虎服务
    器上的 333 端口,可以访问客户端的 localhost:22 大发龙虎服务
    (这里是 ssh 大发龙虎服务
    )
    > bin/client -u my_home -s <server ip>  -p 333 -l localhost:22 -p 333 -c true -a true
    

    注: 详细参数可以通过 bin/client --help 来查看

    参数说明:

    • -c 表示 client 是否可以被 server 控制(是否可以增加被代理的大发龙虎服务 )
    • -u 客户端的名称,也是唯一标识,server 下的 client name 不可以重复
    • -a 表示被代理的端口只可以被信任的主机访问 (如何增加被信任的主机,下面的命令行会有提到)
    • -f 表示可以把所有的参数都写入文件,然后用 -f 指向该文件 文件模板如下
    name=wls_home
    password=wo_shi_server_password
    remote_host=192.168.122.20
    remote_data_port=9009
    remote_manager_port=9000
    local_host=192.168.122.20
    local_port=22
    remote_proxy_port=2222
    is_remote_manage=true
    

    命令行

    可以通过 python 的一个库(自己写的),来查看和管理 server 上的连接信息

    ➜ ~ pip install tcpth.cmd
    ➜ ~ tcpthcmd  # 如果 server 上的 http 端口不是默认的 8080,可以后面加上 -p <port>
    Welcome to use the tcp through.
    tcpthrough> help
    tcpthrough> help
        list -- get all registration
        get <name> -- get special name information
        monitor [<name>] -- monitor the information, refresh on 2s
        register add <name> <localhost:port> <proxy port> -- add registration
        register delete <name> <proxy port> -- delete registration
        trust add <name> [<proxy port>] <trusted ip> -- add trust ip
        trust delete <name> [<proxy port>] <trusted ip> -- delete trust ip
        trust get <name> [<proxy port>] -- get trust ip
    tcpthrough>
    tcpthrough> list   # 在命令行下,列是对齐的,拷贝过来之后就不对齐了
     Name | Local Service | Proxy Port | Out Conn Count | Remote Managed | Security | Write Speed | Read Speed
    --------------------------------------------------------------------------------------------------------------
     my_home | localhost:22 | 333 | 0 | true | true | 0KB/s | 0KB/s
    tcpthrough>
    

    说明:

    • 可以通过 exit 或者 ctrl + d 或者 ctrl + c 退出命令行模式
    • 如果客户端允许大发龙虎服务 端控制,那么可以通过 register 命令来进行添加和大发龙虎删除
    • 如果客户端开启安全模式 -a, 那么只有通过 trust add <your-client-name> <your-ip> 来添加信任的 IP 大发龙虎地址
    • monitor 是可以 每个 2s 打印一次 server 端的连接信息
    • register add 中的 localhost 可以是 client 网络中的其他主机的 IP 大发龙虎地址
    97 回复  |  直到 2019-11-12 15:00:41 +08:00
        1
    shadowczp   4 天前
    其实比较新的大发龙虎工具 里,有现成的叫做 frp。。。
        2
    xxsww211   4 天前
    @shadowczp 是,FRP 还是开源项目。ngrok 其实也够用。
        3
    HangoX   4 天前
    倒是差一个 ngrok 重放的功能,其他都没有
        4
    xxsww211   4 天前
    大发龙虎我 觉得楼主这个也很不错,很到位。
    楼主要不考虑其他的突破点,比如不需要固定的公网 IP。连接第三方大发龙虎服务 器实现转发,当然第三方这个过程也是开源的,让用户自由组建。
        5
    yorkyoung   4 天前
    限速、客户端管理和流量实时这些功能还是比较新颖的,先马后看
        6
    lswang   4 天前
    @xxsww211 现在可没有这么好的第三方,大发龙虎企业 宽带太贵了
        7
    lswang   4 天前
    @yorkyoung 感谢支持
        8
    wayixia   4 天前
    收费也好免费也好,最后都是要走公网 ip,都是要花钱。最终各种成本综合考虑,选择自己适合的。
        9
    lswang   4 天前
    @wayixia 其实电信可以申请公网 IP,就是不固定。想要用这个动态 IP,还是要一个固定 IP 来 >_<
        10
    lswang   4 天前
        11
    boywhp   4 天前
    FCN 一键免费穿透,日常维护管理基本够用了
        12
    keepeye   4 天前
    frp 很稳定,就是阿里云带宽太贵了
        13
    ChangHaoWei   4 天前
    大发龙虎你 们都不用 ssh 自带的端口转发?简单快捷。基于 alphine 装 ssh-client 然后 docker 起来也免进程管理。


    换大发龙虎服务 器还什么都不用调,通讯还是加密的。不能理解为什么不用。。
        14
    lswang   4 天前
    @ChangHaoWei 用过,容易断。用 docker 运行应该会好点
        15
    prenwang   4 天前
    java netty 实现,是不是内存占用多了一点
        16
    tigerstudent   4 天前
    @ChangHaoWei 断了就没了,得重新执行命令,还得写一套脚本去管理重连
        17
    xxsww211   4 天前
    @lswang 大发龙虎你 误会大发龙虎我 的意思了。大发龙虎技术 只管实现,至于这第三方到底是谁就不用去管,因为这是用户自己的需求,他们自己在一些云大发龙虎服务 器搭建个大发龙虎服务 就行了。这比自己去建一个第三方要实在很多。
        18
    easing   4 天前
    大发龙虎我 理解这还是需要大发龙虎服务 端转发流量?
        19
    jaybing926   4 天前
    @ChangHaoWei 大发龙虎我 用 SSH 转发,frp,ngrok 这些大发龙虎工具 都需要 server 端和 client 端,SSH 只要一条命令,一条命令~~
        20
    lihongjie0209   4 天前
    mark 一下 后面学习用
        21
    lswang   4 天前
    @easing 是的,现在 NAT 打洞已经非常难了
        22
    lswang   4 天前
    @jaybing926 ssh 转发是简单,不过少了 限速、管理一些其他的功能
        23
    fanyingmao   4 天前 via Android
    还是直接用 ssh 转发,比较简单。
        25
    wpblank   4 天前
    正好大发龙虎我 顺路问个问题,本来准备电脑弄个内网穿透,回家了也能连上。结果大发龙虎大发龙虎我 们 大发龙虎公司 网络好像屏蔽了 frp 和 v2ray,想问下怎么实现的
        26
    sagaxu   4 天前 via Android
    家里宽带公网 IP,配了 dmz,域名解析到家里 IP,每隔半个小时向 dnspod 上报一次 IP。

    大发龙虎公司 ssh 连接到家里做隧道,systemd 管理,转发失败会自动重连。

    第三方大发龙虎工具 ,好像并不需要。
        27
    encro   4 天前
    frp,nps,goproxy 都很不错
        28
    wangyongbo   4 天前
    @jaybing926 教一下大发龙虎我 吧, 这一条命令是啥? 谢谢
        29
    shenqi   4 天前
    临时使用,大发龙虎推荐 pierced。不要滥用了,不然封了就惨了。
        30
    sagaxu   4 天前 via Android
    @tigerstudent systemd 或者 supervisord 都很成熟
        31
    lswang   4 天前
    @wpblank 怎么屏蔽 frp 和 v2ray 的就不知道了。 文章里的安装步骤照着做就行,如果是 大发龙虎Win dows 的,把文章里对应的命令换成大发龙虎你 手动操作。不过大发龙虎你 需要有一个固定的公网 IP
        32
    jaybing926   4 天前
    @wangyongbo ssh -R 20001:localhost:80 [email protected] 或者 autossh -p22 -M 5000 -NR 20001:0.0.0.0:80 [email protected],autossh 会一直尝试重新连接 可以消除网络故障隐患,ssh 透传的缺陷是透传到外网的端口只能监听 127
        33
    samondlee   4 天前
    点个 star2333
    感觉和 sakura frp 魔改的 有点儿像
        34
    zlylong   4 天前
    @wpblank 屏蔽 V2ray 是如何做到的???比 GFW 还强!?
        35
    lswang   4 天前
    @samondlee 谢谢支持
        36
    SenLief   4 天前
    有公网 IP 的还是直接用 DDNS,没有的大发龙虎我 觉得不如买一个设备了。省心
        37
    daimiaopeng   4 天前 via Android
    frp 不香吗?
        38
    lswang   4 天前
    @daimiaopeng 自己写的最香
        39
    ungrown   4 天前
    @xxsww211 大发龙虎你 们为什么造轮子之前就不能先查一下,大发龙虎你 说的这个也有了,而且早就有了,“远古”项目 n2n 就是(虽然已经凉凉),现在有个更大的项目 zerotier
        40
    ungrown   4 天前
    @lswang 有本事加密算法也自己写
    重复造轮子就是浪费生产力
        41
    ungrown   4 天前
    @zlylong 协议白名单,或者端口白名单,甚至 IP 地理池白名单
        42
    lswang   4 天前   ♥ 1
    @ungrown 大发龙虎我 也想写加密算法,可惜数学能力限制了大发龙虎我 。
    重复造轮子的说法不适合个人,程序员就是通过自己开发来学大发龙虎更多 的东西。自己造的轮子是自己的轮子,别人造的轮子是别人的。

    再说,如果都用别人的轮子,那大发龙虎你 说为什么华为还要搞芯片干嘛?华为也在浪费生产力?
        43
    m1862897   4 天前
    一般人用 frp 就行了

    大发龙虎我 当然会把大发龙虎你 这个作为备用的,毕竟有 java 源码,熟悉 netty 的 chanelhandler 和 pipeline 可以自己修改;
    frp 好像是 go 写的,go 这种语言,还真特么不会,完全看不懂写的神马,根本无从改起。
        44
    m1862897   4 天前
    所以,大佬,大发龙虎我 支持大发龙虎你 。
    呵呵,可能还会抄袭大发龙虎你 的 netty 代码。
        45
    ysys123   4 天前
    大发龙虎我 用的付费的 natapp 用起来也挺稳定 还不用担心自己的 vps 有问题
        46
    lswang   4 天前
    @m1862897 谢谢支持,代码随意用
        47
    lswang   4 天前
    @ysys123 这种流量收费的,怎么防止有人恶意蹭?
        48
    lswang   4 天前
    @ysys123 大发龙虎我 看阿里云也有按流量收费,不过不敢用,怕有心人搞。。
        49
    Calm1   4 天前
    收藏了,感觉不错。谢谢楼主分享。
        50
    ungrown   4 天前   ♥ 1
    @lswang 因为别的芯片厂商故意给华为使绊子,请问大发龙虎你 被别人使绊子了吗?
    如果大发龙虎你 还觉得实现加密算法的关键是数学能力的话,大发龙虎我 只能呵呵,请自行大发龙虎搜索 “不要自己实现加密算法”。
        51
    Kilerd   4 天前
    jaav 写这种东西真的是。。。。。。 怎么说呢? 感觉没必要?
        52
    lswang   4 天前
    @ungrown 如果大发龙虎你 用的大发龙虎服务 的供应商开不下去了,大发龙虎你 用啥。。 。 华为的例子,简单举例,用不着深入探讨。

    大发龙虎我 想大发龙虎你 的时间应该会用来创造大发龙虎更多 的价值,不会浪费的。
        53
    atom234   4 天前
    不错
        54
    lswang   4 天前
    @Kilerd 写这个库主要也是实际用下 netty,熟悉网络开发。Netty 很稳定,性能也还行,而且把底层的很多部分都省去了。很多开源项目(JAVA)涉及网络的部分都是 netty 开发的,比如 zookeeper。一些大大发龙虎公司 也会用 netty 做一些网络开发。
        55
    m1862897   4 天前
    大佬
    ,看了一下大发龙虎你 的代码
    ,大发龙虎你 的打包方式别具一格
    ,依赖相当精华尽量大发龙虎优化 到最低
    ,小可对大佬佩服得五体投地
    ,能否加个微信
    ,以后给小可一点指教
        56
    lswang   4 天前
    @m1862897 =.= 也就是用了 gradle 打包。。。优点就是不用写那么多冗余的 xml 标签。
        57
    thanatosS   4 天前
    学习了
        58
    tankren   4 天前
    大发龙虎我 的联通有公网 有 IPv6 有 443 哈哈
        59
    morphyhu   4 天前
    支持楼主,感谢分享。在中国的这种网络环境下,多个选择总是好的。
        60
    weifengzi2009   4 天前
    @jaybing926 #32 不只是能监听 127 啊,大发龙虎你 可以用 GatewayPorts 去控制监听任意 interface 啊
        61
    varrily   4 天前
    来个类似的,多了 web 端管理,client 鉴权 ifport.com 。但说真的,java 太占内存了。
        62
    lswang   3 天前
    @varrily java 的特性,内存占用多,但是相对稳定一些
        63
    gy123   3 天前
    server-->长连接-->client;
    client 监听 http 请求--->发送到 server 的 channl-->server 请求 http 大发龙虎服务 返回数据;
    思路是这样?
        64
    coloz   3 天前
    了解下
        65
    guanhui07   3 天前
    ngrok frp 大发龙虎我 只知道
        66
    dukang   3 天前
    @lswang 大发龙虎你 这个通信是所有流量都经由中转大发龙虎服务 器。还是穿透后,两端点对点通信,无需经过中转?
        67
    ungrown   3 天前 via Android   ♥ 1
    @lswang 大发龙虎你 别给大发龙虎我 腆着脸找台阶下,自己举错了例子就勇敢承担别人的质问。
    还大发龙虎服务 商开不下去,都是开源可自建项目,用户众多发展迅速。
    大发龙虎我 看大发龙虎你 这个多余的项目倒是过不了多久就不维护了。
        68
    meppy   3 天前
    mark,大发龙虎我 一直用 natfrp,挺不错的,还算比较稳定,网速比大发龙虎我 自己搭的快。。
        69
    ac2sherry   3 天前 via iPhone
    @lswang 大发龙虎公司 没有 vpn 吗?
        70
    conn4575   3 天前 via Android
    star 了,不过大发龙虎我 还是觉得 frp 更香。看到是 java 的就有点抵触,小机器内存耗不起 233,不过拿来学 netty 应该不错😮
        71
    lswang   3 天前 via iPhone
    @conn4575 谢谢,一开始写这个项目的目的也是为了学习 netty。其实之前已经用 Java 原生网络库写了一个,不过感觉性能不够好、功能不够多,就用 netty 重写了。
        72
    lswang   3 天前 via iPhone
    @conn4575 大发龙虎公司 肯定不给用自己的穿透大发龙虎软件 ,这个主要是为了访问家里的树莓派
        73
    shell314   3 天前 via Android
    支持
        74
    waiaan   3 天前
    这类大发龙虎软件 ,中转大发龙虎服务 器才是最关键的吧?
        75
    eq06   3 天前
    有 server 的人不需要内网穿透,没 server 的人用不了大发龙虎你 的大发龙虎工具
        76
    lswang   3 天前 via iPhone
    @eq06 是需要一个 server,内网需求还是看自己了。大发龙虎我 用内网穿透是为了用天猫精灵控制家里的树莓派开关电视
        77
    lswang   3 天前 via iPhone
    @waiaan 是的,现在双十一某宝和某讯针对新用户都有很大折扣,不过上车需注意,因为到期续费太贵了
        78
    lswang   3 天前 via iPhone
    @shell314 感谢支持
        79
    waiaan   3 天前
    @lswang 大发龙虎我 记得 ngrok 是可以直接用的。
        80
    ICKelin   3 天前
    最近怎么这么多人写内网穿透大发龙虎软件 。。。
        81
    ICKelin   3 天前
    ngrok 这款大发龙虎软件 很好,但是是国外的,连接的节点看其内部调度算法以及是否在国内有节点。

    frp 是开源项目,面向的是有大发龙虎技术 底子的人,没大发龙虎技术 功底的让他折腾不一定能搞得定,其实可以算一下,如果 frp 需要花一个早上来搞定部署,还需要域名大发龙虎备案 ,时间上的消耗足够购买收费大发龙虎软件 一年了,还需要额外支付大发龙虎服务 器费用,不太划算的。

    市面上有不少基于 frp 或者 ngrok 来做二次开发的大发龙虎软件 ,但是毕竟不是独立开发的,出故障能否快速解决其实也是一个问题,官网打着免费的旗号,但是这类大发龙虎软件 带宽费用是个大头,最终肯定是需要收回去的。

    大发龙虎我 觉得楼主是不是可以考虑尝试往大发龙虎软件 大发龙虎服务 方向去做。
        82
    imWBB   3 天前
    @ICKelin
    为什么要大发龙虎备案 ?
    直接用国外的大发龙虎服务 器就好了。
        83
    ICKelin   3 天前
    @imWBB 可以的。
        84
    lanternxx   3 天前
    @ICKelin #81 frp 部署不是 3 分钟就好了的吗。。使用非 80/443 端口也不需要大发龙虎备案
        85
    ICKelin   3 天前
    @lanternxx 部署这东西得看人,有人用内网穿透是用来做大发龙虎公众号 接口调试的,这个还真要求 80/443 端口。
        86
    xia0shi   3 天前 via iPhone
    支持 点赞
        87
    zhfsxtx   2 天前
    请问开发这种程序大发龙虎你 是用什么 IDE?
        88
    lswang   2 天前 via iPhone
    @zhfsxtx idea
        89
    quericy   2 天前
    后续考虑支持 client 之间 p2p 么
        90
    c0py7hat   1 天前
    为啥大发龙虎你 们都有这需求,大发龙虎我 就没这需求,佛系..难道大发龙虎我 太菜了
        91
    darknoll   1 天前
    @ICKelin frp 是大发龙虎我 见过部署最简单的大发龙虎软件 了,大部分人几分钟就搞定了吧。
        92
    lswang   1 天前
    @quericy 暂时不考虑,现在打洞太难了。之前用试过了,打不进去。。。
        93
    lswang   1 天前
    @c0py7hat 看自己的需求了,一般捣鼓树莓派和小米或者天猫智能家居之类的,这个需求还是很多的
        94
    stevenkang   1 天前
    有更简单的:
    ssh -R 80:localhost:8080 serveo.net
        95
    zunceng   1 天前
    大发龙虎你 都有 server 了 用 autossh 不就完事了
        96
    ICKelin   22 小时 1 分钟前
    @darknoll 真得看人,大发龙虎我 印象中作者也搞了个付费星球群专门解决问题的,大部分人可能是大部分大发龙虎技术 人员。买个大发龙虎服务 器,买个域名做个解析是不是很难的事,但是并不是所有人都能做得了的。
        97
    wslzy007   2 小时 23 分钟前
    目前 go 语言的穿透大发龙虎工具 很多,java 的倒是少见,奈何大发龙虎我 的哲学是绿色环保,自己动手,只用 c/c++的
    大发龙虎关于   ·   FAQ   ·   API   ·   大发龙虎大发龙虎我 们 的愿景   ·   广告投放   ·   感谢   ·   实用小大发龙虎工具   ·   4220 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 32ms · UTC 09:24 · PVG 17:24 · LAX 01:24 · JFK 04:24
    ♥ Do have faith in what you're doing.