n2n内网穿透
n2n 是一款开源的内网穿透工具,基本原理是,两个客户端(如目标机器和当前机器)同时运行n2n客户端工具,各自分配一个同网段的IP地址后,向服务端(要求能够公网方位)节点发起连接,服务端会建立两个客户端节点间的直连连接,达到穿透内网、直接通信的目的。
要求两个客户端:
- 运行相同版本的客户端工具
- 参数community 和 key 必须相同
- 分配的IP地址在同一网段
Server端
server端连接地址:
- v1: xx.xx.xx.xx:xxxx
- v2: xx.xx.xx.xx:xxxx
Client端安装
Ubuntu 配置
apt install n2n vim /etc/default/n2n 修改 N2N_COMMUNITY,N2N_KEY,N2N_SUPERNODE,N2N_SUPERNODE_PORT,N2N_IP,N2N_EDGE_CONFIG_DONE service n2n restart
sudo edge -d edge0 -a 172.10.16.56 -c networkName -M 1200 -k 123456 -l xx.xx.xx.xx:xxxx >/dev/null & // 后台运行:>/dev/null &
-d 表示device,即虚拟网卡设备名(此命令将会创建虚拟网卡,命令执行完毕后,ifconfig可看到你创建的网卡信息),可随意。
-c 表示网络名,可随意。
-k 表示密码
-a 表示虚拟设备的ip地址。可随意。
-l 你要连接到哪台supernode?因为要连接到此台机器的supernode进程,故而需要指定端口。
-m ssh登录的时候,网络传输的数据大小限制,最好要比1400小,如果不设置这个参数,ssh经常卡死(亲身经历)
查看:
ps -ef | grep edge
杀死进程:
killall -9 edge killall -9 supernode
Centos配置
yum install subversion gcc-c++ openssl-devel
cd /opt
svn co https://svn.ntop.org/svn/ntop/trunk/n2n
cd /n2n/n2n_v1
make && make install # cp supernode /usr/sbin/supernode # 超级节点使用它 cp edge /usr/sbin/edge # 边缘节点使用它
cd /lib/systemd/system vim n2n.service 添加如下配置,参数根据实际情况修改 # """Start 不包括此行 """ [Unit] Description=n2n service After=syslog.target network.target [Install] WantedBy=multi-user.target [Service] Type=simple ExecStart=/usr/sbin/edge -d `edge0` -a `172.10.10.100` -M 1200 -c `guineng` -k `guineng` -l `xx.xx.xx.xx:xxxx` User=root Group=root Restart=always # """End 不包括此行 """ systemctl daemon-reload systemctl enable n2n.service service n2n restart
MacOS配置
sudo cp edge /usr/local/bin sudo vim /Library/LaunchDaemons/homebrew.mxcl.edge.plist 添加如下配置,参数根据实际情况修改 # """Start 不包括此行 """ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>homebrew.mxcl.edge5</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/edge</string> <string>-a</string> <string>`172.10.10.101`</string> <string>-c</string> <string>`guineng`</string> <string>-k</string> <string>`guineng`</string> <string>-l</string> <string>`xx.xx.xx.xx:xxxx`</string> </array> <key>WorkingDirectory</key> <string>/usr/local</string> <key>StandardOutPath</key> <string>/var/log/edge.log</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> </dict> </plist> # """End 不包括此行 """ sudo launchctl load homebrew.mxcl.edge.plist
windows:
http://www.vpnhosting.cz/n2nguien.exe
===================================
参考另外一个博客:https://blog.csdn.net/likai503819723/article/details/37764807
最近公司项目要研究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。这里最好别乱选,如下图,因为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上执行:supernode -l <listening port> 就这么简单。
$sudo supernode -f -v -l 8899
此处-f表明前台执行方便看输出log,-v表示详细log输出,-l表示指定supernode端口。注意若当前不是root用户,要加sudo。
在PC1上:
$sudo edge -d n2n0 -c myn2n -k 123456789 -M 1200 -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 -M 1200 -a 1.2.3.5 -l 192.168.1.174:8899
注意:-c的网络名,要和上面PC1的相同。-k的密码也要相同。-a的IP地址一定不能相同。
完成后。PC1和PC3相互ping一下:
XXX@PC1$ ping 1.2.3.5 //通。 XXX@PC3$ ping 1.2.3.4 //通。
说明就完成了!
最后,PC2有另一个网段:172.16.2.14.所以,此网段的机器,如果像PC1/3一样配置,也能通过PC2和PC1/3进行安全通信。操作方法大同小异。
=========