使用N2N,实现异地服务器快速组建内网

方缘之道 / 2019-07-09 18:11

在没有P2P VPN的时候,机器比较分散,不好组件局域网,用不起专线,维护VPN需要大量成本投入,在加上墙的存在,就更不方便了。

概念

所谓P2P VPN,就是在整个VPN网络中,所有的服务器之间的流量转发,不再需要经过中心服务器,而是直接实现点到点连接。只需在连接中心节点一次后,剩下的流量交换都在节点服务器中完成。 在传统的VPN中,有且只能有一台VPN服务器,所有的客户端都会连接到单点服务器上,并且所有的流量都必须通过单点服务器进行转发;负担过重不说,往往因为中心节点的崩溃导致局域网的分崩离析。而在P2P VPN中,网络采用和BitTorrent网络(BT下载网络)类似的架构:部署几台信息服务器(Tracker服务器),剩下的客户端作为边缘节点加入网络中即可。只需要通过信息服务器获取各台服务器的信息,即可直接转发数据包到达目标服务器。流量交换的工作将不由中心服务器完成,而是各个边缘节点之间完成。

部署N2N

服务器需支持TAP/TUN, KVM默认支持。

编译安装

## Debian 9  apt install -y subversion git build-essential libssl-dev net-tools make gcc  ## Centos  yum install -y svn net-tools openssl-devel  ## 下载源码通过 svn  svn co https://svn.ntop.org/svn/ntop/trunk/n2n  ## 下载源码通过 git  git clone https://github.com/ntop/n2n.git    ## 编译 & 安装  cd n2n/n2n_v2  make && make install  

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

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

一键部署

curl -sSL https://repo.spanda.io/kun/kunsh/raw/branch/master/n2n/install.sh | bash -s n2n  

部署中心节点服务

中心节点需要是运行在公网环境中。

supernode -l 7443  

端口可以自行指定,这里使用7443

部署边缘节点

edge -a 10.20.20.1 -c GoogleNetwork -k za8eebais8Chai5iet1veip4Xeetai7t -l 38.143.1.86:7443 -p 3447  edge -a 10.20.20.2 -c GoogleNetwork -k za8eebais8Chai5iet1veip4Xeetai7t -l 38.143.1.86:7443 -p 3447  

参数说明:

-a N2N网络的当前机器ip  -c N2N网络组,一个边缘节点可以有多个组  -k N2N网络组密钥  -l 中心节点地址  -p 边缘节点暴露端口  

测试

 master01 ➜  ~ ip r  default via 192.168.199.1 dev enp0s3 proto dhcp src 192.168.199.30 metric 100  10.20.20.0/24 dev edge0 proto kernel scope link src 10.20.20.7  172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown  192.168.57.0/24 dev enp0s8 proto kernel scope link src 192.168.57.4  192.168.199.0/24 dev enp0s3 proto kernel scope link src 192.168.199.30  192.168.199.1 dev enp0s3 proto dhcp scope link src 192.168.199.30 metric 100     master01 ➜  ~ ping -c 1 10.20.20.1  PING 10.20.20.1 (10.20.20.1) 56(84) bytes of data.  64 bytes from 10.20.20.1: icmp_seq=1 ttl=64 time=42.5 ms    --- 10.20.20.1 ping statistics ---  1 packets transmitted, 1 received, 0% packet loss, time 0ms  rtt min/avg/max/mdev = 42.483/42.483/42.483/0.000 ms   master01 ➜  ~ ping -c 1 10.20.20.6  PING 10.20.20.6 (10.20.20.6) 56(84) bytes of data.  64 bytes from 10.20.20.6: icmp_seq=1 ttl=64 time=600 ms    --- 10.20.20.6 ping statistics ---  1 packets transmitted, 1 received, 0% packet loss, time 0ms  rtt min/avg/max/mdev = 599.537/599.537/599.537/0.000 ms  

如果有docker可以试试这个

curl -L https://repo.spanda.io/cloud/dl/raw/branch/master/scope -o /usr/local/bin/scope  chmod a+x /usr/local/bin/scope  scope launch 10.20.20.1 10.20.20.2 10.20.20.3 10.20.20.4 10.20.20.5 10.20.20.6 10.20.20.7  

效果如下:

参考

ntop/n2n
异地也要玩局域网——使用N2N,实现异地服务器快速组建内网

Shared via Inoreader