巧用雙向NAT實現外網埠對映
環境介紹
1. FW1有固定公網IP(預設走internet1),FW2通過撥號上網(預設走internet2),地址不固定
2. 部門A通過fw1作為出口(SNAT),部門B通過fw2作為出口(SNAT)
3. 外網使用者想直接訪問內部業務系統192.168.1.100的9000埠
網路拓撲如下:
配置過程:
涉及到多層NAT的地址轉換,外網要訪問內網的埠,首先考慮到了DNAT,如在fw1中配置DNAT地址對映,100.1.1.10:9000----->192.168.0.11:9000,然後在fw2中再配置DNAT對映192.168.0.11:9000----->192.168.1.100:9000。配置完成之後,發現業務時鐘無法訪問。
故障分析:
1. 在fw1和fw2中配置DNAT地址對映,100.1.1.10:9000----->192.168.0.11:9000----->192.168.1.100:9000。這層轉換是沒有問題的
2. 業務有問題,其實是出在了資料回包的過程,192.168.1.100:9000----->100.1.1.1,當該資料到了fw2之後,fw2對該包有如下處理,查路由表,發現需要從g0/0/0口發出去,然後匹配策略,以及SNAT,但是此時是匹配不了之前SNAT的會話表的(100.1.1.1---->192.168.0.11:9000[192.168.1.100:9000]),因為之前的資料是從G0/0/1介面進來的,所以資料不會轉換192.168.0.11。那麼該資料包要從G0/0/0出去,就要就要看防火牆的配置了,是否允許該區域之間的流量通過,不過即便允許了資料包也被丟棄了,一般上防火牆都會認為是攻擊報文
3. 那知道問題所在就好,只需要將資料的走向和資料來源一致即可,可以將fw2的預設路由指向fw1,這樣資料經過fw2和fw1的dnat規則後會自動轉換。但是這種改法有很多缺點,最為明顯的就是影響部門B的使用,整個路由都從internet2改成了internet1。另外如果fw1和fw2如果是同一網段還好,如果是跨網段,任意一個路徑都有可能從不同的出口出去(實際我的環境就是多層NAT,為了方便理解,我將拓撲優化了)
4. 最優的辦法就是,在fw1中,凡是去往192.168.0.11的9000,8080等埠的,都先做一個源地址轉換,轉換成自己的出介面地址192.168.0.10,這樣fw2在回包的時候,肯定會將資料包送回給fw1再出去。
總結:
1. 綜合來說,fw1做了雙向nat,即把去往100.1.1.10的9000轉成192.168.0.11的9000,也把源地址100.1.1.1轉成了192.168.0.10
2. 再擴充套件下雙向NAT,常見的網際網路架構中,一般會配置多個出口,如電信,聯通。如果希望實現源進源出的效果(即電信入站流量預設從電信出站,聯通反之),那麼採用雙向NAT,在轉換DNAT的同時,也將公網源地址轉換稱為防火牆的內網出介面IP(區域網)。這樣就很簡單的實現了源進源出功能
3. 高流量場合下,如資料中心出口,配置諸多NAT規則的效能是始終比直接路由轉發要低的。如無特殊需求,還是不建議對資料包經常進行雙向NAT轉換。