n2n实现内网穿透
之前有弄过树莓派的NAS服务,但是局限于传输速度和网络延迟的问题,所以并没有用于实践,项目就暂且搁浅。至此发现了p2p能够实现端对端的数据传输,解决了传统的服务器中转传输所存在的问题,NAS计划有了新的突破。
简单介绍
前面介绍的frp进行反向代理,实现内网穿透,客户端之间的数据传输都需要经过frp服务器中转,这样会导致数据传输的速度收到服务器的影响。要知道P2P在实现NAT打洞的方面有很大的优势,如果能够成功打洞之后,客户端之间传输数据是不经过第三方服务器,而是直接连接,而如果没有成功打洞,则可以通过第三方服务器进行中转,进退皆可,可以说是在没有公网ip的情况下,最好的解决方案。
简单的介绍一下n2n,这个n2n不是内衣的那个n2n,大家别找错了(✪ω✪)。github上介绍说是N2n is a light VPN software which make it easy to create virtual networks bypassing intermediate firewalls.
。也就是轻量级的vpn软件,n2n会试着建立p2p直连协议,如果失败,会直接使用服务器中转数据。
frp服务也能实现p2p模式,这里就不多说,自行百度
搭建过程
搭建很简单,只要搞清楚服务端和客户端的关系就很容易操作。关系图如下:
在搭建之前先弄清楚n2n的几个版本:V1、V2和V2s,sudpernode的使用的版本一定要和Edge的版本一致,否则之间的无法服务之间不能进行连接。这里搭建的使用的V2s。
搭建环境
- centos 7
- windows 10
Supernode搭建
#安装依赖包
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
supernode 参数
-v:输出日志
-l:<port> 监听端口
-f:不进行后台运行
如果进行debug可以使用
supernode -l 1000 -f -v
实时查看输出,这里还需要提醒的是,如果开了防火墙的,注意关闭防火墙,开了安全组的,注意开放端口。
Edge搭建
centos搭建
#安装依赖包
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
edge 参数说明
-d:device name。虚拟网卡的名称
-c:community name。社区名
-k:key。密码
-a:虚拟网卡的ip地址
-l:supernode 的关联地址。
windows搭建
windows就直接安装edge客户端就行。下载地址,如下:
客户端
n2n_win.zip
由于supernode使用的版本是v2s,软件n2nguien使用的是v2,所以软件启动后无法连接到supernode,这里需要替换一下edge2.exe,替换文件在n2n_win.zip,重命名一下edge_v2.exe,然后进行替换
总结
虽然项目已经搭建起来了,但是并没有达到我想要的结果,最后测试两个edge之间数据的传输,但是并没有走p2p协议,网上查了一下,发现是因为nat的问题,p2p对其nat的条件有限制,所以搭建之前先自行检查一下自身网络是否符合搭建条件,至于如何检查我这里就不多说了,因为我也是搭建完成后才发现我的网络环境不支持p2p (T_T) 。
nat的四种类型自行百度脑补