N2N内网穿透(打洞)软件使用

背景

首先说一下这个N2N软件的背景,这个是培训oracle的时候,安装rac需要多块网卡,云服务器不像本地服务器或者虚拟机那边方便,可以随便随便添加网口,使用到N2N这款软件模拟出多块网卡;
其实N2N软件的主要功能是内网穿透,就是将服务器的网段可以和本地环境打穿到一个网段里;这个软件如果用在服务器上还是挺可怕的,类似windows下的teamviewer,类似linux下的ssh隧道模式;只要服务器可以上外网(严格说是连接到supermode),就可以打通,慎用!

概述

N2N 是一款开源的P2P VPN 软件,其作者是著名的开源网管软件ntop的作者Luca Deri。
N2N 是一个双层架构的VPN ,它让用户可以在网络层上开发P2P应用的典型功能,而不是在应用层上开发。这意味着用户可以获取本地IP一样的可见度(比如说,同一个n2n网络内的两台PC机可以相互ping通),并且可以通过n2n虚拟网内的IP地址相互访问,而不必关心当前所属的物理网络地址。可以这样说,OpenVPN是把SSL从应用层转移到网络层实现(比如说实现https协议),而n2n则是把P2P的实现从应用层转移到网络层。

N2N 设计的主要功能

  • N2N 是基于P2P 协议之上的两个私有网络间的加密层
  • 加密是在edge 节点上执行的,使用开放的协议,用户自己定义密钥:你自己控制自己的安全,不需要委托给第三方公司
  • 每个n2n 用户可以同时隶属于多个网络
  • 有NAT和穿越防火墙的功能,即使n2n节点位于私网中,也能够访问,防火墙不再是在 IP 层的直接沟通和交流的障碍
  • N2N 网络不是独立的,它是能够跨越N2N 和非N2N网络路由的

N2N 架构组件

  • Edge 节点:用户PC 机上安装的用于建立n2n网络的软件。几乎每个edge节点都会建立一个tun/tap设备,作为接入n2n网络的入口。
  • Supernode 超级节点:它在edge 节点间建立握手,或为位于防火墙之后的节点中转数据。它的基础作用是注册节点的网络路径,并为不能直通的节点做路由,能够直通的节点间通信,是P2P的。
    Edge 节点间通过虚拟的tap 网卡交互。每个tap网卡都是一个n2n edge节点。每台PC机可以有多个tap网卡,所以,在n2n网络中,同一台PC机可以属于多个网络。

搭建N2N环境

首先我们需要一个公网IP地址,一个可以访问的公网端口(UDP), 我这里刚好有一个华为云的服务器可以用
IP: 114.116.xx.xx
Port: 6666

安装软件

1
2
3
4
5
6
7
8
yum install -y subversion gcc-c++ openssl-devel git cmake
cd /usr/src
svn co https://svn.ntop.org/svn/ntop/trunk/n2n
cd n2n/n2n_v2
make
make PREFIX=/opt/n2n install
cp supernode /usr/sbin/
cp edge /usr/sbin/

搭建中心服务器(supermode节点)

1
2
3
4
#创建一个端口为6666的supermode服务,用于建立握手
/usr/sbin/supernode -l 6666
#查看6666端口是否存在,可以看到是udp端口
ss -tnulp |grep 6666
1
2
#新建一个虚拟设备edge0,用于测试
edge -d edge0 -a 10.10.10.101 -s 255.255.255.0 -c fff -k fff -l 114.116.xxx.xxx:6666 -E -r

n2n

创建客户端(egdg节点)

1
2
#新建一个虚拟设备edge0,用于测试
edge -d edge0 -a 10.10.10.102 -s 255.255.255.0 -c fff -k fff -l 114.116.xxx.xxx:6666 -E -r

参数:

1
2
3
4
5
6
7
8
9
-d <接口名> 选项指定了由 edge 命令创建的 TAP 接口的名字; 创建一个虚拟的网卡设备,edge0 就是它的名称
-a <IP 地址> 选项(静态地)指定了分配给 TAP 接口的 VPN 的 IP 地址。如果你想要使用 DHCP,你需要在其中一台边缘节点上配置一台 DHCP 服务器,然后使用“-a dhcp:0.0.0.0”选项来代替。
-s <子网掩码>
-c <组名> 选项指定了 VPN 组的名字(最大长度为 16 个字节)。这个选项可以被用来在同样一组节点中创建多个 VPN。
-k <密钥> 选项指定了一个由 twofish 加密的密钥来使用。如果你想要将密钥从命令行中隐藏,你可以使用 N2N_KEY 环境变量。
-u 和 -g选项被用来在创建一个 TAP 接口后降权放弃 root 权限。edge 守护进程将会作为指定的用户/组 ID 运行。
-l <IP 地址:端口> 选项指定了超级节点的监听 IP 地址和端口号。为了冗余,你可以指定最多两个不同的超级节点(比如 -l <超级节点 A> -l <超级节点 B>)。
-m 给 TAP 接口分配了一个静态的 MAC 地址。不使用这个参数的话,edge 命令将会随机生成一个 MAC地址。事实上,为一个 VPN 接口强制指定一个静态的 MAC 地址是被强烈推荐的做法。否则,比如当你在一个节点上重启了 edge 守护程序的时候,其它节点的 ARP 缓存将会由于新生成的 MAC 地址而遭到污染,它们将不能向这个节点发送数据,直到被污染的 ARP 记录被消除。
在使用过程中不免遇到一些奇葩的事,调试是个关键,开启调试模式,可以使用参数“-v -f”。记住先kill 掉之前的 edge 或 supernode 进程再进行调试以免冲突。

PS:如果想让新建的虚拟网卡开机后依然生效,需要将以上创建命令写入到/etc/rc.local 文件中,另外centos7操作系统需要chmod +x /etc/rc.d/rc.local
独学无友,孤陋寡闻;学习记录,欢迎拍砖!