如果有內網用戶通過內網IP使用公網IP訪問內部服務的需求,如果在防火牆上沒有特別配置,業務不通。
原因:硬件防火牆針對入方向的流量是先NAT,再過濾、路由;對於出發向的流量是先過濾、再路由、NAT。如果內網用戶使用私網IP訪問內部服務器的公網IP時,數據走向為:請求數據包-->到達防火牆內網口-->到達防火牆出接口發現DNAT策略(但是流量不會從該口流出,而是轉而從內網口)-->到達服務器-->服務器回包到達防火牆內網口-->防火牆發現目的地址為自己內部網絡IP,會將數據從內網口轉發出去(回程流量不經過防火牆外網口,不會匹配到DNAT策略)-->客戶端收到一個私網地址的響應包,丟包。
針對上面的情況,需要在防火牆的內網口針對該服務再做一個DNAT策略,使該訪問需求回包時能匹配到DNAT策略,改回服務器回包達到客戶端的IP,防止客戶端丟包。以上的環境是建立在服務器與客戶端的網關都在防火牆上時,當服務器與客戶端的網關不在防火牆上或服務器與客戶端為同段主機時,需要在防火牆的內借口上針對客戶端IP做一次源NAT,強制將數據回包引至防火牆。
iptables報文流向:
進到本主機的流量: prerouting--->input
本機轉發的流量:prerouting---->forward------>postrouting
本機流出的流量:output----->postrouting