一.介绍
前面介绍的其实内网穿透方案更大意义上是端口转发或者反向代理,而这次要提的,则是P2P组网方案,要知道P2P在打洞穿透方面优势是挺大的,而且成功打洞之后不通过第三方服务器直接连接,能够不受第三方服务器的带宽限制,而如果没有成功打洞,则可以通过第三方服务器中转,进退皆有路,一定意义上来说是最好的解决方案。
在这一类P2P VPN中比较出名的几种有N2N、Tinc、PeerVPN以及ZeroTier,本次介绍的是N2N。
N2N是开源的,其作者是Ntop作者Luca Deri,也是个牛人,可惜的是他现在已经不再维护N2N,也不知道是啥原因,不过还好开源社区有其他人加入了维护,并且已经成熟了,Bug也没啥太严重的,所以没啥问题,还是挺好用的,N2N分为SuperNode和EdgeNode,前者被称为超级节点,能够在EdgeNode之间建立握手并为无法直连的EdgeNode中转数据,是网络的核心部分。当然由于SuperNode的重要性,N2N支持为EdgeNode指定多个SuperNode,以便组成更复杂的网络,并且防止单个SuperNode出问题导致的整个网络瘫痪。
二.安装配置
N2N的安装其实挺简单的,因为没太多依赖
1
2
3
4
5
6
7
8
|
yum groupinstall “Development tools” –y
git clone https://github.com/meyerd/n2n
cd n2n/n2n_v2
mkdir build
cd build
cmake ..
make
make install
|
然后就装好了,会生成supernode和edge两个可执行程序,看看名字就知道一个是SuperNode一个是EdgeNode
需要了解一点,EdgeNode和SuperNode是不冲突的,所以在SuperNode的机器上是可以同时运行EdgeNode的,所以这个网络可以搞得很复杂的说,就看你需求了。
对了,在相同平台下编译的supernode和edge文件直接拷贝过去就能跑,不用再次编译,所以……你懂的
服务端的运行很简单,最少情况下只需要指定一个参数就行
1
2
3
4
5
6
7
|
supernode –l UDP监听端口
#参数说明
–f 前台运行
–u 指定运行所用的UID
–g 指定运行所用的GID
–v 输出比较详细的log
|
那么接下来就是EdgeNode了,这个的参数就比较多了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
edge –d 虚拟网卡名 –a 10.0.0.1 –c testnet –k senrame –l 1.2.3.4:1234
#参数说明
–d 虚拟网卡名
–a [static:|dhcp:]虚拟网段(IP),static模式其实可以不用加那个static: 直接写IP就行
–c 用于区分节点的社区(组)名
–k 用于加密的字符串
–K 用于加密的Key文件,和–k不能共存
–s 子网掩码
–l supernode的IP:端口,可以指定多个supernode的
–i NAT打洞间隔
–b 当使用DHCP时定期刷新IP
–p 指定本地端口
–u 指定运行所用的UID
–g 指定运行所用的GID
–f 前台运行
–m 为虚拟网卡指定MAC地址
–r 启用包转发,当–a指定DHCP时需要启用
–E 接收组播MAC地址
–v 输出比较详细的log
–t 指定用于管理的UDP端口
|
如果创建虚拟网卡出问题了,可以尝试手动创建
1
2
|
yum install tunctl –y
tunctl –t 虚拟网卡名
|
然后使用-d指定虚拟网卡名,-m指定MAC来连接,至于uid和gid这个你不是root的情况下可以研究下
另外如果运行在后台的情况下要看问题,可以在/var/log/message文件中查看日志
正常情况下在配置完supernode和edge后就能正常连接了