[N2N虚拟局域网]N2N组网原理学习

发布于 2024-03-17  7 次阅读


[N2N虚拟局域网]N2N组网原理学习


摘自百科:虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样,由此得名虚拟局域网。VLAN是一种比较新的技术,工作在OSI参考模型的第2层和第3层,可以为几乎局域网内任何信息集成系统架构逻辑拓扑和访问控制,并且与其它共享物理网路链路的信息系统实现相互间无扰共享。

1.什么是N2N

N2N(Node-to-Node)联网技术是一种点对点(P2P)网络架构,它允许不同节点之间直接进行通信,而不需要依赖中心化的服务器。节点不仅可以随时加入或离开网络,同时,直接的点对点连接可以减少延迟,提高数据传输速度,尤其适用于大文件传输或实时通信。N2N使用UDP协议进行封包传输,使用UDP协议带来了高性能和便捷性,例如利用很多场景下不会封锁DNS的UDP端口来打通网络,例如UDP原生优于TCP的传输性能。在NAT条件允许的情况下, edge节点间流量直连,无需通过
而由于没有中心化的服务器,用户的通信内容更难以被监控,增强了隐私保护。其git项目地址:https://github.com/ntop/n2n

2.技术原理

  • 关于NAT
    网络地址转换(NAT,Network Address Translation)是一种在网络中使用的技术,主要用于将私有网络地址转换为公共地址,以便通过互联网进行通信。主要分为两种:
    1.SNAT: 源地址转换,当请求本文经过NAT网关时。NAT网关会将报文中的源地址替换掉,替换成能与目标地址路由互通的地址,此时目标地址不变,所以最终报文抵达目标服务。
    2.DNAT: 目标地址转换,当service完成处理后返回数据,返回报文时的源地址和目标地址反过来,抵达NAT网关后NAT网关根据请求出去的时候的SNAT记录做反转,将目标地址转换成内网地址,最终抵达客户端。

  • 关于P2P:
    P2P,是Peer-To-Peer 的简称,翻译成"对等网络"或者"点对点网络"。P2P是一种分布式网络,网络的参与者共享他们所拥有的一部分硬件资源,这些共享资源需要由网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源(服务和内容)提供者(Server),又是资源(服务和内容)获取者(Client)。

  • 关于点对点穿透:
    在内网穿透传输大量数据时如果都经过服务器中转的话,这样会对服务器端带宽压力比较大。只要是数据量很大,而一般利用中转服务器又需要一定规模投入的应用,我们都可以考虑用P2P技术。

  • UDP打洞
    最为常见的实现P2P的方式是采用UDP打洞技术,UDP打洞技术是通过中间服务器的协助在各自的NAT网关上建立相关的表项,使P2P连接的双方发送的报文能够直接穿透对方的NAT网关,从而实现P2P客户端互连。如果两台位于NAT设备后面的P2P客户端希望在自己的NAT网关上打个洞,那么他们需要一个协助者——集中服务器,并且还需要一种用于打洞的Session建立机制。

  • TCP打洞
    从现在的主流应用的角度上来看,基于TCP的P2P应用显然不如基于UDP的应用那么广泛,但是也存在打洞的需求。TCP相对于UDP而言要复杂的多,TCP连接的建立要依赖于三次握手的交互,所以NAT网关在处理TCP连接的时候,需要更多的开销。但是,由于TCP协议完备的状态机机制,TCP反而比UDP更能精确的获取某个Session的生命期。
    一种新的代理类型 XTCP 能解决这个问题,实现方式可以是采用搭建FRP服务器的方式,在传输数据的两端都部署上FRP客户端用于建立直接的连接。

3.N2N基本架构与流程

supernode: 可以视为注册中心,用来注册各接入点的信息,相当于一张地址列表,在对称型或者端口受限型NAT的情况下,edge之间无法直接交互数据,此时需要通过supernode转发流量。
edge: 边缘节点, 负责与其他edge或者supernode进行数据交互,报文解密等, 会定时跟supernode通信,获取信息。
工作流程:

  1. edge向supernode注册,supernode记下edge的信息,包括外网ip和端口,虚拟ip、虚拟mac地址、community等信息。
  2. edge监听虚拟网卡,获取网卡要发送的数据。
    当从虚拟网卡读取到数据时,将数据包发送到supernode。
  3. supernode提取数据包中的mac地址,并查询注册列表,并附上来源地址和端口,转发到目标edge。
  4. 目标edge收到数据包,提取来源地址和端口,并尝试udp直连
    若直连成功,数据包不再走supernode中转,否则一直从supernode中转。

4.配置与构建

  • 配置文件
    n2n 支持可选地使用 edge 和 supernode 的配置文件:

    -l <lport>  Set UDP main listen port to <lport>
    -f          Run in foreground.
    -u <UID>    User ID (numeric) to use when privileges are dropped.
    -g <GID>    Group ID (numeric) to use when privileges are dropped.
    -v          Increase verbosity. Can be used multiple times.
    -h          This help message.
  • 源码编译
    #clone 源码
    git clone https://github.com/meyerd/n2n.git
    #安装依赖
    yum install cmake openssl openssl-devel gcc-c++ git -y
    #编译
    cd n2n/n2n_v2
    mkdir build 
    cd build
    cmake ..
    make && make install
    # 会生成edge、supernode可执行文件。