【智能路由器】系列文章连接
http://blog.csdn.net/u012819339/article/category/5803489
背景
有时候在对线上设备进行维护,由其是调试的时候希望技术人员远程进入路由后台调试路由信息的时候,如果没有内网穿透就会比较麻烦。
本篇博客是在路由上实现内网穿透,以实现数据、文件的点对点传输或访问
阅读时需要额外了解下p2p协议原理,以及n2n工具
模型框架图
搭建supernode节点
准备一台公网服务器作为supernode节点,下载源码(编译需要事先安装libssl-dev),编译
$ git clone https://github.com/ntop/n2n.git
$ make
运行supernode,侦听1234端口
$ ./supernode -l 1234 -v
客户端搭建
openwrt本身包含n2n的Makefile,只不过现在不能用了,得改一下,
n2n官网出现了2个版本n2n_v1、n2n_v2(可自己访问https://svn.ntop.org/svn/ntop/trunk/n2n/ 查看),本次是用的n2n_v2编译的,不过在Makefile中做了一个菜单选项,make menuconfig的时候可以选择编译哪个版本,改后的Makefile如下
#
# Copyright (C) 2008 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# author: arvik
# email: 1216601195@qq.com
# blog : http://blog.csdn.net/u012819339
include $(TOPDIR)/rules.mk
PKG_BRANCH:=trunk
PKG_SOURCE_URL:=https://svn.ntop.org/svn/ntop/trunk/n2n
PKG_REV:=$(shell LC_ALL=C svn info ${PKG_SOURCE_URL} | sed -ne's/^Last Changed Rev: //p')
PKG_NAME:=n2n
PKG_VERSION:=svn$(PKG_REV)
PKG_RELEASE:=1
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
PKG_SOURCE_PROTO:=svn
PKG_SOURCE_VERSION:=$(PKG_REV)
PKG_BUILD_DEPENDS:=
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)
PKG_VER_SELECT:=
include $(INCLUDE_DIR)/package.mk
define Package/n2n
SECTION:=net
CATEGORY:=Network
TITLE:=VPN tunneling daemon
URL:=http://www.ntop.org/n2n/
SUBMENU:=VPN
DEPENDS:=libpthread +libopenssl
endef
define Package/$(PKG_NAME)/config
source "$(SOURCE)/Config.in"
endef
ifdef CONFIG_N2N_VER_SELECT_V1
PKG_VER_SELECT:=v1
endif
ifdef CONFIG_N2N_VER_SELECT_V2
PKG_VER_SELECT:=v2
endif
define Build/Configure
endef
define Build/Compile
$(MAKE) CC="$(TARGET_CC)" -C $(PKG_BUILD_DIR)/n2n_$(PKG_VER_SELECT)
endef
define Package/n2n/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/n2n_$(PKG_VER_SELECT)/edge $(1)/usr/sbin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/n2n_$(PKG_VER_SELECT)/supernode $(1)/usr/sbin/
endef
在Makefile相同目录下增加一个Config.in文件,内容如下:
choice
prompt "select the version of n2n to compile, default select V1"
default N2N_VER_SELECT_V2
depends on PACKAGE_n2n
config N2N_VER_SELECT_V1
bool "n2n_v1"
help
"select the version V1 for n2n"
config N2N_VER_SELECT_V2
bool "n2n_v2"
help
"select the version V2 for n2n"
endchoice
运行make menuconfig时候效果如下:
选择必要工具
libssl库是需要的,还需要在busybox中选择如下工具
Location:
-> Base system
-> busybox
-> Networking Utilities
-> tunctl
路由器终端运行如下命令:
$ tunctl -t tun0
$ ./edge -d n2n0 -c mynetwork -k encryptme -u 99 -g 99 -m 3C:A0:12:34:56:78 -a 1.2.3.4 -l a.b.c.d:xyw
请自行参看./edge –help 查阅参数含义,更改上面命令中本地虚拟网卡网卡mac以及ip地址,指定服务器ip和侦听端口
测试结果
两个n2n对端互ping截图
终端通过n2n建立的网络访问路由效果截图
好啦,本文到此结束,作者arvik,【智能路由器】系列文章见
http://blog.csdn.net/u012819339/article/category/5803489
最近阿里新出了智能AI音箱——天猫精灵,类似亚马逊的echo产品,觉得有点意思,附上该音箱图片,图片与文章无关