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
依靠于平台的差异
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可用.