主流內網穿透技術有哪些,詳細說明了有哪些區別

2021-10-21 06:16:14 字數 3579 閱讀 1827

我們學習反向**知道了客戶端並不知道它訪問的是哪台伺服器主機,有時候我們需要把請求反向到內網主機中去,這個時候就需要使用到內網穿透技術。

很多人對內網穿透技術感覺很陌生,從常規角度來說,我們都是從內網訪問外部的**,路由器的nat技術幫我們訪問到了**的伺服器,再通過nat把伺服器的響應**到請求的客戶端,如圖所示

通過流程我們可以清晰地看到通過內網穿透技術可以輕鬆讓外網穿透各種複雜的路由和防火牆訪問到內網的裝置。

目前國內使用較多的內網穿透技術有phtunnel和wangooe tunnel技術。

phtunnel是新一代花生殼核心元件,採用c語言實現(最小約80kb),較上一代反向**效能全面提公升。支援tcp、http和https協議,端到端的tls加密通訊。

通過phtunnel可以輕鬆讓外網裝置穿透各種複雜的路由和防火牆訪問到內網的裝置。

wangooe tunnel是神卓互聯研發的穿透協議,採完全由 c 語言實現,單機最低支援建立6萬個對映通道,百萬級併發請求。支援黑名單防護驗證、流量統計與限制、頻寬動態調整、網域名稱繫結、tcp和udp加速、加密和壓縮等。

除了市面上主流的花生殼和神卓互聯是採用c語言實現的,主要特點是支援高併發架構,訪問效率高,速度快,還有的就是清一色go語言實現的

frp

是乙個反向**應用的開源go實現,支援 tcp, http, https 等協議型別,並且 web 服務支援根據網域名稱進行路由**。分析了原始碼後發現由於採用的是輪詢的方式,從效率上來講單機支援的通道數是很有限的,並不支援高併發的應用場景,如果是個人使用的話私房錢又充足的情況下可以額外租一台伺服器自己搭建試一下。

ngrok

ngrok是乙個反向**,通過在公共的端點和本地執行的web伺服器之間建立乙個安全的通道。ngrok可捕獲和分析所有通道上的流量,便於後期分析與響應。

現在的luci,自帶server和client,也就是說如果有乙個公網ip的話,是可以用來作為ngrok的server端的,筆者自己嘗試搭建過,很容易就出現記憶體洩露的情況,所以沒有深入對架構進行研究。

先不說架構問題,如何通過乙個簡單的原始碼demo來演示一下內網穿透的實現呢

首先是服務端,建立兩個監聽請求的埠,乙個是給外網**訪問的,乙個是與客戶端通訊訪問的。

void forwardsocket::init(int ctrlport, int serverport)

make_socket_non_blocking(ctrlsocket);

}//建立乙個結構體

myinfo.data = ctrlsocket;

myinfo.ldata.push(acceptsocket);

printf("%d 接收到乙個外網使用者請求.\n",serverport);

//檢測通道是否是通的

if (send(ctrlsocket, (char *)&nret, 1, 0) == -1)

//單獨建立乙個執行緒進行資料讀寫

pthread_t tidp;

int ret = pthread_create(&tidp, 0, handlemsg, (void *)&myinfo);

usleep(20);

ctrlsocket = 0;

}

資料中轉的方法

while (true)

if (fd_isset(serversock, &fd_read))

} //end while

這裡要注意一下就是呼叫send傳送進行傳送訊息的時候由於訊息緩衝區大小是有限的,或者對方網路狀況發生了異常,這個時候可能並不是一下子就傳送成功的,所以每次傳送要做檢查,確保訊息是已經傳送成功。

int nbytesleft = datalen;

int nbytessent = 0;

int ret;

while (nbytesleft > 0)

接下來是客戶端的,主要思路是建立與服務端的socket連線和與被訪問主機直接的socket連線

while (1)

else

} nret = ioctlsocket(socket, fionread, &lrecv);

if (lrecv > 0)

ntimes++;

myinfo.ldata.push(socket);//傳遞資訊的結構

hthread = createthread(null, 0, handlemsg, (lpvoid)&myinfo, null, &dwthreadid);

if (hthread)

closehandle(hthread);

else

sleep(100);

} else

}} sleep(2);

} closesocket(socket);

其實內網穿透原理就是將外網的請求**訪問目標應用,其實裡面的涉及技術還好很多的,就好比nginx,原來也很簡單,但是效能要到達nginx的級別需要很深的技術功底的。

最近正在研究nginx的檢查策略,希望可以一起交流

在企業運維實踐場中,每乙個配置操作處理完畢後都應該進行快速有效的檢查,這是乙個合格運維人員的良好習慣。盡量使得在nginx啟動的同時,還會呼叫指令碼通過獲取header資訊或模擬使用者訪問指定url(wget等方式)來自動檢查nginx是否正常,最大限度的保證服務重啟後,能迅速確定**情況,而無須手工敲命令檢視。這樣如果配置有問題就可以迅速使用上一版本備份配置檔案覆蓋回來。

[root@localhost conf]# cat check_url.sh 

#!/bin/bash

#--------function split--------

. /etc/rc.d/init.d/functions

function checkurl()

|head -1 | tr " " "\n"))

if [[ "$" == '200' && "$" == 'ok' ]]

then

action "$" /bin/true

else

action "$" /bin/false

echo -n "retrying again...";sleep 3;

judgeagain=($(curl -i -s --connect-timeout 2 $| head -1| tr "\r" "\n"))

if [[ "$" == '200' && "$" == 'ok' ]]

then

action "$, retried again" /bin/true 

else

action "$, retried again" /bin/false

fifi

sleep 1;

}# usage method

NPS內網穿透技術

lsb release a如果提示 bash lsb release command not found輸入下面的指令在執行上面的檢視本版指令 wget上傳好檔案以後我們解壓檔案,然後進入nps資料夾,開啟nps。cd nps nps start 在瀏覽器開啟ip 8080,就能進入web面板 預設...

SrpingCloud技術棧有哪些

對springcloud的技術棧作個總結 微服務概念 落地技術 服務開發 springboot spring springmvc 服務配置與管理 netflix公司的archaius 阿里的diamond等 服務註冊與發現 eureka consul zookeeper等 服務呼叫 rest rpc...

微服務技術棧有哪些

微服務條目 技術備註 服務開發 springboot spring springmvc 服務配置與管理 netflix公司的archaius 阿里的diamond等 服務註冊與發現 eureka consul zookeeper等 服務呼叫 rest rpc grpc 服務熔斷器 hystrix e...