V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
araaaa
V2EX  ›  分享创造

一个 P2P 跨网段组网的小工具

  •  1
     
  •   araaaa · 2021-02-17 17:40:02 +08:00 · 6691 次点击
    这是一个创建于 1404 天前的主题,其中的信息可能已经有所发展或是发生改变。

    fubuki 是一个类似于 n2n, tinc 的小工具

    Github: https://github.com/xutianyi1999/fubuki

    支持平台: Windows, Linux

    传输方式

    客户端与客户端之间只能 P2P 传输,无法通过服务器中转,服务端只提供客户端信息之间共享和同步

    对于对等 NAT 是无法被穿透的

    如何工作

    客户端在启动时会创建 TUN 网卡,然后将自己的节点信息上传至服务端,所有其他的节点信息将被同步到本地。 当有报文经过 TUN 网卡时,客户端将会读取到这个 IP 报文,通过报文头得到目标 TUN 的 IP 地址,就能从映射表得到报文所在的外网 IP,最后将这个报文放入 UDP 中发往目的 IP

    关于这个工程

    代码很精简,只实现了基本功能,主要是想通过 tuntap 做一些好玩的小东西

    33 条回复    2021-02-26 20:24:24 +08:00
    missdeer
        1
    missdeer  
       2021-02-17 20:54:43 +08:00 via Android
    好像有点厉害的样子,用 wintun 的项目越来越多了
    araaaa
        2
    araaaa  
    OP
       2021-02-17 21:58:31 +08:00 via iPhone
    @missdeer wintun 的 api 做的很方便,之前用 openvpn tap 的话需要撸 win32 很头大
    1041412569
        3
    1041412569  
       2021-02-18 00:18:50 +08:00 via Android
    可以走 ipv6 组网不?
    chunxue
        4
    chunxue  
       2021-02-18 00:31:14 +08:00
    和 zerotier 比有什么优势
    araaaa
        5
    araaaa  
    OP
       2021-02-18 00:45:11 +08:00 via iPhone
    @1041412569 可以
    araaaa
        6
    araaaa  
    OP
       2021-02-18 00:47:53 +08:00 via iPhone
    @chunxue emm..部署方便
    Zy143L
        7
    Zy143L  
       2021-02-18 02:17:11 +08:00 via Android
    1.支持自定义服务器吗?
    2.这和 ZeroTier 好像没区别...都 UDP 打洞
    3.如果后期考虑支持 TCP KCP 最好
    4.这名字 fubuki ?说的是小狐狸(白上吹雪)?
    Zy143L
        8
    Zy143L  
       2021-02-18 02:21:51 +08:00 via Android
    @Zy143L 还是说的是吹雪级驱逐舰😂
    xarthur
        9
    xarthur  
       2021-02-18 08:44:33 +08:00 via iPhone
    如果是想实现 p2p 功能,可以直接用 libp2p,nat 传统之类的功能直接支持而且被抽象掉了。
    araaaa
        10
    araaaa  
    OP
       2021-02-18 08:57:01 +08:00 via iPhone
    @Zy143L 什么是自定义服务器。这本身就是一个重复轮子啊写给自己玩的。支持 tcp 的话意味着要走中转了,中转以后会考虑加入的。kcp 中转我觉得不是很有必要,如果只为了解决无法穿透其实有一种非常简单的办法就是直接伪造报文头就可以了,这个也会考虑加。吹雪驱逐舰哒
    araaaa
        11
    araaaa  
    OP
       2021-02-18 09:05:20 +08:00 via iPhone
    @xarthur 这个库看起来不错
    missdeer
        12
    missdeer  
       2021-02-18 09:31:19 +08:00
    认识一个人也写了个类似的东西,用了 openvpn 的 tap-windows,嫌慢,又说 wintun 的文档太少,于是尝试自己写个虚拟网卡驱动,貌似快写完了,说以后中国人有了自己的虚拟网卡驱动。。。
    araaaa
        13
    araaaa  
    OP
       2021-02-18 09:49:03 +08:00 via iPhone
    @missdeer wintun 现在文档很全了,windows 下其实应该就是 ndis 驱动开发
    Dkngit
        14
    Dkngit  
       2021-02-18 10:26:04 +08:00
    国内普遍多级 NAT,跨运营商、跨地域、UDP 包 QOS 严重。

    考虑到现实情况,支持 TCP 通道 服务器中转 更实用。
    qiuai
        15
    qiuai  
       2021-02-18 10:55:24 +08:00
    我一直在找一个方案,把相隔 2KM 的 2 个家里的电脑做一个局域网,但是不想走中转。
    现在是用的 VPN,但是并不太方便。本来想用蒲公英路由器的公网组网,但是看了看好像是走中转的。
    楼主这个方案能实现 SMB 共享么?
    araaaa
        16
    araaaa  
    OP
       2021-02-18 11:09:35 +08:00 via iPhone
    @Dkngit 所以还是适合都在同一省内,udp 的话用电信目前在大陆区域内 qos 已经比较不错了
    araaaa
        17
    araaaa  
    OP
       2021-02-18 11:11:25 +08:00 via iPhone
    @qiuai 只要 nat 是圆锥,宽带不是移动这种,那就没问题
    Zy143L
        18
    Zy143L  
       2021-02-18 12:56:39 +08:00 via Android
    @araaaa 移动很多全椎 FullCone 的
    no1xsyzy
        19
    no1xsyzy  
       2021-02-18 14:28:20 +08:00
    @qiuai ( TR069
    hanguofu
        20
    hanguofu  
       2021-02-18 16:14:35 +08:00
    顺便问问: 用哪个软件测试 nat 类型啊 ?
    araaaa
        21
    araaaa  
    OP
       2021-02-18 17:33:14 +08:00   ❤️ 1
    qiuai
        22
    qiuai  
       2021-02-18 19:10:48 +08:00
    @no1xsyzy 想过,没找到太符合情况的文章啊...有详细点的文章么?
    1041412569
        23
    1041412569  
       2021-02-18 20:51:05 +08:00 via Android
    有考虑加 arm64 版么,路由器挂了一下运行不了。
    araaaa
        24
    araaaa  
    OP
       2021-02-18 23:36:08 +08:00   ❤️ 1
    @1041412569 #23 加了个 aarch64 放在 release 里了
    no1xsyzy
        25
    no1xsyzy  
       2021-02-19 10:25:35 +08:00
    @qiuai 我不是很清楚你具体的情况与大部分文章的互通。
    但是,所有文章应该都会介绍到 TR069 内网互能 ping 通的程度,一般会到 point-to-point 完成。那么之后就是在 point-to-point 基础上升级到 site-to-site,这部分参考下你采用的传输方案(比如 ov 或者 wg )的 Arch Linux Wiki 或者官方教程或者两相结合。
    大致上来说,主要就是 point-to-point 基础上,网关配置路由表或 DHCP 下发路由表或者各设备静态路由表把对端 site 的路由到本地侧节点,两头都打开转发(节点上是否需要 NAT ?)。
    wym0823
        26
    wym0823  
       2021-02-19 11:51:38 +08:00 via Android
    简单试用了一下,服务端和客户端是用 key 绑定的,只能为一个局域网提供服务。不能像 n2n 那样,服务端可以是公共的,多个局域网共用一个服务端。还有 fubuki.exe 编译的时候应该用了不少 vc 运行库,一旦客户端缺少某个运行库就跑不起来,得折腾老半天
    araaaa
        27
    araaaa  
    OP
       2021-02-19 12:56:41 +08:00 via iPhone
    @wym0823 emm 只做了基本功能,只适合自己一个人玩玩或者小范围用。编译的话我是 rust1.50 和 vs2019
    missdeer
        28
    missdeer  
       2021-02-19 13:20:39 +08:00
    @qiuai https://github.com/gnbdev/gnb 貌似符合你的需求,也是基于 UDP 的,但是穿透成功率就有点看运气,你的路由器需要使能 upnp,没有完全开源,那个代码编译不出最终的可执行文件,但是预编译好的程序覆盖的平台还挺广的
    sypopo
        29
    sypopo  
       2021-02-19 15:45:57 +08:00
    感觉还是把 ZeroTier 放在路由器上好用
    sypopo
        30
    sypopo  
       2021-02-19 15:48:05 +08:00
    @qiuai 用 ZeroTier 就可以啊 ,SMB 共享跑满带宽。
    qiuai
        31
    qiuai  
       2021-02-19 20:08:43 +08:00
    @sypopo 好的,一会看看,一直没试过这个
    @no1xsyzy 谢谢,研究研究,本来想直接找人放一条光缆...
    @missdeer 谢谢,我看看
    mandymak
        32
    mandymak  
       2021-02-20 12:02:07 +08:00
    hanmiao
        33
    hanmiao  
       2021-02-26 20:24:24 +08:00
    要是支持移动端就好了,想安卓手机访问家里的 nas 。一直没找到好的 p2p 方案
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2759 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 09:55 · PVG 17:55 · LAX 01:55 · JFK 04:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.