【網絡層協議】NAT技術內網穿透

IP地址數量限制

? ? ? ? 我們知道,IP地址(IPv4)是一個4字節32位的整數,那么一共只有2^32也就是接近43億個IP地址,而TCP/IP協議棧規定,每臺主機只能有一個IP地址,這就意味著,一共只有不到43億臺主機能接入互聯網嗎?

? ? ? ? 實際上,由于一些特殊的IP地址(主機號全0代表網絡號,主機號全1代表廣播地址,127.*用于本地環回測試)的存在,IP地址實際數量要比這個數更小一些,并且IP地址并不是按主機臺數分配的,每張網卡都需要配置一個或多個IP地址,這就導致了一個很尷尬的問題:IP地址不夠用了!這時候有三種方式來解決:

  • 動態分配IP地址:只給接入網絡的設備分配IP地址,因此即使同一MAC地址的設備,每次接入網絡分配到的IP地址也不一定是相同的。
  • NAT(Net Address Transimision):也就是網絡地址轉換,這是我們今天要重點學習的。
  • IPv6:這并不是IPv4的簡單升級,兩者是互不兼容的協議,用16字節128位的整數表示一個IP地址,理論上能夠給沙漠中的每一粒沙子都分配一個IP地址,但目前尚未普及。

私有IP與公網IP

? ? ? ? 如果一個組織內部組建局域網,IP地址只用于局域網內通信,而不連接互聯網,那么理論上可以使用任意的IP地址,但如果想要接入Internet,就必須遵守RFC 1918對于組建局域網的私有IP地址的限制:

  • 10.*:前8位是網絡號,共16,777,216個地址(大家在學校的時候,IP地址應該都是10開頭的)
  • 172.16.*到172.31.*:前12位是網絡號,共1,048,576個地址
  • 192.168.*:前16位是網絡號,共65,536個地址(大家在家里的時候,IP地址應該都是192.168開頭的)
  • 包含在以上范圍的,都成為私有IP,其余的則是公網IP

大家可能覺得奇怪,不是要講解決IPv4地址數量不足的問題嗎,怎么扯到了私有IP和公網IP了,事實上,這是NAT技術能解決地址數量不足的一個很關鍵的要素:如果私有IP地址只在局域網內使用,那么不同局域網就可以出現重復的私有IP了,那么可用的IP數量就大大增加了!

? ? ? ? 那么問題來了,局域網中的主機怎么和公網進行通信呢?所以NAT技術實際上做的就是:在子網內的主機需要與外網進行通信時,路由器將IP報文首部的IP地址進行替換,經過一次次路由,最終數據包中的源IP地址成為一個公網IP,可以在公網中訪問目標公網IP了。

NAT技術

? ? ? ? 前面提到了路由器將IP報文首部的IP地址替換,那么這個替換過程長啥樣呢?讓我們接著往下學,首先了解一下關于路由器的一些相關知識:

  • 一個路由器可以配置至少兩個IP地址,一個WAN口(廣域網接口)IP,一個或一個以上的LAN口(局域網接口)IP。
  • 路由器LAN口連接的主機都從屬于這個路由器的某個子網中。
  • 子網內的主機IP地址不能重復,但不同路由器的子網間可以出現重復的IP地址。
  • 每個家用路由器實際上又作為運營商路由器子網中的一個節點,并且這樣的運營商路由器可能有很多級,最外層的出入口運營商路由器的WAN口IP就是一個公網IP了。

? ? ? ? 現在再回過頭表述一下什么是NAT技術:子網主機需要和外網通信時,家路由器將IP報頭首部的源IP地址替換為自己的WAN口IP,這樣主機替換,最終數據包中的源IP地址稱為一個公網IP。

????????所以現在我們也就大概能夠理解為什么我們的寬帶欠費后,運營商可以讓我們上不了網了,因為我們的每臺主機其實都是在內網中,要想訪問公網,那就必須先通過NAT轉化為公網IP,而運營商路由器識別出欠費,直接不幫我們進行NAT,也就自然斷網了。


? ? ? ? 通過前面的學習,我們解決了一個問題:局域網內的主機如何向公網的服務器發送請求。但是還有一個很重要的問題:服務器要怎么把響應返回給服務器呢?

????????按照我們前面的說法,局域網中有那么多的內網主機發送到服務器的請求的IP都是相同的(出入口運營商服務器的WAN口IP),服務器返回請求的目的IP都是運營商出入口NAT路由器,那NAT路由器怎么判定要把數據包交給哪個局域網的主機呢?

? ? ? ? 這個時候NAPT(網絡地址端口轉換)閃亮登場了,NAT路由器在進行源IP替換時,會將報文的源IP+port與自己替換的WAN口IP+port的映射關系存到一張轉化表里,這很重要,因為:內網IP在局域網中唯一,port在主機上唯一;公網IP在公網中唯一,port在路由器上唯一。兩個唯一值存在一張表里,就意味著兩者互為鍵值!建立起這張轉換表后,公網就可以訪問到內網了!

(這個關聯表是由NAT服務器自動維護的,對于TCP,在建立連接時生成表項,斷開連接后刪除表項)

內網穿透

? ? ? ? 在學習了NAT技術后,我們就可以開始學習內網穿透了。首先,什么是內網穿透?其實內網穿透就是:一臺局域網中的主機,通過一個在公網的主機,訪問另一個局域網中的主機。

? ? ? ? 那么內網穿透的原理是什么呢?其實我們學習了NAT和NAPT后,就非常容易理解了:

? ? ? ?當客戶機與服務器建立好轉換表后,只要服務器1能夠給服務器2提供這樣的服務:服務器2發來的某個端口的數據全部轉發到客戶機,就可以實現讓服務器2通過公網訪問客戶機了。

????????內網穿透的價值在于,可以通過它實現遠程辦公/跨區域、部門的協作。那么為了更好地理解內網穿透的過程,接下來我們一起來做一個實驗!部署實現一下內網穿透~

部署與測試內網穿透

????????首先,說一下我的實驗環境:

  • 客戶機:Ubuntu 20.04虛擬機(VMware設置為NAT模式)
  • 服務器1:阿里云服務器(因為我們需要公網IP)
  • 服務器2:Windows上的xterminal(SSH客戶端軟件)
  • 轉發功能:通過frp實現的,因為它用起來很簡單

frp下載:下載的是linux amd64
Release v0.58.1 · fatedier/frphttps://github.com/fatedier/frp/releases/tag/v0.58.1? ? ? ? 簡單講講實驗步驟:

  • 在客戶機上部署、安裝、配置frpc(frp的客戶端),然后把本地ssh 22號端口映射到frps的xxx端口(如6000)
  • 在云服務器1上部署配置frps(frp的服務器),設置讓xxx端口(如7000)與客戶機上的frpc進行通信
  • 服務器2此時通過云服務器1的7000端口就能訪問到客戶機的ssh服務了!

我們下載好這個壓縮包之后,解壓就能得到:

其中frps和frpc分別是frp的服務器和客戶端,而.toml文件則是對服務器/客戶端的配置信息。

frpc.toml:

  • serverAddr和serverPort分別是frps的IP和port
  • localPort和remotePort表示將本機的22號端口(ssh專用)映射到frps主機的6000號端口(也可以自己設置)——其實就是frps服務器會將6000號端口收到的請求都轉發到frpc的22號端口,收到應答后再轉發回給請求方。

frps.toml:

  • frps上的配置信息比較簡單,只要設置好要與frpc進行通信的端口即可

啟動frps:

啟動frpc:

值得一提的是,我們直接運行frpc并不會使用.toml文件中的配置,必須加-c選項顯式指定。

此時我們可以發現frps這邊顯示連接成功了(我還配置了nginx,不過步驟類似,所以只和大家說ssh的操作):

接下來我們通過Xterminal來訪問云服務器的6000端口,如果和我們設想一樣的話,應該就能ssh登錄客戶機:

可以看到,XTerminal啟動后,直接就是在客戶機的~下:

我們在這下面新建一個文件,可以看到確實多了個文本文件:

????????ok,本篇文章到這里也接近尾聲了,最后再給大家梳理下流程:服務器1是一臺云服務器,有自己的公網IP,服務器2是windows機器用的是內網IP,而客戶機是虛擬機用的也是內網IP。frp為我們做的事情是:啟動frps(服務器)后,啟動frpc(客戶端)與frps連接,此時由于內網主機主動通過NAT技術與公網主機建立了連接,那么通過NAPT技術我們就可以實現公網主機訪問內網主機了,并且frps會把發到6000號端口的數據都轉發到frpc的22號端口,接下來另一臺內網主機(ssh客戶端)就可以通過訪問云服務器的6000號端口來ssh登錄客戶機了!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73379.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73379.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73379.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

時隔多年,終于給它換了皮膚,并正式起了名字

時隔多年,終于更新了直播推流軟件UI,并正式命名為FlashEncoder。軟件仍使用MFC框架,重繪了所有用到的控件,可以有效保證軟件性能,也便于后續進一步優化。 下載地址:https://download.csdn.net/download/Xi…

代碼隨想錄第六十二天| Floyd 算法精講 A * 算法精講 (A star算法) 最短路算法總結篇

Floyd 算法精講 題目描述 小明希望在公園散步時找到從一個景點到另一個景點的最短路徑。給定公園的景點圖,包含 N 個景點和 M 條雙向道路,每條道路有已知的長度。小明有 Q 個觀景計劃,每個計劃包含一個起點和終點,求每個計劃的最…

如何避免測試環境不穩定導致的誤報

避免測試環境不穩定導致誤報的核心方法包括搭建獨立穩定的測試環境、使用環境監控工具、建立環境變更管理機制、定期維護更新測試環境以及提升團隊的環境管理意識。 其中,搭建獨立穩定的測試環境尤為關鍵。獨立的測試環境能有效隔離其他環境的干擾,保證測…

初級:I/O與NIO面試題深度剖析

一、引言 在Java開發中,I/O(輸入/輸出)操作是程序與外部設備(如磁盤、網絡等)進行數據交互的重要方式。傳統的I/O模型在處理大規模數據和高并發場景時存在一定的局限性,而NIO(New I/O&#xff…

Axure RP9教程 :輪播圖(動態面板) | 頭部鎖定

文章目錄 引言I 輪播圖操作步驟在畫布中添加一個動態面板設置面板狀態II 頭部鎖定將頭部區域選中,右鍵組合或用Ctrl+G快捷鍵;將組合的頭部區域,右鍵創建動態面板;引言 動態面板的功能十分強大,比如:擁有獨立的內部坐標系,有多個狀態; Banner的案例中會用到動態面板多個…

超微服務器主板重置ipmi登錄密碼

超微服務器主板重置ipmi登錄密碼 超微服務器的ipmi登錄密碼不對,需要重置但是bios內并沒有找到可以設置的選項。 以下是解決辦法: 安裝IPMITOOL apt install ipmitool -y執行以下命令加載模塊: modprobe ipmi_watchdog modprobe ipmi_po…

藍橋杯第十屆 數的分解

題目描述 本題為填空題,只需要算出結果后,在代碼中使用輸出語句將所填結果輸出即可。 把 2019 分解成 3 個各不相同的正整數之和,并且要求每個正整數都不包含數字 2 和 4,一共有多少種不同的分解方法? 注意交換 3 個…

Docker入門篇4:查看容器資源、查看容器詳細信息、查看容器日志、查看容器內運行的進程

大家好我是木木,在當今快速發展的云計算與云原生時代,容器化技術蓬勃興起,Docker 作為實現容器化的主流工具之一,為開發者和運維人員帶來了極大的便捷 。下面我們一起開始入門第四篇:查看容器資源、查看容器詳細信息、…

基于數據挖掘的網絡入侵檢測關鍵技術研究

標題:基于數據挖掘的網絡入侵檢測關鍵技術研究 內容:1.摘要 隨著互聯網的迅速發展,網絡安全問題日益嚴峻,網絡入侵行為對個人、企業和國家的信息安全構成了巨大威脅。本文的目的是研究基于數據挖掘的網絡入侵檢測關鍵技術,以提高網絡入侵檢測…

中學數學幾百年重大錯誤:將無窮多各異假R誤為R——兩數集相等的必要條件

中學數學幾百年重大錯誤:將無窮多各異假R誤為R——兩數集相等的必要條件 黃小寧 設集A{x}表A各元均由x代表,相應變量x的變域是A。其余類推。本人多年前公開發表的論文中有定理: h定理(兩數集相等的必要條…

react-activation 實現頁面保活記錄

這里寫目錄標題 一、安裝插件(可選)1、react-activation (推薦)2、umi-plugin-keep-alive 二、AliveScope的兩種配置方式1、在src/app.ts 中配置2、在src/layout/index.tsx中配置 三、umi中的配置四、使用問題記錄1、drop使用不生…

STM32使用紅外避障傳感器

1.1 介紹: 該傳感器模塊對環境光適應能力強,其具有一對紅外線發射與接收管,發射管發射出一定頻率的紅外線,當檢測方向遇到障礙物(反射面)時,紅外線反射回來被接收管接收,經過比較器…

python tkinter 開發蓍草占卜系統

1. 項目概述 1.1 簡介 蓍草占卜是中國傳統的占卜方法,用于演算六十四卦。本系統通過現代編程技術,將傳統的蓍草占卜方法數字化,提供一個準確、便捷的占卜工具。 蓍草占卜,作為中國古代的一種傳統占卜方法,承載著深厚…

Linux搭建本地時間服務器及時間同步

搭建一個本地時間服務器,使得局域網內主機時間保持一致。 設置正確時間 # 設置系統時間 date -s "2025-03-25 17:31:00" # 將系統時間寫入硬件時鐘 hwclock --systohc時間服務器設置 系統應該預先安裝chronyd 要允許 所有客戶端 通過你的 chronyd 服務器…

2025-3-25算法打卡

一,走迷宮 1.題目描述: 給定一個 NMNM 的網格迷宮 GG。GG 的每個格子要么是道路,要么是障礙物(道路用 11 表示,障礙物用 00 表示)。 已知迷宮的入口位置為 (x1,y1)(x1?,y1?),出口位置為 (x…

力扣刷題39. 組合總和

39. 組合總和 - 力扣(LeetCode) 需要定義一個index變量用來記錄訪問數組的下標,每次遞歸進行傳參,在搜索過程中,因為為了避免重復數據,而且允許一個元素的重復出現,傳入index時傳入當前遍歷的i…

ISIS-3 LSDB鏈路狀態數據庫同步

上一章我們介紹了ISIS的鄰居建立關系以及ISIS的路由器角色有哪些,在不同的網絡類型當中建立鄰居關系有什么不同,并且以實驗案例抓包的形式給大家進一步介紹了建立的過程。 這一章我們來介紹ISIS中是如何實現鏈路狀態數據庫同步的,與OSPF的鏈路狀態同步有什么不同,在不同網絡類…

Opencv計算機視覺編程攻略-第三節 圖像顏色處理

第三節 圖像顏色處理 1.顏色比較2.GrabCut分割圖像3.色調、飽和度以及亮度 1.顏色比較 主要實現逐像素的顏色比較,其中注意BGR顏色空間不連續,不利于顏色提取和區分,轉換到Lab空間: int getColorDistance(const cv::Vec3b& c…

BoomCut AI 技術創建本地化的營銷視頻

目錄 視頻翻譯實驗 交換實驗 數字人實驗 核心功能與技術亮點 適用場景 BoomCut 提供用于視頻翻譯、數字人等的 AI 技術,以快速創建本地化的營銷視頻 視頻翻譯實驗 電影電影哪吒之魔童降世換成西班牙語

論華為 Pura X 折疊屏性能檢測

在科技浪潮中,折疊屏手機以其創新形態掀起市場熱潮。華為 Pura X 作為華為最新折疊手機,承載前沿科技與精湛工藝,成為行業焦點。它融合先進折疊屏技術與優質材質,致力于打破傳統手機使用邊界,為用戶開啟全新體驗。但產…