1. 程式人生 > >【智慧路由器】openwrt實現內網穿透(p2p、n2n)

【智慧路由器】openwrt實現內網穿透(p2p、n2n)

背景
有時候在對線上裝置進行維護,由其是除錯的時候希望技術人員遠端進入路由後臺除錯路由資訊的時候,如果沒有內網穿透就會比較麻煩。

本篇部落格是在路由上實現內網穿透,以實現資料、檔案的點對點傳輸或訪問

閱讀時需要額外瞭解下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建立的網路訪問路由效果截圖
這裡寫圖片描述

最近阿里新出了智慧AI音箱——天貓精靈,類似亞馬遜的echo產品,覺得有點意思,附上該音箱圖片,圖片與文章無關

這裡寫圖片描述