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进行安全通信。操作方法大同小异。

=========

另外一篇博客:http://blog.51cto.com/11883699/2162071

https://blog.csdn.net/hanyingzhong/article/details/17413705

posted @ 2019-01-10 15:48  静静别跑  阅读(2563)  评论(0编辑  收藏  举报