之前我在一些服务器的配置环境中,经常遇到一个问题:

  • 我想要在服务器之间组建一个局域网,但却用不起专线;
  • 使用传统的VPN技术,服务器选在哪里都是个问题;选的不好,部分服务器连不上;
  • 使用传统的VPN技术,所有的流量转发压力全集中在一台服务器不说,如果VPN服务器崩溃了,整个局域网都会崩溃;
  • 墙,墙,墙,部分VPN过墙就被拦截,根本无法进行透传

所以随着P2P网络模式的流行,与之而来衍生出了一种新的概念:P2P VPN。

1. 什么是P2P VPN

所谓P2P VPN,就是在整个VPN网络中,所有的服务器之间的流量转发,不再需要经过中心服务器,而是直接实现点到点连接。只需在连接中心节点一次后,剩下的流量交换都在节点服务器中完成。

在传统的VPN中,有且只能有一台VPN服务器,所有的客户端都会连接到单点服务器上,并且所有的流量都必须通过单点服务器进行转发;负担过重不说,往往因为中心节点的崩溃导致局域网的分崩离析。

而在P2P VPN中,网络采用和BitTorrent网络(BT下载网络)类似的架构:部署几台信息服务器(Tracker服务器),剩下的客户端作为边缘节点加入网络中即可。只需要通过信息服务器获取各台服务器的信息,即可直接转发数据包到达目标服务器。流量交换的工作将不由中心服务器完成,而是各个边缘节点之间完成。

2. 部署教程

这次教程,我们将使用 N2N (Node-to-Node,至少我的理解是这样) 来完成本篇教程。N2N目前分为两个版本,v1版本和v2版本。本教程以v2版本为例(因为支持多个中心节点实现灾备冗余),系统使用Debian 9 x64系统。

请注意:服务器必须支持TAP/TUN能力,否则此教程中的方法无法正常使用!
一般KVM都支持,OpenVZ虚拟化请工单咨询你的VPS服务商!

2.1 安装环境

执行命令:

apt install subversion build-essential libssl-dev net-tools

由于从国外拉取文件,所以如果使用国内的服务器部署N2N,建议为服务器临时配置代理!或者从国外服务器下载好后转存到当前服务器上!

之后开始使用svn下载源码:

svn co https://svn.ntop.org/svn/ntop/trunk/n2n

下载源码的速度视所在网络的环境,国内的速度会相对较为缓慢,国外的服务器数十秒即可完成下载。

之后,进入N2N v2的源码目录:

cd n2n/n2n_v2

开始编译并安装:

make && make install

在所有需要加入内网的服务器上,执行以上步骤,完成环境的安装。

2.2 了解网络架构

安装完成后,我们会得到两个可执行文件:supernodeedge

supernode 是我们的中心信息节点程序,它起到了类似BT/PT中Tracker服务器的作用,完成对边缘节点信息的交换,并为无法暴露端口在公网的服务器提供流量转发能力。
edge 是我们的边缘节点程序。它相当于网络中的客户端,加入到网络后,即可在中心信息节点的指引下进行信息交换。

在一个P2P VPN的网络中,我们只需要少数几个(1~2个)Supernode即可。Edge可以无限添加。

2.3 部署Supernode (中心节点)

首先请确认要作为中心节点服务器暴露在公网!(NAT服务器的话,请保证NAT端口映射准确正常)使用内网(或者NAT后)的服务器是无法作为中心节点的!

部署Supernode的命令行非常简单,只需要一条命令:

supernode -l [端口号]

执行完成后,supernode即启动成功。我们使用命令来确认下:

ps -aux | grep supernode

返回如下结果:

root@supernode-1:~# ps -aux | grep supernode
root 578 0.0 0.0 4196 700 ? S 02:45 0:00 supernode -l 9999
root 45127 0.0 0.0 12788 980 pts/0 S+ 06:04 0:00 grep supernode
root@supernode-1:~#

即为Supernode启动成功。

在N2N v1中,一个Edge只能连接一个Supernode,但在N2N v2中,你可以至多连接两个Supernode!妥善利用多Supernode的优势,实现灾备冗余的能力!

2.4 部署Edge节点

Edge节点的命令相对要复杂许多。我先贴出来一个比较简单的命令:

edge -a 10.233.199.101 -c MyN2NNetwork -k n2npassword -l 123.123.123.123:9999 -p 8888

命令行参数解读:

-a [内网IP地址]:设置此N2N网络中,本机的IP地址
-c [群组名称]:设置本机要加入的N2N网络组名称(一台Edge可以加入多个N2N网络组中,只要保证软件版本一致)
-k [密码]:加入N2N网络组使用的密码
-l [Supernode地址:端口号]:Supernode的地址,带上端口号
-p [外网暴露端口号]:其他Edge访问本机使用的端口号(所有的N2N流量都将流经此端口)

建议先在本地规划好网络信息后,再将命令贴到服务器上执行!

首选直接执行配置好的命令(至少在2台服务器上执行命令,方便测试):

比如我在Server A上使用IP:10.233.199.101,在Server B上使用IP:10.233.109.102;

先启动Supernode(如果已经启动完成了则跳过此步骤)

之后启动两个Edge节点,稍等数秒后,从Server A上Ping Server B的IP:

如果出现类似下面的结果:

root@edge-1:~# ping 10.233.109.102
PING 10.233.109.102(10.233.109.102) 56(84) bytes of data.
64 bytes from 10.233.109.102: icmp_seq=1 ttl=64 time=49.1 ms
64 bytes from 10.233.109.102: icmp_seq=2 ttl=64 time=49.9 ms
64 bytes from 10.233.109.102: icmp_seq=3 ttl=64 time=49.0 ms
64 bytes from 10.233.109.102: icmp_seq=4 ttl=64 time=49.2 ms

则说明两台服务器通过N2N组建P2P VPN网络成功。

2.5 常见故障排错

2.5.1 Destination Host Unreachable

如果出现了以下提示:

root@edge-1:~# ping 10.233.109.102
PING 10.233.109.102 (10.233.109.102) 56(84) bytes of data.
From 10.233.109.102 icmp_seq=1 Destination Host Unreachable
From 10.233.109.102 icmp_seq=2 Destination Host Unreachable
From 10.233.109.102 icmp_seq=3 Destination Host Unreachable
From 10.233.109.102 icmp_seq=4 Destination Host Unreachable

一般可能是以下原因:

  • 对端的N2N Edge没有正确启动、参数错误或者刚刚启动(从启动Edge到加入网络需要数秒的时间)
  • Supernode中心节点崩溃
  • 你Ping错IP了(新手最常出现的问题)

2.5.2 Ping不通(没有反应)

如果出现了以下提示:

root@edge-1:~# ping 10.233.109.102
PING 10.233.109.102 (10.233.109.102) 56(84) bytes of data.
[没有反应]

一般可能是以下原因:

  • 本机的N2N Edge没有正确启动、参数错误或者刚刚启动(从启动Edge到加入网络需要数秒的时间)
  • 当前N2N网络组中IP/MAC地址冲突

根据实际情况修改配置即可完成网络部署。

3. P2P VPN的用途

P2P VPN可以用来在服务器间通过内网的方式进行连接,或者某些不愿意在公网进行传输的文件,可以通过P2P VPN网络进行内网分发。

不适用于NAT打洞,因为所有流量的转发都要经过Supernode,对中心节点压力较大,同时也会导致P2P VPN网络的不稳定性。

(悄悄说一句,N2N的P2P VPN可以用来过Wall……具体用途自己研究……(逃))

4. 联系作者&吃土少年求打赏!

Telegram:@ilemonrain (https://t.me/ilemonrain)
Telegram个人频道:@ilemonrain_channel (https://t.me/ilemonrain_channel)
E-Mail:[email protected]
打赏方式:点击博客下方的红色的赞赏按钮,扫描二维码打赏(Telegram上请私信我获取打赏方式)

最后修改:2018 年 08 月 12 日
如果觉得我的文章对你有用,请随意赞赏