V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wslzy007
V2EX  ›  宽带症候群

无需公网 IP,基于 tcp 协议的 p2p 穿透----疫情期间“内网”<-->"内网"安全穿透

  •  
  •   wslzy007 · 2020-02-05 23:59:42 +08:00 · 13506 次点击
    这是一个创建于 1780 天前的主题,其中的信息可能已经有所发展或是发生改变。

    别提 frp/ngrok,如果能满足我的需求也就不会重复造车了:)。vpn/zerotier?tun/tap 类的工具。。。仁者见仁吧

    良心推荐 smarGate,特点如下:

    1、无需公网 IP
    2、使用 TCP 协议进行 P2P 穿透,无 Qos 之忧
    3、SSL 隧道加密
    4、支持 IPv6 (防火墙)穿透
    5、支持 UDP 游戏串流
    6、免费无限制
    7、小巧简单
    8、。。。

    能干什么?

    1、ssh 远程开发 /运维
    2、RDP 远程桌面
    3、远程摄像头监控
    4、远程游戏串流
    5、私有内网 web 服务访问
    6、。。。

    详见:

    github.com/lazy-luo/smarGate

    59 条回复    2021-01-12 11:00:38 +08:00
    v66ex
        1
    v66ex  
       2020-02-06 00:12:20 +08:00   ❤️ 4
    https://ksa.kanxue.com/ 这个能满足你不
    wslzy007
        2
    wslzy007  
    OP
       2020-02-06 00:19:53 +08:00
    @v66ex 能否支持自定义路由及 P2P 穿透?
    yulihao
        3
    yulihao  
       2020-02-06 08:42:01 +08:00
    谢谢楼主!我的移动就是因为 UDP 的穿透,导致 Qos 严重
    yulihao
        4
    yulihao  
       2020-02-06 08:50:05 +08:00
    没有 Windows 客户端嘛?
    weyou
        5
    weyou  
       2020-02-06 09:08:23 +08:00 via Android   ❤️ 5
    没仔细去看。凡是号称无需公网 ip 穿透的都是自己提供了公网 server 进行穿透,或多或少都有点安全性问题。
    ladeo
        6
    ladeo  
       2020-02-06 09:15:24 +08:00 via Android
    初期 p2p 会话建立的时候肯定要用公网 IP。会话建立后就不需要了。
    公网 IP 不是自己提供就是第三方提供。第三方提供安全怎么保证?
    dabaibai
        7
    dabaibai  
       2020-02-06 09:40:53 +08:00
    有些 isp 是不能建立 p2p 的
    ljpCN
        8
    ljpCN  
       2020-02-06 09:46:12 +08:00 via Android
    @weyou 真相了,我是点开来看到有一步注册账号才反应过来,怎么可能没有公网机器就完成穿透呢
    hehe12dyo
        9
    hehe12dyo  
       2020-02-06 09:59:05 +08:00
    @v66ex ksa 就是 fcn。..
    beastk
        10
    beastk  
       2020-02-06 10:12:11 +08:00 via iPhone
    玩的文字游戏吧
    wslzy007
        11
    wslzy007  
    OP
       2020-02-06 10:52:24 +08:00
    @ljpCN @beastk 对于使用者而言无需公网 IP,即:你手机没有公网 IP,家中宽带无需公网 IP,能实现手机代理访问家中局域网主机,如有 IPv6 或 V4 NAT 支持穿透则可直接 P2P
    wslzy007
        12
    wslzy007  
    OP
       2020-02-06 10:53:38 +08:00
    @yulihao UDP 能穿透成功的( P2P ),TCP 都可以 P2P 的
    wslzy007
        13
    wslzy007  
    OP
       2020-02-06 10:54:44 +08:00
    @weyou 可以一起讨论一下安全问题
    CatCode
        14
    CatCode  
       2020-02-06 10:58:20 +08:00
    寻找 tcp 的内网穿透工具已经好久了。
    期待开源
    wslzy007
        15
    wslzy007  
    OP
       2020-02-06 11:13:06 +08:00
    @CatCode 如果受欢迎我是乐于开源的。没有用户基础的开源没意义,我的 excel 项目就是例子,当然或许酒香也怕巷子深
    tia
        16
    tia  
       2020-02-06 11:49:00 +08:00
    目前在用 zerotier 一切安好
    mm2x
        17
    mm2x  
       2020-02-06 12:35:58 +08:00
    这是广告帖子 老王卖瓜自卖自夸吧? 只支持证书 不支持 token ? 那我用 ngrok 多好,也不如 frpc 便利。感觉没有比这两个软件多什么东西。。。至于 ipv6 我都公网 IP 了还用穿透?
    wslzy007
        18
    wslzy007  
    OP
       2020-02-06 12:45:42 +08:00
    @mm2x 不夸,用了再说吧。免费工具开发不易,希望大家多做贡献。
    chengzi168
        19
    chengzi168  
       2020-02-06 14:04:57 +08:00 via Android
    @wslzy007 手机移动网络也能 P2P 穿透?不能的话,走你的公网 IP 中转?
    muzuiget
        20
    muzuiget  
       2020-02-06 14:36:38 +08:00
    @weyou 对,我看了好久才发现是文字游戏,还以为是什么高级技术,整套方案所有终端无需公网 IP,说明里有“官方提供免费的代理服务器”,搞半天其实就是 ssh -L/-R 能解决的事。
    cst4you
        21
    cst4you  
       2020-02-06 14:46:45 +08:00
    zerotier 用户表示直通才是最好的
    elfive
        22
    elfive  
       2020-02-06 15:15:18 +08:00 via iPhone
    其实,做贡献谈不上,重复造轮子,你这精力如果用在协助开发现有的开源项目,会更有意义。

    我是因为能力不够,力不从心,你有这能力,真的建议多参与开源项目。
    elfive
        23
    elfive  
       2020-02-06 15:16:34 +08:00 via iPhone
    我是这么认为的:开源社区的发展离不开广度,但深度更重要。
    wslzy007
        24
    wslzy007  
    OP
       2020-02-06 17:55:59 +08:00
    @muzuiget 建议试用一下再发表评论吧。。。
    wslzy007
        25
    wslzy007  
    OP
       2020-02-06 17:59:38 +08:00
    @elfive 谬赞了。其实只需要看看 github 上的交互图就很清楚是否重复造轮子了,作为一个技术工作者,对产出要求很苛刻
    brMu
        26
    brMu  
       2020-02-06 18:59:10 +08:00 via Android
    开源吧,不是有用户量才开源,是开源才有用户量
    zsxzy
        27
    zsxzy  
       2020-02-06 19:28:04 +08:00
    感谢, 正需要, 以前用 ddns 实现 ssh 连接办公室 server, 还需要路由器搞端口映射..
    ferstar
        28
    ferstar  
       2020-02-06 22:03:40 +08:00 via Android
    正在用,挺好的,提个意见,给 APP 加个退出的功能吧,每次都得划掉。。
    shynome
        29
    shynome  
       2020-02-06 22:47:51 +08:00 via Android
    tinc 有个 tcpOnly 选项开启就支持 tcp 了
    shynome
        30
    shynome  
       2020-02-06 22:49:10 +08:00 via Android
    CatCode
        31
    CatCode  
       2020-02-07 11:55:23 +08:00
    @shynome 我去看看
    mostkia
        32
    mostkia  
       2020-02-08 17:44:04 +08:00
    在服务器资源好的情况下,frp 真的香。
    zhhww57
        33
    zhhww57  
       2020-02-08 20:48:30 +08:00
    @weyou 可以,无需公网 ip 也可以,但是必须 udp,以前我也认为不可能,现在我知道了 udp 原来还能蒙端口,就是有个成功率,一般都是移动宽带同城基本能穿,只需要知道互相的公网 ip 就行了
    zhhww57
        34
    zhhww57  
       2020-02-08 20:57:06 +08:00   ❤️ 1
    @weyou 可以,无需公网 ip 也可以,但是必须 udp,以前我也认为不可能,现在我知道了 udp 原来还能蒙端口,就是有个成功率,一般都是移动宽带同城基本能穿,只需要知道互相的公网 ip 就行了
    @ljpCN 无须公网 ip 的 udp 穿透,服务端必须有 ddns,并且使用一个独特的暗语,然后服务端 udp 不停对外发包,这个包里面包含这个暗语,之后客户端,通过服务端的 ddns 解析到服务端的公网 ip,对这个公网 ip 的所有 udp 端口进行扫描,得到带有这个暗语的 udp 端口就是要连接的接口。再连接这个端口。。这个就是 udp 无公网 ip 穿透实现。至于 tcp。我还不太懂
    zhhww57
        35
    zhhww57  
       2020-02-08 21:07:28 +08:00
    无须公网 ip 的 udp 穿透
    前提:
    1、服务端必须有 ddns
    2、服务端使用一个(或多个)独特的暗语
    3、服务端通过一个(也可以多个) udp 端口不停对外发包,以此来保持到公网 ip 的一个(或者多个) udp 端口的开启
    4、如果这个端口接收到带有这个暗语消息,就会立即回复同样带有这个暗语的消息,



    过程:
    当服务端满足以上要求的时候,客户端通过以下办法通讯,

    1、客户端通过服务端的 ddns 解析到服务端的公网 ip
    2、对这个公网 ip 的所有 udp 端口进行发包扫描,所发的包里面必须带有服务端的暗语
    3、当得到回复,并且回复里面带有这个暗语,那么就意味着找到了端口
    4、和这个端口建立通讯
    flynaj
        36
    flynaj  
       2020-02-08 21:38:08 +08:00 via Android
    你这个还是转发,穿透还是只有那个 zerotier
    monkey110
        37
    monkey110  
       2020-02-08 21:58:44 +08:00
    不能 PC 到 PC ?
    weyou
        38
    weyou  
       2020-02-08 23:59:05 +08:00 via Android
    @zhhww57 我觉得这种方法只有对年代久远的 full cone 类型的 NAT 才有效,我不知道运营商的 NAT 是不是这种类型。

    对于家用路由器来说,现在绝大部分都是端口+地址限制型的 NAT。服务端在 NAT 后面向外发 UDP,对谁发? 如果不知道客户端地址而乱发的话,只有 UDP 的目的主机回的封包才能回得来,因为这种类型的 NAT 要求回来的包源地址和端口要与前面 UDP 的目的地址和端口一致才能通过。你用客户端扫描服务器的所有端口都没用, 都会被挡掉。

    如果双方都能事先获取对方的公网地址,确实可以靠端口扫描在一方先取得类似端口映射的效果,然后另外一端就可以用(对方扫描过的)任意端口连进来了。但一是效率很低,二是有被对方防火墙屏蔽的风险。
    weyou
        39
    weyou  
       2020-02-09 00:11:44 +08:00 via Android
    上面第二段修改下,如果双方都能事先获取对方的公网地址,确实可以靠端口扫描在一方先取得类似端口映射的效果,然后另外一端就可以再扫描对方的端口找到这个暗语。在确保连接概率的情况下,整个过程需要经历了 2 遍几乎全端口范围的扫描,很明显,这种方式一是效率很低,二是有被防火墙屏蔽的风险。
    tia
        40
    tia  
       2020-02-09 01:37:44 +08:00 via iPhone
    @weyou zerotier 很明显没有用这个方法,我搭了和国内 moon,然后两台无公网 nat 机器互相 ping 可以在 1 秒内互通,第一下几十毫秒后面稳定几毫秒,如果用扫端口猜的方式肯定没这么快
    weyou
        41
    weyou  
       2020-02-09 10:01:33 +08:00 via Android
    @tia 我还没见过这种方法被用在实际的应用中
    wslzy007
        42
    wslzy007  
    OP
       2020-02-09 12:56:34 +08:00
    @weyou 为啥要扫描端口?? smarGate 是一次性随机端口,协商时需要 token 认证,只需尝试一次就可以了,而且使用的是 TCP 协议进行 NAT 穿透,对于 NAT1-3 都有效。
    wslzy007
        43
    wslzy007  
    OP
       2020-02-09 12:58:49 +08:00
    @zhhww57 这种方式低效且不安全,可靠性差,demo 还行,实际的应用几乎没有使用这种流程进行 P2P 穿透的。
    wslzy007
        44
    wslzy007  
    OP
       2020-02-09 13:01:51 +08:00
    @flynaj 你自建代理服务器,就相当于 zt 的 moon。只要你的 NAT 类型允许,smarGate 可以直接 v4 P2P,v6 环境下可以直接穿透防火墙。否则走转发,详见官网交互图
    wslzy007
        45
    wslzy007  
    OP
       2020-02-09 13:03:27 +08:00
    @zhhww57 无需公网,指的是使用者不需要有公网 IP
    wslzy007
        46
    wslzy007  
    OP
       2020-02-09 13:10:51 +08:00
    @all smarGate 具备多链路聚合能力:首选 P2P 连接(使用 TCP 协议),无 P2P 时使用自定义代理连接,无前两者连接时使用官方代理连接。无需额外配置
    wslzy007
        47
    wslzy007  
    OP
       2020-02-09 13:15:10 +08:00
    smarGate 主要是考虑到“移动性”,电脑不好说,但手机都是随身携带的,实现“只要手机有网络的地方都能随时随地内网穿透”
    gfy0921
        48
    gfy0921  
       2020-02-09 15:04:32 +08:00
    @tia 请教下国内的 moon 怎么搭建,是不是可以改善跨电信联通这样的连接?
    tia
        49
    tia  
       2020-02-09 15:49:13 +08:00
    @gfy0921 #48 google 就有; zerotier 是 p2p
    gfy0921
        50
    gfy0921  
       2020-02-09 17:14:41 +08:00 via Android
    @tia 我知道是 p2p,但是比如用移动 4g 网连电信宽带,用官方服务器有时候是连不上的,据说要自建 moon 服务器
    tia
        51
    tia  
       2020-02-09 17:25:50 +08:00
    @gfy0921 #50 能否连上取决于两方客户端 NAT 类型,如果都是 full cone 的话没问题,我试过电信 4g 和电信无公网宽带就打洞成功了,其中电信 4G 因为是手机客户端只能用官方 moon 也成功了。moon 就是个握手服务器,假如客户端都是 fullcone 就能成功
    gfy0921
        52
    gfy0921  
       2020-02-09 17:38:24 +08:00 via Android
    @tia 那是因为都在电信的网里,这样我也行。但是一个在电信,一个不在电信就有可能失败
    tia
        53
    tia  
       2020-02-09 17:43:40 +08:00
    @gfy0921 #52 重点是电信是 fullcone,所以你测下你的 nat 啥类型
    wslzy007
        54
    wslzy007  
    OP
       2020-02-09 18:54:34 +08:00
    @tia @gfy0921 几大运营商移动网络 v4 基本都是 NAT4 的,4G 网络都有动态 V6 地址,家中宽带都能桥接得到 v6 地址,因此使用 smarGate 直接 v6 防火墙穿透,成功率 100%。
    lazygod
        55
    lazygod  
       2020-02-10 01:15:56 +08:00 via Android
    留眼

    lazyliu
    lazygod
    哈哈哈哈哈哈哈
    youstu
        56
    youstu  
       2020-02-15 16:46:23 +08:00
    @v66ex 试了下 KSA,很好用
    droidmax61
        57
    droidmax61  
       2020-09-18 00:32:32 +08:00 via Android
    KSA 是 FCN 的阉割版,另外 SmarGate 和 FCN 相比优缺点都有些啥?
    wslzy007
        58
    wslzy007  
    OP
       2020-09-18 09:30:44 +08:00
    @droidmax61
    内网穿透分为两种技术路线:
    1 、类 vpn 技术( tap/tun 虚拟网卡实现),网络二层打通
    2 、端口映射类。子网不通,通过映射端口访问内网特定服务。端口映射目前主流分两种:
    a 、内网端口映射到外网 IP:port,典型的是 frp/ngrok 等工具
    b 、专注于“内网”--》“内网”的映射,公网没有任何访问入口,SG 采用的方式
    优缺点,谈不上。主要是使用的场景是否适合自己
    thegodofoxeris
        59
    thegodofoxeris  
       2021-01-12 11:00:38 +08:00
    @wslzy007 你的 excel 项目看起来还不够方便- -
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2591 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:30 · PVG 18:30 · LAX 02:30 · JFK 05:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.