メインコンテンツへスキップ
見出し画像

10Gを殺さずFortiGateを使うルーティング/NAT設計 #4|UCG-Fiber・PBR・VIP・二段NAT

    • 10G回線を活かしつつFortiGate 60Fを残した理由

    • UCG-FiberとFortiGateの役割をどう分けたか

    • Transit / Static Route / PBRを使う理由

    • 内部通信をInternet向けPBRへ吸わせない考え方

    • FortiGate側SNATとUCG-Fiber側NATが重なる経路

    • 外部公開をUCG-Fiber→FortiGate→HAProxyへ渡す理由

    (※前回の【Home・Work・DMZ・IoTを分けた自宅VLAN設計】をまだ読んでいない方は、ぜひそちらから!)
    ⏪ Home・Work・DMZ・IoTを分けた自宅VLAN設計 #3|k3s・NAS・DMZ三層

    #3では 、家族の生活環境と自分の実験場を分けるために、Home / Work / IoT / Management / Storage / DMZへ境界を作った。

    でも、境界を作っただけではNetworkは使えない。

    次に必要なのは、必要な通信だけ、その境界をどう越えさせるかだった。

    しかも我が家には一つ厄介な条件があった。

    10G回線を活かしたい。でもFortiGate 60Fも使いたい。

    この二つは、そのままでは相性が良くない。

    1GのFortiGateをInternetの先頭には置けなかった

    Internet回線側は、NTTの小型ONUをUCG-Fiberの10G SFP WANへ直接入れる構成にした。

    理由は単純で、10G回線を1Gの装置で最初から絞りたくなかったから。

    もし、

    ```
    Internet
       ↓
    FortiGate 60F
       ↓
    UCG-Fiber
       ↓
    LAN
    ```

    の順にすれば、FortiGateの1G Interfaceが最初のボトルネックになる。

    それでは、せっかく10G対応のONUとUCG-Fiberを入れる意味が薄い。

    だからInternet EdgeはUCG-Fiberへ任せる。

    一方で、内部の信頼境界ではFortiGateのFirewall / UTM / Policyを使いたい。

    ここで役割を分けた。

    ```
    Internet Edge / WAN
            ↓
        UCG-Fiber

    Internal Security Boundary
            ↓
       FortiGate 60F
    ```

    速度を受ける装置と、信用境界を判断する装置を分けた。

    これがRouting設計の出発点だった。

    East-Westを全部FortiGateへ通さない

    もう一つ避けたかったのが、Server間の大量通信まで全部1G Firewallへ流すことだった。

    ESXi、k3s、NAS、DB。

    この辺りは、内部でかなり通信する。

    同一L2内で完結できるものまでFortiGateへ上げると、10G Fabricを作った意味がなくなる。

    だから、

    ```
    同一VLAN内のEast-West
            ↓
    10G L2 Fabricで完結

    信頼境界を跨ぐ通信
            ↓
    FortiGateで判断
    ```

    とした。

    これは「Firewallを避ける」のではない。

    Firewallで見る必要がある境界だけを、意図してFirewallへ通すという考え方だ。

    UCG-FiberとFortiGateの間にTransitを置く

    UCG-FiberとFortiGateは別の役割を持つ。

    その二つをつなぐために、Transit Networkを置く。

    概念的にはこうなる。

    ```
    Internal VLAN
         ↓
    FortiGate
         ↓
    Transit
         ↓
    UCG-Fiber
         ↓
    Internet
    ```

    FortiGate側のDefault RouteはUCG-Fiber側を向く。

    そしてFortiGateをGatewayとして使うVLANからInternetへ出す通信は、PBRでUCG-Fiber側へ送る。

    PBRは「どこへ送るか」より「何を送らないか」が難しい

    Policy Based Routingは便利だ。

    例えば、

    ```
    このVLANから来た通信
            ↓
    UCG-Fiberへ送る
    ```

    と書けば、Internetへの出口を固定できる。

    でも、ここで雑に0.0.0.0/0へ投げると、内部通信まで上流へ吸われる。

    実際に監視やSyslogを組んだ時、この罠が効いた。

    本来は内部のZabbix / Log Serverへ行くべき通信まで、PBRに乗せればUCG-Fiber側へ向いてしまう。

    だから現行の考え方は、

    ```
    内部宛通信
       ↓
    PBRから除外
       ↓
    通常Routing

    Internet宛通信
       ↓
    PBR
       ↓
    UCG-Fiber
    ```

    になる。

    FortiGateのPolicy Routeでは、内部宛を除外するRuleを先に置く。

    監視Server宛には、実際に`Stop PBR`というコメントを付けたRuleもある。

    ここで初めて、#3で作った境界を壊さずにInternetへ出せる。

    NATは一段ではない

    FortiGateを通ってInternetへ出る経路では、FortiGate側のFirewall PolicyでSource NATするものがある。

    その先でUCG-FiberがWAN側NATを行う。

    つまり経路によっては、

    ```
    Client / Server
       ↓
    FortiGate SNAT
       ↓
    UCG-Fiber NAT
       ↓
    Internet
    ```

    という二段NATになる。

    二段NATは美しい構成ではない。

    でも、10G WANをUCG-Fiberで受けながら、内部ではFortiGateをSecurity Boundaryとして残すという要件から生まれた。

    そしてこのNATは、後でSquidのSource IPが同じに見える問題にもつながる。

    Networkの都合は、Application Layerの見え方まで変える。

    その話は#10で扱う。

    外から入る通信は逆方向に段階的に渡す

    Inboundはさらに慎重にした。

    外部公開の80/443を、いきなりk3sやApplication VMへ投げない。

    入口は、

    ```
    Internet
       ↓
    UCG-Fiber
       ↓
    FortiGate
       ↓
    HAProxy
       ↓
    Proxy / Inspection
       ↓
    k3s / Application
    ```

    と段階的にする。

    UCG-FiberはInternet Edgeとして必要なPortだけ次へ渡す。

    FortiGateはVIPとFirewall PolicyでHAProxyへ渡す。

    HAProxy以降は、Host / SNI / BackendといったApplication寄りの判断へ進む。

    ここでも考え方は#3と同じ。

    境界を一気に飛び越えさせない。

    一層ずつ役割を持たせる。

    そうすると障害時にも、

    • UCG-Fiberまで来たか

    • FortiGateまで来たか

    • VIPを通ったか

    • HAProxyへ届いたか

    • その先のProxy / Ingressへ行ったか

    と切り分けられる。

    二台のL3機器がいると、往路と復路が重要になる

    UCG-FiberとFortiGateの両方がL3に関わる構成では、非対称Routingが一番怖い。

    FortiGateはStateful Firewallなので、行きと帰りを一つのSessionとして追えない経路はトラブルの元になる。

    だから、

    • ClientのDefault Gateway

    • FortiGateのStatic Route

    • PBR

    • PBR除外

    • Source NAT

    • UCG-Fiber側のRoute / NAT

    • 戻り経路

    をセットで考える。

    「pingが通った」だけで終わらせず、

    そのPacketがどの経路で行き、どこから戻るのかを説明できるか。

    ここまで見て初めて、二段構成が安定する。

    この構成で守りたかったもの

    RoutingやPBRの話だけを見ると、かなり面倒な構成に見える。

    でもやりたかったことはシンプルだった。

    10Gの速度を殺したくない。

    家族のNetworkとLabは分けたい。

    内部の重要境界はFortiGateで見たい。

    外部公開は一段ずつ中へ入れたい。

    この4つを同時に成立させようとした結果が、UCG-Fiber + FortiGate + Transit + PBR + NAT + VIPだった。

    次回は、その経路を支えるL2側へ戻る。

    10G×2 LAG、1G×4 LACP、RSTP。

    そして「Link Upしているのに安定しない」という10G特有の面倒さへつながっていく。

    【連載インデックス】
    ⏪ Home・Work・DMZ・IoTを分けた自宅VLAN設計 #3|k3s・NAS・DMZ三層

    ⏩ 次の記事:ごく普通の一般家庭(物理10G・k8s 8台)のネットワークを大更改した話 #5 【LACP/STP設計編】


     
     
    ベンチャー→SES13年→現メガベンのインフラエンジニア。 自宅NW要塞でAI・Kubernetes・Local LLM・GPUを飼育中。 AIに開発を壊されて学んだ「任せ方・止め方・戻し方」を、成功談より失敗談多めで投下します。 Amazonアソシエイト参加

    あなたへのおすすめ