用N2N搭建简单的v*n
1. 概述
N2N 是一款开源的P2P v*n 软件,其作者是著名的开源网管软件ntop的作者Luca Deri。
N2N 是一个双层架构的v*n ,它让用户可以在网络层上开发P2P应用的典型功能,而不是在应用层上开发。这意味着用户可以获取本地IP一样的可见度(比如说,同一个n2n网络内的两台PC机可以相互ping通),并且可以通过n2n虚拟网内的IP地址相互访问,而不必关心当前所属的物理网络地址。可以这样说,Openv*n是把SSL从应用层转移到网络层实现(比如说实现https协议),而n2n则是把P2P的实现从应用层转移到网络层。
2. N2N 设计的主要功能
l N2N 是基于P2P 协议之上的两个私有网络间的加密层
l 加密是在edge 节点上执行的,使用开放的协议,用户自己定义**:你自己控制自己的安全,不需要委托给第三方公司
l 每个n2n 用户可以同时隶属于多个网络
l 有NAT和穿越防火墙的功能,即使n2n节点位于私网中,也能够访问,防火墙不再是在 IP 层的直接沟通和交流的障碍
l N2N 网络不是独立的,它是能够跨越N2N 和非N2N网络路由的
3. N2N 架构组件
l Edge 节点:用户PC 机上安装的用于建立n2n网络的软件。几乎每个edge节点都会建立一个tun/tap设备,作为接入n2n网络的入口。
l Supernode 超级节点:它在edge 节点间建立握手,或为位于防火墙之后的节点中转数据。它的基础作用是注册节点的网络路径,并为不能直通的节点做路由,能够直通的节点间通信,是P2P的。
Edge 节点间通过虚拟的tap 网卡交互。每个tap网卡都是一个n2n edge节点。每台PC机可以有多个tap网卡,所以,在n2n网络中,同一台PC机可以属于多个网络。
4. N2N 网络构架图
其中super node 提供场所,让两个位于NAT/防火墙之后的edge node进行会面,一旦双方完成首次握手,剩下的数据流就之发生在两个edge node之间,如果有一方的NAT属于对称型(symmetrical),super node则还需继续为双方提供数据包的转发;edge node负责数据流的加解密,原理很简单。
对于一个v*n 而言,主要涉及封装和加解密两个步骤,edge node使用UDP协议进行封装,目的是为了更好的兼容防火墙的策略,因为很多防火墙禁用了非TCP/UDP协议禁用。加密算法则采用了twofish,开源、简便,处理速度快。
3.安装N2N软件
#将N2N软件上传到阿里云服务器
#在两个节点都要安装N2N unzip n2n-master.zip cd n2n-master make #如果make 提示openssl出错,安装openssl(命令: yum install -y openssl openssl-devel) make PREFIX=/opt/n2n install 安装完毕后启动supernode服务(N2N支持两个supernode,我这里只在节点1上面开启supernode) nohup /opt/n2n/sbin/supernode -l 65530 & #用其中一个节点来当N2N的supernode,我用的节点1, 节点1 /opt/n2n/sbin/edge -d edge0 -a 10.10.10.101 -s 255.255.255.0 -c dtstack -k dtstack -l 172.18.56.21:65530 -E -r #这里的172.18.56.21是我ECS服务器的eth0接口IP,也就是supernode的真实IP,如果你起了两个supernode可以直接在-l参数里面添加第二个节点,如-l 172.18.56.21:65530,172.18.56.22:65530 /opt/n2n/sbin/edge -d edge1 -a 192.168.100.101 -s 255.255.255.0 -c dtstack -k dtstack -l 172.18.56.21:65530 -E -r #配置完成以后节点会多两个虚拟网卡 [[email protected] n2n-master]# ifconfig edge0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1400 inet 10.10.10.101 netmask 255.255.255.0 broadcast 10.10.10.255 ether 4e:c7:9c:a7:73:95 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 edge1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1400 inet 192.168.100.101 netmask 255.255.255.0 broadcast 192.168.100.255 ether 46:76:79:d8:1b:eb txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.18.56.21 netmask 255.255.240.0 broadcast 172.18.63.255 ether 00:16:3e:08:48:66 txqueuelen 1000 (Ethernet) RX packets 19861 bytes 24810887 (23.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6122 bytes 2000836 (1.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 节点2 /opt/n2n/sbin/edge -d edge0 -a 10.10.10.102 -s 255.255.255.0 -c dtstack -k dtstack -l 172.18.56.21:65530 -E -r /opt/n2n/sbin/edge -d edge1 -a 192.168.100.102 -s 255.255.255.0 -c dtstack -k dtstack -l 172.18.56.21:65530 -E -r
supernode则是服务器超级节点,用法也是很简单的,首先看看edge的help:
-
edge -d < tun device > -a < tun IP address > -c < community > -k < encrypt key > -s < netmask > [-u < uid > -g < gid > ][-f][-m < MAC address > ]
-
-l < supernode host:port > [-p < local port > ] [-M < mtu > ] [-t] [-r] [-v] [-b] [-h]
-
-
-d < tun device > | tun device name
-
-a < tun IP address > | n2n IP address
-
-c < community > | n2n community name
-
-k < encrypt key > | Encryption key (ASCII) - also N2N_KEY = < encrypt key >
-
-s < netmask > | Edge interface netmask in dotted decimal notation (255.255.255.0)
-
-l < supernode host:port > | Supernode IP:port
-
-b | Periodically resolve supernode IP
-
| (when supernodes are running on dynamic IPs)
-
-p < local port > | Local port used for connecting to supernode
-
-u < UID > | User ID (numeric) to use when privileges are dropped
-
-g < GID > | Group ID (numeric) to use when privileges are dropped
-
-f | Fork and run as a daemon. Use syslog.
-
-m < MAC address > | Choose a MAC address for the TAP interface
-
| eg. -m 01:02:03:04:05:06
-
-M < mtu > | Specify n2n MTU (default 1400)
-
-t | Use http tunneling (experimental)
-
-r | Enable packet forwarding through n2n community
-
-v | Verbose
具体上面已经介绍的很清楚了,现在实战怎么开启,一句话:
[html] view plain copy
-
sudo edge -d edge0 -a xx.xx.xx.xx -c username -u 1000 -g 1000 -M 1200 -k password -l xx.xx.xx.xx:xxxx -m 41:03:05:00:10:01 > /dev/null &
现在简单介绍下上面这条命令的含义, -d edge0 就是创建一个虚拟的网卡设备,edge0就是它的名称, -c -k 就是用户名和密码, -a 虚拟的IP地址,随便取,只要你的所有设备在一个网段即可,然后 -u -g 这个是设置UID和GID 也可以不设置, -m 虚拟mac地址,设置了有好处,只要不相同即可,不设置回随机分配,最后有一个重要的地方, -M 1200 ,这里是设置MTU,至于MTU是什么,可以自行百度哈,没设置之前,ssh,http等协议会卡住死活连不上,设置后就正常了,需要比1400小,安卓上不用设置,这样设置以后就可以ping通你的其他机器了,只要它可以访问到超级节点 -l xx.xx.xx.xx:xxxx
现在介绍 supernode ,这个是创建超级节点,root权限都不需要,直接 supernode -l 端口号 ,就行了。网上有免费的超级节点,不过都很慢,很卡,很蛋疼,建议自己买个阿里的vps,又便宜,100M宽带一个月32块钱,那速度,只有一个字,飞快,视频在线传输都没问题,我上班都可以通过n2n查看家里的摄像头...
“ -d< 接口名 > ”选项指定了由 edge 命令创建的 TAP 接口的名字。
“ -a<IP 地址 > ”选项(静态地)指定了分配给 TAP 接口的 v*n 的 IP 地址。如果你想要使用 DHCP ,你需要在其中一台边缘节点上配置一台 DHCP 服务器,然后使用“ -a dhcp:0.0.0.0 ”选项来代替。
“ -c< 组名 > ”选项指定了 v*n 组的名字(最大长度为 16 个字节)。这个选项可以被用来在同样一组节点中创建多个 v*n 。
“ -u ”和“ -g ”选项被用来在创建一个 TAP 接口后降权放弃 root 权限。 edge 守护进程将会作为指定的用户 / 组 ID 运行。
“ -k< ** > ”选项指定了一个由 twofish 加密的**来使用。如果你想要将**从命令行中隐藏,你可以使用 N2N_KEY 环境变量。
“ -l<IP 地址 : 端口 > ”选项指定了超级节点的监听 IP 地址和端口号。为了冗余,你可以指定最多两个不同的超级节点(比如 -l < 超级节点 A> -l < 超级节点 B> )。
“ -m ”给 TAP 接口分配了一个静态的 MAC 地址。不使用这个参数的话, edge 命令将会随机生成一个 MAC 地址。事实上,为一个 v*n 接口强制指定一个静态的 MAC 地址是被强烈推荐的做法。否则,比如当你在一个节点上重启了 edge 守护程序的时候,其它节点的 ARP 缓存将会由于新生成的 MAC 地址而遭到污染,它们将不能向这个节点发送数据,直到被污染的 ARP 记录被消除。
在使用过程中不免遇到一些奇葩的事,调试是个关键,开启调试模式,可以使用参数 “ -v -f ”。记住先 kill 掉之前的 edge 或 supernode 进程再进行调试以免冲突。
好了,linux下面的就这样,客户端就是那一句话,很方便,开机自动连接,超级节点自己搭建一个,其他机器都可以用这个节点。
调试
使用过程中不免遇到一些奇葩的事,调试是个关键,一些大的坑已经为你们踩过了,剩下的基本没啥问题。
1.开启调试模式
记住先kill掉之前的edge 或 supernode进程再进行调试以免冲突。
附加参数即可: -v -f
edge
edge -a 10.0.0.11 -c edge0 -k wss -l 150.0.0.1:5000 -v -f
supernode
supernode -l 5000 -v -f
Windows:
下面介绍win下面怎么搭建n2n:win下面其实也很简单,下个软件设置下就OK了
地址是 http://www.v*nhosting.cz/n2nguien.exe 提供了一个安装包,里面包含了V1 和V2版本,请选择V1版本
单击 advanced 按键,勾选Enable packet forwarding through n2n community,然后其他的自己看,和Linux下的设置一样
上面的图借鉴网上的,因为我没在windows下,但是我用的和这个图一样,这里选择V1版本。
把桌面图标拖到菜单启动就可以开机启动了,不要担心,不占内存不占cpu不占网速.....
常见问题
无法连接服务器时会重复提示 : WARNING:Supernode not responding – moving to 0 of 1
成功连接 : Rx REGISTER_SUPER_ACK myMAC=
常见问题解决方法
1.无法ping通
如果出现一方可以ping通,另一方无法ping通,则很有可能为对方开启了防火墙,关闭防火墙即可
2.无法连接到服务器
检查客户端填写的服务器端口是否正确
检查服务器端口是否在iptables等防火墙中放行
检查客户端是否以管理员权限运行
3. 客户端不断重复ERROR等信息
若能正常联机,则可以忽略错误提示
怎么知道自己的N2N处于正常工作状态呢?
针对 N2N_V1,进入 状态 -- 系统日志,如果能看到这样开头的信息,每分钟一条,就算与服务器连接好啦!
Received REGISTER_ACK from remote peer ... ...
没有连接成功可能显示的是这样的信息(反正不是上面的信息,就没有成功)
Registering with supernode
对于 N2N_V2,同样的路径下,看到的是这样的开头,每2分钟一次,也算设置完全正确啦:
Rx REGISTER_SUPER_ACK myMAC= ... ...
没有连接成功可能显示的信息
WARNING:Supernode not responding - moving to 0 of 1
Android:
下面该介绍安卓了:安卓和win一样,百度上面搜n2n安卓客户端,然后下载安装,注意,需要root权限
下载地址:
[html] view plain copy
-
http://download.****.net/detail/leekwen/8604177
设置好了点击start,出现 RX什么ACK 就表示连通了,可以用超级终端ping通,或者ssh连接
其实安卓上有arm linux,不过不好打字,我现在也没怎么用,在arm linux里面你可以下载更新和pc一样,还可以vnc进桌面。
好了,安卓版就说到这里了。
OpenWrt:
下面介绍OpenWrt的n2n配置,这些都是 很有价值 的,具体价值自己去想
首先安装n2n,可以编译的时候编译进去。 make menuconfig 里面找到 network->v*n->n2n 选中即可,或者编辑.config,搜n2n改成=y
或者在板子里面 opkg update && opkg install n2n 即可
下面看看n2n的配置文件:
[html] view plain copy
-
config edge
-
option community 'username'
-
option key 'password'
-
option port 'port'
-
option supernode 'xx.xx.xx.xx'
-
option ipaddr 'xx.xx.xx.xx'
-
option route '1'
好,现在分析一下配置文件,
community
就是用户名,
key
就是密码对应edge命令的-c -k,
supernode
是超级节点的ip地址,
port
是端口,对应edge的-l,然后
ipaddr
是虚拟ip地址,对应-a,
route
对应-r参数,就是设置是否通过n2n转发,然后我们来看看openwrt下面n2n的服务程序:
[html] view plain copy
-
start_instance() {
-
local cfg = "$1"
-
-
config_get type "$cfg" TYPE
-
-
case "$type" in
-
edge)
-
config_get ipaddr "$cfg" 'ipaddr'
-
[ -n "$ipaddr" ] || return 1
-
config_get supernode "$cfg" 'supernode'
-
config_get port "$cfg" 'port'
-
config_get community "$cfg" 'community'
-
config_get key "$cfg" 'key'
-
config_get_bool route "$cfg" 'route' '0'
-
[ "$route" = "1" ] && args = '-r'
-
service_start /usr/sbin/edge -f $args -a $ipaddr -c $community -k $key -l ${supernode}:${port}
-
;;
-
supernode)
-
config_get port "$cfg" port
-
[ -n "$port" ] || return 1
-
service_start /usr/sbin/supernode -l $port
-
;;
-
esac
-
}
上面是启动的主要函数:首先是读取config 这个type,判断是edge还是supernode如果是supernode则只读取port ,运行命令 supernode -l port,如果type是edge,则读取....等配置文件,然后
[html] view plain copy
-
edge -f $args -a $ipaddr -c $community -k $key -l ${supernode}:${port}
上面的 -f是作为一个服务启动,写入syslog
好了这样配置好了就可以访问到路由器的,只要路由器连了外网,就可以随时访问进去
注
:
经过长期使用,发现一个不美好的问题,如果
长时间
运行的话,会导致不间断
不通不稳定
的情况,所以建议每天自动
重启
一下edge程序
!
n2n的介绍到此 结束 ,很好很强大的一个功能,基本上人手必备神器, 小巧,开源,迅速,免费,无限穿透!
About Me
........................................................................................................................ ● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除 ● 本文在itpub( http://blog.itpub.net/26736162 )、博客园( http://www.cnblogs.com/lhrbest )和个人weixin公众号( xiaomaimiaolhr )上有同步更新 ● 本文itpub地址: http://blog.itpub.net/26736162 ● 本文博客园地址: http://www.cnblogs.com/lhrbest ● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/ ● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826 ........................................................................................................................ ● QQ群号: 230161599 (满) 、618766405 ● weixin群:可加我weixin,我拉大家进群,非诚勿扰 ● 联系我请加QQ好友 ( 646634621 ) ,注明添加缘由 ● 于 2018-09-01 06:00 ~ 2018-09-31 24:00 在魔都完成 ● 最新修改时间:2018-09-01 06:00 ~ 2018-09-31 24:00 ● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解 ● 版权所有,欢迎分享本文,转载请保留出处 ........................................................................................................................ ● 小麦苗的微店 : https://weidian.com/s/793741433?wfr=c&ifr=shopdetail ● 小麦苗出版的数据库类丛书 : http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麦苗OCP、OCM、高可用网络班 : http://blog.itpub.net/26736162/viewspace-2148098/ ● 小麦苗腾讯课堂主页 : https://lhr.ke.qq.com/ ........................................................................................................................ 使用 weixin客户端 扫描下面的二维码来关注小麦苗的weixin公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗weixin,学习最实用的数据库技术。
........................................................................................................................ |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2215010/,如需转载,请注明出处,否则将追究法律责任。