V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
acbot
V2EX  ›  C++

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

  •  
  •   acbot · May 9, 2022 · 8455 views
    This topic created in 1453 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    回头看看
    hadesjaky0607
        21
    hadesjaky0607  
       May 10, 2022
    @wym0823 这个可以,不依赖平台
    openp2p
        22
    openp2p  
       May 16, 2022
    自荐一个 https://github.com/openp2p-cn/openp2p
    支持 Cone, Symmetric (NAT1-4), UPNP, IPv6
    openp2p
        23
    openp2p  
       May 29, 2022
    @sbilly https://github.com/openp2p-cn/openp2p/ UDP TCP Symmetric 打洞 UPNP IPv6 都支持
    sbilly
        24
    sbilly  
       May 31, 2022
    @openp2p 我去看看 谢谢
    libinglong9
        25
    libinglong9  
       Sep 1, 2022 via iPhone
    @openp2p server 也开源吗?
    riceball
        26
    riceball  
       Feb 14, 2023
    用于构建 P2P 网络的模块化网络堆栈和库(全): https://libp2p.io/
    包括打洞协议
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2520 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 08:53 · PVG 16:53 · LAX 01:53 · JFK 04:53
    ♥ Do have faith in what you're doing.