概念
- 端口轉(zhuǎn)發(fā)(Port Forwarding)是一種網(wǎng)絡(luò)配置技術(shù),允許外部網(wǎng)絡(luò)上的設(shè)備通過公共 IP地址訪問位于私有網(wǎng)絡(luò)內(nèi)部的特定設(shè)備。它通常在路由器或防火墻上配置,將來自外網(wǎng)的請求轉(zhuǎn)發(fā)到內(nèi)網(wǎng)中的目標(biāo)設(shè)備
- 端口轉(zhuǎn)發(fā)是通過網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)機制實現(xiàn)的一種功能。當(dāng)外網(wǎng)用戶嘗試連接到路由器的公共 IP 地址和指定端口時,路由器會根據(jù)預(yù)設(shè)的規(guī)則將該請求轉(zhuǎn)發(fā)到內(nèi)網(wǎng)中特定的 IP 地址和端口上
框架
用協(xié)議棧代碼框架再說明一下:

在如下拓撲中,pc1想要利用端口轉(zhuǎn)發(fā)訪問server1,應(yīng)該有哪些流程?

根據(jù)上面的框架,如下是流程解析:
發(fā)送流程
- 到達PREROUTING鏈(DNAT):數(shù)據(jù)包首先進入nat表的PREROUTING鏈,通過DNAT規(guī)則修改目標(biāo)地址和端口
- 到達路由決策:內(nèi)核根據(jù)目標(biāo)IP(已修改為內(nèi)網(wǎng)服務(wù)器IP)決定將數(shù)據(jù)包發(fā)送到哪個接口(如LAN口)
- 經(jīng)過FORWARD鏈(過濾):數(shù)據(jù)包經(jīng)過filter表的 FORWARD 鏈,放行轉(zhuǎn)發(fā)流量(內(nèi)核forward值為1)
- 到達POSTROUTING鏈(SNAT):數(shù)據(jù)包進入nat表的POSTROUTING鏈,修改源地址為防火墻的LAN口IP
返程流程
- 服務(wù)器響應(yīng):內(nèi)網(wǎng)服務(wù)器將響應(yīng)包發(fā)送到防火墻的LAN口(目標(biāo)地址為原始請求的源 IP)
- 到達路由決策:防火墻識別這是轉(zhuǎn)發(fā)流量的返回包,根據(jù)連接跟蹤(conntrack)恢復(fù)原始目標(biāo)IP
- 到達POSTROUTING鏈(SNAT逆向):將源地址從內(nèi)網(wǎng)服務(wù)器IP改回防火墻的WAN口IP
- 發(fā)送回客戶端:響應(yīng)包通過WAN口返回給外部客戶端
所以正常邏輯我們就需要按照如上流程進行防火墻規(guī)則配置
eNSP 端口轉(zhuǎn)發(fā)實驗
實驗拓撲

- 配置:
Client配置
?
server配置:

- 路由器配置


- 端口轉(zhuǎn)發(fā)規(guī)則配置(用于將外網(wǎng)訪問路由器的某個端口流量轉(zhuǎn)發(fā)到內(nèi)網(wǎng)服務(wù)器的指定端口):
nat server protocol tcp global current-interface 8080 inside 192.168.1.2 80

- 在sever內(nèi)啟動http server

- 啟動client進行連接

- wan口抓包:

- server局域網(wǎng)抓包

端口轉(zhuǎn)發(fā)已生效,端口與ip已經(jīng)成功轉(zhuǎn)換
但是沒有成功建立連接,下面我將用實際設(shè)備進行端口轉(zhuǎn)發(fā)發(fā)包驗證
實際開發(fā)板端口轉(zhuǎn)發(fā)實驗
配置如圖

- linux 主板配置nat
DNAT規(guī)則:iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1000 -j DNAT --to 192.168.10.2:333
修改FORWARD規(guī)則:匹配原始端口1000(而非 333):iptables -A FORWARD -i eth0 -o br0 -p tcp --dport 1000 -d 192.168.10.2 -j ACCEPT - PC1發(fā)送包配置:

點擊send發(fā)送 - PC1網(wǎng)卡抓包:

- PC2網(wǎng)口抓包:

端口轉(zhuǎn)發(fā)已經(jīng)完成,暫不解決回包問題,關(guān)于SNAT的配置可以自行拓展
端口轉(zhuǎn)發(fā)與端口映射
- 工作機制的區(qū)別:
端口轉(zhuǎn)發(fā):主要處理來自外網(wǎng)的請求,將其轉(zhuǎn)發(fā)到內(nèi)網(wǎng)中的目標(biāo)設(shè)備。它依賴于靜態(tài)配置的規(guī)則,通常是一對一的映射關(guān)系。
端口映射:既可以處理來自外網(wǎng)的請求,也可以處理來自內(nèi)網(wǎng)的請求。它可以是一對多或多對多的映射關(guān)系,更加靈活。 - 處理方式的區(qū)別:
端口轉(zhuǎn)發(fā):專注于從外網(wǎng)到內(nèi)網(wǎng)的流量轉(zhuǎn)發(fā),通常是一對一的關(guān)系。例如,將外部端口 80 的請求轉(zhuǎn)發(fā)到內(nèi)網(wǎng) Web 服務(wù)器的端口 80
端口映射:可以處理雙向流量,支持一對一或多對多的映射。例如,將多個外部端口映射到同一臺設(shè)備的不同服務(wù)端口,或在同一設(shè)備上進行端口重定向。
通俗理解
- 端口映射可以實現(xiàn)外網(wǎng)到內(nèi)網(wǎng)和內(nèi)網(wǎng)到外網(wǎng)雙向的通信,而端口轉(zhuǎn)發(fā)只能實現(xiàn)外網(wǎng)到內(nèi)網(wǎng)的單向通信。
閱讀原文:原文鏈接
該文章在 2025/8/6 16:45:25 編輯過