內(nèi)網(wǎng)穿透工具的原理與開發(fā)實戰(zhàn)

      網(wǎng)友投稿 1303 2025-04-03

      內(nèi)網(wǎng)穿透工具的原理與開發(fā)實戰(zhàn)


      有時候,我們在外想要訪問家里主機的資料,要么由于主機處于家庭路由器下,是非公網(wǎng)IP,要么就是是運營商隨機分配的一個公網(wǎng)IP,都很難直接連上主機獲取資料。那么,有什么辦法可以解決這一難題?答案就是 內(nèi)網(wǎng)穿透。

      內(nèi)網(wǎng)穿透系列文章索引:

      【內(nèi)網(wǎng)穿透服務器】遠程訪問

      【內(nèi)網(wǎng)穿透服務器】遠程(smb)文件共享

      【內(nèi)網(wǎng)穿透服務器】遠程FTP服務器共享

      【內(nèi)網(wǎng)穿透路由器】遠程訪問后臺

      【內(nèi)網(wǎng)穿透硬盤】遠程訪問

      【內(nèi)網(wǎng)穿透計算機】遠程訪問

      【內(nèi)網(wǎng)穿透開機】VNC方式

      【內(nèi)網(wǎng)穿透開機】udp廣播方式

      【內(nèi)網(wǎng)穿透開機】路由器廣播方式

      【內(nèi)網(wǎng)穿透監(jiān)控】遠程訪問

      【內(nèi)網(wǎng)穿透Nas】遠程訪問

      一、名詞解釋

      為了理解內(nèi)網(wǎng)穿透我們先來了解幾個概念:

      (1)私有地址

      因特網(wǎng)域名分配組織IANA組織(Internet Assigned Numbers Authority)保留了以下三個IP地址塊用于私有網(wǎng)絡。

      10.0.0.0 - 10.255.255.255 (10/8比特前綴) 172.16.0.0 - 172.31.255.255 (172.16/12比特前綴) 192.168.0.0 - 192.168.255.255 (192.168/16比特前綴)

      我們可以看到其中有1個A類地址塊,32個B類地址塊和256個C類地址塊。

      主流的家用路由器使用C類私有地址作為路由器LAN端的IP地址較多,所以我們可以看到路由器設置頁面的IP一般都為192.168開頭。

      (2)DHCP(動態(tài)主機設置協(xié)議)

      路由器怎么分配內(nèi)網(wǎng)IP?

      DHCP是一個局域網(wǎng)的網(wǎng)絡協(xié)議,使用UDP協(xié)議工作,主要用于內(nèi)部網(wǎng)絡或網(wǎng)絡服務供應商自動分配IP地址給用戶,同時也可以作為內(nèi)部網(wǎng)絡管理員作為對所有電腦作中央管理的手段。

      (3)NAT(網(wǎng)絡地址轉(zhuǎn)換)

      NAT(Network Address Translation)即網(wǎng)絡地址轉(zhuǎn)換,NAT能將其本地地址轉(zhuǎn)換成全球IP地址。利用路由器作為內(nèi)網(wǎng)和公網(wǎng)的劃分,將內(nèi)網(wǎng)與外網(wǎng)進行映射,并負責這兩者的信息傳遞。

      路由器負責將內(nèi)網(wǎng)的IP與端口號映射到公網(wǎng)的IP與端口號,并以該IP與端口號與外網(wǎng)進行通訊,并作為中間橋梁控制其間的數(shù)據(jù)傳輸。

      目前,NAT的主要技術(shù)類型有 靜態(tài)NAT 、動態(tài)NAT 和 網(wǎng)絡地址端口轉(zhuǎn)換NAPT(Port-Level NAT)三種。

      靜態(tài)NAT設備中NAT地址映射表確定了一個內(nèi)部IP地址與一個全局IP地址的對應關(guān)系(一一對應),只要管理員不重新設置,這種對應關(guān)系就一直保持。——即用戶被分配到的是靜態(tài)公網(wǎng)IP。

      動態(tài)NAT設備被管理員分配了一些全局IP地址,這些全局的IP地址構(gòu)成了NAT地址池,當內(nèi)部主機需要訪問外部網(wǎng)絡時,設備就會在NAT地址池中為該主機選擇一個目前未被占用的IP地址,當通信結(jié)束時,NAT設備將會收回該全局IP地址。——即用戶被分配到的是動態(tài)公網(wǎng)IP。

      網(wǎng)絡地址端口轉(zhuǎn)換NAPT(Port-Level NAT)是目前最常使用的一種NAT類型,較為成功的解決了目前IP地址短缺問題,通過分配不同端口,是內(nèi)部網(wǎng)絡的多個主機和用戶共享少數(shù)幾個全局IP地址。但是,這也使得外部的網(wǎng)絡主機不能主動訪問內(nèi)部網(wǎng)絡中的主機,這是由于NAT地址映射表中不存在到達內(nèi)部機器的映射,因此,外部主機發(fā)起的訪問內(nèi)部機器的數(shù)據(jù)報在到達NAT設備時將被拋棄,這種隱藏內(nèi)部主機的方式,一定程度上提高了內(nèi)部網(wǎng)絡的安全性,但也給一些網(wǎng)絡應用(如P2P)帶來了一些問題,那些應用常常希望內(nèi)部網(wǎng)主機和外部網(wǎng)主機之間能夠自由的進行通信。

      此外,NAPT同樣可以配置地址池。配置NAPT功能后,NAT轉(zhuǎn)換時,首先將復用地址池中所選擇的地址,端口達到能力極限后, 再選擇另一個地址完成轉(zhuǎn)換。對比單一的多對多地址轉(zhuǎn)換,這可大大減少地址池中公有地址的數(shù)目。

      下面進一步介紹NAPT(Port-Level NAT)的工作原理。點此查看NAPT類型與測試方法

      (4)NAPT(網(wǎng)絡端口地址轉(zhuǎn)換)

      將多個內(nèi)部地址映射為一個合法公網(wǎng)地址,但以不同的協(xié)議端口號與不同的內(nèi)部地址相對應,也就是<內(nèi)部地址+內(nèi)部端口>與<外部地址+外部端口>之間的轉(zhuǎn)換。

      如果內(nèi)網(wǎng)有主機向公網(wǎng)設備發(fā)起了請求,內(nèi)網(wǎng)主機的請求數(shù)據(jù)包傳輸?shù)搅薔AT網(wǎng)關(guān)上,那么NAT網(wǎng)關(guān)會修改該數(shù)據(jù)包的源IP地址和源端口為NAT網(wǎng)關(guān)自身的IP地址和任意一個不沖突的自身未使用的端口,并且把這個修改記錄到那張映射表上。最后把修改之后的數(shù)據(jù)包發(fā)送到請求的目標主機,等目標主機發(fā)回了響應包之后,再根據(jù)響應包里面的目的IP地址和目的端口去映射表里面找到該轉(zhuǎn)發(fā)給哪個內(nèi)網(wǎng)主機。這樣就實現(xiàn)了內(nèi)網(wǎng)主機在沒有公網(wǎng)IP的情況下,通過NAPT技術(shù)借助路由器唯一的一個公網(wǎng)IP來訪問公網(wǎng)設備。

      Easy IP是一種特殊方式的NAPT。直接使用網(wǎng)關(guān)出接口的ip地址,不存在多個公網(wǎng)ip地址。特別適合小型局域網(wǎng)接入Internet 的情況。這里的小型局域網(wǎng)主要指中小型網(wǎng)吧、小型辦公室等環(huán)境。

      舉例:內(nèi)網(wǎng)機器(192.168.1.101) 訪問目標主機(1.2.3.4)

      1、客戶機發(fā)送數(shù)據(jù)包:

      目的主機 1.2.3.4

      目的端口 80

      源主機 192.168.1.101 (內(nèi)網(wǎng)的私有IP)

      源端口 1920 (隨機打開)

      2、進行地址轉(zhuǎn)換

      目的主機 1.2.3.4

      目的端口 80

      源主機 2.3.4.5 (NAT服務器的公網(wǎng)IP)

      源端口 2345 (隨機打開)

      3、記錄映像

      192.168.1.101 tcp 1920 ----- 2.3.4.5 tcp 2345

      4、外部網(wǎng)絡主機向NAT主機發(fā)送響應信息

      目的主機 2.3.4.5

      目的端口 2345

      源主機 1.2.3.4

      內(nèi)網(wǎng)穿透工具的原理與開發(fā)實戰(zhàn)

      源端口 80

      5、查找映像關(guān)系將數(shù)據(jù)包發(fā)給客戶機

      目的主機 192.168.1.101

      目的端口 1920

      源主機 2.3.4.5

      源端口 2345

      (5)DDNS(動態(tài)域名解析)

      DDNS是將用戶的動態(tài)IP地址映射到一個固定的域名解析服務上,用戶每次連接網(wǎng)絡的時候客戶端程序就會通過信息傳遞把該主機的動態(tài)IP地址傳送給位于服務商主機上的服務器程序,服務器程序負責提供DNS服務并實現(xiàn)動態(tài)域名解析。

      (6)端口映射

      公網(wǎng)ip只是路由器的,要實現(xiàn)外網(wǎng)訪問,還需要設置端口映射把內(nèi)網(wǎng)中的機器映射到公網(wǎng)去。端口映射就是將公網(wǎng)IP地址的一個端口映射到內(nèi)網(wǎng)中一臺機器,提供相應的服務。當用戶訪問該IP的這個端口時,服務器自動將請求映射到對應局域網(wǎng)內(nèi)部的機器上。

      端口映射過程就如同:你的朋友來找你,找到小區(qū)門口,不知道你住在幾層,然后問保安,保安查到你的名字然后告訴你在幾樓,所以你的朋友很輕松的找到了你的家,在這個過程中,保安通過業(yè)主的名字查到業(yè)主的門牌號這就是一種映射關(guān)系。

      端口映射 不等于 端口轉(zhuǎn)發(fā)

      端口映射 不等于 端口轉(zhuǎn)發(fā)

      端口映射 不等于 端口轉(zhuǎn)發(fā)

      端口映射

      局域網(wǎng)關(guān)出口處的公網(wǎng)IP

      內(nèi)網(wǎng)服務器指定端口

      訪問

      轉(zhuǎn)發(fā)請求

      客戶端

      80端口-公網(wǎng)主機

      80端口-公網(wǎng)主機-777端口

      內(nèi)網(wǎng)服務器

      內(nèi)網(wǎng)80端口

      相同效果:如果公網(wǎng)ip為 x.x.x.x,在瀏覽器中輸入x.x.x.x:端口a,即可看到內(nèi)網(wǎng)服務器端口b下的實時畫面。

      不同原理:端口映射發(fā)生于節(jié)點與路由/網(wǎng)關(guān)之間,以NAT(Network Address Translation,網(wǎng)絡地址翻譯)為原理;而端口轉(zhuǎn)發(fā)以反向隧道、反向代理為原理,需要借助一臺公網(wǎng)IP服務器轉(zhuǎn)發(fā)端口,發(fā)生于兩個網(wǎng)絡節(jié)點的端口之間。

      二、內(nèi)網(wǎng)穿透概要

      1. 基本情況介紹

      在互聯(lián)網(wǎng)中唯一定位一臺主機的方法是通過公網(wǎng)的IP地址,但固定IP是一種非常稀缺的資源,不可能給每個公司都分配一個,且許多中小公司不愿意為高昂的費用買單,多數(shù)公司直接或間接的撥號上網(wǎng),電信部門會給接入網(wǎng)絡的用戶分配IP地址,以前上網(wǎng)用戶少的時候基本分配的都是臨時的靜態(tài)IP地址,租約過了之后可能會更換成另一個IP地址,這樣外網(wǎng)訪問就不穩(wěn)定,因為內(nèi)網(wǎng)的靜態(tài)IP地址一直變化,為了解決這個問題可以使用動態(tài)域名解析的辦法變換域名指向的靜態(tài)IP地址。但是現(xiàn)在越來越多的上網(wǎng)用戶使得臨時分配的靜態(tài)IP地址也不夠用了,電信部門開始分配一些虛擬的靜態(tài)IP地址,這些IP是公網(wǎng)不能直接訪問的,以前單純的動態(tài)域名解析就不好用了。

      關(guān)于如何判斷自己家庭網(wǎng)絡是否是公網(wǎng)IP:

      首先如果發(fā)現(xiàn)ip在上文講私有地址時提到的三個用于私有網(wǎng)絡的IP地址塊中,那么排除公網(wǎng)IP可能。使用保留地址的網(wǎng)絡只能在內(nèi)部進行通信,而不能與其他網(wǎng)絡互連。

      其次,對比 路由自動分配的IP(WAN口地址)與 網(wǎng)絡查詢到的本機IP地址 是否一致,如果不一致,則不具有公網(wǎng)IP。

      此處有一個坑,在使用長城寬帶等第三方寬帶運營商提供的網(wǎng)絡服務環(huán)境下,直接在網(wǎng)頁輸入IP回顯的IP地址一般和WAN口IP地址相同,這樣很容易產(chǎn)生錯誤判斷,上面提供的網(wǎng)址(網(wǎng)址右邊顯示的IP)有效解決了這個誤導。

      最后,使用 tracert 來查看跟蹤,第一跳是路由器網(wǎng)關(guān),如果后面的每一個hops不是內(nèi)網(wǎng)IP,那么自己就是外網(wǎng)IP了,反之,如果自己是內(nèi)網(wǎng)IP,那么hops顯示的就是網(wǎng)關(guān)的內(nèi)網(wǎng)IP,下面的例子顯然說明是外網(wǎng)IP,但此方法針對長城寬帶等第三方寬帶運營商網(wǎng)絡判斷無效。

      一般來說,代理網(wǎng)絡運營商99.99%都是內(nèi)網(wǎng)IP,如長城帶寬、聚友E家等。具體檢測方法一方面可以通過比較wan口和實際IP,也可以通過DDNS域名解析后比對IP(后文“動態(tài)域名解析”處有相關(guān)圖文參考)進行驗證。

      2. 將內(nèi)網(wǎng)的服務暴露到公網(wǎng)上方式

      直接在路由器上設置一下端口映射(使用帶端口映射功能的路由器,或者使用DMZ主機功能,把內(nèi)網(wǎng)中的一臺主機完全暴露給互聯(lián)網(wǎng),開放所有端口,等同于全部端口映射。等于直接使用公網(wǎng)IP。),將內(nèi)網(wǎng)IP與端口映射到公網(wǎng)IP的一個端口上。當外界需要訪問內(nèi)網(wǎng)端口的服務時,只需要向公網(wǎng)IP對應的端口發(fā)起請求即可。(當然不要忘記先固定內(nèi)網(wǎng)IP)

      使用瀏覽器登錄路由器(登陸地址見路由器背面),默認的賬號密碼都是admin(詳情同見路由器背面),將IP與MAC綁定。

      TP-LINK部分路由器端口映射服務被稱為“虛擬服務器”,需要在下圖處增加端口映射。

      配置時,以樹莓派為例,其中外部端口是外網(wǎng)訪問的端口,例如可選9000,建議不要太小,因為服務提供商可能屏蔽較小的一些端口;內(nèi)網(wǎng)端口如果用樹莓派的motion,就寫motion的端口,為8081或8080;協(xié)議選TCP;內(nèi)部IP是樹莓派的局域網(wǎng)ip。

      例如你的公網(wǎng)ip為 x.x.x.x,這些設置完以后就可以在瀏覽器中輸入x.x.x.x:9000,即可看到實時畫面。

      這種情況下依然可以做端口映射,但是由于IP地址不固定,所以需要通過方法來告知連接者IP到底是多少。解決這個問題可以采用DDNS(動態(tài)域名解析)技術(shù)。

      通過域名 訪問

      獲取

      端口映射

      客戶端

      動態(tài)域名解析DDNS服務器

      動態(tài)域名解析DDNS服務器

      局域網(wǎng)關(guān)出口處的公網(wǎng)IP

      局域網(wǎng)關(guān)出口處的公網(wǎng)IP

      內(nèi)網(wǎng)服務器

      DDNS(動態(tài)域名解析)技術(shù)就是首先獲得一個域名,并要求內(nèi)網(wǎng)設備每隔一段時間對于DDNS服務器發(fā)起請求,DNS服務器將請求的IP記錄下來并且刷新相關(guān)域名的解析記錄。最終可以通過該域名找到當前的IP地址。

      路由器DDNS解析之后,無需登陸花生殼等服務端,相反,登陸花生殼服務端予以配置后,會互相沖突,影響動態(tài)域名解析。

      動態(tài)域名解析檢測方法是 ping 域名:端口 ,查看回顯IP是否為本機分配到的公網(wǎng)IP

      (用該方法也可以檢測是否分配到的是公網(wǎng)IP,下面以長城寬帶為例,動態(tài)域名解析后ping域名:)

      這兩種情況下,通過固定IP并在自己的路由器上設置映射是沒有作用的。需要使用內(nèi)網(wǎng)穿透技術(shù)。

      3. 內(nèi)網(wǎng)穿透原理

      內(nèi)網(wǎng)穿透,又叫NAT(Network Address Translation)穿透。對于在NAT之后的節(jié)點來說,其不是不能主動訪問公網(wǎng)端口,而是不能反過來有效的被公網(wǎng)訪問。內(nèi)網(wǎng)穿透的主要思路就是利用這一點,讓在NAT之后的節(jié)點主動訪問一個擁有公網(wǎng)IP地址的服務器,并由中間服務器搭橋,打通經(jīng)過該服務器從其他主機到NAT之后節(jié)點的隧道。

      同樣該技術(shù)除了可以訪問隱藏在NAT之后的節(jié)點,同樣可以穿透防火墻。由于防火墻只攔截了入站沒有攔截出站,所以可以讓防火墻內(nèi)的服務器主動連接到一個公網(wǎng)服務器打通隧道,并通過該隧道最終鏈接到本地的其他端口。

      出于安全起見,除非是主機主動向?qū)Ψ桨l(fā)出了連接請求(這時會在該主機的數(shù)據(jù)結(jié)構(gòu)中留下一條記錄),否則,當主機接收到數(shù)據(jù)包時,如果在其數(shù)據(jù)結(jié)構(gòu)中查詢不到對應的記錄,那些不請自來的數(shù)據(jù)包將會被丟棄。因此,位于不同局域網(wǎng)內(nèi)的兩臺主機,即使是知道了對方的 IP 地址和端口號,“一廂情愿”地將數(shù)據(jù)包發(fā)送過去,對方也是接收不到的,所以我們首先需要打通隧道。

      假設公網(wǎng)IP為X.X.X.X,內(nèi)網(wǎng)IP為192.168.1.2。公網(wǎng)主機先監(jiān)聽80端口,監(jiān)聽這個端口是用于向外部提供一個HTTP服務,80是WEB服務器的默認端口。同時其他任意一個端口(這里我們假設為7777),監(jiān)聽這個端口是用于讓內(nèi)網(wǎng)服務器主動連接進來打通一個隧道。接著內(nèi)網(wǎng)再主動向公網(wǎng)主機的7777發(fā)起一個請求,這樣內(nèi)網(wǎng)就成功與公網(wǎng)主機建立了一個連接通道。然后當有任何客戶端主動連接公網(wǎng)的80端口時,公網(wǎng)接收到連接請求之后馬上把這連接請求通過先前建立好的隧道轉(zhuǎn)發(fā)到內(nèi)網(wǎng)主機。

      主動連接

      訪問

      內(nèi)網(wǎng)服務器 192.168.1.2

      X.X.X.X:7777

      公網(wǎng)主機X.X.X.X

      X.X.X.X:80

      客戶端

      當有任何客戶端主動連接公網(wǎng)的80端口時,公網(wǎng)接收到連接請求之后馬上把這連接請求通過先前建立好的隧道轉(zhuǎn)發(fā)到內(nèi)網(wǎng)主機,內(nèi)網(wǎng)主機接收到來自隧道的數(shù)據(jù)包后再主動連接內(nèi)網(wǎng)主機自身的80端口,連接成功之后將數(shù)據(jù)包原封不動地轉(zhuǎn)發(fā)數(shù)據(jù)包給80端口。

      訪問

      轉(zhuǎn)發(fā)請求

      客戶端

      公網(wǎng)主機80端口

      內(nèi)網(wǎng)服務器

      內(nèi)網(wǎng)80端口

      內(nèi)網(wǎng)主機接收到來自隧道的數(shù)據(jù)包后再主動連接內(nèi)網(wǎng)主機自身的80端口,連接成功之后將數(shù)據(jù)包原封不動地轉(zhuǎn)發(fā)數(shù)據(jù)包給80端口,待HTTP服務器程序處理完這個數(shù)據(jù)包,生成了響應報文之后再原路轉(zhuǎn)發(fā)回去,最終到達公網(wǎng)的80端口,然后返回給最開始請求公網(wǎng)服務器80端口的客戶端。

      響應報文

      原路轉(zhuǎn)發(fā)

      HTTP服務器

      內(nèi)網(wǎng)80端口

      公網(wǎng)80端口

      客戶端

      總的來說,內(nèi)網(wǎng)穿透技術(shù)可以適用于所有能夠連通公網(wǎng)的機器,提供了一個通用的打通內(nèi)網(wǎng)的方式。

      4. 內(nèi)網(wǎng)穿透種類

      根據(jù)上述原理搭建的內(nèi)網(wǎng)穿透環(huán)境,數(shù)據(jù)經(jīng)過中轉(zhuǎn)公網(wǎng)服務器進行傳輸,被視為是最為常見的內(nèi)網(wǎng)穿透種類,市面上大多數(shù)內(nèi)網(wǎng)穿透產(chǎn)品都是采用這種類型實現(xiàn)穿透。

      在內(nèi)網(wǎng)穿透傳輸大量數(shù)據(jù)時如果都經(jīng)過服務器中轉(zhuǎn)的話,這樣會對服務器端帶寬壓力比較大。

      只要是數(shù)據(jù)量很大,而一般利用中轉(zhuǎn)服務器又需要一定規(guī)模投入的應用,我們都可以考慮用P2P技術(shù)。

      最為常見的實現(xiàn)P2P的方式是采用UDP打洞技術(shù),UDP打洞技術(shù)是通過中間服務器的協(xié)助在各自的NAT網(wǎng)關(guān)上建立相關(guān)的表項,使P2P連接的雙方發(fā)送的報文能夠直接穿透對方的NAT網(wǎng)關(guān),從而實現(xiàn)P2P客戶端互連。如果兩臺位于NAT設備后面的P2P客戶端希望在自己的NAT網(wǎng)關(guān)上打個洞,那么他們需要一個協(xié)助者——集中服務器,并且還需要一種用于打洞的Session建立機制。

      Session建立機制:

      假定客戶端A要發(fā)起對客戶端B的直接連接,具體的“打洞”過程如下:

      (1)A最初不知道如何向客戶端B發(fā)起連接,于是A向集中服務器(本質(zhì)上是一臺被設置在公網(wǎng)上的服務器,建立P2P的雙方都可以直接訪問到這臺服務器。位于NAT網(wǎng)關(guān)后面的客戶端A和B都可以與一臺已知的集中服務器建立連接,并通過這臺集中服務器了解對方的信息并中轉(zhuǎn)各自的信息)發(fā)送消息,請求集中服務器幫助建立與客戶端B的UDP連接。

      (2)集中服務器將含有B的外網(wǎng)和內(nèi)網(wǎng)的地址二元組發(fā)給A,同時,集中服務器將包含有A的外網(wǎng)和內(nèi)網(wǎng)的地址二元組信息的消息也發(fā)給B。這樣一來, A與B就都知道對方外網(wǎng)和內(nèi)網(wǎng)的地址二元組信息了。

      (3)當A收到由集中服務器發(fā)來的包含B的外網(wǎng)和內(nèi)網(wǎng)的地址二元組信息后, A開始向B的地址二元組發(fā)送UDP數(shù)據(jù)包,并且A會自動鎖定第一個給出響應的B的地址二元組。同理,當B收到由集中服務器發(fā)來的A的外網(wǎng)和內(nèi)網(wǎng)地址二元組信息后,也會開始向A的外網(wǎng)和內(nèi)網(wǎng)的地址二元組發(fā)送UDP數(shù)據(jù)包,并且自動鎖定第一個得到A回應的地址二元組。一旦A與B都向?qū)Ψ降腘AT設備在外網(wǎng)上的地址二元組發(fā)送了數(shù)據(jù)包,就打開了A與B之間的“洞”,A與B向?qū)Ψ降耐饩W(wǎng)地址發(fā)送數(shù)據(jù),等效為向?qū)Ψ降目蛻舳酥苯影l(fā)送UDP數(shù)據(jù)包了。一旦應用程序確認已經(jīng)可以通過往對方的外網(wǎng)地址發(fā)送數(shù)據(jù)包的方式讓數(shù)據(jù)包到達NAT后面的目的應用程序,程序會自動停止繼續(xù)發(fā)送用于“打洞”的數(shù)據(jù)包,轉(zhuǎn)而開始真正的P2P數(shù)據(jù)傳輸。

      當然,UDP轉(zhuǎn)換協(xié)議提供的“洞”不是絕對可靠的,多數(shù)NAT設備內(nèi)部都有一個UDP轉(zhuǎn)換的空閑狀態(tài)計時器,如果在一段時間內(nèi)沒有UDP數(shù)據(jù)通信,NAT設備會關(guān)掉由“打洞”過程打出來的“洞”。如果P2P應用程序希望“洞”的存活時間不受NAT網(wǎng)關(guān)的限制,就最好在穿越NAT以后設定一個穿越的有效期。

      從現(xiàn)在的主流應用的角度上來看,基于TCP的P2P應用顯然不如基于UDP的應用那么廣泛,但是也存在打洞的需求。

      TCP相對于UDP而言要復雜的多,TCP連接的建立要依賴于三次握手的交互,所以NAT網(wǎng)關(guān)在處理TCP連接的時候,需要更多的開銷。但是,由于TCP協(xié)議完備的狀態(tài)機機制,TCP反而比UDP更能精確的獲取某個Session的生命期。

      一種新的代理類型 XTCP 能解決這個問題,實現(xiàn)方式可以是采用搭建FRP服務器的方式,在傳輸數(shù)據(jù)的兩端都部署上 FRP 客戶端上用于建立直接的連接。實現(xiàn)方法點擊此處

      三、常見的內(nèi)網(wǎng)穿透產(chǎn)品

      內(nèi)網(wǎng)地址映射

      內(nèi)網(wǎng)端口映射

      動態(tài)域名解析(DDNS)

      1. 花生殼 官網(wǎng)

      花生殼既是內(nèi)網(wǎng)穿透軟件、內(nèi)網(wǎng)映射軟件,也是端口映射軟件。規(guī)模最大,較正規(guī),完善,使用簡單但收費高。

      2. Nat123 官網(wǎng)

      nat123是內(nèi)網(wǎng)端口映射與動態(tài)域名解析(DDNS)軟件,在內(nèi)網(wǎng)啟動映射后,可在外網(wǎng)訪問連接內(nèi)網(wǎng)網(wǎng)站等應用。

      3. NATAPP 官網(wǎng)

      NATAPP基于ngrok的國內(nèi)內(nèi)網(wǎng)穿透服務,免費版會強制更換域名。

      4. ngrok

      ngrok是一個反向代理,通過在公共的端點和本地運行的Web服務器之間建立一個安全的通道。ngrok可捕獲和分析所有通道上的流量,便于后期分析與響應。主要用途是給網(wǎng)站或者安裝開發(fā)提供部署環(huán)境,但是也同樣可以用來進行端口轉(zhuǎn)發(fā)。

      5. Frp 搭建方法

      相比ngrok,frp內(nèi)網(wǎng)穿透無需多復雜的配置就可以達到比較好的穿透效果,具有較強的擴展性,支持 tcp, udp, http, https 協(xié)議,并且 web 服務支持根據(jù)域名進行路由轉(zhuǎn)發(fā)。此外,F(xiàn)RP 提供了一種新的代理類型 XTCP ,可以在傳輸大量數(shù)據(jù)時讓流量不經(jīng)過服務器中轉(zhuǎn),用于實現(xiàn)點對點穿透。

      在了解frp原理前,首先需要理解什么是代理。

      Proxy即代理,被廣泛應用于計算機領域,主要分為正向代理與反向代理:

      正向代理隱藏了真實的請求客戶端。服務端不知道真實的客戶端是誰,客戶端請求的服務都被代理服務器代替來請求,某些科學上網(wǎng)工具扮演的就是典型的正向代理角色。用瀏覽器訪問http://www.google.com時被墻了,于是你可以在國外搭建一臺代理服務器,讓代理幫我去請求 google,代理把請求返回的相應結(jié)構(gòu)再返回給我。

      當多個客戶端訪問服務器時服務器不知道真正訪問自己的客戶端是那一臺。正向代理中,proxy和client同屬一個LAN,對server透明。

      反向代理隱藏了真實的服務端,當我們請求 ww.baidu.com 的時候,背后可能有成千上萬臺服務器為我們服務,但具體是哪一臺,你不知道,也不需要知道,你只需要知道 www.baidu.com 是我們的反向代理服務器,反向代理服務器會幫我們把請求轉(zhuǎn)發(fā)到真實的服務器那里去。Nginx就是性能非常好的反向代理服務器,用來做負載均衡。

      反向代理中,proxy和server同屬一個LAN,對client透明。

      FRP實現(xiàn)內(nèi)網(wǎng)穿透,就在于使用反向代理,使得真實的服務端得以隱藏。當外部用戶(client)請求訪問服務端VPS的時候,服務端VPS是下圖中的客戶端(實質(zhì)上是上圖中的server)的反向代理服務器,反向代理服務器會幫我們把請求轉(zhuǎn)發(fā)到真實的服務器(下圖中的客戶端)那里去。這樣就實現(xiàn)了內(nèi)網(wǎng)穿透。

      即:

      Client = 外部用戶

      proxy = 公網(wǎng)服務器(需要在服務器上搭建FRP服務端)

      Server = 內(nèi)網(wǎng)服務器(需要在服務器上搭建FRP客戶端)

      通過Internet 訪問

      FRP

      Client

      proxy

      Server

      通過Internet 訪問

      FRP

      外部用戶

      FRP服務端 公網(wǎng)服務器

      FRP客戶端 內(nèi)網(wǎng)服務器

      四、內(nèi)網(wǎng)穿透實戰(zhàn)

      [內(nèi)網(wǎng)穿透服務器]

      使用FRP實現(xiàn)內(nèi)網(wǎng)穿透,遠程訪問內(nèi)網(wǎng)服務器

      公網(wǎng)環(huán)境訪問內(nèi)網(wǎng)服務器(以使用samba(smb)文件共享服務為例)

      使用FRP外網(wǎng)訪問內(nèi)網(wǎng)FTP服務器(以訪問內(nèi)網(wǎng)samba服務為例)

      [內(nèi)網(wǎng)穿透計算機]

      外網(wǎng)環(huán)境下基于FRP、VNC技術(shù)遠程訪問計算機,實現(xiàn)內(nèi)網(wǎng)穿透

      [內(nèi)網(wǎng)穿透路由器]

      外網(wǎng)環(huán)境下使用Frp內(nèi)網(wǎng)穿透路由器,實現(xiàn)后臺的遠程訪問

      [內(nèi)網(wǎng)穿透開機]

      外網(wǎng)環(huán)境下基于FRP、VNC技術(shù)遠程開機

      外網(wǎng)環(huán)境下基于Linux主機udp廣播,實現(xiàn)遠程開機

      外網(wǎng)環(huán)境下基于路由器廣播,一鍵喚醒內(nèi)網(wǎng)計算機實現(xiàn)遠程開機 (推薦)

      [內(nèi)網(wǎng)穿透硬盤]

      外網(wǎng)環(huán)境通過FRP實現(xiàn)硬盤遠程管理(以路由器掛載為例)

      [內(nèi)網(wǎng)穿透監(jiān)控]

      基于內(nèi)網(wǎng)穿透實現(xiàn)樹莓派監(jiān)控的公網(wǎng)遠程訪問與遙控

      [內(nèi)網(wǎng)穿透Nas]

      基于Frp實現(xiàn)群暉的遠程訪問(ssh、DSM、DS file、WebDAV Server、emby)

      [內(nèi)網(wǎng)穿透筆記]

      虛假公網(wǎng)IP體驗動態(tài)域名解析

      NAPT類型測試與XTCP點對點內(nèi)網(wǎng)穿透適用例外

      FTP映射出現(xiàn)227 Entering Passive Mode錯誤命令原因及解決方法

      參考:

      1: https://blog.csdn.net/cherrylvlei/article/details/82563276

      2: https://blog.csdn.net/He11o_Liu/article/details/79279328

      3: https://zhuanlan.zhihu.com/p/30351943

      4: https://blog.csdn.net/zhangguo5/article/details/77848658

      DNS NAT TCP/IP

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:wps表格怎樣隱藏編輯欄(怎么在wps文檔里面隱藏表格)
      下一篇:Python 工匠:做一個精通規(guī)則的玩家(python是什么意思)
      相關(guān)文章
      亚洲人成无码www久久久| 亚洲精品国产第一综合99久久 | youjizz亚洲| 亚洲精品无码久久毛片波多野吉衣| 亚洲精品高清国产一线久久| 亚洲一级Av无码毛片久久精品| 国产亚洲情侣久久精品| 亚洲国产精品久久久久秋霞小| 亚洲人成综合在线播放| 亚洲一级免费毛片| 亚洲人成激情在线播放| 亚洲另类小说图片| 亚洲一区二区三区免费视频| 亚洲欧洲精品一区二区三区| 亚洲第一永久在线观看| 亚洲免费网站在线观看| 亚洲精品无码久久久久久久| 亚洲一区二区三区播放在线| 亚洲乱码卡一卡二卡三| 亚洲日本国产综合高清| 亚洲精品久久无码| 亚洲国产av无码精品| 亚洲伦乱亚洲h视频| 亚洲中文字幕无码一区| 亚洲不卡中文字幕无码| 亚洲国产高清在线| 亚洲日本国产精华液| 亚洲日本国产综合高清| 亚洲AV无码一区二区三区网址| 国产精品亚洲综合网站| 国产日产亚洲系列最新| 亚洲国产另类久久久精品| 亚洲欧洲在线观看| 亚洲国产精品久久丫| 亚洲欧美成aⅴ人在线观看| 国产AV无码专区亚洲AV琪琪 | 亚洲五月综合缴情在线观看| 亚洲av永久无码精品秋霞电影影院| 亚洲四虎永久在线播放| 亚洲免费在线视频观看| 亚洲欧洲无卡二区视頻|