N2N是一款开源的轻量级VPN工具,可以实现基于UDP通信的虚拟局域网。目前,N2N是最常用的内网穿透方法之一。

N2N的结构

N2N网络由以下两种节点组成:

  • Edge:可以理解为客户端,也就是组成虚拟局域网的每一个终端节点
  • SuperNode:可以成为中心节点或超级节点,在N2N网络中起到Edge路由的作用,每个Edge通过SuperNode来发现或通知其他节点。SuperNode必须具备公网IP。

由多个Edge组成的一个虚拟局域网,称为一个community

一个SuperNode可以作为多个community的路由,一个Edge也可以加入多个community

Edge之间通信时,首先通过SuperNode获取到对应Edge的地址信息,接着尝试在Edge间建立P2P的直接连接,如果连接建立成功,Edge间就会以直连的方式直接通信。如果Edge所处的网络环境采用了对称型NAT,那么就无法建立直连,这时Edge之间的所有通信报文,就会通过SuperNode节点来进行转发。

N2N网络拓扑

N2N的安装

N2N目前有v1和v2两个版本,v1已经基本停止维护,所以在安装使用时,建议选择v2版本。

Ubuntu系统

ubuntu系统apt中包含了N2N v1版本的软件包,可以直接使用apt-get install n2n命令安装

安装v2版本,主要有一下步骤:

  1. 安装环境必备的软件

    1
    sudo apt-get install build-essential libssl-dev autoconf
  2. 下载官方的N2N源代码

    1
    git clone https://github.com/ntop/n2n.git
  3. 运行N2N代码中的autogen.sh脚本,脚本会调用autoconf生成configure

    1
    ./autogen.sh
  4. 安装N2N

    1
    2
    3
    ./configure
    make
    sudo make install

mac OS系统

  1. 允许系统从位置来源安装软件

    1
    sudo spctl --master-disable
  2. 安装CMake、OpenSSL:

    1
    2
    brew install openssl
    brew install cmake
  3. 安装虚拟网卡tuntap

    1
    2
    brew tap homebrew/cask
    brew cask install tuntap
  4. 下载N2N源代码

    1
    git clone https://github.com/ntop/n2n.git
  5. 安装N2N

    1
    2
    3
    4
    ./autogen.sh
    ./configure
    make
    sudo make install

Windows系统

可以安装N2N Gui,以图形化界面的方式运行N2N Edge

运行N2N

启动SuperNode

运行如下命令,启动SuperNode服务,在指定端口监听Edge的请求报文:

1
supernode -l 端口号
  • SuperNode必须具备公网IP,所以一般需要运行在VPS服务器上。如果没有公网访问条件,可以在网上找到一些免费开放的SuperNode节点,但是使用这些第三方节点,要注意可能存在稳定性和安全性的问题。

  • 由于SuperNode服务需要持续运行,建议使用nohup以后台模式启动。

启动Edge

一、Linux/mac OS

执行如下命令,启动Edge服务,创建虚拟网卡并连接SuperNode:

1
edge -c community名 -k 密钥 -a 为本机虚拟网卡分配IP地址 -l SuperNode的IP:端口
  • 如果需要为虚拟网卡指定设备名,可以添加-d DeviceName 参数

  • edge默认以后台方式启动,如果需要以前台方式启动,可以添加-f 参数

  • 如果需要开启报文转发,可以添加-r 函数

Edge客户端成功启动后,就可以通过各个Edge节点启动时分配的虚拟网卡地址,互相访问了。

二、Windows系统N2N Gui工具

安装n2n GUI后,打开软件,界面如下:

n2n GUI

  1. 在SuperNode设置下指定SuperNode节点的IP和端口

  2. 在Local settings下,设置要为本机虚拟网卡分配的IP地址,要接入N2N 虚拟局域网的Community名(Group name),以及对应的Password

  3. 点击Advanced按钮,打开高级设置,界面如下:

    N2N Advanced

  4. Advanced设置中,大部分参数可以采用默认设置不需要更改,只需要根据实际情况,选择使用的N2N版本,Use n2n v1或者Use n2n v2,然后点击OK

  5. 设置完成后退出并重新启动N2N Gui工具,软件会自动根据上次保存的配置,启动服务并连接SuperNode

  6. 客户端成功启动后,就可以通过各个Edge节点启动时分配的虚拟网卡地址,互相访问了。