n2n

一种L2对等VPN

n2n是第二层对等虚拟专用网(VPN),允许用户在网络上而不是应用程序级别利用P2P应用的典型功能。这意味着用户可以获得本地IP可见性(例如,属于同一个n2n网络的两台PC可以相互ping通),并且无论他们当前属于哪个网络,都可以使用相同的网络IP地址访问。简而言之,随着OpenVPN将SSL从应用程序(例如,用于实现https协议)移至网络协议,n2n将P2P从应用程序移至网络级别。

n2n的主要设计功能是:

  • n2n是基于P2P协议的加密的第二层专用网络。
  • 使用开放协议和用户定义的加密密钥在边缘节点上执行加密:您无需像Skype或Hamachi那样将其委托给公司来控制您的安全性。
  • 每个n2n用户可以同时属于多个网络(又称为社区)。
  • 能够以反向流量方向(即从外到内)穿越NAT和防火墙,从而即使在专用网络上运行也可以访问n2n个节点。防火墙不再是直接在IP级别进行通信的障碍。
  • n2n网络并非自成一体:可以在n2n和非n2n网络之间路由流量。

n2n架构基于两个组件:

  • 边缘节点:安装在用户PC上的应用程序,允许构建n2n网络。实际上,每个边缘节点创建tun/tap设备,然后该tun/tap设备是n2n网络的入口点。
  • 超级节点:它由边缘节点在启动时使用,或用于到达对称防火墙后面的节点。对于那些无法直接通信的节点,此应用程序基本上是目录寄存器和分组路由器。

边缘节点通过虚拟tap进行通信。每个tap接口都是一个n2n边缘节点。每台PC可以具有多个tap结构,每个n2n网络一个,因此同一台PC可以属于多个社区。

快速开始

  • 下载并编译代码
  • 决定将您的超级节点放置在何处。假设您将其放在XYW端口的主机A.B.C.D上。
  • 确定要用于保护数据的加密密码。假设您使用密码cryptome
  • 确定您要使用的网络名称。假设您将其称为mynetwork。请注意,您可以使用您的超节点/边缘节点来处理多个网络,而不仅仅是一个。
  • 确定您计划在边缘节点上使用的IP地址。假设您使用IP地址10.1.2.0/24
  • 启动您的应用程序:
#supernode > supernode -l xyw
#edge node1> edge -a 10.1.2.1 -c mynetwork -k encryptme -l a.b.c.d:xyw
#edge node2> edge -a 10.1.2.2 -c mynetwork -k encryptme -l a.b.c.d:xyw

现在测试您的n2n网络:

#edge node1> ping 10.1.2.2
#edge node2> ping 10.1.2.1

依靠于平台的差异

  • MacOS 
    请阅读本文档
  • Linux 
    您需要使用-d指定Tap接口名称。
#edge node> edge -d n2n0 -c mynetwork -k encryptme -a 1.2.3.4 -l a.b.c.d:xyw
  • Windows 
    该端口可用,您需要使用C / C ++编译器进行编译。
  • 在Android上,
    您可以使用此应用程序在您的移动设备上运行它。

n2n安全性

n2n 1.x的设计很简单,可用于专用n2n网络。我们知道它有一些安全限制,例如:

  • 命令行上的键是一个问题。
  • 加密中缺少随机数使得相对容易执行重放攻击。
  • 缺少HMAC使人相对容易夹在中间。(我不认为这是一个有根据的批评,因为n2n并不是试图将信任附加到一种连接上,而只是不透明)。
  • 难以滚动密钥和集成安全密钥交换协议。

因此,下一个n2n 2.x版本将具有以下安全扩展:

  • 每个加密的有效负载都会获得一个32位的随机数(salt),因此相同的数据包每次都会得到不同的加密。这使得执行重放攻击,发现密钥等变得更加困难。[status = WORKING]
  • 每个加密的数据包都携带明文形式的密钥索引,因此边缘可以向接收者发送密钥更改信号。密钥交换可以通过例如IKE(IPSec)或Kerberos来完成,或者仅具有不时更新的共享密钥列表。如果两个边缘上的时钟稍有偏差,则具有密钥索引可以实现可靠的密钥滚动。[status = WORKING]
  • Edge程序将具有密钥发现通道,以允许插入IKE,Kerberos,SSL等,并提供安全的密钥交换方法。[status = design phase]
  • n2n数据包需要包含一些垃圾信息,以避免DPI应用程序检测到它们[status = design phase]

每个n2n数据包都携带一个转换标识符,因此可以传输加密和未加密数据包的混合,并在运行时识别解码转换。转换标识符允许数据转换插件和扩展。添加新的加密或压缩类型后,无需更改n2n数据包格式,并且接收方可以检测是否知道如何处理该数据包。[status = nearly finished]

以上声明并不意味着 n2n是不安全的,而是在下一个主要版本中将更好地解决安全问题。

常见问题

  • 问:我可以使用DHCP或ZeroConf来动态配置节点吗?
    答:可以。您需要在一个节点上的n2n设备上启动dhcpd。例如:“ dhcp tun0”。有关更多信息,请参见DHCP mini-HOWTO 。请注意,每个n2n网络不应启动多个dhcpd(这是最佳做法)。
  • 问:n2n可以穿越多少个内联防火墙?
    答:您是在一个NAT之后,还是在n-NAT之后,这都无关紧要。N2N将跨越所有这些区域。
  • 问:n2n基于UDP。您有支持HTTP封装的计划吗?
    答:当前n2n支持初始HTTP隧道。为了使用它,您需要使用-t启动边缘节点(超级节点已经在TCP和UDP上进行侦听)。
  • 问:如何实现n2n超节点可靠性?
    答:具有故障安全n2n网络的一种方法是将两个不同的n2n接口(具有与超级节点相同的参数)放在带有brctl的网桥中,并对其进行调整以使用STP生成树协议。

 

您想要了解更多有关n2n内部的知识吗?

详细阅读: n2n.pdf

需要帮忙?

Please open a ticket on github.

许可license

n2n是根据GPLv3许可证发行的。

下载

n2n代码在 在githubk可用.