现在有比较好的 NAT 穿透(打洞)开源实现吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
acbot
V2EX    C++

现在有比较好的 NAT 穿透(打洞)开源实现吗?

  •  
  •   acbot 2022-05-09 10:42:36 +08:00 7927 次点击
    这是一个创建于 1257 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以前早期的时候 p2p 软件的 NAT 穿透(打洞)这些感觉都是自己实现,属于比较核心的技术。现如今这么多年了,NAT 穿透(打洞)有没有比较好的 c/c++开源的实现呢,TCP 和 UDP 两种都实现的那种?网上找的都是理论验证性的代码,感觉不是太完善。

    26 条回复    2023-02-14 15:01:00 +08:00
    junmoxiao
        1
    junmoxiao  
       2022-05-09 10:50:48 +08:00
    nebula n2n
    acbot
        2
    acbot  
    OP
       2022-05-09 11:14:28 +08:00
    @junmoxiao 我看这两个都是成熟的组网应用,我这边的需求是自己的软件中,可能需要涉及到 NAT 穿透这种功能,你的意思是从中剥离出我要的功能吗?
    allinQQQ
        3
    allinQQQ  
       2022-05-09 11:20:49 +08:00
    xdeng
        4
    xdeng  
       2022-05-09 11:21:01 +08:00
    同求 同好奇 没有比较好的开源的 p2p 库
    mjikop1231
        5
    mjikop1231  
       2022-05-09 11:21:13 +08:00
    felixlong
        6
    felixlong  
       2022-05-09 11:43:06 +08:00
    villivateur
        7
    villivateur  
       2022-05-09 12:09:31 +08:00 via Android
    要不看下 STUN 服务器的实现?
    nicevar
        8
    nicevar  
       2022-05-09 12:15:43 +08:00
    c/c++的没用过,java 版本的 stun 在某大型公司项目上用过,用于管理终端设备。
    microxiaoxiao
        9
    microxiaoxiao  
       2022-05-09 12:41:45 +08:00 via Android
    c/c++参考 webrtc 解决方案。具体而言:ice stun turn libnice 。完整的就是 libnice 实现了 ice ,ice 管理了 stun turn ,stun 针对能打通的情况,turn 针对打不通的情况。需要理解为啥要这么多玩意,那就看 NAT 四种类型。完整的思路就看 libnice 即可,webrtc 太复杂了
    hhjuteman
        10
    hhjuteman  
       2022-05-09 14:23:51 +08:00
    stun/turn
    acbot
        11
    acbot  
    OP
       2022-05-09 14:57:29 +08:00
    @villivateur
    @hhjuteman 大佬,这个说的太笼统了,stun/turn 网上找的都是理论验证性的代码,感觉不是太完善。因为自己不擅长网络这块所以才想找个成熟得开源库或者是可以从其他项目玻璃的模块直接用。
    acbot
        12
    acbot  
    OP
       2022-05-09 15:27:16 +08:00
    @microxiaoxiao 好的,我重点看一下 libnice ,谢谢!
    hhjuteman
        13
    hhjuteman  
       2022-05-09 15:42:21 +08:00   1
    @acbot 不知道你需要什么

    如果是理论知识
    rfc8445, rfc 5389, rfc 5766

    如果是搭建一个反射 /中继服务器,那么 coturn 无疑开源里最好的

    自己做客户端能用的库就很多了 libnice libjuice ,libnice 依赖 glib ,你能接受的话就用 libnice ,libjuice 没有实现 rfc 的 tcp 扩展,但是对接标准使用没有问题,也没有 glib 这种重依赖。
    acbot
        14
    acbot  
    OP
       2022-05-09 16:03:07 +08:00
    @hhjuteman 是不是 可以这样理解,自己的应用集成 libnice ,然后使用公共的 stun/turn ice 标准的服务器或者说是使用 coturn 自己搭建一个服务器, 这样的话就自己的应用就可以实现 NAT 穿透(打洞)
    sbilly
        15
    sbilly  
       2022-05-09 16:14:00 +08:00
    搭车问一下。golang 有比较好的实现吗? UDP TCP 都支持的
    NealLason
        16
    NealLason  
       2022-05-09 16:47:22 +08:00
    hhjuteman
        17
    hhjuteman  
       2022-05-09 16:50:03 +08:00
    @acbot 是的
    vip1024
        18
    vip1024  
       2022-05-09 20:12:11 +08:00
    acbot
        19
    acbot  
    OP
       2022-05-09 20:52:06 +08:00
    @wym0823 谢谢!
    sbilly
        20
    sbilly  
       2022-05-10 14:12:12 +08:00
    备份一下: https://github.com/firefart/stunner

    回头看看
    hadesjaky0607
        21
    hadesjaky0607  
       2022-05-10 16:54:10 +08:00
    @wym0823 这个可以,不依赖平台
    openp2p
        22
    openp2p  
       2022-05-16 15:39:13 +08:00
    自荐一个 https://github.com/openp2p-cn/openp2p
    支持 Cone, Symmetric (NAT1-4), UPNP, IPv6
    openp2p
        23
    openp2p  
       2022-05-29 16:16:07 +08:00
    @sbilly https://github.com/openp2p-cn/openp2p/ UDP TCP Symmetric 打洞 UPNP IPv6 都支持
    sbilly
        24
    sbilly  
       2022-05-31 11:27:40 +08:00
    @openp2p 我去看看 谢谢
    libinglong9
        25
    libinglong9  
       2022-09-01 00:44:10 +08:00 via iPhone
    @openp2p server 也开源吗?
    riceball
        26
    riceball  
       2023-02-14 15:01:00 +08:00
    用于构建 P2P 网络的模块化网络堆栈和库(全): https://libp2p.io/
    包括打洞协议
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3823 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 10:14 PVG 18:14 LAX 03:14 JFK 06:14
    Do have faith in what you're doing.
    ubao msn 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