【智能路由器】openwrt实现内网穿透(p2p、n2n)

【智能路由器】系列文章连接
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产品,觉得有点意思,附上该音箱图片,图片与文章无关

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u012819339/article/details/75433970
P2P