V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
acbot
V2EX  ›  C++

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

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

    以前早期的时候 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 穿透这种功能,你的意思是从中剥离出我要的功能吗?
    logic159
        3
    logic159  
       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 是的
    wym0823
        18
    wym0823  
       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   ·   实用小工具   ·   2779 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:10 · PVG 12:10 · LAX 20:10 · JFK 23:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.