上一篇中
"利用掌握的路由知識解決現實環境中的問題" 提出的解決方法並沒有解釋清楚問題的癥結!
現在補上!
更改之處:在本次實驗當中(M0n0wall 用 Pfsense替代)
遇到問題:本次遇到的問題與之前並沒有不同 -- 從SZBG ping/tracert HKBG 192.168.15.21 正常
但客戶端Outlook郵箱就是不能正常連接HKBG的郵件服務器192.168.15.21
思考的方向:
既然ping和tracert都沒有問題、說明路由沒什麼太大問題。
到底是哪裏不同呢?(協議),ping/tracert/Outlook使用的協議不同!
正常情況下: 客戶端 連接 郵件服務器是這樣->
很顯然Outlook是使用TCP協議 與 郵件服務器通訊 而ping/tracert 是使用ICMP協議!
M0n0wall 和 Pfsense這兩者都是基於狀態檢測的防火牆(它集成了:FW+Router的功能)
基於狀態檢測的防火牆特性:
如果:某個會話不完整(如:只有請求報文SYN、沒有響應報文 ACK)那麼這個會話請求將被攔截或丟棄!
通常它要求必須保持會話的完整性,我們知道(一個TCP連接的建立與斷開分爲:3次握手與4次斷開)
TCP是面向連接的且有狀態的可靠傳輸協議:
把我們現有的網絡架構放大一點看得更清楚:
我們可以從圖中看出(報文從192.168.20.45出去/回來時的路徑 是不相同的,即通常所謂:非對稱路由)
然而這種情況在(M0n0wall 和 Pfsense)看來此次會話是不完整的(因爲它僅僅是收到了SYN的包、其它包都沒有收到)
所以192.168.20.45發起的連接請求將會被(M0n0wall 和 Pfsense)攔截或丟棄!
爲了解決這個問題PFsense提供了一辦法:
我們只需要在 System - > Advanced -> Firewall&NAT 勾選“Static route filtering”。即可真正解決上述問題!