add chinese readme, english readme coming soon

This commit is contained in:
joshuafc
2021-08-31 01:11:40 +08:00
parent 55cf068f8f
commit 5b314819ca
6 changed files with 84 additions and 15 deletions

View File

@@ -1,2 +1,66 @@
# ntVPN
NAT traversal P2P VPN
[English](README_en.md)
# 什么是ntVPNNAT traversal P2P VPN
ntVPN是一款具有内网穿透能力的VPN。可以完成多个无公网IP的私网组网主要应用于远程办公环境支持远程桌面
文件共享、k8s集群部署等应用场景。
除以下两种特殊情况外,节点之间的流量不必经过服务端转发, 可以极大节约服务端的带宽。
- ARPDHCP等需要在以太网发送广播的协议由服务端转发
- P2P通信失败时可以打开服务端转发功能。可进行带宽、流量配额的配置。
本项目将在初步开发完成后部署一个公共的服务端,帮助没有公网服务器的朋友完成多个私网的组网。
ntVPN项目目前正在开发中还没有可以稳定使用的版本。
# ntVPN的部署
ntVPN由服务端及客户端组成如图所示
![avatar](doc/picture/architecture.png)
服务端部署在公网环境,提供以下能力:
- 辅助完成内网穿透
- 传递VPN网络中的的以太网广播
- 按配置在节点间P2P通信失败时进行通信中继
- VPN网络管理
- 中继带宽、流量限额的管理
- VPN节点管理
客户端部署在内网环境,提供以下能力:
- 节点虚拟网卡的配置及管理
- 节点路由表配置IP forward配置Linux
- 基于节点间P2P通信完成各节点虚拟网卡的组网
- 在P2P通信失败时使用服务端的中继能力进行组网
(此处为部署示例,将在原型开发完成后更新)
# ntVPN的特点
ntVPN主要应用于多个无公网IP的私网组网的场景。主要解决痛点为
传统VPN如OpenVPN流量需要服务端转发对服务端带宽要求高的问题。
云服务器的固定带宽太贵按量付费需要支付额外¥0.8/Gb的流量费
P2P方式工作的VPN已有[n2n](https://github.com/ntop/n2n) 等优秀的项目。
本人也有幸为n2n贡献了一些流量过滤方面的代码(
[#489](https://github.com/ntop/n2n/pull/489),
[#499](https://github.com/ntop/n2n/pull/499))
但该项目在p2p通信失败时自动使用服务端进行转发。没有带宽流量配额等方面的配置
容易在不知不觉间使用大量流量,支付不少云服务器流量费。
该项目使用C语言开发添加这些功能相对比较繁琐。
ntVPN与n2n的主要区别在于
ntVPN将提供Web的管理界面并为用户提供转发策略节点管理等配置。
ntVPN不适用于科学上网等远程服务器已有公网IP的场景请勿将本软件应用于科学上网。
# ntVPN的技术栈
ntVPN使用如下技术栈
- [rpcx](https://github.com/smallnest/rpcx) 用于开发服务端RPC并提供向客户端进行消息推送的能力
- [pion/ice](https://github.com/pion/ice) 用于UDP打洞节点间的p2p通信
- [mdlayher/ethernet](https://github.com/mdlayher/ethernet) 用于以太网数据帧的解析
# 帮助ntVPN
你可以通过以下方式帮助ntVPN
更新已有的Issue或者提出新的Issue
提出新的功能特性
完善ntVPN的文档
为ntVPN提交pull request

17
README_en.md Normal file
View File

@@ -0,0 +1,17 @@
Translating
ntVPN is in developing, there is no release available yet
# Deploy ntVPN
![avatar](doc/picture/architecture.png)
# Contribution
You can contribute to ntVPN in various ways:
Update an open issue or create a new one with detailed information
Propose new features
Improve the documentation
Provide pull requests with enhancements

View File

@@ -0,0 +1 @@
<mxfile host="Electron" modified="2021-08-30T16:07:31.649Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.9.6 Chrome/89.0.4389.128 Electron/12.0.16 Safari/537.36" etag="B-riWyHwH2VmWuMdtsZ4" version="14.9.6" type="device"><diagram id="WExHl4HfiuHJDfYH_lPC" name="第 1 页">7Zrdk5owEMD/Gh+vQwDBezy9fs20U2eunX68RYmSDhga4qn967uRBCGC0hO507mXNtmQzcfu/rLJ2XNG8fo9x0n4mQUk6tlWsO459z3b9n0E/0rBJhO4npcJ5pwGmQjtBA/0L1FCS0mXNCBp6UPBWCRoUhZO2WJBpqIkw5yzVfmzGYvKoyZ4TvYED1Mc7Uu/00CEmXRg+zv5B0LnoR4ZebdZS4z1x2olaYgDtiqInLc9Z8QZE1kpXo9IJPdO70vW711Naz4xThaiSYcv4293v+N3Y+vrPIz8X+En8Xlyo7Q84mipFtyzvQj0DWcM1MKsxUZthfdnyXTDTbo11B18gAbJetcIpbn8/4HwR8K1rgnX8mQ5iegUun0c7zdqCawhG12L7dJEbFgXmB8qw1VIBXlI8FS2rMABQRaKOIIagiJOk8wnZnRNglwVzEyQde02otw44NSExUTwDXyiOtgDZU/l0Lar6quCeyhRWPAMLcPKIee55p3NoKDM9h8mtGtNmCZ40cSEsPwKE44iSrZG0DbJ1JVNJY331AHamWbC6SMWBNoXpH62L9mDntuBnFcHuiwHMvzHGTyzA7knHyJNHKhwiFRZ7MKOEdd7YUbsVxjR3LBFcCdTKqhNI5ymcJBD8AnMxb64sH2wI3zzAyrWm76u/iy23cs9sfLaRtWy8Umwl6AZewxzZEs+JcfTHJjqnIhjZ+m+zQo26VfYRMs4ibCgj+XpVhlKjTBmdBseyiWcW+NccA1bZ8tUvYqZnqEo77gxFGtF2T7sKdr6Tb7sp7vS7ckHSnVSOWJxjBdB2sqRUj1EOxMdcoaDKU6bHH5tjisdcNP4CIPA+oQncF0rwy6i84UMZQgyyOCdocQchQvRnWqIaRBIHTAazAdPtvpkvCbSn7Ye1h/2+veHOKlua6pzfnUpxXY9pWqhKgFzUiQaGZnuwWazlJwlVPwOqPtMzHUaMrfmnOyGubnn1aGyKXNt31Bk+tCZmYtOvwa+QvcVuvWQOgBd10eo5Pw63zoxOG+QU1JrO11heXA+LK+pyKkM5Z+F8o7JsqKRnIM8Z3fHIHcvAeSOcZ9y0RNB7vQNkJuKzg3y+ueY8m22Y7hfP6qf/I5wiUwfHGM6stqBOCqHk91Zao2qnqUM06UhTmRxFpG1wvbw2vPt428cyKrgdC481R8MvrpWSxk36hrUVUlCG387IyIkvPJlc8ZxTNKr5lIWtQfAhPRNRwPlNK/sgEMNXlbb5JBKMHV5m2BmD6/HU8wSuwrPtS+HXjXu0RW9bKutN1rniKIz00sHZOvvBSa9Xux7wR5Mr+/ijo49lyLfKV+x27q5216l2g5o6z1T1vfGLbPTgovcYXpua2PCKaxZ+k7OZRPfulwN7xYhbF8GhM27PjIvFU0h3L89oujcEK7/+dUrhK8Gwt5BCN8Ahfu+32ZOq8PkdOZCdfcDxezz3a88nbf/AA==</diagram></mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

1
go.mod
View File

@@ -9,7 +9,6 @@ require (
github.com/mdlayher/ethernet v0.0.0-20190313224307-5b5fc417d966
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
github.com/pion/ice/v2 v2.1.12
github.com/pion/randutil v0.1.0
github.com/smallnest/rpcx v1.6.10
github.com/xtaci/kcp-go v5.4.20+incompatible
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2

12
go.sum
View File

@@ -130,7 +130,6 @@ github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -287,29 +286,22 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/peterbourgon/g2s v0.0.0-20140925154142-ec76db4c1ac1 h1:5Dl+ADmsGerAqHwWzyLqkNaUBQ+48DQwfDCaW1gHAQM=
github.com/peterbourgon/g2s v0.0.0-20140925154142-ec76db4c1ac1/go.mod h1:1VcHEd3ro4QMoHfiNl/j7Jkln9+KQuorp0PItHMJYNg=
github.com/pion/dtls/v2 v2.0.1/go.mod h1:uMQkz2W0cSqY00xav7WByQ4Hb+18xeQh2oH2fRezr5U=
github.com/pion/dtls/v2 v2.0.9 h1:7Ow+V++YSZQMYzggI0P9vLJz/hUFcffsfGMfT/Qy+u8=
github.com/pion/dtls/v2 v2.0.9/go.mod h1:O0Wr7si/Zj5/EBFlDzDd6UtVxx25CE1r7XM7BQKYQho=
github.com/pion/ice v0.7.18 h1:KbAWlzWRUdX9SmehBh3gYpIFsirjhSQsCw6K2MjYMK0=
github.com/pion/ice v0.7.18/go.mod h1:+Bvnm3nYC6Nnp7VV6glUkuOfToB/AtMRZpOU8ihuf4c=
github.com/pion/ice/v2 v2.1.12 h1:ZDBuZz+fEI7iDifZCYFVzI4p0Foy0YhdSSZ87ZtRcRE=
github.com/pion/ice/v2 v2.1.12/go.mod h1:ovgYHUmwYLlRvcCLI67PnQ5YGe+upXZbGgllBDG/ktU=
github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY=
github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms=
github.com/pion/mdns v0.0.4/go.mod h1:R1sL0p50l42S5lJs91oNdUL58nm0QHrhxnSegr++qC0=
github.com/pion/mdns v0.0.5 h1:Q2oj/JB3NqfzY9xGZ1fPzZzK7sDSD8rZPOvcIQ10BCw=
github.com/pion/mdns v0.0.5/go.mod h1:UgssrvdD3mxpi8tMxAXbsppL3vJ4Jipw1mTCW+al01g=
github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA=
github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8=
github.com/pion/stun v0.3.5 h1:uLUCBCkQby4S1cf6CGuR9QrVOKcvUwFeemaC865QHDg=
github.com/pion/stun v0.3.5/go.mod h1:gDMim+47EeEtfWogA37n6qXZS88L5V6LqFcf+DZA2UA=
github.com/pion/transport v0.8.10/go.mod h1:tBmha/UCjpum5hqTWhfAEs3CO4/tHSg0MYRhSzR+CZ8=
github.com/pion/transport v0.10.0/go.mod h1:BnHnUipd0rZQyTVB2SBGojFHT9CBt5C5TcsJSQGkvSE=
github.com/pion/transport v0.10.1/go.mod h1:PBis1stIILMiis0PewDw91WJeLJkyIMcEk+DwKOzf4A=
github.com/pion/transport v0.12.2/go.mod h1:N3+vZQD9HlDP5GWkZ85LohxNsDcNgofQmyL6ojX5d8Q=
github.com/pion/transport v0.12.3 h1:vdBfvfU/0Wq8kd2yhUMSDB/x+O4Z9MYVl2fJ5BT4JZw=
github.com/pion/transport v0.12.3/go.mod h1:OViWW9SP2peE/HbwBvARicmAVnesphkNkCVZIWJ6q9A=
github.com/pion/turn/v2 v2.0.4/go.mod h1:1812p4DcGVbYVBTiraUmP50XoKye++AMkbfp+N27mog=
github.com/pion/turn/v2 v2.0.5 h1:iwMHqDfPEDEOFzwWKT56eFmh6DYC6o/+xnLAEzgISbA=
github.com/pion/turn/v2 v2.0.5/go.mod h1:APg43CFyt/14Uy7heYUOGWdkem/Wu4PhCO/bjyrTqMw=
github.com/pion/udp v0.1.1 h1:8UAPvyqmsxK8oOjloDk4wUt63TzFe9WEJkg5lChlj7o=
@@ -441,7 +433,6 @@ golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w=
@@ -470,10 +461,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=