找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 1174|回复: 9

开源去中心化支持内网穿透软件的自定义虚拟网络项目 OpenGNB Ver1.4.5 源码发布

[复制链接]
发表于 2023-12-19 16:29 | 显示全部楼层 |阅读模式

OpenGNB是一个开源的去中心化支持内网穿透软件的自定义虚拟网络项目


新版功能:
支持多线程加速处理IP分组
zip压缩/解压payload
运行时内存规模选项
节点探测频率选项
性能更好的ring buffer



支持的操作系统及平台
Linux_x86_64,Windows10_x86_64, macOS,FreeBSD_AMD64,OpenBSD_AMD64,树莓派,OpenWRT



重点说明:OpenGNB不支持默认路由转发

项目简要介绍


OpenGNB 在数据转发上有几个模式

Direct Forwarding 节点间 P2P 通信;通常情况下,位于 WAN 上节点必可与其他节点建立起 P2P 通信,位于 LAN 中节点与其他 LAN 中的节点建立起 P2P 通信要经过NAT穿透;
Unified Forwarding 自动通过已经建立 P2P 通信的节点转发 IP 分组,多节点重传 IP 分组;
Relay Forwarding 高度自定义中继路由,IP 分组发往下一个中继点前都会作加密处理,相关设置在 route.conf;
Standard Forwarding 用尽一切策略都无法建立起 P2P 通信的节点可以通过位于公网 forward 节点中继 IP 分组

GNB 的 NAT 穿透
极致的 NAT 穿透能力或许是 GNB 最令人激动的一个特性,但绝这不是 GNB 的全部,GNB 还有许多有价值的特性待用户去挖掘。

在复杂的网络环境下, 成功 NAT 穿透与其他节点建立 P2P 通信有时并不容易,为了提升节点的 NAT 穿透成功的概率有必要较详细的介绍 NAT (Network Address Translation) 和 GNB 在 NAT 穿透方面做的工作。

通常,对于一些在 LAN 里通过 NAT 访问互联网的主机,在 NAT (Network Address Translation) 的过程中会涉及到包括但不限于诸如 LAN 中的路由设备, 网络结构,运营商所使用的网络设备,网络架构,NAT策略等许多几乎是“黑盒"般的网络环境,一个分组的IP地址可能经过多次转换,可能有多个出口网关,这些都是 NAT 穿透过程中的不确定因素。

Don't talk about the white paper, who known? who care?

Don't talk about the type of NAT, I don‘t f*cking care

What GNB has to do, just try it's best to traverse the NAT

毫无疑问,GNB 从 Bit Torrent 这些 P2P 软件中获得灵感,既然两个位于不同的 LAN 中的主机通过 NAT 访问互联网能够建立起 P2P 通信用于传输文件的数据块,那么就意味这样的方式也能用于传输虚拟网卡的 IP 分组。

GNB 用尽各种策略去促使每个节点能够 NAT 穿透的成功,这些策略中,一些策略非常有效,一些效果不大,一些策略在某些场合效果不错而在另一些场合就可能没有效果。

首先,本地节点通过与 index 节点通信交换信息获得其他节点的 WAN 地址和端口并尝试和这些节点进行联系;

事实上,一些节点的在经过 NAT 之后会用一个以上的 WAN 地址去访问互联网,GNB 支持同时与多个 index 节点交换信息,这样就有机会发现对端节点更多的 WAN 地址。

对于route.conf中定义的且未建立起 P2P 通信的对端节点,GNB 进程会定期向 index 节点查询这些节点的 WAN 地址端口,并尝试发起通信。

GNB 会对以及获得 WAN 地址但未建立起 P2P 通信的对端节点发现小范围的端口探测,如果两个节点相互能收到对端的探测请求 P2P 通信就基本打通。

GNB 还有专门的线程对未能建立起 P2P通信的接单定期进行大范围的端口探测。

与 Bit Torrent 等多数的 P2P 软件一样,GNB 也会通过 UPNP 在出口网关上尝试建立地址端口映射以提升 NAT 穿透成功率。

需要注意的是,如果一个 LAN 有多个主机部署 GNB 节点并开启 UPNP,这些节点不应监听相同的端口,这会导致在网关建立 UPNP 端口映射时发生冲突。

主机所在的网关如果支持和启用 UPNP 服务并且 GNB 启动时使用选项--es-argv "--upnp"将明显提升 NAT 穿透的成功概率,详情可以了解 gnb 的 --es-argv "--upnp" 和 gnb_es 的 --upnp 选项。

既然监听一个 UDP 端口并启用 UPNP 可以有效提升 NAT 穿透成功的概率,那么通过监听更多 UDP 端口以及在网关上对应建立更多 UPNP 端口映射可以进一步提高节点 NAT 穿透成功的概率,详情可以了解 --multi-socket 选项。

在一些网络环境下,充分了解 gnb 的 --es-argv "--upnp", --multi-socket, --unified-forwarding 以及 gnb_es 的 --upnp 选项的作用可以非常有效提升 GNB 节点的 NAT 穿透的成功率。

使用 gnb_es 的 --dump-address 选项可以使得已经建立起 P2P 通信的节点的地址信息定期保存到指定的 node cache file 里,当修改配置文件或升级程序或者重启主机需要重新启动 gnb 时可以用 --node-cache-file 选项指定 node cache file 快速重新建立起通信,要注意的是,对于一部分节点并不一定会成功,详情可以了解 gnb 的 --node-cache-file 选项 gnb_es 的 --dump-address 选项。

GNB 节点除了通过 index 节点找到其他节点外还可以通过在 address.conf 里配置对端节点的 域名或者动态域名,需要关注的是,仅依靠这种方式去尝试 NAT 穿透效果不如通过 index 节点帮助建立 P2P 通信好。

至此,GNB 为节点的 NAT 穿透做了大量的工作,使得 GNB 的 NAT 穿透的成功率也达到了前所未有的高度,但这依然不够:

GNB Unified Forwarding 机制可以使得已经建立起 P2P 通讯的节点为未建立起 P2P 通讯的节点转发 IP 分组,并且只要虚拟网络中节点的数量越多,节点之间越容易实现 NAT 穿透并建立起虚拟链路。

通过 Discover In Lan 可以让同一个 LAN 下的多个 GNB 节点可以不需要经过 WAN 实现 P2P 通信,与此同时,这可以使未能成功NAT穿透的节点可以通过 Unified Forwarding,Relay Forwarding,Standard Forwarding 让已经成功 NAT 穿透的节点中转 IP 分组,间接实现 P2P 通信。

gnb_es 的 --broadcast-address 可以让 GNB 节点的将已经和本节点建立起 P2P 通信的节点的地址信息扩散给其他节点,使得这些节点可以获得 GNB 网络内其他节点的更多地址信息以增加 NAT 穿透的成功率。

不得不强调:即使做了许多努力,通过 NAT 穿透建立起 P2P 通信不可能100%的成功率,灵活运用 GNB 提供的机制可以极大的提升 NAT 穿透的成功概率。



关于 GNB 的 IPV6 网关/防火墙穿透
提示:在一般情况下,IPV6 地址都是 WAN 地址,但这并不意味着位于网关后面的拥有 IPV6 的主机就不需要穿透,当然这种穿透不能称之为NAT穿透,而是可以被称为网关/防火墙穿透。

由于位于网关的防火墙作用,某些网关(例如OpenWRT route)的防火墙策略默认情况下并不会放行由对端主机主动发起的来自 WAN 的IP分组,这需要两端的主机几乎在同时向对方的端口发送IP分组。

毫无疑问,IPV6的网关/防火墙穿透比IPV4的NAT穿透容易得多,而且成功率可以是100%。

GNB 为 IPV6 的网关/防火墙穿透做了一些工作。

假设一些位于网关后面的 GNB 节点拥有 IPV6地址,而位于 WAN 的 index 节点没有 IPV6 地址,而,这样 index 节点就无法直接得到位于网关后面的 GNB 节点的 IPV6 地址从而没法帮助这些节点建立起通信,要解决这个问题就需要位于网关后面的 GNB 节点获取所在主机的 IPV6 地址后告 index 节点。



源码仓库:


https://github.com/gnbdev/opengnb




支持 opengnb 开源项目,请加star。
发表于 2023-12-19 16:40 来自手机 | 显示全部楼层
支持下
回复 支持 反对

使用道具 举报

发表于 2023-12-19 17:27 来自手机 | 显示全部楼层
本帖最后由 liaohcai 于 2023-12-19 17:36 编辑

大神啊,能不能提供编译好的插件?

点评

做不到,因为我使用的SDK和你在使用的固件版本可能不一致,目前还是需要自己编译。 后面,我打算找朋友帮我把gnb port到openwrt上。  详情 回复 发表于 2023-12-19 17:41
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-19 17:41 | 显示全部楼层
liaohcai 发表于 2023-12-19 17:27
大神啊,能不能提供编译好的插件?

做不到,因为我使用的SDK和你在使用的固件版本可能不一致,目前还是需要自己编译。

后面,我打算找朋友帮我把gnb port到openwrt上。
回复 支持 反对

使用道具 举报

发表于 2023-12-19 22:33 | 显示全部楼层
本帖最后由 8267 于 2024-1-4 16:45 编辑

好东西 感谢大佬










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

点评

能否编译一份全平台的,谢谢  详情 回复 发表于 2024-1-4 15:34
回复 支持 反对

使用道具 举报

发表于 2024-1-2 02:07 | 显示全部楼层
本帖最后由 liaohcai 于 2024-1-2 02:26 编辑

lite模式下:


我所使用的参数
/tmp/bin/gnb -p l000000 -n 1002 -I 101.32.178.3/9001 --mtu 1300  -d -q --crypto=none

参数太多了太麻烦了
也可以用我的
只不过里面的文件不是最新版的
lite模式下也是默认加密的,不想加密再加上“--crypto=none”
基本上能跑满我上行带宽
ipv6:pandavan---openwrt(mt7621):62M
ipv4:pandavan---openwrt(mt7621):63M

补我之前的测速数据
vnt :pandavan---openwrt(mt7621):56M
gnb:pandavan---openwrt(mt7621):38M
gnb:pandavan---padavan(mt7621):58.4M
gnb:pandavan---openwrt(mt7981):60M



safe模式下


我所使用的文件和参数




  1. /tmp/bin/gnb -c /tmp/gnb_1001 &
复制代码

无法上githup的网友,相关配置查看作者编写《OpenGNB 用户手册》
docs/gnb_user_manual_cn.md · master · gnbdev / opengnb · GitLab




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复 支持 反对

使用道具 举报

发表于 2024-1-4 15:34 | 显示全部楼层
8267 发表于 2023-12-19 22:33
好东西 感谢大佬

能否编译一份全平台的,谢谢

点评

你用的哪个平台啊 没有你的平台也可以尝试自己编译的 gnb这个插件相对于其他插件来说 这个编译起来简单太多了  详情 回复 发表于 2024-1-4 16:27
回复 支持 反对

使用道具 举报

发表于 2024-1-4 16:27 | 显示全部楼层
dongjianwei 发表于 2024-1-4 15:34
能否编译一份全平台的,谢谢

你用的哪个平台啊  没有你的平台也可以尝试自己编译的  gnb这个插件相对于其他插件来说  这个编译起来简单太多了  

点评

主要是windows AMD64和linux AMD64  详情 回复 发表于 2024-1-5 16:43
回复 支持 反对

使用道具 举报

发表于 2024-1-5 16:43 | 显示全部楼层
8267 发表于 2024-1-4 16:27
你用的哪个平台啊  没有你的平台也可以尝试自己编译的  gnb这个插件相对于其他插件来说  这个编译起来简 ...

主要是windows AMD64和linux AMD64
回复 支持 反对

使用道具 举报

发表于 2024-1-5 16:44 | 显示全部楼层
dongjianwei 发表于 2024-1-5 16:43
主要是windows AMD64和linux AMD64

Windows补上了   linux的arm4   adm64  mipsel 这些
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-6-3 11:00

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表