{"id":20374124,"url":"https://github.com/gnbdev/gnb_udp_over_tcp","last_synced_at":"2025-04-12T07:11:46.848Z","repository":{"id":63702698,"uuid":"239749324","full_name":"gnbdev/gnb_udp_over_tcp","owner":"gnbdev","description":"gnb_udp_over_tcp 是一个为GNB开发的通过tcp链路中转UDP分组转发的服务","archived":false,"fork":false,"pushed_at":"2022-01-15T14:59:18.000Z","size":130,"stargazers_count":64,"open_issues_count":0,"forks_count":35,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-12T07:11:36.552Z","etag":null,"topics":["freebsd","linux","macos","openbsd","openwrt","socket","tcp","udp"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-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}},"created_at":"2020-02-11T11:48:12.000Z","updated_at":"2025-03-19T10:58:06.000Z","dependencies_parsed_at":"2022-11-24T08:41:29.737Z","dependency_job_id":null,"html_url":"https://github.com/gnbdev/gnb_udp_over_tcp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnbdev%2Fgnb_udp_over_tcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnbdev%2Fgnb_udp_over_tcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnbdev%2Fgnb_udp_over_tcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnbdev%2Fgnb_udp_over_tcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gnbdev","download_url":"https://codeload.github.com/gnbdev/gnb_udp_over_tcp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248530576,"owners_count":21119600,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["freebsd","linux","macos","openbsd","openwrt","socket","tcp","udp"],"created_at":"2024-11-15T01:22:29.235Z","updated_at":"2025-04-12T07:11:46.815Z","avatar_url":"https://github.com/gnbdev.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gnb_udp_over_tcp\n[GNB](https://github.com/gnbdev/gnb \"GNB\")是一个开源的去中心化的具有极致内网穿透能力的通过P2P进行三层网络交换的VPN。\n\nGNB节点间通过UDP协议传输数据，在一些网络环境下的路由器/防火墙会对UDP分组实施QOS策略，因此通过tcp链路转发GNB数据是不需要改动GNB通讯协议又可以提升GNB网络适应能力的一个办法。\n\ngnb_udp_over_tcp 是一个为GNB开发的通过tcp链路中转UDP分组转发的服务。\n\n# 通过 gnb_udp_over_tcp 中继 GNB 数据\n\n## 演示环境\n远端GNB节点 ip地址 为 192.168.1.25\nGNB UDP 端口 9025\nGNB TUN ip 10.1.0.25\n远端 GNB 配置文件不需要调整\n\n中继服务器 ip地址为 192.168.1.11\n```\n[gnb_1010]\n    |\n   udp \n    |\n[udp_over_tcp udp:127.0.0.1:5001]    (./gnb_udp_over_tcp -u -l 5001 192.168.1.11 6000)\n    |\n   tcp\n    |\n[udp_over_tcp tcp:192.168.1.11:6000] (./gnb_udp_over_tcp -t -l 6000 192.168.1.25 9025)\n    |\n   udp \n    |\n[gnb_1025  udp:192.168.1.25:9025]\n```\n\n在 192.168.1.11 上执行\n```sh\n./gnb_udp_over_tcp -t -l 6000 192.168.1.25 9025\n```\n\n本地ip地址为 192.168.1.10\nGNB TUN ip 10.1.0.10\n\n\n本地 GNB  conf/1010/address.conf 内容为\n```\nn|1025|127.0.0.1|5001\n```\n\naddress.conf中不要配置 i 类型的GNB节点\n\n在 192.168.1.10 上执行\n```sh\n./gnb_udp_over_tcp -u -l 5001 192.168.1.11 6000\n```\n启动本地的GNB节点后 ping 10.1.0.25 检验是否能够ping通。\n\n\n\n# gnb_udp_over_tcp可以为其他基于UDP协议的服务中转数据\n## 用nc作本地测试演示\n```\n[netcat]                          (nc -u 127.0.0.1 5001)\n    |\n   udp\n    |\n[udp_over_tcp udp:127.0.0.1:5001] (./gnb_udp_over_tcp -u -l 5001 127.0.0.1 6000)\n    |\n   tcp\n    |\n[udp_over_tcp tcp:127.0.0.1:6000] (./gnb_udp_over_tcp -t -l 6000 127.0.0.1 7000)\n    |\n   udp\n    |\n[netcat udp:127.0.0.1:7000]       (nc -u -l 7000)\n```\n\n## Step1\n用 nc 监听 7000 udp 端口\n\n```sh\nnc -u -l 7000\n```\n\n## Step2\n启动 gnb_udp_over_tcp 的 tcp端: 监听 tcp 6000 端口，每个接入该端口的tcp链路将建立起一个udp socket构成一个channel，tcp链路收到的报文发往 127.0.0.1 的 UDP 7000端口，从udp端收到的数据将发往tcp链路的另一端。\ngnb_udp_over_tcp的tcp端可以同时接入多个tcp连接并且转发到同一个目的地址的udp端口。\n\n```sh\n./gnb_udp_over_tcp -t -l 6000 127.0.0.1 7000\n```\n\n\n## Step3\n启动 gnb_udp_over_tcp 的 udp端:  监听 udp 5001 端口，与 127.0.0.1 tcp 端口 6000 建立tcp链路，udp 端收到的数据发往tcp链路的另一端，从tcp链路收到的数据发往udp端。\n```sh\n./gnb_udp_over_tcp -u -l 5001 127.0.0.1 6000\n```\n\n## Step4\n用 nc 访问 127.0.0.1 的 5001 udp 端口，检验数据是否被成功转发。\n\n```sh\nnc -u 127.0.0.1 5001\n```\n\n---\n[免责声明](docs/disclaimer.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnbdev%2Fgnb_udp_over_tcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgnbdev%2Fgnb_udp_over_tcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnbdev%2Fgnb_udp_over_tcp/lists"}