【智慧路由器】openwrt實現內網穿透(p2p、n2n)
阿新 • • 發佈:2019-01-04
背景
有時候在對線上裝置進行維護,由其是除錯的時候希望技術人員遠端進入路由後臺除錯路由資訊的時候,如果沒有內網穿透就會比較麻煩。
本篇部落格是在路由上實現內網穿透,以實現資料、檔案的點對點傳輸或訪問
閱讀時需要額外瞭解下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產品,覺得有點意思,附上該音箱圖片,圖片與文章無關