Concept 核心概念

定義

NAT (Network Address Translation) 是一種將封包標頭中的「來源 IP」或「目的 IP」進行替換的技術,主要用來解決 IPv4 位址不足及隱藏內部網路結構的問題。

生活化比喻:公司總機與收發室

想像 FortiGate 就是一間大公司的「總機兼收發室」

SNAT (寄信出去)

就像員工(內網 IP)要寄信給客戶。信件經過收發室時,管理員會把寄件人改成「公司總部地址」(公網 IP),而不是寫員工家裡的私人地址。

DNAT / VIP (電話進來)

就像客戶要打電話找特定部門。客戶撥打的是公司的「代表號」(公網 IP),總機小姐根據分機表,將電話轉接給內部的「業務部經理」(伺服器私有 IP)。

Mechanism 運作原理

1. SNAT 與 DNAT (Virtual IP) 的區別

功能 SNAT (Source NAT) DNAT (Destination NAT / VIP)
流量方向 LAN WAN (內網上網) WAN DMZ/LAN (外部存取內部)
行為 修改封包的 來源 IP 修改封包的 目的 IP
關鍵技術 PAT (Port Address Translation) Port Forwarding / Virtual IP Mapping

2. NAT 模式比較

Firewall Policy NAT (預設)

直接在 Firewall Policy 內勾選 "NAT"。

  • 邏輯簡單:流量允許通過即轉換。
  • 適用:中小型企業、快速部署。

Central NAT (進階)

獨立的 Central SNAT / DNAT 表格。

  • 邏輯嚴謹:先查 Policy 放行,再查 NAT 表轉換。
  • 適用:大型企業、複雜路由、Cisco/Juniper 移轉。

Visuals 架構視覺化

圖 1 SNAT 封包流向與轉換 (員工上網)

%%{init: {'theme': 'neutral', 'themeVariables': { 'fontFamily': 'Noto Sans TC', 'fontSize': '20px', 'actorFontSize': '20px', 'noteFontSize': '18px', 'messageFontSize': '18px' }}}%% sequenceDiagram autonumber participant PC as 員工 PC
(192.168.1.10) participant FG as FortiGate
(NAT) participant WAN as 網際網路
(Google) Note over PC, FG: SNAT 場景:員工上網 PC->>FG: 請求: Src=192.168.1.10:51234, Dst=8.8.8.8:443 Note right of FG: 查表與轉換 (SNAT)
將 192.168.1.10 轉為 WAN IP (203.0.113.1)
建立 Session 表:Port 51234 -> 10001 (PAT) FG->>WAN: 轉發: Src=203.0.113.1:10001, Dst=8.8.8.8:443 WAN-->>FG: 回應: Src=8.8.8.8:443, Dst=203.0.113.1:10001 Note left of FG: 查表還原
將 203.0.113.1:10001 還原為 192.168.1.10:51234 FG-->>PC: 轉發: Src=8.8.8.8:443, Dst=192.168.1.10:51234

圖 2 DNAT (VIP) 拓樸與邏輯 (外部存取伺服器)

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#ffcccc', 'edgeLabelBackground':'#ffffff', 'tertiaryColor': '#fff0f0', 'fontSize': '20px', 'edgeLabelFontSize': '18px'}}}%% graph TD subgraph Internet ["網際網路 (Untrust)"] User[外部使用者
IP: 1.2.3.4] end subgraph FortiGate ["FortiGate (Edge)"] WAN_If[WAN1 介面
Public IP: 203.0.113.50] VIP_Obj[Virtual IP 物件
對應: 203.0.113.50:80 -> 10.1.1.20:8080] Policy[Firewall Policy
Src: All, Dst: VIP_Obj, Action: Accept] end subgraph DMZ ["DMZ 區域 (Trust)"] WebServer[網頁伺服器
Private IP: 10.1.1.20
Port: 8080] end User -- "1. 存取 http://203.0.113.50" --> WAN_If WAN_If -- "2. 匹配 VIP 規則 (DNAT)" --> VIP_Obj VIP_Obj -- "3. 檢查 Policy 放行" --> Policy Policy -- "4. 轉發封包 (Dst IP 變更)" --> WebServer style VIP_Obj fill:#f96,stroke:#333,stroke-width:2px style Policy fill:#bbf,stroke:#333,stroke-width:2px

圖 3 NAT 模式決策流程圖

%%{init: {'theme': 'neutral', 'themeVariables': { 'fontSize': '20px', 'edgeLabelFontSize': '18px' }}}%% flowchart TD Start(["封包進入 FortiGate"]) --> RouteLookup["路由查表"] RouteLookup --> ModeCheck{"使用哪種 NAT 模式?"} ModeCheck -- "Policy NAT (預設)" --> PolCheck["檢查 Firewall Policy"] PolCheck --> PolMatch{"符合 Policy?"} PolMatch -- Yes --> NATEnabled{"該 Policy 啟用 NAT?"} NATEnabled -- Yes --> ApplyNAT["依照 Policy 設定執行 SNAT"] NATEnabled -- No --> NoNAT["不進行轉換"] ApplyNAT --> Forward["轉發封包"] NoNAT --> Forward ModeCheck -- "Central NAT" --> CN_PolCheck["檢查 Firewall Policy (只看放行)"] CN_PolCheck --> CN_Match{"符合並放行?"} CN_Match -- Yes --> CN_Table["查閱 Central SNAT/DNAT 表格"] CN_Table --> CN_Apply["套用符合的 NAT 規則"] CN_Apply --> Forward

Use Case 實務應用場景

場景:混合型企業網路部署

某科技公司需要同時滿足以下需求:

  1. 財務部 (Internal): 只能存取銀行網站,且出去的 IP 必須固定為 203.0.113.10
  2. 一般員工 (Internal): 可自由上網,共用公司主要 IP 203.0.113.1
  3. ERP 系統 (DMZ): 需提供給外部廠商存取,使用 Port 4433 對應內部的 Port 443。

解決方案配置邏輯

  • 1
    財務部 (SNAT Pool) 建立 IP Pool,並在 Policy 內啟用 "Use Dynamic IP Pool"。
  • 2
    一般員工 (Interface NAT) Policy 啟用 NAT 並選擇 "Use Outgoing Interface Address" (預設)。
  • 3
    ERP 系統 (VIP / DNAT) 建立 Virtual IP (VIP) 物件,Policy 目的端指向 VIP。

CLI 配置實戰範例

FortiGate CLI Policy NAT Mode
# --- 步驟 1: 定義物件 (IP Pool & VIP) ---

config firewall ippool
    edit "Finance_NAT_Pool"
        set type overload
        set startip 203.0.113.10
        set endip 203.0.113.10
    next
end

config firewall vip
    edit "ERP_Service_DNAT"
        set extip 203.0.113.1
        set extintf "any"
        set portforward enable
        set extport 4433
        set mappedip 192.168.100.5
        set mappedport 443
    next
end

# --- 步驟 2: 設定防火牆策略 (Firewall Policy) ---

config firewall policy

    # 場景 A: 財務部 (SNAT: 指定 IP)
    edit 10
        set name "Finance_to_Internet"
        set srcintf "port2"         # 內部介面
        set dstintf "wan1"          # 外部介面
        set srcaddr "Finance_Subnet"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
        set nat enable              # 啟用 NAT
        set ippool enable           # 啟用 IP Pool
        set poolname "Finance_NAT_Pool" # 選擇剛剛建立的 Pool
    next

    # 場景 B: 一般員工 (SNAT: 介面 IP)
    edit 20
        set name "Staff_to_Internet"
        set srcintf "port2"
        set dstintf "wan1"
        set srcaddr "Staff_Subnet"
        set dstaddr "all"
        set action accept
        set schedule "always"
        set service "ALL"
        set nat enable              # 預設使用外網介面 IP (203.0.113.1)
    next

    # 場景 C: ERP 伺服器 (DNAT: VIP)
    edit 30
        set name "Internet_to_ERP"
        set srcintf "wan1"
        set dstintf "dmz"
        set srcaddr "all"
        set dstaddr "ERP_Service_DNAT" # 目的端直接放 Virtual IP 物件
        set action accept
        set schedule "always"
        set service "HTTPS"
        set nat disable             # DNAT 不需要此選項 (除非要隱藏來源 IP)
    next

end

大師點評

在此案例中,如果使用 Central NAT 會更具優勢!

因為可以將「位址轉換邏輯」與「安全放行政策」分開管理。無論財務部要連去哪個銀行,只要來源是財務部,就統一走特定的 IP Pool,這比在每一條 Policy 裡重複設定 IP Pool 更不容易出錯,也更容易維護。

Quiz 隨堂測驗

請回答以下問題來測試你的學習成果: