1. 內網穿透|FRP|NGROK|一步搞定
內網穿透從字面上來說就是將本地的伺服器映射到外網可訪問
設想下
如果有已知的公網伺服器,那內網的本地服務就可以映射到外網了。
如果沒有已知的公網伺服器,那隻能代理到外網的伺服器訪問即可。
ps: 公網伺服器與可訪問外網的伺服器是有區別的。區別在於用戶訪問某寶服務,先是到公網伺服器然後再轉發的淘寶服務。所以可訪問外網的伺服器不等於公網伺服器。
換句話說直接將伺服器部署在與公網伺服器相通的機器上不就可以了,我也是這樣想的。所以就有生產環境與測試環境,其實內網穿透還是存在安全隱患的,內網穿透大部分應用於測試環境,比如常用的微信相關開發。
最後我們來聊聊FRP與NGROK
兩者的原理都一樣,通過解析過的域名做本地服務埠映射。
Ngrok相對比較簡單,只需要能訪問外網的機器即可。可參考 http://ngrok.cc 裡面有教程, 但是唯一不足的是免費分配的域名容易被微信限制,如果不是做微信相關的服務可忽略。
接下來就是FRP,不僅僅需要能訪問外網的機器,還需要一台公網伺服器。如果需要做域名相關的測試,就需要申請域名解析到公網伺服器。可參考 https://gofrp.org/ 裡面有文檔。強調下服務端必須部署在公網伺服器上才行。個人感覺功能也比Ngrok強大些,穩定些。
2. 去中心化 P2P 網路穿透
由於我對一些奇奇怪怪的技術比較感興趣,就特別想去了解它的原理。
最近看到兩個關鍵詞——去中心化,網路穿透。
了解了相關技術我終於明白,為什麼當年王欣說:「技術無罪」。
用到這類技術的有:kuaibo (王欣),TeamViewer
簡單來說,去中心化之後就是點對點通信。沒有伺服器作為中介,兩個節點直接通信而不通過伺服器。
為了更好地理解什麼是去中心化網路,先要了解傳統的中心化網路。中心化的節點必須是伺服器,客戶端只能和伺服器通信,而不能單獨地與另一個客戶端直接通信。若客戶端想發送信息給另一個客戶端,必須通過伺服器。在這種模型中,伺服器扮演提供服務的角色,而客戶端則是被服務的。這樣的通信網路,就是傳說中的中心化網路。
在去中心化的網路中,實際上是沒有客戶端和伺服器的說法,客戶端之間相互地提供服務。客戶端之間相互連接,每個客戶端同時對外提供相應的服務,同時也使用其他客戶端提供的服務。在這種情況下,就沒有客戶端的說法了,我們可以稱它為節點。這樣的通信網路,就是傳說中的去中心化網路。這種通信網路去除了中心伺服器的絕對控制,也提高的網路傳輸效率,同時中心伺服器的壓力也變小了。
NAT(Network Address Translation,網路地址映射)是將公網地址映射為子網地址。能夠進行映射的網路裝置被稱為 NAT 路由器。
在子網與外網通信的過程中,子網和公網連接的節點稱為路由器。假設子網在192.168.1.0網段。路由器的公網IP為112.93.114.32,伺服器的公網IP地址為120.93.24.180。當伺服器給子網機器發送數據時,實際上是發送到路由器上,路由器能夠通過路由器上記錄的映射表,將數據映射到子網的機器中;相對的,當子網機器給伺服器發送數據時,先將數據發送到路由器,再由路由器發送給伺服器。
2019年11月25日,世界互聯網組織宣布,最後一個IPv4地址已經分配完畢。現在,我們已經用完了IPv4地址。
在更早之前,由於 IPv4 地址緊缺,提出了NAT理論,通過公網IP地址與埠的組合,映射到子網機器的IP和埠。這樣就可以用少量的公網IP來表示更多的子網IP,可以減緩IPv4地址耗盡。
NAT 實現方案有三種:靜態轉換,動態轉換,埠地址映射。
1. 靜態轉換
一個子網IP對應一個公網IP,且配置後不能更改,這並不能節省公網IP。
2. 動態轉換
公網IP數量大於子網IP數量,公網IP組成一個IP地址池。當子網IP需要轉換時,NAT路由器就從地址池中取出一個空閑的公網IP,分配給子網機器,使得子網機器可以和公網進行通信。當數據傳輸完後,就回收此公網IP到地址池中。
3.埠地址映射
通過改變子網機器發送到公網的源埠號(對外的公網IP為路由器的公網IP,修改後的埠號為路由器上的埠號),最大限度地節省IPv4地址。
從NAT功能上做區分,可以將NAT分為四種: 對稱NAT , 完全錐形NAT , IP限制錐形NAT , 埠限制錐形NAT 。
在區分之前,必須先明白一點:NAT 會為子網機器的每一個網路進程都分配一個地址和埠,從而能夠將子網網路進程與公網地址做映射。
准備一個子網客戶端,兩台公網伺服器。
准備一個子網客戶端,兩台公網伺服器。
准備一個子網客戶端,一台公網伺服器。
網路穿透,就是能夠讓公網的機器(多數指的是網關)找到子網的機器。
穿透下圖中的兩個網關,使得在兩個在不同子網下的機器可以相互通信。網路穿透的本質就是一個子網的機器給另一個網關的公網IP地址和埠發送數據,利用其記錄的映射表,使得另一個子網的機器可以接收到數據。
舉個栗子,子網機器192.168.1.3:2341給公網機器180.93.45.46:8888發送數據的過程中,在網關(NAT1)會產生一條映射記錄。後續其他公網或者子網的機器發送數據到112.93.13.56:43891,就可以讓子網機器192.168.1.3:2341收到數據。
兩端的NAT,只要有一方是完全錐形NAT,就可以穿透。
下面以限制錐形NAT(NAT1),穿透對稱NAT為例
(圖片均來自網路)
感謝King老師
2020.3.26 23:37 廣州