你還不知道內網穿透?

內網穿透即NAT穿透,網絡連接時術語,計算機是局域網內時,外網與內網的計算機節點需要連接通信,有時就會出現不支持內網穿透。就是說映射端口,能讓外網的電腦找到處於內網的電腦,提高下載速度。不管是內網穿透還是其他類型的網絡穿透,都是網絡穿透的統一方法來研究和解決。

今天給大家帶來一個能實現內網穿透的行家:花生殼。


花生殼PHTunnel SDK採用C語言實現,最小約80KB,支持TCP、UDP、HTTP、HTTPS協議,端到端的TLS加密通信,黑白名單防黑驗證等,覆蓋Windows、Linux、樹莓派、Mac、安卓等主流操作系統。

本文將詳解如何把花生殼PHTunnel封裝成一個OpenWrt標準組件,並編譯到自己的OpenWrt固件中,實現內網穿透功能。

1.花生殼PHTunnel組件製作

下載

先下載編譯平臺的二進制PHTunnel文件是我們第一步要做的,可到Oray官方網站的「開放平臺」進行下載,進入https://open.oray.com/sdk 選擇相應平臺下載包。


你還不知道內網穿透?

規劃目錄結構

接下來的任務是規劃自己的PHTunnel組件安裝後,在openwrt系統上是怎樣的目錄結構。

首先核心的應用程序PHTunnel我們可以放在/usr/bin目錄下,因為它是一個非管理員應用,所以一般比放在/usr/sbin目錄下要更科學一些。

uci配置文件:由於openwrt的uci是常用的配置解決方案,所以需要一個uci配置文件,該文件通常放在/etc/config目錄下,同時我們取名同樣為PHTunnel,這樣就可以使用uci set PHTunnel.xx.xx等操作PHTunnel的配置了。

根據PHTunnel列出的參數,uci的配置如下:


你還不知道內網穿透?

啟動腳本:通常應用都是作為守護腳本運行,所以PHTunnel也會製作成守護程序,自動運行,所以需要在/etc/init.d中建立PHTunnel的啟動腳本,名稱也叫PHTunnel。

hotplug.d機制:為了及時響應網絡狀態,快速重啟PHTunnel,可使用hotplug機制。這樣在wan口斷開重新連上網的時候,能馬上重啟PHTunnel。在/etc/hotplug.d/iface下需要創建一個xx-PHTunnel的腳本,其中xx代表腳本執行順序,可以隨便填。

這樣,安裝後的目錄結構是如下圖

你還不知道內網穿透?

編寫PHTunnel組件Makefile

根據目錄結構規劃,現在來編寫組件,由於openwrt的組件是用makefile文件編寫。

將makefile及規劃的files目錄統一放在PHTunnel目錄內,然後放在openwrt的package/utils目錄中即可(可放在package下的任何位置),再來看一下目錄結構


你還不知道內網穿透?

這時執行make menuconfig後,就能看到PHTunnel組件了

你還不知道內網穿透?

你還不知道內網穿透?

選中該組件後保存,執行make,就可以編譯出帶PHTunnel的固件了和對應的PHTunnel的ipk組件包了。

啟動腳本

啟動腳本用於啟動與停止PHTunnel,啟動後讀取uci配置,變成PHTunnel的啟動參數,然後啟動PHTunnel程序,代碼如下:

你還不知道內網穿透?

這裡用到了openwrt的PROCD機制,這樣可以在PHTunnel意外崩潰的情況下,自動重啟。

hotplug腳本

你還不知道內網穿透?

2. PHTunnel-luci-app組件製作

功能

PHTunnel運行後,需要進行掃碼登錄,管理,解綁等操作,這些都是需要與花生殼溝通的交互操作,openwrt提供的luci是實現交互的最佳選擇,也是最正式的方式,下面來製作基於luci的PHTunnel組件。

核心模塊

luci的代碼區域在/usr/lib/lua/luci中,所以所有交互的web代碼都放在這個下面,首先是核心的基礎庫PHTunnel.lua,它將提供所有核心函數,如獲取二維碼,登錄信息和解綁操等核心功能。

你還不知道內網穿透?

所有函數的核心都是調用wget來訪問rpc服務和官方提供的web服務。

LUCI頁面

完成核心函數庫後,接下來就是根據luci的架構進行開發。首先是規劃菜單與菜單項,如圖:

你還不知道內網穿透?

完成這樣的菜單,需要在controller目錄下實現,如圖:

你還不知道內網穿透?

其中setup頁面用於設置基本參數,Status頁面用於掃碼與解綁,Log用於顯示日誌。

Setup頁面

設置頁面是一個純UCI頁面,我們可以使用luci提供的cbi模塊開發。

你還不知道內網穿透?

顯現的頁面如圖

你還不知道內網穿透?

Status頁面

該頁面用於顯示二維碼,管理界面鏈接及解綁。相關代碼在view/oray/PHTunnel_status.htm,view/oray/PHTunnel_inner_status.htm, view/oray/PHTunnel_log_off.htm,

PHTunnel_status.htm : 用於顯示當前狀態。

PHTunnel_inner_status.html : 用於後臺實時檢測綁定狀態,當用戶使用手機刷二維碼綁定後,PHTunnel_status.htm頁面動態顯示綁定帳號。

PHTunnel_log_off : 用於解綁帳號

你還不知道內網穿透?

Log頁面

用於顯示日誌,該頁面相對簡單(view/oray/PHTunnel_log.htm)

你還不知道內網穿透?

通過uci獲取日誌路徑,並使用cat命令將文件內容輸出即可。

製作組件的makefile

與製作PHTunnel組件一樣,將所有文件組織成目錄樹,並加入Makefile

你還不知道內網穿透?

Makefile

你還不知道內網穿透?

最後同樣將組件複製到openwrt/package/utils/下,這樣我們可以在配置界面中看到PHTunnel-luci-app組件


你還不知道內網穿透?

選擇以上兩個組件,充分編譯後,即可在本地的luci界面上使用PHTunnel了。


分享到:


相關文章: