n2n(Pear-to-pear) 内网穿透

12 篇文章 0 订阅
9 篇文章 6 订阅

n2n简介

假如想实现远程访问家里的路由、电脑,等等没有外网IP的设备,最简单的方式就是采用端口映射(端口转发),但是很多情况下我们没有路由的权限,这样根本就没有办法访问私网,因为受网关的保护。

之前想过通过socket请求来发送的,但是必须是内网主动发起,不能外网主动发起,可以保持长连接来通信,但是实现起来有些难度,不好用。

n2n的出现使我眼前一亮,它是一款轻便开源的P2P虚拟网络软件,可轻松创建绕过中间防火墙的虚拟网络。其作者是著名的开源网管软件ntop的作者Luca Deri。基于P2P及点对点协议。也可以说是双层架构的,它让用户可以在网络层上开发P2P应用的典型功能,而不是在应用层上开发。

这意味着用户可以获取本地IP一样的可见度(比如说,同一个n2n网络内的两台PC机可以相互ping通),并且可以通过n2n虚拟网内的IP地址相互访问,而不必关心当前所属的物理网络地址。

对比来说,[OpenV.P.N.]是把SSL从应用层转移到网络层实现(比如说实现https协议),而n2n则是把P2P的实现从应用层转移到网络层。

组成

n2n分两个部分,一个是supernode,一个是edgesupernode即中心节点,edge 即边缘节点,supernode的作用就是对两个edge节点进行连接的作用,和p2p服务器作用一样,且n2n数据是不走supernode的,所以数据很安全。 n2n尽可能尝试在边缘节点之间建立直接的P2P连接。 如果不可能(通常是由于特殊的NAT设备),则超级节点也用于中继数据包。

Edge

用户PC 机上安装的用于建立n2n网络的软件。它们将成为虚拟网络一部分的节点,几乎每个edge节点都会建立一个tun/tap设备,作为接入n2n网络的入口。

Edge 节点间通过虚拟的tap网卡交互。每个tap网卡都是一个n2n edge节点。每台PC机可以有多个tap网卡,所以,在n2n网络中,同一台PC机可以属于多个网络。 在n2n中的多个边缘节点之间共享的虚拟网络称为社区。 单个超级节点可以中继多个社区,而单个PC可以同时成为多个社区的一部分。 边缘节点可以使用加密密钥对社区中的数据包进行加密。

Supernode

超级节点:它允许边缘节点宣布和发现其他节点。 它必须具有可在Internet上公开访问的端口。它在edge 节点间建立握手,或为位于防火墙之后的节点中转数据。它的基础作用是注册节点的网络路径,并为不能直通的节点做路由,能够直通的节点间通信,是P2P的。

之间的关系

supernode 提供场所,让两个位于NAT/防火墙之后的edge node进行会面,一旦双方完成首次握手,剩下的数据流就之发生在两个edge node之间,如果有一方的NAT属于对称型(symmetrical),super node则还需继续为双方提供数据包的转发;edge node负责数据流的加解密,原理很简单。

大部分虚拟专用网络,都是通过服务器中转,而n2n是通过udp协议,在两边edge的NAT情况比较好的情况下,会建立两个edge之间的直接连接,一个北京和一个重庆的两个edge服务器,如果直连成功,之间的下载速度可以达到 n MB/s;当网络条件比较恶劣的时候,数据会从supernode中转,速度就靠到supernode的速度决定;

如何使用

项目地址

下载地址:https://github.com/ntop/n2n

1、快速开始

一些Linux发行版已经提供了n2n作为软件包,因此简单的sudo apt install n2n就可以完成工作。 另外,大多数发行版的最新软件包都可以在ntop信息库中获得。

在host1上运行:

$ sudo edge -c mynetwork -k mysecretpass -a 192.168.100.1 -f -l supernode.ntop.org:7777

在host2上运行:

$ sudo edge -c mynetwork -k mysecretpass -a 192.168.100.2 -f -l supernode.ntop.org:7777

现在,两个主机可以相互ping通。

重要提示:强烈建议选择一个自定义社区名称(-c)和一个秘密加密密钥(-k),以防止其他用户连接到您的PC。 为了保护隐私并减少上述服务器负载,还建议按照以下说明设置自定义超级节点。

设置自定义超级节点

您可以通过在公共服务器(例如VPS)上设置超级节点supernode来创建自己的基础架构。 您只需要在防火墙(通常为iptables)上打开一个端口(以下示例中为1234)。

安装n2n软件包

编辑/etc/n2n/supernode.conf并添加以下内容:

-l = 1234

使用sudo systemctl start supernode启动超级节点服务

(可选)在引导时启用超级节点启动:sudo systemctl enable supernode

现在,超级节点服务应已启动并在端口1234上运行。在边缘节点上,您现在可以指定-l your_supernode_ip:1234来使用它。 所有边缘节点必须使用相同的超级节点。

手动编译

在linux上,直接从源代码进行编译:

./autogen.sh
./configure
make

# optionally install
make install
使dege作为服务运行

edge也可以代替cli作为服务运行:

使用自定义选项编辑/etc/n2n/edge.conf。 参见/etc/n2n/edge.conf.sample
启动服务:sudo systemctl start edge
(可选)在引导时启用边缘启动:sudo systemctl enable edge
您可以通过创建/etc/n2n/edge-instance1.conf并使用sudo systemctl start edge @ instance1启动它来运行多个边缘服务实例。

使用方法2

在supernode和edge 节点运行下面命令,这里尽量采用源码包编译安装。

$ svn co https://svn.ntop.org/svn/ntop/trunk/n2n
$ cd n2n/n2n_v1/
$ make && make install
$ cp supernode /usr/sbin/
$ cp edge /usr/sbin/

如果没有安装svn的话执行下面的命令

$ yum install subversion
启用中心节点(supernode)

加入我们在公网IP为1.2.3.4的服务器上启用了中心节点:

$ supernode -l 8080 -v
$ ps -ef | grep supernode

8080即开发给边缘节点的端口。

则我们就可以使用下面的指令将其他机器作为Edge节点。

例如:

$ edge_v2s --help
$ edge_v2s -d n2nedge_v2s -a 172.10.2.200 -c community -u 604 -g 604 -k passwod -l 222.222.222.222:10088 
-m 31:29:35:FB:C7:5B -r -L 192.168.1.100
$ ifconfig | grep 172.10.2.200

参数意义:

  • -d:虚拟网卡名称

  • -a:n2n网卡的ip地址,即是指指定一个IP给n2n中的边缘节点。

  • -c:n2n组,只有相同组的edge之间才能进行通讯

  • -u:如果不想用root来运行edge,则可指定本机账号的uid,windows下可忽略

  • -g:如果不想用root来运行edge,则可指定本机账号的groupid,windows下可忽略

  • -k:edge的加密密码

  • -l:supernode的ip和端口

  • -m:n2n虚拟网卡的MAC地址

  • -r:运行edge进行数据转发

  • -L:本机的内网地址,可以帮助同一个内网之间的通讯为直连,目前是v2s版本特有参数,官方版本暂无

  • -b:解析域名对应的ip,适用于supernode的ip使用域名来进行连接

在内网的另外一台机器上安装edge,启动的参数除了-a、-u、-g、-m、-L与另一个edge参数不同外,其他参数要一致,如

$ edge_v2s -d n2nedge_v2s -a 172.10.2.210 -c community -u 500 -g 500 -k passwod -l 222.222.222.222:10088 
-m 8B:2A:76:3F:C0:7B -r -L 192.168.1.110
启用边缘节点(edge)

在需要加入n2n的第一个节点机器上执行:

    edge -d n2n0 -c mynetwork -k encryptme -a 10.1.12.1 -l 1.2.3.4:8080

您还可以再次加入其他edge节点,这样节点与节点可以互相ping 通

再次在第2节点上运行如下命令

    edge -d n2n0 -c mynetwork -k encryptme -a 10.1.12.2 -l 1.2.3.4:8080

如果成功的话在第一个节点上面进行ping第二个节点是能互相通的。

放入后台执行:&
supernode -l 8080  >/dev/null &

edge -d n2n0 -c mynetwork -k encryptme -a 10.1.12.1 -l 1.2.3.4:8080 >/dev/null &

可以试一下用我的树莓派来做远程控制了,很期待。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Antrn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值