老年人教程,使用N2N进行异地组网

一 、 简介

1.为什么用N2N ?

在一般情况下, 两台机器如果是处在同一个局域网下,那么这两台机器可以通过各自的内网IP进行通信。 但是,在某些情况下你可能希望两个不同局域网的机器进行通信 , 此时 N2N 就能给我们带来一个简单快捷的解决方案,N2N 通过一些特殊的技巧,让不同网段的机器能够进行P2P( 点对点 peer-to-peer ) 通信。
这里列举一些可能的使用场景

  • 在外访问家用NAS做数据共享
  • 在家访问公司的内部网络
  • 开发人员远程调试现场环境

N2N 这个项目被 官方搁置了几年的时间,但这项目仍然被很多人使用,于是官方在其网站表示恢复了对N2N项目的开发和维护( 2018年8月17日 )


  1. N2N做了什么?

那么,N2N 是怎么工作的呢? N2N是怎么样让两台不在同一网段的机器相互找到对方的。
在一般情况下 , 两台没有公网IP的机器是没有办法直接通过IP地址去找到对方的,这时候如果有一台拥有公网IP的服务器的话,那么事情就会变得很简单。

首先 ,两台处于内部网络的机器 主动去跟拥有公网IP的机器进行连接 , 然后向处于公网的服务器进行“注册登记”, 留下自己的连接方式 ,告诉公网服务器,如果有其它机器要找我,就把这些信息给它,它就知道怎么能够找到我了。 当然,出于安全考虑,这些想要相互连接的机器会留下一些验证口令, 只有口令正确匹配,它们才能够正确的组网。

以上的描述只是帮助你去理解N2N做的事情,但在实际的实现中,边缘节点的连接会有更复杂的策略,而且项目仍然在不断的更新中,如需要继续深入研究,可以查看N2N的源码(https://github.com/ntop/n2n)


1.1. N2N 的一些相关概念

在上面描述的流程中, N2N 官方对里面的角色有一些定义,在开始部署前,了解这些定义,能够帮助你快速理解这个软件的使用。

1.2 SuperNode 超级节点

SuperNode 相当与注册中心, 它会记录边缘节点的连接信息,告诉各个边缘节点如何去找到其它的边缘节点。如果超级节点发生故障,那么边缘节点之间将不能正常的进行通信。在整个N2N网络中必须至少拥有一个SuperNode。

1.3 Edge 边缘节点

边缘节点是指所有通过 SuperNode 组网而成的节点,无论你处于哪个位置哪种网络环境下,edge节点之间都能进行通信。
一台计算机可以拥有多个edge, 局域网根据子网掩码来决定两台机器是否处于同一个网段,而edge需要添加一组账号密码,在N2N 里面称作 GroupName 和 password ,Group0 和 Group 1 里面的 10.0.0.1 是不一样的。


二、N2N 的使用

环境准备:

操作系统版本角色软件
Linux操作系统DebainsuperNode + edgen2n,cmake
Windows操作系统Windows10edgen2nguien

2.1 超级节点(SuperNode)的部署

本教程的超级节点是部署在一个有公网IP的Linux系统,发行版是Debain.
如果你已经准备好了你系统环境,那么跟着教程来做吧!

n2n 能够通过软件源获取并自动安装,比如通过apt 安装

sudo apt-get install n2n

如果你需要手动编译最新源码,请参考下面内容

2.1.1 安装cmake

cmake将会在后面用到, 如果你还没安装,请参照下面命令

apt install cmake libssl-dev
apt install build-essential

2.1.2 安装n2n

第一步:下载 meyerd/n2n 的代码

 git clone https://github.com/meyerd/n2n.git

第二步: 编译代码

#1.clone 下来的代码在用户所在目录,比如用root,那么代码会拉到 /root 目录下
#进入CD目录下,这里我们使用最新的 V2版本
cd /root/n2n/n2n_v2

#2.创建编译目录,并且进入编译目录
mkdir build
cd build

#3.执行cmake编译源码
cmake .. 
make

编译成功后你可以看到 edge 、supernode 两个可执行文件,那么这部分完成
在这里插入图片描述

第三步:使用supernode 创建超级节点

#启动超节点 , 端口号为1000
./supernode -l 1000

#如果希望看到调试信息,加上-f 让supernode在前台运行,不过这样的话你关闭终端程序就会被终止
./supernode -l 1000 -f

经过上面三步,你的超级节点就已经部署完毕,是不是很简单。

2.2 边缘节点(edge)的部署

本教程演示如何连接两个处于内网的机器,一个是linux, 一个是windows

2.2.1 Linux

同样的,跟部署超级节点一样,你需要在linux上编译n2n,如果忘记了请回看 2.1.2 安装n2n。
在安装好n2n 后,我们需要edge 这个命令来部署边缘节点,先来看下edge 比较重要的参数

参数作用
-a用来分配IP地址的,可以手动指定,也可以配置dhcp
-cn2n网络所属的组名
-k加入组所需的密码
-r是否开启通过组来进行包转发
-l指定supernode

例子:

#创建一个IP为 10.10.10.10 的边缘节点,组名 mynetwork 密码 123 
./edge -a 10.10.10.10 -c mynetwork -k 123 -l 超级节点IP:超级节点端口

#防止密码泄露,因为可以通过查看 edge的启动参数来获取密码
N2N_KEY=123 ./edge -a 10.10.10.10 -c mynetwork -l 超级节点IP:超级节点端口

2.2.2 Windows

安装 n2nguien , 安装过程忽略,一直下一步就可以(过程需要安装虚拟网卡)
启动软件后如下
在这里插入图片描述

注意软件的 版本要跟超级节点一致
在这里插入图片描述

2.2.3 测试

通过ping命令相互测试,是否能够得到应答?
如果测试正常,那么说明,你们两台计算机已经能够根据组IP来相互找到对方了,剩下的使用跟在局域网通信一样


三、常见问题

  1. ping不通什么原因

第一:请检查下你的防火墙,大多数情况下是防火墙干扰了通信。
第二:大多数情况下是能够实现内网穿透的,但仍然可能存在失败的情况。
第三:检查下n2n对应的虚拟网卡配置,有可能无意中被其它软件所改变。
第四:你要保证组网的n2n节点所使用的软件版本一致。

  1. n2n是怎么通信的?

P2P, 点对点的连接,只有在初次连接的时候需要超级节点,在连接建立之后并不需要超级节点,所以你不用担心超级节点回嗅探你的流量。当然,凡事不可能一番风顺,如果因为某些愿意边缘节点之间的连接丢失了,就需要重新向超级节点求助了,所以别想着连接后可以关闭超级节点。

  1. github 上ntop/n2n的代码编译不了?

暂时找不到原因,使用 meyerd/n2n 吧。

  1. n2nguien 跟n2n有什么关系

n2ngui 只是一个UI,实际上还是调用edge.exe ,你也可以自己编译一个windows环境下的edge.exe , 把它替换到n2ngui 安装目录下就可以了

  1. 其它组网方案

    zerotier 、 teamview中的VPN功能也能实现同样的功能。

  2. 如何关闭edge、supernode

#查看 edge 进程 
ps -ef | grep edge
#查看 supernode 
ps -ef | grep supernode 
#根据PID结束进程
kill 655
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页