LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

[點晴永久免費OA]為什么通過路由器端口轉向到內部WEB服務器時,WEB頁面能夠抓到外網訪客的真實IP。而用PortTunnel之類的軟件實現的端口映射到內部WEB服務器時,WEB頁面抓到的卻是PortTunnel所在電腦的內網IP?

admin
2025年6月27日 11:10 本文熱度 44

這是一個關于網絡地址轉換(NAT)和應用層代理工作層級差異的經典問題。根本原因在于 數據包處理發生的網絡層級不同 以及 誰真正發起了到內部Web服務器的TCP連接

讓我們分解一下原因:

?? 1. 路由器端口轉發(DNAT)的工作原理(保留真實IP)

  • 工作層級: 網絡層(IP層)或傳輸層(TCP/UDP層)。

  • 過程:

    • 外網訪客發送一個數據包到路由器的公網IP地址(假設是 WAN_IP:80)。

    • 路由器檢查其端口轉發(Destination NAT, DNAT)規則,發現目標端口 80 需要轉發到內網服務器 LAN_SERVER_IP:80

    • 關鍵操作: 路由器只修改數據包的目標IP地址(從 WAN_IP 改為 LAN_SERVER_IP和目標端口(如果需要)。源IP地址(訪客的真實公網IP)保持不變。

    • 修改后的數據包被路由到內網Web服務器。

  • Web服務器視角: Web服務器看到這個TCP連接的源IP地址就是外網訪客的真實公網IP。因為從Web服務器的角度看,這個連接直接來自那個公網IP(雖然經過了路由器修改目標地址,但源地址沒變)。

  • 連接建立者: 從Web服務器的TCP棧角度看,連接是外網訪客直接發起的(源IP是訪客IP)。路由器只是在中間修改了目標地址,沒有中斷這個連接。

?? 2. Porttunnel 類軟件端口映射(通常是反向代理)的工作原理(顯示Porttunnel內網IP)

  • 工作層級: 應用層(通常是HTTP層,但也可以是其他應用層協議)。

  • 過程:

    • 外網訪客發送一個數據包到運行Porttunnel軟件的電腦的公網IP(PORTTUNNEL_IP:PortX)。

    • Porttunnel軟件(作為服務端)完整接收這個傳入的連接和數據。

    • 關鍵操作: Porttunnel軟件創建一個全新的、獨立的TCP連接,從它自己(PORTTUNNEL_LAN_IP)指向內部Web服務器(LAN_SERVER_IP:80)。

    • Porttunnel軟件將訪客發來的數據讀取出來,然后通過它自己新建的這個連接轉發給Web服務器。同樣地,它也會把Web服務器的響應讀出來,通過它接收到的訪客連接發送回去。

  • Web服務器視角: Web服務器看到的這個TCP連接的源IP地址是運行Porttunnel軟件的電腦的內網IP地址(PORTTUNNEL_LAN_IP。因為從Web服務器的角度看,這個連接是Porttunnel軟件自己主動發起的。

  • 連接建立者: Web服務器的TCP棧確認連接是由 PORTTUNNEL_LAN_IP 發起的。原始的訪客連接只到達了Porttunnel軟件,并未直接到達Web服務器。Porttunnel軟件充當了中間人(代理)的角色。

?? 總結關鍵差異

特性路由器端口轉發 (DNAT)Porttunnel類軟件 (應用層代理/反向代理)
工作層級網絡層/傳輸層 (IP/TCP頭修改)應用層 (處理應用數據)
連接處理修改原始數據包目標地址,透傳連接終結原始連接,新建到服務器的連接
源IP可見性Web服務器看到訪客真實公網IPWeb服務器看到Porttunnel主機的內網IP
本質網絡地址轉換 (NAT)應用層代理/反向代理

?? 為什么Porttunnel不保留源IP?(技術難點)

  1. TCP連接狀態: TCP是一個有狀態的協議。當Porttunnel終結了訪客的連接,那個連接的狀態就結束了。它需要一個新的TCP連接狀態機來與后端服務器通信。

  2. 應用層協議理解(可選但常見): 像Porttunnel這樣的工具,特別是配置為HTTP端口映射時,通常會理解HTTP協議。這使得它們能夠添加像 X-Forwarded-For 這樣的頭(見下文解決方案),但核心的TCP連接源IP仍然只能是Porttunnel本身的IP。

  3. 防火墻/NAT限制: 如果Porttunnel運行在Windows上,它本身可能位于另一個NAT設備(如家用路由器)后面,它甚至沒有公網IP來接收連接(除非做了端口映射到它),更不用說將原始源IP直接路由到內部服務器了。

?? 如何在Porttunnel場景下獲取真實IP?(解決方案)

既然Web服務器只能看到Porttunnel的IP,要獲取真實訪客IP,必須依賴應用層協議傳遞信息

  1. X-Forwarded-For HTTP Header: 這是最通用的方法。配置Porttunnel(或任何反向代理,如Nginx, Apache, HAProxy)在新建到后端Web服務器的連接時,在HTTP請求頭中添加一個 X-Forwarded-For 頭,其值設置為原始訪客的IP地址。Web服務器應用程序(如Apache, Nginx, IIS, 應用代碼)需要配置為讀取并信任這個頭(來自已知代理的IP),并用這個頭的值來記錄或處理訪客IP,而不是使用TCP連接的源IP。

  2. 代理協議(Proxy Protocol): 這是一個更底層的標準(最初由HAProxy提出),在TCP連接建立之初,代理服務器就在發送應用數據之前,先發送一行包含原始連接信息的文本(包括源IP/端口、目標IP/端口)。Web服務器需要明確支持并配置理解Proxy Protocol。它不依賴于特定的應用層協議(如HTTP),但需要代理和后端服務器都支持。

  3. Windows防火墻日志(間接/不推薦): 如果Porttunnel運行在Windows上,且Windows防火墻記錄了傳入連接,你可能在防火墻日志中找到原始IP和Porttunnel收到的連接。但這非常不便于集成到Web日志中,且依賴防火墻配置。

?? 結論

路由器端口轉發工作在底層(網絡層),通過簡單的目標地址修改直接透傳連接,使Web服務器能看到原始源IP。Porttunnel等軟件工作在應用層,作為代理終結客戶端連接并新建服務器端連接,因此Web服務器看到的是代理自身的IP地址。要獲取真實IP,必須使用應用層機制如 X-Forwarded-For 頭或Proxy Protocol。理解這個差異對于正確配置日志記錄、訪問控制和安全分析至關重要。???


相關教程:

?采用端口轉向軟件映射到局域網內的另外一臺WEB服務器時,利用Nginx實現抓取訪客真實外網IP[2]
  http://31874.oa22.cn


該文章在 2025/6/27 12:05:44 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲欧洲日韩综合国产综合 | 日本午夜福利在线观看 | 日本亚洲成a人片在线观看 一本大道香蕉久在线播放29 | 亚洲国产理论片在线观看 | 亚洲国产日韩精品视频 | 亚洲国产一区二区三区在线观看 |