N2N是一款开源的P2P VPN软件,其作者是著名的开源网管软件ntop的作者Luca Deri。
N2N是一个双层架构的VPN,它让用户可以在网络层上开发P2P应用的典型功能,而不是在应用层上开发。这意味着用户可以获取本地IP一样的可见度(比如说,同一个n2n网络内的两台PC机可以相互ping通),并且可以通过n2n虚拟网内的IP地址相互访问,而不必关心当前所属的物理网络地址。可以这样说,OpenVPN是把SSL从应用层转移到网络层实现(比如说实现https协议),而n2n则是把P2P的实现从应用层转移到网络层。
l N2N是基于P2P协议之上的两个私有网络间的加密层
l 加密是在edge节点上执行的,使用开放的协议,用户自己定义密钥:你自己控制自己的安全,不需要委托给第三方公司
l 每个n2n用户可以同时隶属于多个网络
l 有NAT和穿越防火墙的功能,即使n2n节点位于私网中,也能够访问,防火墙不再是在IP层的直接沟通和交流的障碍
l N2N网络不是独立的,它是能够跨越N2N和非N2N网络路由的
l Edge节点:用户PC机上安装的用于建立n2n网络的软件。几乎每个edge节点都会建立一个tun/tap设备,作为接入n2n网络的入口。
l Supernode超级节点:它在edge节点间建立握手,或为位于防火墙之后的节点中转数据。它的基础作用是注册节点的网络路径,并为不能直通的节点做路由,能够直通的节点间通信,是P2P的。
Edge节点间通过虚拟的tap网卡交互。每个tap网卡都是一个n2n edge节点。每台PC机可以有多个tap网卡,所以,在n2n网络中,同一台PC机可以属于多个网络。
其中super node提供场所,让两个位于NAT/防火墙之后的edge node进行会面,一旦双方完成首次握手,剩下的数据流就之发生在两个edge node之间,如果有一方的NAT属于对称型(symmetrical),super node则还需继续为双方提供数据包的转发;edge node负责数据流的加解密,原理很简单。
对于一个VPN而言,主要涉及封装和加解密两个步骤,edge node使用UDP协议进行封装,目的是为了更好的兼容防火墙的策略,因为很多防火墙禁用了非TCP/UDP协议禁用。加密算法则采用了twofish,开源、简便,处理速度快。
源码直接从SVN上获取,里面包含了V1和V2两个版本,我编译的是V2版本
svn cohttps://svn.ntop.org/svn/ntop/trunk/n2n
cd n2n/n2n_v2
make
make install
编译安装后,多了两个应用:supernode和edge
l 启动supernode
supernode -l <listening port>
参数-l是监听的端口,进程缺省是运行在后台的。可选参数:
supernode usage
-l <lport> Set UDP main listen port to <lport>
-f Run in foreground.
-v Increase verbosity. Can be used multiple times.
-h This help message.
l Ege的用法:
edge -a 虚拟IP -c 你的虚拟网名 -k 密码 -l supernodeip:端口
edge -d <tun device> -a [static:|dhcp:]<tun IP address> -c <community> [-k <encrypt key> | -K <key file>] [-s <netmask>] -u <uid> -g <gid>[-m <MAC address>]
-l <supernode host:port> [-p <local port>] [-M <mtu>] [-r] [-E] [-v] [-t <mgmt port>] [-b] [-h]
-d <tun device> | tun device name
-a <mode:address> | Set interface address. For DHCP use '-r -a dhcp:0.0.0.0'
-c <community> | n2n community name the edge belongs to.
-k <encrypt key> | Encryption key (ASCII) - also N2N_KEY=<encrypt key>. Not with -K.
-K <key file> | Specify a key schedule file to load. Not with -k.
-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> | Fixed local UDP port.
-u <UID> | User ID (numeric) to use when privileges are dropped.
-g <GID> | Group ID (numeric) to use when privileges are dropped.
-f | Do not fork and run as a daemon; rather run in foreground.
-m <MAC address> | Fix MAC address for the TAP interface (otherwise it may be random)
: eg. -m 01:02:03:04:05:06
-M <mtu> | Specify n2n MTU of edge interface (default 1400).
-r | Enable packet forwarding through n2n community.
-E | Accept multicast MAC addresses (default=drop).
-v | Make more verbose. Repeat as required.
-t | Management UDP Port (for multiple edges on a machine).
Environment variables:
N2N_KEY | Encryption key (ASCII). Not with -K or -k.
本文为Lokie.Wang原创文章,转载无需和我联系,但请注明来自lokie博客http://lokie.wang