你的位置:首页 > 互联网IT
搜集整理N2N局域网使用中的一些经验
很少有人来个经验总结,现在我来一个吧,说的不对不好不全,我改!反正不是我一个人的经验。
1、与 N2N 相关的一些程序文件请去这里下载(真不知能管多久,我希望是永远^_^)
2、windows 下我能 ping 通别人,别人却 ping 不通我?
能 ping 通别人,说明你 windows 下的 n2n 工作正常并成功加入了网络,只是因为 windows 拒绝了来自别人的 ping 请求而已,试试关闭防火墙吧。
3、新版的 N2N v2s 确实不错,强烈推荐。
我认为主要的一点,有人正在更新,你也可以去反馈让他更完善。第二点才是这个版本相对于以前的很容易直连(此时关闭中心节点也不会断开正在进行的通讯),而不是中转。我曾经的实验是,6次同样的方法,原来的v1/2,一次也没有直连,新版v2s是4次成功直连,远距离的电信对电信二级路由器,没有一级的管理权限。第三点就是更稳定。
源码位置:https://github.com/meyerd/n2n (里面的 v2 就是我们说的 v2s)
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 &
最新发现(2018-2-28),针对新版v2s,可以在一次ping之后,间隔3分钟再ping,就变直连了。也可以理解成,中断3分钟的通讯以后,就变直连了。
6、怎么样判断是否是直连?
我认为N2N的边缘节点之间的通讯方式有3种:一是中转,就是边缘节点(edge)上所有的流量都要通过中心节点,速度最慢;二是借道,就是边缘节点之间的通讯借用其他的通道来完成。例如当你在两个边缘节点之间运行了多个edge,那么新版的v2.1会借用速度较快的其他edge通道;三是直连,就是边缘节点之间直接连接通讯,不借助第三方。
那么怎么判断是不是直连?我有一个三角形理论:就是在一个三角形上,任意两边长度之和大于第三边的长度,我们把通讯的两个设备与中心节点看成处于一个三角形的顶点之上,把他们之间的 ping 值看成是三角形的边长。当通讯的两个设备之间的 ping 值,小于他们 ping 中心节点的值之和时,肯定不是不是中转。此时保持连续通讯(例如不停的 ping ),关闭其他的通道,同时也关闭中心节点,如果通讯不受影响,那么就可以判定是直连。如果断了,就是借道。如果两个设备之间的 ping 值大概等于他们 ping 中心节点的值之和,那么可以认为是中转。(2019-4-6:发现三角形理论对于 N2N_V2 当前版本无效,即 ping 始终大概等于两个 edge ping 中心节点之和,即使强制把中心节点断网,ping 和数据传输也不受任何影响!)。
当然,在通讯过程中,由于通讯的两端有一个加密、解密的过程,这个过程受两端CPU的性能影响,可以考虑会增加几 ms 的用时(0~5ms)。例如中转时,通讯设备之间的 ping 值,会大于等于彼此 ping 中心节点的值之和 + 3ms 。
这个三角形理论判断直连的方法,可以参考本站 这篇文章 里面的数据。
7、怎么增加直连的成功率?
改善通讯的两端的网络结构,见这篇文章: NAT类型科普及一些简单提升NAT类型的方法 。简单的一些方法就是,(如果可能)windows上关闭防火墙,路由器上设置DMZ到某台机器,padavan路由器设置NAT类型为 Full Cone NAT,等等。要用新版的v2s,直连成功率上升很多。
在padavan上,我发现一直不停的ping对方,反而不易直连(貌似为了保持网络的稳定性,它不易调整自己去创造直连),如果ping5次,停30秒,再ping次,再停30秒,再ping5次,再停90秒,然后就可以直连了。为了保持这个直连状态,我在这个90秒以后,驻留了一个ping在内存之中,这样即使中心节点断开,我的直连仍然会处于保持状态。我把下面的脚本加入到这里了: 高级设置--自定义设置--脚本--在WAN上行/下行启动后执行:
### HOLD P2P sleep 5; ping 10.10.10.10 -c 5; sleep 30; ping 10.10.10.10 -c 5; sleep 30; ping 10.10.10.10 -c 5; sleep 90; ping 10.10.10.10;
最新发现(2018-2-28),针对新版v2s,在一次ping之后,间隔3分钟再次ping,就变直连了。也可以这样说,中断3分钟再次通讯,就变直连了(前提是这样的两端要具有直连的条件)。
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 地址都在变,那么就只能是中转。除此以外的其他情况,就具备建立直连的条件。
上面的软件测试不大准确,仅做参考。简单粗陋判断,如果一方从ISP处得到的是外网IP地址,即使在内网,不具有路由器的管理权限,也可以建立直连。
10、N2N_V1、V2有什么区别?
v1加密等级低速度快,V2加密等级高速度慢,我们一般用v1。当然,我们更推荐你使用新版的v2(为了区别,我们叫它v2s,源码位置:
https://github.com/meyerd/n2n),因为它更稳定,更容易直连。
11、我想用新版 v2s,因为它容易直连,但是经过它加密以后速度很慢怎么办?
针对旧版 v2,以及新版 v2s,都可以去掉 -k 参数(当然也包括后面的密码)运行,这样数据不经过加密,速度自然就快了。但是 v1 不行,必须要 -k 参数。这样安全吗?以 FTP 为例,如果中心节点是自己的,那么与我们平时的远程 FTP 的安全级别是完全一样的。关于这个问题,我专门咨询过编程的朋友,他们是这样说的。如果你用坏人的中心节点,并且你的数据是转发的,那么你的数据有被窃听的可能。如果你的数据就是一些视频之类的,我觉得无所谓。
12、怎么设置 supernode 为我所独用?
假设自己使用的 n2n 是这样运行的(以 n2nabc 账号)
edge -d edge0 -c n2nabc -k pwd -a 10.10.10.1 -l ip:10082
那么在 supernode 服务器上增加一条防火墙,监视 10082 端口通过的字符串,只准账号中含有 n2nabc 字符的通过即可。
iptables -I INPUT 1 -p udp --dport 10082 -m string ! --string "n2nabc" --algo bm -j DROP
13、N2N的网卡是10M的吗?会受限于这个10M的带宽限制吗?
本人做过这样的测试,edge A 端(在网吧),windows7X64,安装的是那个100M的驱动;edge B端,搬瓦工,Ubuntu 16.04 x86_64,10M驱动(用 ethtool XX 查看),通过n2n隧道,实现了A、B两端的直连,FTP的最大速度已经达到了3MB/s,相当于是24M带宽。
第二天,A端windows的网卡装成10M,测试的结果一样,上传速度最大达到了3.XMB/s。记得有人说过,n2n的那个虚拟网卡虽然是10M的,但是实际上是随硬件网卡而变化的,可能是10M,也可能是100M、1000M。windows、linux都是这样的。
另外一个测试,我将刷过 padavan 的路由器(路由宝)作为一个edge端(与上面的TF卡之间),通过 FTP 传输文件(本地edge是windows下的10M网卡),速度可以达到15M带宽(通过路由器上的流量图来看到的)。
14、域名型中心节点,你真的会用吗?
使用 n2n.lucktu.com:10082 这样的域名型节点时,必须使用"-b"参数,否则域名所对应的IP发现改变时,你的edge还连向的是旧的IP,而旧的IP可能就没有工作了,所以这之后,你的 edge 就失联断网了。正常的使用例句如下:
edge -d f1 -a 172.0.1.100 -c test1 -k test1 -l n2n.lucktu.com:10082 -r -b &
15、ping 值很小很流畅,访问却很慢,这是为什么?(mtu 值有什么用,windows下该怎么用?)
我在windows(win7X32)下,运行一个 n2n_v1,与远端的设备(路由器,使用的是padavan固件)组成一个n2n局域网,然后输入远端的 n2n ip,登录管理页面,发现很慢很慢,几分钟,半个小时都出不来页面。而此时 ping 远端的 n2n ip,ping 值才50ms,很顺畅。我本地的网络是移动宽带,大家都说很垃圾,远程的是电信宽带。
为什么访问一个管理页面就这么慢呢,慢得可以说不能用。后来受群友的影响,注意到了mtu,是不是它的问题呢?
搜索网页,看到 这一篇教程,我按照上面的方法,首先看看当前的 mtu 是多少:
netsh interface ipv4 show subinterfaces
结果在dos下看到的所有网卡的 mtu 都是1500,而我在n2n设置界面里设置的mtu值无效,看来得用另外的方法修改。
先看看怎么得到合适的mtu吧(假设远程的 n2n IP 是 172.0.0.100)
ping -f 172.0.0.100 -l 1472
根据提示修改,数字太大会显示“需要拆分数据包但是设置DF。”,逐渐改小,直到得到能这样 ping 通的最大值为止,我最后得到的最大值是1328(我ping baidu.com 最后得到的却是1412,不管它我这个网卡不是为了分百度的,而是为了访问 172.0.0.100 用的,所以不关百度什么事),加上28,就是1356。使用下面的命令修改 n2n 网卡的 mtu 值:
netsh interface ipv4 set subinterface "N2N连接" mtu=1356 store=persistent
修改过后,再用下面的语句查看时,
netsh interface ipv4 show subinterfaces
得到新的 mtu 值是这样的:
MTU MediaSenseState 传入字节 传出字节 接口 --- --------------- -------- -------- ---------- 1500 1 24776337 3937550 无线网络连接 1500 5 0 0 本地连接 1356 1 5391552 883502 N2N连接
此时,再次访问远程的路由器管理页面,就顺畅了,没有先前的半天出不来的情况。由此可见,windows下的 MTU 设置参数无效(我测试的是win7X32),需要这样手工判断和设置。
linux类系统下的测试方法就比较简单,使用下面的语句即可求得(已经加28;有时也不灵):
ping -c 4 -s 1472 -M do n2n.lucktu.com
16、直连成功率与中心节点有关吗?经过实践验证,确实是有关的。
我使用 n2n_v2s,移动(在光猫wifi下的电脑)连接电信(直接 PPPoE 拨号的路由器,有外网 IP),使用这个中心节点(167.88.162.244:10088,也就是我目前共享的中心节点 n2n.lucktu.com:10088,ping 值 200~250,美国的 vps),基本上每次都是直连。而使用某国内的VPS(223.87.179.191:10088,ping 值 35 左右)时,基本上就没有直连过,同样的线路,同时测试。难道是因为国内的比较近,转发也不错,国外的太远,只能谋求直连?这就是编程者(v2s)的逻辑?后来中心节点换成国内的腾讯云(ping 值 40 左右),v2s 也是不能直连的,即使长 ping,也不改变。
17、padavan 固件下开放 n2n 访问 samb(by 逆风飞翔)。
将下面的信息加入路由器启动后执行
#监视端口 sed -i '/interfaces = br0/s/interfaces/#interfaces#/g' /etc/smb.conf #杀了进程重启 killall -9 nmbd killall -9 smbd /sbin/smbd -D -s /etc/smb.conf /sbin/nmbd -D -s /etc/smb.conf
再将下面的信息加入防火墙里
#放行SAMBA端口 logger -t "【SAMBA服务器】" "允许SAMBA访问" iptables -I INPUT 1 -p udp -m multiport --dport 137,138 -j ACCEPT iptables -I INPUT 1 -p tcp -m state --state NEW -m multiport --dport 139,445 -j ACCEPT
有新的了再加,。。。
本文转载互联网
发表评论: