n2n实现内网穿透 2020-01-14 程序之旅,记录 2 条评论 3453 次阅读 ## n2n实现内网穿透 [TOC] > 之前有弄过树莓派的NAS服务,但是局限于传输速度和网络延迟的问题,所以并没有用于实践,项目就暂且搁浅。至此发现了p2p能够实现端对端的数据传输,解决了传统的服务器中转传输所存在的问题,NAS计划有了新的突破。 ### 简单介绍 ![n2n1.jpg](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2020/01/14/66743303655604/n2n1.jpg) 前面介绍的frp进行反向代理,实现内网穿透,客户端之间的数据传输都需要经过frp服务器中转,这样会导致数据传输的速度收到服务器的影响。要知道P2P在实现NAT打洞的方面有很大的优势,如果能够成功打洞之后,客户端之间传输数据是不经过第三方服务器,而是直接连接,而如果没有成功打洞,则可以通过第三方服务器进行中转,进退皆可,可以说是在没有公网ip的情况下,最好的解决方案。 简单的介绍一下n2n,这个n2n不是内衣的那个n2n,大家别找错了(✪ω✪)。[github](https://github.com/ntop/n2n)上介绍说是`N2n is a light VPN software which make it easy to create virtual networks bypassing intermediate firewalls.`。也就是轻量级的vpn软件,n2n会试着建立p2p直连协议,如果失败,会直接使用服务器中转数据。 > frp服务也能实现p2p模式,这里就不多说,自行百度 ### 搭建过程 搭建很简单,只要搞清楚服务端和客户端的关系就很容易操作。关系图如下: ![N2N.png](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2020/01/14/667412385580545/N2N.png) 在搭建之前先弄清楚n2n的几个版本:V1、V2和V2s,sudpernode的使用的版本一定要和Edge的版本一致,否则之间的无法服务之间不能进行连接。**这里搭建的使用的V2s。** #### 搭建环境 - centos 7 - windows 10 #### Supernode搭建 ```shell #安装依赖包 yum install subversion gcc-c++ openssl-devel git cmake #下载n2n源码包 git clone https://github.com/meyerd/n2n.git #编译 cd n2n/n2n_v2 mkdir build cd build cmake .. make make install #开启supernode服务端口 supernode -l 1000 ``` ![image-20200114091045736.png](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2020/01/14/667312338412834/image-20200114091045736.png) > supernode 参数 > > -v:输出日志 > > -l:\ 监听端口 > > -f:不进行后台运行 > > 如果进行debug可以使用 `supernode -l 1000 -f -v` 实时查看输出,这里还需要提醒的是,如果开了防火墙的,注意关闭防火墙,开了安全组的,注意开放端口。 #### Edge搭建 ##### centos搭建 ```shell #安装依赖包 yum install subversion gcc-c++ openssl-devel git cmake #下载n2n源码包 git clone https://github.com/meyerd/n2n.git #编译 cd n2n/n2n_v2 mkdir build cd build cmake .. make make install #开启edgenode服务 edge -d device0 -c n2n -k Flowerfire -a 10.0.0.1 -l <外网ip>:1000 ``` ![image-20200114094207957.png](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2020/01/14/667403159528685/image-20200114094207957.png) > edge 参数说明 > > -d:device name。虚拟网卡的名称 > > -c:community name。社区名 > > -k:key。密码 > > -a:虚拟网卡的ip地址 > > -l:supernode 的关联地址。 ##### windows搭建 windows就直接安装edge客户端就行。下载地址,如下: [客户端](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2020/01/14/669214200037961/n2nguien.zip) [n2n_win.zip](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/typecho/2020/01/14/66834118924834/n2n_win.zip) > 由于supernode使用的版本是v2s,软件n2nguien工具使用的是v2,所以软件启动后无法连接到supernode,这里需要替换一下软件目录下的edge2.exe,替换文件在n2n_win.zip中,重命名一下edge_v2.exe为edge2.exe,然后进行替换软件目录下C:\Program Files\n2n Gui\edge2.exe ### 总结 虽然项目已经搭建起来了,但是并没有达到我想要的结果,最后测试两个edge之间数据的传输,但是并没有走p2p协议,网上查了一下,发现是因为nat的问题,p2p对其nat的条件有限制,所以搭建之前先自行检查一下自身网络是否符合搭建条件,至于如何检查我这里就不多说了,因为我也是搭建完成后才发现我的网络环境不支持p2p (*T_T*) 。 > nat的四种类型自行百度脑补 --- ### 2020年10月9日 连接supernode成功后,会在日志中看到update_edge created信息 ![image-20201009155459832](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/worker/20201009155503.png) #### N2N Gui的使用 ![image-20201009155623933](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/worker/20201009155625.png) Advanced可以不进行配置, - IP address 使用supernode的地址 - Port是supernode启动的端口 - Assigned IP是要设置edge node的地址 - Group name是社区名称 - password 是社区密码 ![n2n](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/worker/20201009160152.gif) --- ### 2021年8月14日 n2n V2 版本地址 https://github.com/ntop/n2n 打赏: 微信, 支付宝 标签: 内网穿透, p2p, n2n 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
好巧,,我最近也有这个需求哎,本来想用Zerotier 的,但自己部署也还是要经过它的planet服务器,所以决定还是也搞个n2n。我的好妹妹(●´∀`●)
别高兴太早 你的网络环境的NAT能不能支持P2P还不一定呢 (ノ*・ω・)ノ