內網服務器無法通過公網地址訪問映射到公網的內網服務
- 問題現象
- 問題原因
- 解決方法
- 總結
前幾天遇到一個網絡問題,在這里做下記錄,希望能幫助到有相同問題的朋友。
問題現象
網絡拓撲如上所示,服務器1和服務器2在同一內網,網段均為192.168.101.0/24,出口防火墻上有一個固定公網ip,地址是124.5.5.5。
服務器1上運行了一個業務系統,地址是192.168.101.111:80,然后在出口防火墻上做了映射,將其映射到了124.5.5.5:10080,此時,外部網絡環境中可以正常訪問124.5.5.5:10080,但是在內網環境中,如服務器2上,無法訪問124.5.5.5:10080。也就是說內網服務器上無法通過映射后的公網地址訪問內網服務。
問題原因
分析一下ip報文流轉過程中的源目地址變化,就可以發現問題所在。
服務器2訪問124.5.5.5:10080時,源地址192.168.101.222目的地址124.5.5.5;
報文到達出口防火墻后,會做一次地址轉換,將目的地址轉換為內網地址192.168.101.111,此時源地址192.168.101.222目的地址192.168.101.111;
報文一步步到達服務器1后,服務器1做出響應,源目地址轉換,此時源地址192.168.101.111目的地址192.168.101.222;
這時候,服務器1發現目的地址為同網段,報文會由服務器1通過接入交換機直接發送給服務器2;
服務器2檢查報文,發現源地址是192.168.101.111,并沒有與之匹配的會話(服務器2發送出去的報文目的地址是124.5.5.5),此時服務器2會丟棄這個報文,這就導致了訪問不通。
解決方法
要解決這個問題,只需要使得服務器1收到的ip報文中,源地址為公網地址124.5.5.5即可,這樣的話,服務器1回復的報文就變為源地址192.168.101.111目的地址124.5.5.5,報文會經過防火墻后再回到服務器2,完成整個通信過程。
要實現以上操作,只需要在防火墻上配置一條源NAT,將源目網段192.168.101.0/24的報文,源地址轉換為124.5.5.5,并將該條SNAT應用到防火墻與核心交換機相連的那個接口上。
總結
做完以上配置后,服務器2(192.168.101.222)通過124.5.5.5:10800訪問服務器1(192.168.101.111:80)時,網絡流量的流轉及地址變化如下:
1.數據包從S2發出
源地址:192.168.101.222:隨機端口(假設為54321)
目的地址:124.5.5.5:10800
路徑:S2 → 接入交換機 → 匯聚交換機→ 核心交換機 → 防火墻(內網接口)
2.防火墻處理(入口方向)
a.目的NAT(DNAT)
規則:將 124.5.5.5:10800映射到192.168.101.111:80
轉換后數據包:
源地址:192.168.101.222:54321
目的地址:192.168.101.111:80
b. 源NAT(SNAT)
規則:源目均為192.168.101.0/24的流量,源地址轉換為124.5.5.5
轉換后數據包:
源地址:124.5.5.5:54321(端口可能保持不變或變化)
目的地址:192.168.101.111:80
路徑:防火墻 → 核心交換機→ 匯聚交換機 → 接入交換機 → S1
3.S1 處理請求并響應
接收的數據包:
源地址:124.5.5.5:54321
目的地址:192.168.101.111:80
響應數據包:
源地址:192.168.101.111:80
目的地址:124.5.5.5:54321
路徑:S1 → 接入交換機 → 匯聚交換機→ 核心交換機 → 防火墻(內網接口)
4.防火墻處理(出口方向)
反向NAT(基于連接跟蹤):
反向DNAT:將目的地址124.5.5.5:54321還原為192.168.101.222:54321
反向SNAT:將源地址192.168.101.111:80還原為124.5.5.5:10800
轉換后響應包:
源地址:124.5.5.5:10800
目的地址:192.168.101.222:54321
路徑:防火墻 → 核心交換機 → 匯聚交換機 → 接入交換機 → S2
5.S2 接收響應
最終數據包:
源地址:124.5.5.5:10800
目的地址:192.168.101.222:54321
S2 視角:認為與124.5.5.5:10800通信成功,整個過程透明