搜集整理N2N使用中的一些经验

很少有人来个经验总结,现在我来一个吧,说的不对不好不全,我改!反正不是我一个人的经验。(2019-10-14 全修正)

1、与 N2N 相关的一些主程序文件请去这里下载

链接: https://github.com/lucktu/n2n (这是我收集整理的,根据源码编译出来的主程序。如果里面没有,或者不好用,或者你善于编译,请根据源码自己编译吧)

2、N2N 的 V1、V2、V2s 有什么区别?
v1、v2 都是官方开发的,v2s 是一个德国网友根据官方旧版 v2 修改的。综合来看,推荐你使用 v2,除了局域网内不易建立直连以外,其他方面都是最强的。并且,v2 官方继续在维护中。其次推荐使用 v2s。
V1   https://github.com/meyerd/n2n/tree/master/n2n_v1 (这个德国网友根据官方原版 v1 小改过的)
V2   https://github.com/ntop/n2n (发布过 v2.0、v2.1、V2.3、v2.4、v2.5 等版本,代表不同阶段,都是 v2)
V2s  https://github.com/meyerd/n2n/tree/master/n2n_v2 (版本号是 v2.1,为了与官方的 v2.1 及 v2 相区别,我们给它取的别名是 v2s)

3、windows 下我能 ping 通别人,别人却 ping 不通我?
能 ping 通别人,说明你 windows 下的 n2n 工作正常并成功加入了网络,只是因为 windows 拒绝了来自别人的 ping 请求而已,试试关闭防火墙吧。

4、有人说N2N容易断。
我觉得不是这样,这是在休眠。当你一段时间没有通讯时,ping不通了。但是你接着ping,一会儿它是会自动通的。多久?我也没有测试过,我肯定2分钟以内吧。如果你非要随时通,可以试试加一个 ping 对方的任务驻留内存,让它一直进行下去,就不会休眠了。注意新版v2s没有这个问题:我做过一个实验,用4天时间,相隔至少半个小时以上,看能否ping通(中心节点是国外的一个很差的vps,edge一端是群晖,一端是padavan路由器),结果4天中的36次,v2s的ping通率是100%,旧版v1是92~94%,旧版v2是78%。ping的方法就是在windows下直接 ping X.X.X.X,这个ping会有4次反馈,4次都没有反馈算断开,即使有一次被ping通也算是通的。所以稳定性上,新版 V2s > V1 > V2。测试详情

5、网上共享的中心节点不稳定怎么办?
是啊,这也是免费的东西的通病,别人没有义务保持他的 N2N 服务器 99.9% 的在线率,所以偶尔中断服务也是可能的。严重者可能断开服务一段时间,甚至是永远断开都有可能。

那么怎么防止这种情况呢?

我的方法是使用域名代替中心节点的 IP 地址,只要提供的端口号一样,那么当某个中心节点断了以后,我们修改域名指向,指向另外一个有效的中心节点,再等一会,我们的n2n通讯就恢复了。注意此时需要加上 -b 参数,这是专门针对域名类型的超级节点的。

另外,我同时运行多个edge客户端,这些客户端可以取名 edge0、edge1、edge2,... ...,甚至于是XYZ,都可以,然后用上 -d 参数,赋予他们不同的网卡名即可。

edge2s -d n2n2s -a 10.10.10.10 -c n2n -k n2n -f -L 192.168.123.1 -l n2n.lucktu.com:10088 -r -b &

6、怎么样判断是否是直连?

我认为N2N的边缘节点之间的通讯方式有3种:一是中转,就是边缘节点(edge)上所有的流量都要通过中心节点,速度最慢;二是借道,就是边缘节点之间的通讯借用其他的通道来完成。例如当你在两个边缘节点之间运行了多个edge,那么新版的v2.1会借用速度较快的其他edge通道;三是直连,就是边缘节点之间直接连接通讯,不借助第三方。

那么怎么判断是不是直连?我有一个三角形理论:就是在一个三角形上,任意两边长度之和大于第三边的长度,我们把通讯的两个设备与中心节点看成处于一个三角形的顶点之上,把他们之间的 ping 值看成是三角形的边长。当通讯的两个设备之间的 ping 值,小于他们 ping 中心节点的值之和时,肯定不是不是中转。此时保持连续通讯(例如不停的 ping ),关闭其他的通道,同时也关闭中心节点,如果通讯不受影响,那么就可以判定是直连。如果断了,就是借道。如果两个设备之间的 ping 值大概等于他们 ping 中心节点的值之和,那么可以认为是中转。

当然,在通讯过程中,由于通讯的两端有一个加密、解密的过程,这个过程受两端CPU的性能影响,可以考虑会增加几 ms 的用时(0~5ms)。例如中转时,通讯设备之间的 ping 值,会大于等于彼此 ping 中心节点的值之和 + 3ms 。

这个三角形理论判断直连的方法,可以参考本站 这篇文章 里面的数据。

另外,如果有控制中心节点的权利,可以在建立连接以后,保持通讯的情况下,断开中心节点,如果通讯不断,就是直连,否则就是转发,这是最准确的方法。

对于官方最新版本 v2,如果保持运行输出界面,我们还可以直接看到,如果是直连,会显示 p2p 字样。

7、怎么增加直连的成功率?

(A)建立的 n2n 网络要比较流畅,不能是断断续续的,很差的 n2n 虚拟局域网;
(B)如果你对网络有很高的控制权,那么在运行 edge 时,加 -p XXX 指定一个固定的通讯端口,然后在路由器上(如果有多级路由,需要逐级)设置 XXX 的端口转发(UDP)到本机;
(C)针对windows,修改本地网络为“专用”而不是“公用”网络(在“网络配置文件”下面;特别是 windows10,更需要如此设置)。
(D)edge 和 supernode 都要用 官方 2019 年 6 月 10 号以后的源码编译,好像其中一个 edge 是旧版(网络环境差的那边),也是可以的;

做完以上设置,那么在理论上,只要通讯的两端不都是 NAT4 网络,就可以创建直连。此方法主要针对 n2n_v2

如果你不能做上面的端口转发(这个最有效),那么只能尽力改善通讯的两端的网络结构,提高直连的几率,见这篇文章: NAT类型科普及一些简单提升NAT类型的方法

8、padavan上面运行 edge 后不能访问对方

请参考这篇文章:与大家分享自己使用n2n的一些体会 主要加入这样的两句到防火墙里面去。其中XXX是在edge后面带 -d 参数设置的网卡名。

iptables -t nat -A POSTROUTING -j MASQUERADE &
iptables -I INPUT -i XXX -j ACCEPT

9、有关NAT类型方面的一些资料
(1)NAT类型科普及一些简单提升NAT类型的方法
(2)NAT的四种类型及检测
(3)NAT类型测试软件:NatTypeTester

一般经验:如果双方都是对称型 NAT(Symmetric);或者虽然只有一方为对称型NAT,但是其端口变动太大或 IP 地址都在变,那么就只能是中转。除此以外的其他情况,就具备建立直连的条件。

上面的软件测试不大准确,仅做参考。


70.83%(17)

29.17%(7)
1 2下一页

发表评论

*