{"id":13440688,"url":"https://github.com/gnbdev/opengnb","last_synced_at":"2026-01-27T16:06:08.476Z","repository":{"id":40607594,"uuid":"236677896","full_name":"gnbdev/opengnb","owner":"gnbdev","description":"GNB is open source de-centralized SDVN to achieve layer3 network via p2p with the ultimate capability of NAT Traversal.GNB是一个开源的去中心化的具有极致内网穿透能力的通过P2P进行三层网络交换的SDVN。","archived":false,"fork":false,"pushed_at":"2025-11-26T15:54:33.000Z","size":3747,"stargazers_count":1178,"open_issues_count":0,"forks_count":265,"subscribers_count":45,"default_branch":"master","last_synced_at":"2026-01-27T04:26:19.654Z","etag":null,"topics":["c","ed25519","freebsd","linux","macos","nat","nat-traversal","openbsd","p2p","p2p-vpn","tcp","tun","tuntap","udp","utun","vpn","windows-10"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gnbdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-01-28T07:10:24.000Z","updated_at":"2026-01-14T15:04:35.000Z","dependencies_parsed_at":"2023-12-31T15:26:59.856Z","dependency_job_id":"c044100d-6d63-44b5-bef4-b805b906b0d5","html_url":"https://github.com/gnbdev/opengnb","commit_stats":{"total_commits":165,"total_committers":11,"mean_commits":15.0,"dds":0.6363636363636364,"last_synced_commit":"17c2ab4c55f87e2d98e876433d76f5ffe1aa1df5"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/gnbdev/opengnb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnbdev%2Fopengnb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnbdev%2Fopengnb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnbdev%2Fopengnb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnbdev%2Fopengnb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gnbdev","download_url":"https://codeload.github.com/gnbdev/opengnb/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnbdev%2Fopengnb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28816514,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","ed25519","freebsd","linux","macos","nat","nat-traversal","openbsd","p2p","p2p-vpn","tcp","tun","tuntap","udp","utun","vpn","windows-10"],"created_at":"2024-07-31T03:01:25.186Z","updated_at":"2026-01-27T16:06:08.471Z","avatar_url":"https://github.com/gnbdev.png","language":"C","readme":"# OpenGNB\nThe communication protocol of opengnb version 1.6.0 has been upgraded and is not compatible  \n[Chinese](/README_CN.md) [English](/README.md)\n\n*Note: Most of the content of this article is translated by Google translate from the Chinese version of the \"OpenGNB User Manual\", the content of this article is subject to the Chinese version.*\n\n[OpenGNB](https://github.com/gnbdev/opengnb \"OpenGNB\") is an open source P2P decentralized Software Defined Virtual Network with extreme intranet penetration capability,Allows you to combine your company-home network into a direct-access LAN.\n\nAll code related to the GNB project is released as open source, and the currently released source code supports the following platforms: FreeBSD Linux OpenWRT Raspberrypi OpenBSD macOS\n\n\n## GNB Features\n\n1. Intranet penetration P2P VPN\n    - No public IP required\n2. Extreme link capability\n    - Unlimited speed effects\n3. Data Security\n    - Reliable authentication between GNB nodes based on elliptic curve digital signature\n4. Multi-platform support\n    - GNB is developed in C language. It does not need to refer to third-party library files when compiling. It can be easily ported to the current popular operating systems. Currently supported operating systems and platforms include Linux_x86_64, Windows10_x86_64, macOS, FreeBSD_AMD64, OpenBSD_AMD64, Raspberry Pi, OpenWRT; as big as server environment, desktop system, as small as OpenWRT router with only 32M memory can run GNB network very well.\n\n\n### Standard VPN payload forwarding\n\n```mermaid\nflowchart LR\n\nsubgraph LAN A\nnodea[VPN clientA]\nend\n\nsubgraph Internet\nnodef[VPN server]\nend\n\nsubgraph LAN B\nnodeb[VPN clientB]\nend\n\nnodea \u003c-- payload ---\u003e nodef \u003c-- payload ---\u003e nodeb\n\n```\n\n\n### GNB payload standard forwarding\n\nNAT Traversal point to point\n\n```mermaid\nflowchart LR\n\nsubgraph LAN A\nnodeA[gnb nodeA]\nend\n\nsubgraph Internet\nindex[gnb public index node]\nend\n\nsubgraph LAN B\nnodeB[gnb nodeB]\nend\n\nnodeA -. nodeB address .-  index -. nodeA address.- nodeB\nnodeA \u003c-- payload --\u003e nodeB\n\n```\n\n### GNB payload relay forwarding\n\n```mermaid\nflowchart LR\n\nsubgraph LAN A\nnodeA[gnb nodeA]\nend\n\nsubgraph Internet\n\nnodeC[nodeC]\nnodeD[nodeD]\nnodeE[nodeE] \nnodeF[nodeF]\nnodeJ[nodeJ]\nnodeK[nodeK]\n\nnodeG[nodeG]\nnodeH[nodeH]\nnodeI[nodeI]\n\nend\n\nsubgraph LAN B\nnodeB[gnb nodeA]\nend\n\nnodeA[nodeA] ---- nodeC[nodeC] ---- nodeD[nodeD] ---- nodeE[nodeE] ---- nodeF[nodeF] ---- nodeB[nodeB]\nnodeA[nodeA] ---- nodeG[nodeG] ---- nodeH[nodeH] ---- nodeI[nodeI] ---- nodeB[nodeB]\nnodeA[nodeA] ---- nodeJ[nodeJ] ---- nodeK[nodeK] ---- nodeB[nodeB]\n\n```\n\n### GNB payload unified forwarding\n\n```mermaid\nflowchart LR\n\nsubgraph LAN A\nnodeA[gnb nodeA]\nend\n\n\nsubgraph LAN C\nnodeC[gnb nodeC]\nend\n\nsubgraph LAN D\nnodeD[gnb nodeD]\nend\n\nsubgraph LAN E\nnodeE[gnb nodee]\nend\n\n\nsubgraph LAN B\nnodeB[gnb nodeB]\nend\n\n\nnodeA ---- nodeC \u0026 nodeD \u0026 nodeE ---- nodeB\n\n```\n\n### GNB payload via tcp forwarding\n\n```mermaid\nflowchart LR\n\nsubgraph LAN A\nnodeA[gnb nodeA]\nupd_over_tcp_A[upd_over_tcp]\nend\n\n\nsubgraph Internet\nupd_over_tcp_B[upd_over_tcp]\nnodeB[gnb nodeB]\nend\n\nnodeA --UDP payload--- upd_over_tcp_A --TCP payload--- upd_over_tcp_B --UDP payload--- nodeB\n\n```\n\n\n\n## GNB Quick Start\n\n* Linux platform\n\n### Step 1: Download and compile the GNB source code project\n\n```\ngit clone https://github.com/gnbdev/opengnb.git\ncd opengnb\nmake -f Makefile.linux install\n```\nAfter compiling, you can get `gnb` `gnb_crypto` `gnb_ctl` `gnb_es` files in the `opengnb/bin/` directory.\n\n### Step 2: Quickly deploy GNB nodes\n\nCopy `gnb` `gnb_crypto` `gnb_ctl` `gnb_es` to host A and host B respectively.\n\nAssuming that host A and host B need to temporarily penetrate the intranet interconnection in two different LANs, the fastest way is to run gnb through lite mode. In lite mode, asymmetric encryption is not enabled, and only through **passcode** and The node id generates the encryption key, so the security will be much less modular than working with asymmetric encryption.\n\n**passcode** is a 32-bit hexadecimal string with a length of 8 characters, which can be represented as **0xFFFFFFFF** or **FFFFFFFF**, under a public index **passcode** is the same GNB node It is considered to be a node on the same virtual network. Please choose a **passcode** that will not be the same as other users as much as possible. Here, for the convenience of demonstration, the **passcode** is selected as `12345678`, and the parameter **-p ** Used to specify the **passcode** to start the node. Do not use such a simple **passcode** in actual use, it may conflict with other users who also use `12345678` as **passcode** and cause communication failure.\n\n### Step 3: Start the first node\n\nExecute with **root** on host A\n\n```\ngnb -n 1001 -I \"101.32.178.3/9001\" --multi-socket=on -p 12345678\n```\n\nAfter the startup is successful, execute ip addr on host A to see the GNB node IP\n\n```\n3: gnb_do:mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500\n    link/none\n    inet 10.1.0.1/16 scope global gnb_tun\n       valid_lft forever preferred_lft forever\n    inet6 64:ff9b::a01:1/96 scope global\n       valid_lft forever preferred_lft forever\n    inet6 fe80::402:c027:2cf:41f9/64 scope link stable-privacy\n       valid_lft forever preferred_lft forever\n```\n\n### Step 4: Start the second node\n\nExecute with **root** on host B\n\n```\ngnb -n 1002 -I \"101.32.178.3/9001\" --multi-socket=on -p 12345678\n```\nAfter the startup is successful, execute ip addr on host B to see the GNB node IP\n\n```\n3: gnb_do:mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500\n    link/none\n    inet 10.1.0.2/16 scope global gnb_tun\n       valid_lft forever preferred_lft forever\n    inet6 64:ff9b::a01:2/96 scope global\n       valid_lft forever preferred_lft forever\n    inet6 fe80::a6cf:9f:e778:cf5d/64 scope link stable-privacy\n       valid_lft forever preferred_lft forever\n```\n\n### Step 5: Test GNB Node Interoperability\n\nAt this point, if host A and host B nat penetrate successfully and ensure that there is no firewall intervention on the host, they can ping each other's virtual ip.\n\nExecute on host A\n\n```\nroot @ hostA: ~ # ping 10.1.0.2\nPING 10.1.0.2 (10.1.0.2) 56(84) bytes of data.\n64 bytes from 10.1.0.2: icmp_seq=1 ttl=64 time=2.13 ms\n64 bytes from 10.1.0.2: icmp_seq=2 ttl=64 time=2.18 ms\n64 bytes from 10.1.0.2: icmp_seq=3 ttl=64 time=2.38 ms\n64 bytes from 10.1.0.2: icmp_seq=4 ttl=64 time=2.31 ms\n64 bytes from 10.1.0.2: icmp_seq=5 ttl=64 time=2.33 ms\n```\n\nExecute on host B\n\n```\nroot @ hostA: ~ # ping 10.1.0.1\nPING 10.1.0.1 (10.1.0.1) 56(84) bytes of data.\n64 bytes from 10.1.0.1: icmp_seq=1 ttl=64 time=2.34 ms\n64 bytes from 10.1.0.1: icmp_seq=2 ttl=64 time=1.88 ms\n64 bytes from 10.1.0.1: icmp_seq=3 ttl=64 time=1.92 ms\n64 bytes from 10.1.0.1: icmp_seq=4 ttl=64 time=2.61 ms\n64 bytes from 10.1.0.1: icmp_seq=5 ttl=64 time=2.39 ms\n```\n\nThe simplest use process of the above GNB lite mode, GNB lite mode has 5 built-in nodes, if you need more hosts to participate in the networking and use a more secure asymmetric encryption method to protect the data communication of GNB, please read the following documents carefully.\n\n\n\n## Deep understanding of GNB guidelines\n\n\nThe role of the index node of GNB is similar to the Tracker in the BT protocol, which is provided by some GNB network volunteers. In most cases, the `index` node only provides the address index for the hosts in the GNB network, and will not transfer data for the GNB node.\n\nThe `forward` node of GNB provided by some volunteers can perform data transfer for hosts that are temporarily unable to perform point-to-point communication in extreme cases, and the asymmetric data encryption between GNB hosts makes it impossible for the `forward` node to spy on the transferred data.\n\nIn extreme cases where peer-to-peer communication cannot be established, whether to transfer data through the public network `forward` node and which trusted forward node to use to transfer data depends entirely on the host owner's settings on the GNB node. In fact, even in an extremely complex network environment, GNB's superior link capability can establish virtual data links anytime, anywhere. GNB will even create multiple virtual links for hosts in the network, and choose the optimal speed path to send data packets.\n\nHere are the available `index` nodes provided by volunteers\n\n```\ni|0|101.32.178.3|9001\n```\n\n\n\n## Limitations of GNB\n\n1. GNB does not support *Classless Inter-Domain Routing (CIDR)*, only supports Class A, B, C networks;\n2. GNB does not forward IP frames of Default route. In `host to net` and `net to net` modes, GNB can forward data for specific subnets, but does not support full traffic forwarding;\n3. The IPV6 of GNB cannot work normally under Windows platform;\n4. The work of GNB using virtual network card realizes Layer 3 switching in TUN mode, and does not support Layer 2 switching if it does not support TAP mode;\n\n\n\n### GNB related documentation\n\n* [GNB User Manual](docs/gnb_user_manual_en.md)\n* [Debug diagnostics for GNB](docs/gnb_diagnose_cn.md)\n\n\n\n## GNB on OpenWRT\n\nGNB supports the OpenWRT platform and needs to be compiled by the user.\n\n\n## GNB on Linux distributions\n\nThe systemd script was made by [Jin Buguo](https://github.com/jinbuguo) for the GNB project\n\nThe [atzlinux](https://www.atzlinux.com) project has made a deb format software package under Linux for the GNB project, and contributed it to become the official Debian software package.\n\nYou may install opengnb on Debian 12 (bookworm) :\n\n```bash\napt install opengnb\n```\n\n\n- Arch Linux\n\nThe AUR package of Arch Linux was made by [taotieren](https://github.com/taotieren) for the GNB project. The installation method is as follows\n```bash\n# install distribution\nyay -Sy opengnb\n# Install the development version\nyay -Sy opengnb-git\n```\nFor details, please visit [https://aur.archlinux.org/packages/opengnb/](https://aur.archlinux.org/packages/opengnb/)\n\n[https://aur.archlinux.org/packages/opengnb-git/](https://aur.archlinux.org/packages/opengnb-git/)\n\n[Download the compiled and released version of gnb on each platform](https://github.com/gnbdev/gnb_build \"gnb_build\")\n\n\n\n[gnb_udp_over_tcp](https://github.com/gnbdev/gnb_udp_over_tcp \"gnb_udp_over_tcp\") is a service developed for GNB that forwards UDP packets through tcp link, and can also forward data for other services based on UDP protocol.\n\n---\n[Disclaimer](docs/disclaimer_cn.md)   \n\nAny organization or individual is free to use GNB's source code under the GPL V3 license, this also include any commercial projects. Commercial projects that utilize GNB's source code under closed-source conditions must obtain authorization from us.   \n\n\n","funding_links":[],"categories":["HarmonyOS","C"],"sub_categories":["Windows Manager"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnbdev%2Fopengnb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgnbdev%2Fopengnb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnbdev%2Fopengnb/lists"}