P2P VPN-GNB


GNB是一个开源的去中心化的具有极致内网穿透能力的通过P2P进行三层网络交换的VPN,采用C语言开发并在AGPL协议下授权使用。

gnb_udp_over_tcp是一个为GNB开发的通过tcp链路中转UDP分组转发的服务,也可以为其他基于UDP协议的服务中转数据。当遇到一些网络运营商对UDP实行QOS策略时,可以为其他基于UDP协议的服务中转数据。
GNBFrontend是由志愿者开发维护的开源的GNB的图形界面前端。出于安全考虑,GNB项目相关代码会开源。
GNB独有的去中心化组网技术可以将分布在世界不同地方的计算机组成一个虚拟局域网,即使这些计算机深藏于没有公网ip的局域网里,不需要公网服务器中转就可以实现TCP/IP通讯。

使用某些网络设备生产商的技术方案虽然可以达到上述目的,但需要花费一定的资金购买网络的硬件产品与软件许可,与此同时可能还需要花费一定的资金去搭建公网中转服务器以及中转服务器带宽的开销,节点要得到更多的带宽,就意味着更高的IDC预算。GNB网络拥有极致的nat(内网)穿透能力使得主机之间能够尽最大的可能点对点直连,数据分组不经公网服务器中转,边缘节点之间的带宽不受限、不占用公网节点带宽。一台加入GNB网络主机可以放在家中通过家庭宽带接入互联网,而用户在家以外的地方访问这台主机就像访问公网服务器一样,所产生的一切费用似乎就只有主机消耗电费以及家庭宽带的费用。
host to host
host to host 是两台计算机通过GNB建立的虚拟链路进行通讯

host to host配置

host to net
host to net 一台计算机通过GNB接入一个网络,举例说,用户在咖啡厅、酒店用笔记本电脑通过GNB访问家中的整个内网。这个场景里,图中右边的GNB建议运行在一台OpenWRT路由器上。

host to net配置
左边这端,需要配置一条路由。

net to net

net to net 这个模式是 两个异地的局域网通过 GNB 组成一个虚拟的网络,两个局域网中任意一台机器都能互联互通。举例说,假如有两个异地的办公室需要互访,就可以通过这个方式不经过公网服务器中转就能虚拟组网,这两个异地办公室网络不需要有公网ip,也不需要公网服务器做中转。
net to net配置
这个模式下,通常是把GNB运行在两台OpenWRT路由器上,并且要根据具体网络设好路由。

既然可以把两个异地的局域网组成一个虚拟局域网,也可以在这个基础上加入第三、第四个异地局域网。
深藏在内网中通过nat方式联网的计算机需要部署在公网的index节点找到其他同样处于内网中的主机建立点对点的虚拟链路。
GNB的index节点的角色类似于BT协议中的Tracker,由一部分GNB网络志愿者提供。在绝大多数情况下index节点仅为GNB网内主机提供地址索引,不会为GNB节点中转数据。一部分志愿者提供的GNB的forward节点可以为极端情况下暂时无法进行点对点通信的主机进行数据中转,而GNB主机之间的非对称数据加密使得forward节点无法窥探中转的数据。
在无法建立点对点通信的极端情况下,是否通过公网forward节点中转数据和使用哪个可信任的 forward 节点中转数据,完全取决在主机的拥有者对GNB 节点的设置。事实上,即便处于极其复杂的网络环境,GNB优越链路能力也可以随时随地建立虚拟数据链路,GNB甚至会为网络中的主机创建多个虚拟链路,择速度最优路径发送数据分组。
在GNB网络中的主机拥有唯一独立的虚拟 ipv4 和 ipv6 地址,因而基于GNB网络开发各种网络通信应用同样也可以实现去中心化。假如要基于GNB网络开发一个即时通讯系统,由于已经能够明确知道每个对端主机的虚拟ip地址及通信公钥,因而可以不需要搭建一个复杂的中转服务器就能直接把消息发送到对端的主机。
GNB有四套机制确保在主机所在网络发生变化时能够快速恢复数据链路,并且在某些场景下还能保持应用层的网络连接。
以上例子仅是说明应用层无法感知GNB网络的虚拟链路的变化以及GNB在网络发生变化时快速恢复链路的能力。事实上,对于一些有心跳机制的tcp通信协议如果在一定时间内没有收到心跳包,应用层就会自动断开连接。
数据安全
GNB节点间基于椭圆曲线数字签名实现可靠的身份验证,GNB节点之间的通信密钥由 ED25519共享密钥+同步时钟(可选)+sha512构成,在同步时钟的作用下,节点的加密密钥可以每分钟或每小时同步更新一次,但这要求各节点时钟的必须要同步,在无法确保主机时钟同步的情况下可以选择关闭这个特性。
多平台支持
GNB用C语言开发,编译时不需要引用第三方库文件,可以方便移植到当前流行的操作系统上。GNB目前支持的操作系统及平台有 Linux_x86_64,Windows10_x86_64, macOS,FreeBSD_AMD64,OpenBSD_AMD64,树莓派,OpenWRT;大至服务器环境,桌面系统,小至仅有32M内存的OpenWRT路由器都能很好的运行GNB网络。
最新版本:
项目主页:
https://gitee.com/gnbdev
https://github.com/gnbdev

gnb_udp_over_tcp是一个为GNB开发的通过tcp链路中转UDP分组转发的服务,也可以为其他基于UDP协议的服务中转数据。当遇到一些网络运营商对UDP实行QOS策略时,可以为其他基于UDP协议的服务中转数据。
GNBFrontend是由志愿者开发维护的开源的GNB的图形界面前端。出于安全考虑,GNB项目相关代码会开源。
GNB独有的去中心化组网技术可以将分布在世界不同地方的计算机组成一个虚拟局域网,即使这些计算机深藏于没有公网ip的局域网里,不需要公网服务器中转就可以实现TCP/IP通讯。

使用某些网络设备生产商的技术方案虽然可以达到上述目的,但需要花费一定的资金购买网络的硬件产品与软件许可,与此同时可能还需要花费一定的资金去搭建公网中转服务器以及中转服务器带宽的开销,节点要得到更多的带宽,就意味着更高的IDC预算。GNB网络拥有极致的nat(内网)穿透能力使得主机之间能够尽最大的可能点对点直连,数据分组不经公网服务器中转,边缘节点之间的带宽不受限、不占用公网节点带宽。一台加入GNB网络主机可以放在家中通过家庭宽带接入互联网,而用户在家以外的地方访问这台主机就像访问公网服务器一样,所产生的一切费用似乎就只有主机消耗电费以及家庭宽带的费用。
host to host
host to host 是两台计算机通过GNB建立的虚拟链路进行通讯

host to host配置

host to net
host to net 一台计算机通过GNB接入一个网络,举例说,用户在咖啡厅、酒店用笔记本电脑通过GNB访问家中的整个内网。这个场景里,图中右边的GNB建议运行在一台OpenWRT路由器上。

host to net配置
左边这端,需要配置一条路由。

net to net

net to net 这个模式是 两个异地的局域网通过 GNB 组成一个虚拟的网络,两个局域网中任意一台机器都能互联互通。举例说,假如有两个异地的办公室需要互访,就可以通过这个方式不经过公网服务器中转就能虚拟组网,这两个异地办公室网络不需要有公网ip,也不需要公网服务器做中转。
net to net配置
这个模式下,通常是把GNB运行在两台OpenWRT路由器上,并且要根据具体网络设好路由。

既然可以把两个异地的局域网组成一个虚拟局域网,也可以在这个基础上加入第三、第四个异地局域网。
深藏在内网中通过nat方式联网的计算机需要部署在公网的index节点找到其他同样处于内网中的主机建立点对点的虚拟链路。
GNB的index节点的角色类似于BT协议中的Tracker,由一部分GNB网络志愿者提供。在绝大多数情况下index节点仅为GNB网内主机提供地址索引,不会为GNB节点中转数据。一部分志愿者提供的GNB的forward节点可以为极端情况下暂时无法进行点对点通信的主机进行数据中转,而GNB主机之间的非对称数据加密使得forward节点无法窥探中转的数据。
在无法建立点对点通信的极端情况下,是否通过公网forward节点中转数据和使用哪个可信任的 forward 节点中转数据,完全取决在主机的拥有者对GNB 节点的设置。事实上,即便处于极其复杂的网络环境,GNB优越链路能力也可以随时随地建立虚拟数据链路,GNB甚至会为网络中的主机创建多个虚拟链路,择速度最优路径发送数据分组。
在GNB网络中的主机拥有唯一独立的虚拟 ipv4 和 ipv6 地址,因而基于GNB网络开发各种网络通信应用同样也可以实现去中心化。假如要基于GNB网络开发一个即时通讯系统,由于已经能够明确知道每个对端主机的虚拟ip地址及通信公钥,因而可以不需要搭建一个复杂的中转服务器就能直接把消息发送到对端的主机。
GNB有四套机制确保在主机所在网络发生变化时能够快速恢复数据链路,并且在某些场景下还能保持应用层的网络连接。
以上例子仅是说明应用层无法感知GNB网络的虚拟链路的变化以及GNB在网络发生变化时快速恢复链路的能力。事实上,对于一些有心跳机制的tcp通信协议如果在一定时间内没有收到心跳包,应用层就会自动断开连接。
数据安全
GNB节点间基于椭圆曲线数字签名实现可靠的身份验证,GNB节点之间的通信密钥由 ED25519共享密钥+同步时钟(可选)+sha512构成,在同步时钟的作用下,节点的加密密钥可以每分钟或每小时同步更新一次,但这要求各节点时钟的必须要同步,在无法确保主机时钟同步的情况下可以选择关闭这个特性。
多平台支持
GNB用C语言开发,编译时不需要引用第三方库文件,可以方便移植到当前流行的操作系统上。GNB目前支持的操作系统及平台有 Linux_x86_64,Windows10_x86_64, macOS,FreeBSD_AMD64,OpenBSD_AMD64,树莓派,OpenWRT;大至服务器环境,桌面系统,小至仅有32M内存的OpenWRT路由器都能很好的运行GNB网络。
最新版本:
项目主页:
https://gitee.com/gnbdev
https://github.com/gnbdev