OpenWRT(小米路由器使用系统)组建N2N VPN网络实现内网设备之间的相互访问
来源:互联网 发布:淘宝极有家可靠吗 编辑:程序博客网 时间:2024/06/02 21:03
概述
如果要实现设备的远程访问,比如在公司访问家里的电脑、路由器、智能开关等,我们一般会需要一个公网地址,然后将相应端口映射到指定设备上。随着IPV4地址的枯竭,有些ISP已经不提供公网IP了,而且即使有公网IP,我们不一定有权限操作NAT路由的端口映射(比如公司的网络),而且每次重启路由器这个IP会变化,我们还得等一段时间让DDNS生效,非常不便。
要是每个设备固定一个IP地址就好了,让我们在世界任何地方输入10.2.5.1
这个IP就可以登录家里的路由、输入10.2.5.2
就对应家里的智能开关、输入10.2.5.3
就登陆自己的Android手机,即使它使用的是移动网络...
注: 上述的10.2.5.X只是一个内网地址的例子,和常见的192.168.1.X是一样的,使用这个地址段是为了避免N2N地址和常见的内网地址混淆。
N2N就是为此而生的,它是在数据链路层实现的一套P2P协议,目的是尽量简化设备直接的连接。引用论文中作者的话来说N2N的目的就是:
N2N的实现具有两个部分:supernode
中心节点和edge
边界节点, 边界节点通过中心节点找到对方,边界节点之间建立通信后,可以直接断开中心节点,实现点对点的加密通信。N2N网络的架构图如下:
中心节点可以自己建立,也可以使用公开的supernode
。由于supernode
只是建立一个类似寻址的功能,设备之间的通信数据不经过supernode
,所以即使使用公开的supernode
是安全的。
配置一个N2N网络
这里建立一个私有的N2N网络,目的是将家里的电脑、家里的OpenWrt路由器、Android手机连接到同一个N2N网络上。
准备工作
N2N协议目前有两个版本,v1和v2版本,这两个版本是不兼容的!也就是说如果一台设备使用v1版本,另一台设备使用v2版本,那么这两台设备是不能连接的,请务必注意这一点!
我使用的是v1版本,保守一点总是没错的...
公开一个我的N2N中心节点信息:
- IP: 104.128.82.194
- Port: 82
- Version: N2N v1
仅供测试,我不能保证该节点长期有效
配置OpenWrt路由器的N2N客户端
OpenWrt官方软件源的N2N是v1版本,使用opkg update && opkg install n2n
命令安装 ,安装完成之后先配置一下自己的N2N网络,编辑/etc/config/n2n
这个文件即可,内容如下:
config edge # 给设备分配一个内网地址 option ipaddr '10.2.5.1' option supernode '104.128.82.194' option port '82' # 为自己的N2N网络组织机构取个名字,不要和我的一样 option community 'shuyz' # 其他设备要使用相同的组织机构名和密码才能加入 option key '123456789' option route '1'
最后加入开机自启后立即启动就配置完成了。
/etc/init.d/n2n enable/etc/init.d/n2n start
配置Windows的N2N客户端
vpnhosting.cz
为Windows写了一个N2N的GUI客户端,下载地址在这里。
安装N2N GUI的时候会自动安装虚拟网卡供edge使用,N2N的设置界面如下,除了IP地址,其他的信息保持和OpenWrt上配置文件一样,然后打开Advanced
配置,选择Use n2n v1
协议,重启一下软件生效。
这时候路由器和电脑就加入同一个N2N网络了,我们在路由器端ping Windows:
root@MagicBox:~# ping 10.2.5.3PING 10.2.5.3 (10.2.5.3): 56 data bytes64 bytes from 10.2.5.3: seq=0 ttl=64 time=1052.175 ms64 bytes from 10.2.5.3: seq=1 ttl=64 time=525.018 ms64 bytes from 10.2.5.3: seq=5 ttl=64 time=522.537 ms64 bytes from 10.2.5.3: seq=6 ttl=64 time=320.722 ms64 bytes from 10.2.5.3: seq=7 ttl=64 time=422.895 ms^C--- 10.2.5.3 ping statistics ---9 packets transmitted, 5 packets received, 44% packet lossround-trip min/avg/max = 320.722/568.669/1052.175 ms
上面的测试可以看到网络延时非常严重,因为电脑和路由器在同一个局域网。我把路由器拿到公司之后再ping一下家里的电脑:
root@MagicBox:~# ping 10.2.5.3PING 10.2.5.3 (10.2.5.3): 56 data bytes64 bytes from 10.2.5.3: seq=0 ttl=64 time=7.197 ms64 bytes from 10.2.5.3: seq=1 ttl=64 time=8.212 ms64 bytes from 10.2.5.3: seq=2 ttl=64 time=6.667 ms64 bytes from 10.2.5.3: seq=3 ttl=64 time=8.371 ms64 bytes from 10.2.5.3: seq=4 ttl=64 time=5.217 ms64 bytes from 10.2.5.3: seq=5 ttl=64 time=8.936 ms^C--- 10.2.5.3 ping statistics ---6 packets transmitted, 6 packets received, 0% packet lossround-trip min/avg/max = 5.217/7.433/8.936 ms
由此可见N2N网络在不同公网之间的设备连接上表现优秀,但在用一个局域网的设备间很糟糕。
配置Android的N2N客户端
在Google Play上可以下载到Android的N2N客户端,点此进入,似乎是国人写的,功能非常强大。
配置界面:
配置完成后启动,可以看到和超级节点的注册信息,这时候手机也可以访问N2N网络的其他设备了,比如使用移动网络访问家里的路由器:
N2N中心节点的编译和部署
编译
svn co https://svn.ntop.org/svn/ntop/trunk/n2ncd n2n && cd n2n_v1make
编译完成之后会生成edge
和supernode
两个可执行文件,可以使用make install
命令安装,或者拷贝到任意目录运行。
调试
这里我们讨论服务器上的supernode
,使用方法很简单:
supernode -l <listening port> [-v] [-h]
测试的时候,建议开启调试日志,比如:
supernode -l 8080 -v
总结
目前网上介绍N2N的文章非常少,但我觉得N2N的应用前景是非常广泛的,最典型比如物联网。将N2N协议可以在各种物联网设备上实现后,将这些设备组建成一个N2N网络,这些设备之间的通信和交互将变得更加方便,从而实现各种可能。
参考资料
- hxihcom, OpenWrt中文应用技术网, (主流VPN技术比较) 无公网IP?远程访问路由?内附详细教程
- Luca Deri, Richard Andrews, N2N: A Layer Two Peer-to-Peer VPN
- vpnhosting.cz, N2n Gui En
关键字:openwrt, n2n, supernode, edge, nat
本文链接:树叶的BLOG >> 组建N2N VPN网络实现内网设备之间的相互访问.md
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议进行许可。
- OpenWRT(小米路由器使用系统)组建N2N VPN网络实现内网设备之间的相互访问
- 【智能路由器】openwrt实现内网穿透(p2p、n2n)
- 树莓派使用n2n实现内网穿透
- 构建n2n网络,实现随时随地控制内网主机
- VPN网络的组建
- VPN网络的组建
- 如何通过路由器快速组建 VPN 网络
- n2n内网穿透神器(一条命令实现穿透)(linux,安卓,win,openwrt全介绍)
- 基于openwrt系统的小米路由器创建自启动脚本
- 路由器让外网访问内网的计算机和设备
- VPN网络的组建(图解)
- n2n使用,在同一个虚拟机上实现VPN
- MIPS平台OpenWrt路由器系统内的Rust应用程序开发
- MIPS平台OpenWrt路由器系统内的Rust应用程序开发
- N2N VPN服务器的搭建
- N2N VPN服务器的搭建
- 使用newifi路由器刷Openwrt Pandora后,树莓派实现外网访问,各种服务器搭建
- 支持VPN的路由器,小米路由器PPTP的设置,
- Jenkins的Linux的Slave的配置
- Android 仿 窗帘效果 和 登录界面拖动效果 (Scroller类的应用) 附 2个DEMO及源码
- 第13周项目1整型数组
- 建造者模式
- Eclipse上的Web项目调试
- OpenWRT(小米路由器使用系统)组建N2N VPN网络实现内网设备之间的相互访问
- NSTimer传多个参数
- python PIL bug: 'NoneType' object has no attribute 'bands' (解决)
- Jenkins的Windows Slave的配置
- 关于codeblocks的新建模板
- Mac下解决Eclipse内存溢出(OutOfMemoryError)的问题
- Android 仿美团网,大众点评购买框悬浮效果之修改版
- 病毒木马查杀实战第007篇:熊猫烧香之逆向分析(下)
- Jenkins的配置