N2N 新手向导及最新信息(2023-2-17 更新)

如果你是一名刚接触 N2N 的朋友,希望此教程能起到导航的作用,让你更快的学习了解到 N2N 的相关知识。建议你学习、实践的方法是:先易后难,循序渐进

N2N 是什么?
N2N 是指通过 UDP 方式,建立虚拟局域网的一种轻量级 VPN,是全端口开放的 VPN。所以,如果某个网络禁用了 UDP,那么该网络下的设备就不适合使用本软件来加入这个虚拟局域网(用"blue's port scanner",选择UDP来扫描,扫出来的就是未被封的,正常情况下应该超级多)

N2N 的工作原理是什么?特点是什么?
打个比喻:需要买、卖牛的 A、B 互不认识,他们还可能不在一起。他们虽然都有了这个想法,但是对方并不知道,那该怎么办?此时他们都找到了百事通能人 S,在他的帮助下,A、B 就联系上了。如果他们之间语言相通,那么他们就可以撇开 S 直接交流实现买、卖牛的过程,如果不通,那么他们就只好请 S 帮忙翻译了。这次生意结束后,他们就要分手了,可是他们可能连名字、住址都没有,分了手就又成了路人不再相识,下次他们有想法还得找 S。S 是一个大好人,免费帮忙,毫无索取。

这个思想就是 N2N 的工作原理:可能没有外网IP,处于大内网的 A、B,通过中心节点 S 的帮助,建立起“虚拟局域网”,实现了通讯,如果他们之间的网络结构比较好,那么他们之间就建立起直连关系,速度、保密性大大的,如果不好,就只好通过 S 转发了。并且中心节点 S 可以服务许多相互隔离的虚拟局域网,他们互不干扰,独立运行,中心节点也不会知道组内的人在干什么,所以中心节点可以共享给别人使用。N2N 软件免费、开源,布置简单(一行代码即可),缺点就是所有的终端必须运行客户端软件 edge。

N2N 适合什么人玩?
适合有点折腾精神的屌丝玩。如果你想简简单单就达到比较完美的体验,那是不可能的。N2N 需要折腾,需要有一定的 DOS、linux 类知识,特别是防火墙规则方面的网络知识,有了这些,你会爱死它的。如果你不属于这类人,那么早日转向玩其他的吧,zerotier 是一个不错的选择,相对来说,zerotier 高度自动化、傻瓜化,并且也比较成熟,所以早日转向是一个脱离苦海的好办法。而屌丝们可以配合官方的不断更新,不断折腾,不断反馈,不断完善,寻找到折腾的乐趣,追求至善至美。

怎样得到帮助?
直接主程序后加上 -h 运行即可,例如: edge -h,supernode -h,或者 edge --help,supernode --help

N2N 目前有几个版本?
目前有4个版本,他们互不相容,必须分开独立使用。每一个版本都有两个主程序,一个是 edge (客户端),一个是 supernode(服务器端)。edge 和 supernode 必须成对使用,不能用 v1 的 edge 连接 v2 的 supernode。推荐你使用官方新版 V2(2019-6-10 以后的):速度最快、直连率高,最重要的是,官方正在更新,你也可以参与进来,帮助完善。
V1 : https://github.com/meyerd/n2n/tree/master/n2n_v1 (版本号是 v.1.x.x)(使用 edge -h 可见,下同)
V2 : https://github.com/ntop/n2n/tree/2.8-stable ----------(版本号是 v.2.x.x 都算,但除了 v2.9.x)
V2s: https://github.com/meyerd/n2n/tree/master/n2n_v2 (版本号是 v.2.1.0;V2s 是我们为便于区分,给它取的别名,它其实是一个德国网友写的 n2n v2 分支,非官方版本。曾经在三个版本中,它的直连率和稳定性是最高的)
V3 : https://github.com/ntop/n2n ---------------------------------(正在更新中)

建立 N2N 网络的前提条件?
需要在所有的设备上运行一个 n2n 的客户端 edge(点对网、网对网的除外),并需要一个服务端 supernode(即中心节点)的帮助。这个服务端 supernode 既可以是公用的(一个 supernode 可以同时支持很多 edge,同时支持多个虚拟局域网),也可以是自建的,但它必须要有一个外网 IP 以及对外开放的固定端口(别人通过这个 IP 和端口可以访问到它提供的服务)。而且所在的网络环境没有封 UDP 通讯(这个基本都没有封)。

我应该怎么样尽快体验一下 N2N 网络?
建立 N2N 虚拟局域网的第一步不是自己编译 edge 和 supernode,再自己建立中心节点 supernode,而是利用现成的客户端软件,再借用别人的中心节点。合适的客户端可以到这里去下载: github.com/lucktu/n2n,可用的中心节点可以去这里寻找:supernode.ml(或者:http://www.lucktu.com/archives/749.html 不过比较旧)假设你的系统自带虚拟网卡,就可以使用下面的命令运行起来了(最精简方式),(edge、supernode 都可以改名运行,v2 及 v2s 可以不带 -k 参数运行)

edge -a 10.0.0.100 -c n2n -k test -l n2n.lucktu.com:10086

根据运行 edge 时的输出信息,查看这篇文章:http://www.lucktu.com/archives/776.html 里的一些解释,我们就能知道 N2N 网络的运行状态,判断是否工作正常(你也可以采用 supernode.ml 里提供的测试连接,与之组网测试本地的 edge 是否运行正常)。如法炮制,你可以运行第二个、第三个客户端 edge(保证 -a 参数后的IP地址最后一位不相同),...,组建一个临时的虚拟局域网。从一端 ping 另外一端,也许就能 ping 通了。对于 windows 系统,需要在被 ping 端关闭防火墙,否则,是 ping 不通的。如果是在 padavan 上运行的 edge,那么你只要在 padavan 设置界面里设置允许 ping 即可。

虚拟网卡驱动应该怎么装?
1、在 windows 下:从上面提供的链接里(windows/other/),随便下载一个第三方的客户端,里面就有,安装即可。可以安装多个这样的虚拟网卡,每一个虚拟网卡对应可运行一个 edge 客户端(linux 下不需要,直接加 -d 参数区分,即可运行多个)
2、在 linux下:有些系统默认就有虚拟网卡,不需安装。我的系统是 ubuntu 16.04x64,在后台直接打开“TUN/TAP”开关即可。如果没有(运行 modifo tun 来查看),就需要自己去研究和安装,虚拟网卡的支持是必须的,安装详情

N2N 的速度咋样?
为了排除带宽、以及 ISP 的 Qos 的影响,我们以局域网内的测试来说明。新版 n2n_v2 用上 A 参数,群友(by 黑夜)在 CPU100% 的时候,达到了 23.9MB/s。本站也有几篇文章测速,稍微翻一翻就能看到。

下面说说我的测试,也是在局域网内、受限于 CPU 的性能(群晖的 CPU 都是 100%)测得的(上:下):

0.71:1.41 MB/s --- n2n_v2,默认加密(无 A 参数);测试图
3.36:6.06 MB/s --- n2n_v2,增加 A 参数;测试图
3.62:6.52 MB/s --- n2n_v2,不用 k 参数(无加密);测试图
0.71:1.39 MB/s --- n2n_v2s,与默认加密方式的 n2n_v2 速度差不多;测试图
3.12:2.40 MB/s --- Tinc,特别之处:tinc一端在群晖,一端在7621路由器(受影响的数值:2.40MB/s);测试图
0.92:2.38 MB/s --- zerotier,从群晖拷贝波动很大0.5~1.3,反向拷贝时群晖的 zerotier 居然重启了;测试图

设备情况:群晖 DS-213J(armada370 + dsm6.1.7,感觉此 CPU 稍弱于 intel N270)<---> 笔记本 HP tpn-q171(i5 + windows10x64位),路由器是 mtk7621 cpu 的padavan。我只是简单的局域网内拷贝文件(smb),上传端 CPU 的压力大。测试时间:2019-12-3 ~ 2019-12-4。

N2N 怎么才能直连?
直接去这篇文章看吧,里面专门说了: 搜集整理N2N使用中的一些经验

怎么样设置自己的中心节点?

建立自己的中心节点,不是必须的。但建立的方法其实也非常简单,首先你要有一个有外网 IP(IPv4) 的网络环境,然后你需具有端口开放的权限就可以了(外网可以访问某个未被占用的端口)。以 v2 为例,如下所示,你只要保持它在线,然后再打开 10086 端口的 UDP 被访问权限即可(v1 建议再开放 tcp 权限;supernode 可以不要虚拟网卡的支持即可运行)

supernode -l 10086

然后别人使用你的 IP 加端口就可以与之连接了。如果你的 IP 不是固定的,你就必须使用域名来代替 IP,此时你的客户端(edge)命令行里需要带上 -b 参数。这样你的 IP 发生改变,客户端也能及时更新,所以 edge 使用动态域名型 supernode 时,这个 -b 一定要加(2019-8-19 以后的官方 v2,已经自动识别了,并取消了-b 这个参数)。

怎么样编译自己的 n2n 主程序?
由于这个编译有较大难度,而且官方还在经常变化,我也只能编译一些简单的,还是借助大师们的工具,所以这里我就不介绍了,有能力你就上(编译方法,官方说明文件里有),做不了你就用别人编译好的吧,一样的。

更多帮助信息
N2N 官网: https://github.com/ntop/n2n (目前在更新的是 V2 的 dev 版)
N2N 文章:本站。我收集、整理了很多这方面的文章,如果你想更进一步,那么就认真阅读吧。
N2N 交流:QQ群 5804301。我觉得本站提供的都有了,不必进群。如果你钱太多,或者你需要长期关注,那就请进吧!


94.74%(36)

5.26%(2)
发表评论?

13 条评论。

  1. 179 ./run_n2n.sh [INFO] 启动程序执行完毕,守护程序启动。
    22/Mar/2023 09:17:49 [edge_utils.c:2515] [OK] edge <<>> supernode
    22/Mar/2023 09:17:52 [n2n_port_mapping.c:373] WARNING: NAT-PMP invalid response type 0
    22/Mar/2023 09:17:52 [n2n_port_mapping.c:404] WARNING: NAT-PMP local TCP port 60895 mapping failed
    22/Mar/2023 09:17:53 [n2n_port_mapping.c:373] WARNING: NAT-PMP invalid response type 0
    22/Mar/2023 09:17:53 [n2n_port_mapping.c:412] WARNING: NAT-PMP local UDP port 60895 mapping failed
    22/Mar/2023 09:17:55 [n2n_port_mapping.c:212] UPnP added TCP port mapping: 192.168.3.33:60895 -> 192.168.3.3:60895
    22/Mar/2023 09:17:55 [n2n_port_mapping.c:222] UPnP added UDP port mapping: 192.168.3.33:60895 -> 192.168.3.3:60895
    198 ./run_n2n.sh [ERROR] 守护程序检测到掉线,请检查:
    4a:f3:50:3a:ee:de
    PING 192.168.33.1 (192.168.33.1): 56 data bytes
    — 192.168.33.1 ping statistics —
    5 packets transmitted, 0 packets received, 100% packet loss
    169 ./run_n2n.sh dhclient -x
    22/Mar/2023 09:18:32 [edge.c:986] shutting down…
    Dcker 安装,连接大约5-10秒钟后,自己断掉,连通时可以使用,请帮忙看看,问题出在什么地方。img版本v3_3.1.1-16_r1200

    • 抱歉才看到,。。。
      docker方面我也不熟悉啊,是不是也要使用screen来运行edge?
      我用docker版openwrt,怎么也不会出问题了。

  2. 楼主你好,我想请教一下,我在一台香港的服务器上部署了一个supernode,现在是联通和移动的网络都能连接,偏偏电信的网络显示节点没有响应,但是电信网络又能ping的通服务器ip,也能ssh连接,楼主知道怎么解决这个问题么?

    • 有可能你使用了别人编译的n2n,他用的库与你的系统不兼容,造成域名解析出错而连不上:试试sn直接用IP,或自己在本机上编译的n2n程序。

  3. 大佬好,请问家里的宽带和4G移动网络间如何直连。我试了n2n,基本都是需要服务器的转发,或者有什么其他更好的工具吗?

  4. lucktu,您好!
    我们正在开发一个安卓和IOS的手机联机游戏平台,目前遇到一起瓶颈,想找您咨询一下。
    方便加个微信吗?69992100
    谢谢!

  5. If yu have more supernodes, learn about federation. https://github.com/ntop/n2n/blob/dev/doc/Federation.md

  6. 站长你好,我有两台有公网IP的虚机,想用他们搭建成两个互联的supernode,让其他无公网IP的edge连接
    我应该如何做到让supernode之间互联?直接以edge连接的话会不会变成不对等?怎样才能对等连接?

  7. 感谢您的博文,对我了解n2n有很大的帮助

发表评论

*