最近公司项目要研究p2p网络安全通信。其中用到了N2N开源框架。我们知道它使用的是twofish加密算法,强度不够,我的任务就是使用SM4替换掉twofish.
二话不说,先搭建环境。此处我使用的是桥接三台ubuntu虚拟机。
重要前提依赖:Openssl库已经安装,.h文件盒.a静态库也放入系统相应的默认的位置。不然编译会出错。
当然gcc、make等这一套工具,不用多说,必须已经安装。
下面开始:
首先svn下载源代码:
https://svn.ntop.org/svn/ntop/trunk/n2n/n2n_v2
此处选择v2版本.
下载完成后,将源代码分发到p2p网络中每台机器上,编译步骤安装:
$sudo make
$sudo make install
以上过程中没有错误输出。
然后就可以使用supernode 和edge命令了。
也可以ls看看是否有如下两个可执行文件:
$ls /usr/sbin/supernode
$ls /usr/sbin/edge
这里最好别乱选,如下图,因为supernode像桥梁一样,包含中转发送包作用。
所以,如果你的p2p中,某台PC能同时连接多个Ethernet,那么无疑它就要做supernode了。
此处我简化一下,假设所有PC都在同一局域网中。此时supernode就可以随便选了,只要能ping通其他机器就行。
以PC2作为supernode,PC1和PC3作为edge。
假设:
PC1的IP:192.168.1.173
PC3的IP:192.168.1.174
PC2两块网卡,eth0: 192.168.1.156 , eth1:172.16.2.11
首先在PC2上执行:
$sudo supernode -f -v -l 8899
此处-f表明前台执行方便看输出log,-v表示详细log输出,-l表示指定supernode端口。注意若当前不是root用户,要加sudo。
在PC1上:
$sudo edge -d n2n0 -c myn2n -k 123456789 -a 1.2.3.4 -l 192.168.1.174:8899
-d表示device,即虚拟网卡设备名(此命令将会创建虚拟网卡,命令执行完毕后,ifconfig可看到你创建的网卡信息),可随意。
-c表示网络名,可随意。
-k 表示密码,你可以想象成等下和PC3连接时,需要的暗号。
-a 表示虚拟设备的ip地址。可随意。
-l 你要连接到哪台supernode?因为要连接到此台机器的supernode进程,故而需要指定端口。
完成后,ifconfig,可以看到多了一块叫做n2n0的网卡(当然,名字是你自己指定的)。
此时查看supernode的输出信息,也能捕捉到PC1的注册请求。
同理,在PC3上做同PC1的操作,只是IP改变一下:
$sudo edge -d n2n0 -c myn2n -k 123456789 -a 1.2.3.5 -l 192.168.1.174:8899
注意:-c的网络名,要和上面PC1的相同。-k的密码也要相同。-a的IP地址一定
不能相同。
XXX@PC1$ ping 1.2.3.5 //通。
XXX@PC3$ ping 1.2.3.4 //通。
最后,PC2有另一个网段:172.16.2.14.所以,此网段的机器,如果像PC1/3一样配置,也能通过PC2和PC1/3进行安全通信。
操作方法大同小异。大家自己研究吧。