Mr.2: 内网穿透 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
thisismr2
V2EX    分享创造

Mr.2: 内网穿透

  •  4
     
  •  
    PRO
    txthinking 2019-05-05 09:39:29 +08:00 11206 次点击
    这是一个创建于 2354 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Mr.2

    Build Status License: GPL v3 EN

    Table of Contents

    Mr.2 是什么

    Mr.2 可以帮助你将内网服务器暴露在外网. 支持 TCP/UDP 协议, 当然也支持 HTTP 协议.
    让这个世界简单点.

    服务端

    $ mr2 server -l :9999 -p password 

    客户端

    # 将本地服务 127.0.0.1:1234, 暴露在外网: server_address:5678 $ mr2 client -s server_address:port -p password -P 5678 -c 127.0.0.1:1234 
    # 将本地目录 /path/to/www, 以 HTTP 协议暴露在外网: server_address:5678 $ mr2 client -s server_address:port -p password -P 5678 --clientDiretory /path/to/www 

    示例

    访问内网 HTTP 服务

    $ mr2 client -s server_address:port -p password -P 5678 -c 127.0.0.1:8080 # 然后 你的外网 HTTP 服务: server_address:5678 

    SSH 登录到内网机器

    $ mr2 client -s server_address:port -p password -P 5678 -c 127.0.0.1:22 # 然后 $ ssh -oPort=5678 user@server_address 

    访问内网 DNS 服务

    $ mr2 client -s server_address:port -p password -P 5678 -c 127.0.0.1:53 # 然后 你的外网 DNS 服务: server_address:5678 $ dig github.com @server_address -p 5678 

    通过 HTTP 访问内网机器上的文件

    $ mr2 client -s server_address:port -p password -P 5678 --clientDirectory /path/to/www # 然后 你的外网 HTTP 服务: server_address:5678 

    任何基于 TCP/UDP 的你能想到的想法

    ...

    贡献

    请先阅读 CONTRIBUTING.md

    协议

    以 GPLv3 协议开源

    第 1 条附言    2019-05-05 11:05:10 +08:00
    58 条回复    2019-05-14 00:18:20 +08:00
    thisismr2
        1
    thisismr2  
    OP
    PRO
       2019-05-05 09:41:32 +08:00
    dabaibai
        2
    dabaibai  
       2019-05-05 09:46:00 +08:00
    FRP?
    thisismr2
        3
    thisismr2  
    OP
    PRO
       2019-05-05 09:54:30 +08:00
    差不多. 相对使用更简单吧
    thisismr2
        4
    thisismr2  
    OP
    PRO
       2019-05-05 10:04:00 +08:00
    一直团队内部使用, 后续会把其他相关配套整理后也开源出来
    shoaly
        5
    shoaly  
       2019-05-05 10:24:41 +08:00
    @thisismr2 相比 frp 确实要好理解一些, 主要是 frp 的配置特别绕.....
    顺便问问, 能支持 多密码对应特定端口的方式么.... 这样就可以多个 client 连同一个 server, 通过用户名和密码分开了
    比如:
    mr2 server -l :9999 -p2 {"pws1":"1081","pws2":"1082"} 这种
    Tink
        6
    Tink  
    PRO
       2019-05-05 11:00:36 +08:00 via iPhone
    好像有点像 dog tunnel ?
    xionger
        7
    xionger  
       2019-05-05 11:04:17 +08:00 via iPhone
    看起来不错,待会到公司了试试
    thisismr2
        8
    thisismr2  
    OP
    PRO
       2019-05-05 11:05:57 +08:00
    @shoaly 理论上是可以的, 会考虑
    thisismr2
        9
    thisismr2  
    OP
    PRO
       2019-05-05 11:07:27 +08:00
    @Tink 恕我孤落寡闻
    Tink
        10
    Tink  
    PRO
       2019-05-05 11:12:12 +08:00 via iPhone
    jay0726
        11
    jay0726  
       2019-05-05 11:19:07 +08:00
    基于 Java Netty 实现的可用于内网穿透的代理工具 https://github.com/wucao/natx 帮忙点几个 Star 吧
    thisismr2
        12
    thisismr2  
    OP
    PRO
       2019-05-05 11:22:02 +08:00
    定位还是有点不同的. Mr2 定位简单但足够用, Work as you see first
    xionger
        13
    xionger  
       2019-05-05 11:25:17 +08:00 via iPhone
    楼上来踢馆的好像献丑了,只支持 TCP。
    楼主的貌似 UDP/TCP 全支持,可玩性更多
    xionger
        15
    xionger  
       2019-05-05 11:31:40 +08:00 via iPhone
    刚试了下,目前足够强大,ssh,http,dns TCP UDP 都试了下。
    我试了下如果我本地是 https, 也是支持的,但是建议楼主增加个功能 如果我本地的时 http,能不能外网变成 https。

    BTW 我是你另外项目 Brook 的用户,非常感谢。
    unixeno
        16
    unixeno  
       2019-05-05 11:35:53 +08:00 via Android
    @xionger 这个不应该是 Nginx 之类的干的活吗
    xionger
        17
    xionger  
       2019-05-05 11:45:18 +08:00 via iPhone
    @unixeno 也对

    我想的是,比如我的本地地址是 http://127.0.0.1:8080
    目前已实现外网服务器地址是 http://1.2.3.4:5678
    要是直接变成 https://1.2.3.4:5678 就用不到 nginx 了,哈哈
    wwqgtxx
        18
    wwqgtxx  
       2019-05-05 11:58:13 +08:00 via iPhone
    话说 udp 穿透部分还是走 udp over tcp 这样的么
    thisismr2
        19
    thisismr2  
    OP
    PRO
       2019-05-05 12:01:50 +08:00
    @xionger

    我们前端也是有这个需求的, 我们团队内部已支持, 支持服务端证书, 也支持客户端自己颁发的证书的(我们公司所有电脑已信任我们自签的根证书)

    比如你上面是可以用自己的根证书给 1.2.3.4 颁发证书, 然后将根证书需要给访问的人信息, 当然不信任也能访问就是浏览器提示不安全, 点下仍继续访问的问题.

    这块其实东西其实不多, 但是也不算少, 就是给人感觉有点嗦,
    目前还在整理剥离内部代码后开源.
    thisismr2
        20
    thisismr2  
    OP
    PRO
       2019-05-05 12:05:16 +08:00
    @wwqgtxx TCP 走 TCP, UDP 走 UDP.
    wwqgtxx
        21
    wwqgtxx  
       2019-05-05 12:11:28 +08:00 via iPhone
    @thisismr2 那还是很好的,回头试试,frp 这一块就是走 over tcp 的,所以 udp 穿透的效果很差。
    话说未来有打算支持一下类似 n2n 这样的功能么?
    xionger
        22
    xionger  
       2019-05-05 12:43:27 +08:00
    @thisismr2 期待
    thisismr2
        23
    thisismr2  
    OP
    PRO
       2019-05-05 13:00:10 +08:00
    @wwqgtxx 目前 p2p 建立连接需要服务端交换双方基础信息, 且根据 nat 类型还有很大概率最后建立不成功, 不成功还是得服务端中转数据. 经过我们以前的研究, 有不少家庭公司 nat 网络建立失败, 最后还是走了中转. 而且还可能得要求最终端的用户也安装个客户端.
    shoaly
        24
    shoaly  
       2019-05-05 14:01:34 +08:00
    @thisismr2 go 不是很熟 , 可以给一个 大致的代码行数么, 空了试着自己改一个
    MzM2ODkx
        25
    MzM2ODkx  
       2019-05-05 14:05:13 +08:00
    localhost.run 啥都不用装,不过功能没这么强大
    thisismr2
        26
    thisismr2  
    OP
    PRO
       2019-05-05 14:36:59 +08:00
    @shoaly 主要是认证这块, 其实的确要改的东西也不是很多, 我这两天增加上这个吧.
    大概结果是:

    ```
    $ mr2 server --portPassword "1000 password" --portPassword "2000 password"
    ```

    client 使用不变
    thisismr2
        27
    thisismr2  
    OP
    PRO
       2019-05-05 15:32:09 +08:00
    @iMusic 后期会考虑提供免费的 server
    mooncakejs
        28
    mooncakejs  
       2019-05-05 15:37:42 +08:00
    不来个 docker image
    shoaly
        29
    shoaly  
       2019-05-05 16:44:57 +08:00
    @thisismr2 可以的话, 到时候 @我嘛 一定红包酬谢...
    devtk
        30
    devtk  
       2019-05-05 16:56:05 +08:00
    看上去配置起来比 frp 方便很多
    thisismr2
        31
    thisismr2  
    OP
    PRO
       2019-05-05 17:24:53 +08:00
    @shoaly 好了 AT 你. red packet 不用了, 不接受个人任何形式的娟增 :) 那俩字打不出来 = = ||
    thisismr2
        32
    thisismr2  
    OP
    PRO
       2019-05-05 17:45:55 +08:00
    @mooncakejs 可以用自己喜欢的 base image 做个自用嘛
    heretreeli
        33
    heretreeli  
       2019-05-05 17:52:52 +08:00
    n2n ??
    ninestep
        34
    ninestep  
       2019-05-05 18:25:02 +08:00   1
    支持 websocket 吗?我现在用到frp 就走不通 websocket
    iamxiaoq
        35
    iamxiaoq  
       2019-05-05 18:54:33 +08:00 via Android
    昨天刚刚发现一个类似的 goproxy
    thisismr2
        36
    thisismr2  
    OP
    PRO
       2019-05-05 19:17:27 +08:00   1
    @ninestep 理论上支持任何 TCP-based UDP-based 的协议. websocket 属于 TCP, 所以是支持的, 我没测试
    thisismr2
        37
    thisismr2  
    OP
    PRO
       2019-05-05 19:18:14 +08:00
    thisismr2
        38
    thisismr2  
    OP
    PRO
       2019-05-05 19:18:47 +08:00
    @heretreeli 不同
    thisismr2
        39
    thisismr2  
    OP
    PRO
       2019-05-05 19:47:26 +08:00
    @ninestep websocket 支持. 朋友已测试.
    xionger
        40
    xionger  
       2019-05-05 20:05:45 +08:00
    @unixeno 的确,我现在是 本地 + nginx + mr2
    huaxianyan
        41
    huaxianyan  
       2019-05-05 20:14:21 +08:00
    感谢,回头试试
    WenjieYe
        42
    WenjieYe  
       2019-05-05 21:02:53 +08:00
    感谢
    回头试试
    designer
        43
    designer  
       2019-05-05 21:27:07 +08:00 via iPhone
    支持!
    ihipop
        44
    ihipop  
       2019-05-06 08:49:49 +08:00 via Android
    是 brook 作者吗?
    Dark1X
        45
    Dark1X  
       2019-05-06 17:08:02 +08:00
    支持!非常好用!
    thisismr2
        46
    thisismr2  
    OP
    PRO
       2019-05-06 17:30:23 +08:00   1
    @shoaly

    ```
    # 只允许部分端口, 并针对每个端口设置密码
    $ mr2 server -l :9999 -P '5678 password' -P '6789 password1'
    ```
    hanguofu
        47
    hanguofu  
       2019-05-07 13:21:33 +08:00 via Android
    整个项目都是用 go 开发的吗?
    thisismr2
        48
    thisismr2  
    OP
    PRO
       2019-05-07 14:14:32 +08:00
    @hanguofu 是的
    xionger
        49
    xionger  
       2019-05-08 09:33:47 +08:00 via iPhone
    #46 这个很有用
    Valid
        50
    Valid  
       2019-05-08 10:19:51 +08:00
    emmmm,有人 @我我才来的,来了看到没人 @我
    04huang
        51
    04huang  
       2019-05-08 12:09:44 +08:00
    所有的流量都走服务器?
    thisismr2
        52
    thisismr2  
    OP
    PRO
       2019-05-08 13:04:50 +08:00
    @Valid 玄学问题
    04huang
        53
    04huang  
       2019-05-09 10:28:08 +08:00
    @thisismr2 我发现在 WIN 下老是提示 EOF 然后断开了链接。。
    samondlee
        54
    samondlee  
       2019-05-10 14:41:01 +08:00
    233 可以考虑增加 arm 版本
    树莓派、N1 刷 armbian 应用应该比较多
    thisismr2
        55
    thisismr2  
    OP
    PRO
       2019-05-11 11:30:07 +08:00 via iPhone
    @samondlee release 页面有啊
    thisismr2
        56
    thisismr2  
    OP
    PRO
       2019-05-12 22:09:11 +08:00 via iPhone
    @04huang 为了可以复现,可以提个 issue
    hzqim
        57
    hzqim  
       2019-05-14 00:12:46 +08:00
    谢谢分享。
    作为伸手党,期待 openwrt-mr2 以及 luci-app-mr2 的出现。
    hzqim
        58
    hzqim  
       2019-05-14 00:18:20 +08:00
    @chenhw2 已经移植到 Openwrt 了
    openwrt-mr2 https://github.com/chenhw2/openwrt-mr2
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1030 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 23:00 PVG 07:00 LAX 16:00 JFK 19:00
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86