# gnb **Repository Path**: mir355/gnb ## Basic Information - **Project Name**: gnb - **Description**: GNB是一个开源的去中心化的具有极致内网穿透能力的通过P2P进行三层网络交换的虚拟组网系统 - **Primary Language**: C - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 104 - **Created**: 2020-05-14 - **Last Updated**: 2021-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## GNB 此版本文档正在全面修改过程中,修改完会同步到[gnbdev/gnb项目](https://gitee.com/gnbdev/gnb) [GNB](https://gitee.com/gnbdev/gnb "GNB") 是一个开源的去中心化的具有极致内网穿透能力的通过P2P进行三层网络交换的虚拟组网系统。 > [GNB](https://gitee.com/gnbdev/gnb "GNB") 可以让你把公司-家庭网络组成直接访问的局域网;[GNB](https://gitee.com/gnbdev/gnb "GNB") 可以让你免费实现自己的SDWAN网络。 [gnb_udp_over_tcp](https://gitee.com/gnbdev/gnb_udp_over_tcp "gnb_udp_over_tcp") 是一个为GNB开发的通过tcp链路中转UDP分组转发的服务,也可以为其他基于UDP协议的服务中转数据。 [GNBFrontend](https://github.com/XyloseYuthy/GNBFrontend "GNBFrontend") 是由志愿者开发维护的开源的GNB的图形界面前端。 [GNB 详细介绍 Wiki 点我](https://gitee.com/cnkedao/gnb/wikis/Home) 出于安全考虑,GNB项目相关代码会以开源方式发布, [source code](src/) 会逐步公开。 ![GNB 与传统VPN对比](https://gitee.com/cnkedao/gnb/raw/master/images/gnb1.jpg) ## GNB特点 1. 内网穿透 P2P VPN - 无需公网IP 2. 极致的链路能力 - 无限速影响 3. 数据安全 - 数字签名认证、密钥加密传输 4. 多平台支持 - GNB目前支持的操作系统及平台有 Linux_x86_64,Windows10_x86_64, macOS,FreeBSD_AMD64,OpenBSD_AMD64,树莓派,OpenWRT;大至服务器环境,桌面系统,小至仅有32M内存的OpenWRT路由器都能很好的运行GNB网络。 ## 快速入手GNB 概述:都是分两步走,第一步是先生成各个节点的目录及配置,第二步是拿生成好的节点目录到机器上执行起来即可。详见以下步骤 * Linux平台 #### 步骤1:下载GNB软件包 ``` git clone https://gitee.com/gnbdev/gnb.git ``` git代码已经包含编译后的可执行文件,包含自动初始化生成GNB节点配置的shell工具。把生成后的节点目录拷贝到相应的GNB节点机器即可跑起来。 #### 步骤2:初始化生成节点配置 使用初始化脚本生成可填数量的GNB节点目录 可以在一个系统平台生成,生成节点目录之后,可以不同的GNB节点到不同的系统上面去run起来。 ``` cd gnb sudo bash gnb_initkey_linux_x86_64.sh ``` 执行后脚本有如下交互内容: ``` Welcome to this GNB road warrior installer! How many nodes do you want to create? Num [3]: 5 #此处可以自己填需要生成几个节点的目录配置,这里是演示5个gnb节点 The configuration file of 1001-1005 node has been output to DIR: ./output/ gnb_1001 gnb_1002 gnb_1003 gnb_1004 gnb_1005 ``` 执行后,会自动生成所填的5个GNB的目录,如: ``` [root@sta_dev gnb]# ls output/ gnb_1001 gnb_1002 gnb_1003 gnb_1004 gnb_1005 ``` 现在你可以打包各个GNB节点目录,传到Linux、Mac、Win等不同系统进行跑起来组网。 #### 步骤3:启动一个节点(如1002节点假设安排在公司内网Linux_x86_64) 打包gnb_1002目录,传到公司内网机器,解压后执行启动: ``` cd gnb_1002/sh sudo bash gnb_linux_x86_64.sh start 1002 ``` 启动成功后可见GNB节点IP ``` [root@sta_dev sh]# ifconfig GNB_TUN_1002: flags=4305 mtu 1280 inet 10.1.0.2 netmask 255.255.255.0 destination 10.1.0.2 inet6 64:ff9b::a01:2 prefixlen 96 scopeid 0x0 ``` #### 步骤4:启动第二个节点(如1003节点假设安排在家里内网Linux_x86_64) 打包gnb_1003目录,传到家里内网机器,解压后执行启动: ``` cd gnb/sh sudo bash gnb_linux_x86_64.sh start 1003 ``` 启动成功后可见GNB节点IP ``` ifconfig GNB_TUN_1003: flags=4305 mtu 1280 inet 10.1.0.3 netmask 255.255.255.0 destination 10.1.0.3 inet6 64:ff9b::a01:3 prefixlen 96 scopeid 0x0 ``` #### 步骤5:测试GNB节点互通 例如在10.1.0.2节点上面ping10.1.0.3 ``` [root@sta_dev sh]# ping 10.1.0.3 PING 10.1.0.3 (10.1.0.3) 56(84) bytes of data. 64 bytes from 10.1.0.3: icmp_seq=1 ttl=64 time=8.09 ms 64 bytes from 10.1.0.3: icmp_seq=2 ttl=64 time=7.58 ms ``` 在10.1.0.3节点上面ping10.1.0.2 ``` [root@dev sh]# ping 10.1.0.2 PING 10.1.0.2 (10.1.0.2) 56(84) bytes of data. 64 bytes from 10.1.0.2: icmp_seq=1 ttl=64 time=6.09 ms 64 bytes from 10.1.0.2: icmp_seq=2 ttl=64 time=6.68 ms ``` 至此通过GNB无需公网IP实现不同网络下的两台机器互通。可以访问对方内网节点的服务及资源。更多玩法及运用场景见该文档下方介绍。 * 各平台的启动脚本 如果是非Linux_x86_64系统,仅需要按对应平台执行相应的启动shell即可,脚本统一在gnb/sh 目录下: ``` [root@sta_dev sh]# pwd /gnb/sh [root@sta_dev sh]# ll total 44 -rwxr-xr-x 1 root root 2020 Mar 28 23:28 gnb_freebsd_amd64.sh -rwxr-xr-x 1 root root 2005 Mar 28 23:28 gnb_linux_x86_64.sh -rwxr-xr-x 1 root root 2004 Mar 28 23:28 gnb_macOS.sh -rwxr-xr-x 1 root root 2083 Mar 28 23:28 gnb_openbsd_amd64.sh -rwxr-xr-x 1 root root 2021 Mar 28 23:28 gnb_openwrt_1900acs.sh -rwxr-xr-x 1 root root 1956 Mar 28 23:28 gnb_openwrt_ar71xx-generic.sh -rwxr-xr-x 1 root root 1650 Mar 28 23:28 gnb_openwrt_ar71xx-nand.sh -rwxr-xr-x 1 root root 1958 Mar 28 23:28 gnb_openwrt_mt76x8.sh -rwxr-xr-x 1 root root 1911 Mar 28 23:28 gnb_openwrt_x86_64.sh -rwxr-xr-x 1 root root 2021 Mar 28 23:28 gnb_raspberrypi_ARMv7.sh -rw-r--r-- 1 root root 394 Mar 28 23:28 gnb_windows.cmd ``` * Windows平台 [GNBFrontend 图形界面GNB](https://github.com/XyloseYuthy/GNBFrontend) Windows7-Windows10可以直接使用图形界面GNB GNBFrontend 也是分两步走,先使用GNBFrontend生成多个节点的目录及配置。然后拷贝不同目录到不同的测试机器,每个目录下都有GNB的exe可执行工具,启动后先安装虚拟网卡,再启动gnb进程,详细见GNBFrontend项目说明。 ## 深入理解GNB指引 ### GNB 知识点 * [GNB 的配置文件详解](docs/gnb_conf_explanation.md) * [GNB 命令行参数详解](docs/gnb_commad_explanation.md) * [GNB 配置使用图文版说明](docs/GNB.1.2.pdf) * [GNB 的诊断功能](docs/gnb_diagnose.md) * [GNB 的index 节点详解](docs/gnb_index_explanation.md) * [使用gnb_udp_over_tcp给GNB增加重传包能力](https://gitee.com/gnbdev/gnb_udp_over_tcp) ### GNB 配置参考 * [Windows7 和 Centos7 组网](docs/gnb_win_centos.md) * [Windows7 和 Windows10 组网](docs/gnb_win_win.md) * [MacOS 和 Windows7 组网](docs/gnb_macos_win.md) * [树莓派4B 和 Centos7 组网](docs/gnb_raspberry_centos.md) * [Windows7 和 openwrt 组网](docs/gnb_win_openwrt.md) * [Windows7 和 Centos7 和 树莓派4B 组网](docs/gnb_win_centos_raspberry.md) ### GNB 的运用场景 * [主机对主机互通](docs/gnb_host2host.md) * [主机对网络互通](docs/gnb_host2net.md) * [网络对网络互通](docs/gnb_net2net.md) ### GNB 玩法搜集,欢迎投稿 * [搭建树莓派 + GNB +aira,实现带Web界面的个人离线下载器](docs/gnb_raspberry_aira.md) --- [免责声明](docs/disclaimer.md)