之前我在一些服务器的配置环境中,经常遇到一个问题:
- 我想要在服务器之间组建一个局域网,但却用不起专线;
- 使用传统的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系统。
一般KVM都支持,OpenVZ虚拟化请工单咨询你的VPS服务商!
2.1 安装环境
执行命令:
apt install subversion build-essential libssl-dev net-tools
之后开始使用svn下载源码:
svn co https://svn.ntop.org/svn/ntop/trunk/n2n
下载源码的速度视所在网络的环境,国内的速度会相对较为缓慢,国外的服务器数十秒即可完成下载。
之后,进入N2N v2的源码目录:
cd n2n/n2n_v2
开始编译并安装:
make && make install
在所有需要加入内网的服务器上,执行以上步骤,完成环境的安装。
2.2 了解网络架构
安装完成后,我们会得到两个可执行文件:supernode
和edge
。
supernode 是我们的中心信息节点程序,它起到了类似BT/PT中Tracker服务器的作用,完成对边缘节点信息的交换,并为无法暴露端口在公网的服务器提供流量转发能力。
edge 是我们的边缘节点程序。它相当于网络中的客户端,加入到网络后,即可在中心信息节点的指引下进行信息交换。
在一个P2P VPN的网络中,我们只需要少数几个(1~2个)Supernode即可。Edge可以无限添加。
2.3 部署Supernode (中心节点)
部署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启动成功。
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上请私信我获取打赏方式)