【FortiGate】バーチャルIP(宛先NAT)設定手順|60Fで外部からサーバーを公開する

FortiGate 60FのバーチャルIP(宛先NAT)設定手順のアイキャッチ

外部(インターネット側)から公開が必要な社内Webサーバーなどへアクセスさせたいとき、FortiGateではバーチャルIP(VIP)を使って宛先NAT(DNAT)を設定します。外部の公開用IPアドレス宛の通信を、内部の実サーバーのプライベートIPアドレスへ変換して転送する機能です。この記事では、FortiGate 60F / FortiOS 7.4.9の実機画面で、バーチャルIPの作成、ファイアウォールポリシーへの適用、CLI確認、実際のHTTP通信による動作確認までを解説します。

送信元を変換するIPプール(SNAT)の逆で、こちらは「入ってくる通信」の宛先を変換します。あわせてIPプール(送信元NAT)の記事も読むと、NATの往復がひととおり理解できます。

この記事はCentral NATが無効な構成を前提にしています。Central NATが有効な場合はメニューが「DNAT & バーチャルIP」になり、ポリシーへの適用方法も異なります。

目次

バーチャルIP(宛先NAT)とは

インターネットからアクセスできるのはグローバルIPアドレスだけで、社内サーバーが持つプライベートIPアドレス(192.168.x.xなど)へ外部から直接は届きません。そこで、FortiGateのWAN側に割り当てたグローバルIP宛の通信を受け取り、内部サーバーのプライベートIPへ「宛先を書き換えて」転送します。これがバーチャルIPによる宛先NATです。

ポートフォワード(ポート開放)を併用すれば、「WAN側IPのTCP80番宛だけを内部サーバーの80番へ」といった具合に、特定ポートだけを絞って公開できます。

IPプール(SNAT)出ていく通信の送信元を変換(内部→外部)
バーチャルIP(DNAT)入ってくる通信の宛先を変換(外部→内部)

今回の設定例

項目設定画面・CLI確認実疎通確認
VIP名test-vip-webtest-vip-web
インターフェースwan1wan1
外部IPアドレス192.168.10.201192.168.10.201
マップ先IPアドレス192.168.1.120192.168.1.110
ポートフォワードTCP 80 → 80TCP 80 → 8080
ポリシーのNAT(SNAT)無効有効

前半の設定画面とCLI画像では、基本例として 192.168.1.120:80 を指定しています。後半の実疎通確認では、実際に用意したWebサーバーに合わせてマップ先を 192.168.1.110:8080 へ変更し、検証ネットワークの戻り通信を対称にするためSNATも有効にしました。読者の環境では、実際のサーバーIPと待ち受けポートへ読み替えてください。

検証環境のため外部IPにはWAN側のプライベートアドレスを使っています。実運用では、WANインターフェースのIP、WAN側セグメントの未使用IP、または上流からFortiGateへルーティングされた公開IPを設計に応じて指定します。どの方式でも、既存機器とのIP重複と上流側の経路を確認してください。

手順1: バーチャルIPを作成する

  1. ポリシー&オブジェクト > バーチャルIP を開きます。
  2. 「新規作成」を選択します。
  3. 名前、インターフェース(wan1)、外部IPアドレス、マップ先のIPv4アドレスを入力します。
  4. ポートフォワード を有効にし、プロトコル(TCP)、外部サービスポート(80)、マップ先ポート(80)を指定します。
  5. 「OK」を選択して保存します。
FortiGate 60FのバーチャルIP一覧画面(作成前)
ポリシー&オブジェクト > バーチャルIP を開き、「新規作成」を選択します。
FortiGate 60Fの新規バーチャルIP作成画面。外部IP・マップ先IP・ポートフォワード(80→80)を設定
外部IP(192.168.10.201)を内部サーバー(192.168.1.120)へマップし、ポートフォワードでTCP80→80を指定します。
FortiGate 60FのバーチャルIP一覧に作成したVIPが表示された状態
作成したVIPが一覧に表示されます。この時点ではまだポリシーから参照されていません。

ポートフォワードを使わず「1対1」でIPだけ変換することもできますが、その場合は全ポートが内部へ通るため、公開範囲を絞りたいときはポートフォワードで必要なポートだけを開けます。

手順2: ファイアウォールポリシーで許可する

VIPを作っただけでは通信は通りません。WAN側からの通信を、宛先VIP宛に許可するポリシーを作成します。ポイントは、ポリシーの宛先に内部IPではなくVIPオブジェクトを指定することです。

  1. ポリシー&オブジェクト > ファイアウォールポリシー で「新規作成」を選択します。
  2. 着信インターフェースをwan1、発信インターフェースをinternal(内部サーバー側)にします。
  3. 宛先に作成したVIP(test-vip-web)を指定します。送信元はallでも、公開相手を絞るなら特定アドレスにします。
  4. サービスを公開するもの(今回はHTTP)に絞り、アクションを許可にします。
  5. 「OK」で保存します。
FortiGate 60Fのファイアウォールポリシー作成画面で宛先にバーチャルIPを指定した状態
wan1→internalのポリシーを作り、宛先にVIP(test-vip-web)、サービスにHTTPを指定します。
FortiGate 60FのポリシーにバーチャルIPを宛先とした許可ポリシーが追加された状態
wan1→internalの許可ポリシーとしてVIP宛の通信が追加されました。

VIPが行うDNATと、ポリシーの「NAT」スイッチが行うSNATは別の処理です。内部サーバーのデフォルトゲートウェイがFortiGateで、戻り通信もFortiGateを通る通常構成ではSNATを無効にできます。戻り経路を強制的に対称にしたい場合や、内部サーバーから外部クライアントのIPを隠したい場合だけSNATを有効にします。

設定を確認する

CLIでVIPとポリシーの設定が入っているかを確認します。

FortiGate-60F # show firewall vip test-vip-web
config firewall vip
    edit "test-vip-web"
        set extip 192.168.10.201
        set mappedip "192.168.1.120"
        set extintf "wan1"
        set portforward enable
        set extport 80
        set mappedport 80
    next
end

FortiGate-60F # show firewall policy
config firewall policy
    edit 1
        set name "test-policy-vip"
        set srcintf "wan1"
        set dstintf "internal"
        set srcaddr "all"
        set dstaddr "test-vip-web"
        set action accept
        set schedule "always"
        set service "HTTP"
    next
end
FortiGate 60FのCLIでshow firewall vipとshow firewall policyを実行し、VIPとポリシーへの適用を確認
VIP本体の設定と、ポリシーの宛先(dstaddr)にVIPが入っていることを確認できます。

実際の疎通は、WAN側のクライアントからVIPの外部IP宛にアクセスし、内部サーバーが応答するか、FortiViewやフォワードトラフィックログでNAT後の宛先が内部IPになっているかで確認します。内部に公開対象のサーバーが動いていることが前提です。VIPのARP応答は既定で有効なので、外部IPがWAN側と同一セグメントの未使用アドレスであればFortiGateが代理でARPに応答します。

実際にアクセスして動作を確認する

設定が入ったら、実際にWAN側のクライアントからVIPの外部IP宛にアクセスして、内部サーバーの応答が返るかを確認します。今回は内部に簡易Webサーバー(192.168.1.110:8080)を用意し、WAN側の端末(192.168.10.45)からVIPの外部IP(192.168.10.201:80)へアクセスしました。

外部クライアントで curl を実行すると、VIPの外部IP宛のアクセスがFortiGateでDNATされ、内部サーバーのページが HTTP 200 で返ってきます。「外部IPにアクセスしたのに、中身は内部サーバーが応答している」——これが宛先NATが効いている状態です。

外部クライアントからバーチャルIP宛にcurlでアクセスし、内部サーバーのページがHTTP 200で返ってきた様子
外部クライアントからVIP外部IP(192.168.10.201)へアクセスすると、内部サーバーのページがHTTP 200で返ります。

FortiGate側では、diagnose debug flow でパケットの処理を追うと、宛先が外部IPから内部IPへ書き換えられている(DNATされている)ことが確認できます。ポリシーで許可され、宛先が内部サーバーへ変換されて転送されている様子が読み取れます。

# 宛先NAT(DNAT): 外部IP:80 を 内部サーバー:8080 へ変換
msg="DNAT 192.168.10.201:80->192.168.1.110:8080"
msg="Allowed by Policy-2: SNAT"
msg="SNAT 192.168.10.45->192.168.1.99:57228"
msg="npu session installation succeeded"
FortiGate 60Fのdiagnose debug flowで192.168.10.201:80から192.168.1.110:8080へのDNATとSNATを確認した画面
debug flowでは、192.168.10.201:80から192.168.1.110:8080へのDNATと、検証用SNATの両方を確認できます。

この実疎通確認では、検証ネットワークの戻り通信を対称にするためポリシーのSNATを併用しています。そのため、debug flowにはDNATだけでなくSNATも表示されます。実運用で内部サーバーの戻り通信がFortiGateを通る場合、SNATは必須ではありません。

設定時の注意点

  • 宛先はVIPオブジェクトを指定:Central NATが無効な構成では、ポリシーの宛先に内部サーバーの実IPではなくVIPを指定します。
  • 公開ポートは最小限に:ポートフォワードで必要なポートだけを開け、送信元アドレスも可能なら限定します。実際にインターネットへ公開する場合は、通信ログと必要なセキュリティプロファイルも有効にします。
  • 戻り経路を確認:内部サーバーのデフォルトゲートウェイまたは戻り経路がFortiGateを通らないと、応答が戻らない場合があります。
  • 管理アクセスとの競合に注意:同じ外部IPを使う場合は、WAN側のHTTPS/SSH管理ポートと公開ポートが重ならないようにします。
  • 外部IPの経路と重複を確認:WAN側セグメントの未使用IPを使う場合はARP競合がないこと、上流からルーティングされたIPを使う場合は経路がFortiGateへ向いていることを確認します。
  • Central NATの有無を確認:Central NATが有効な環境では、メニューとポリシーへの適用方法がこの記事と異なります。
  • 外向き通信の送信元変換はIPプール(SNAT)、こちらは内向き通信の宛先変換、と役割が逆である点を押さえておきましょう。

検証後にVIPを削除する

検証だけで使用したVIPを残す必要はありません。FortiGateはARP応答が有効なVIPの外部IPをローカルアドレスとして扱うため、未使用のVIPは予期しない通信処理を避けるために削除します。先に参照元のファイアウォールポリシーを削除または変更し、その後でVIPを削除します。

config firewall policy
    delete <ポリシーID>
end

config firewall vip
    delete "test-vip-web"
end

まとめ

  • バーチャルIPで外部IP・ポートを内部サーバーへDNATします。
  • Central NATが無効な構成では、WAN側から内部側への許可ポリシーの宛先にVIPを指定します。
  • 設定後は実通信とdebug flowまたはトラフィックログで、DNAT後の宛先と許可ポリシーを確認します。

関連記事・公式資料

あわせて、ポリシーの作成・管理の基本は以下も参照してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

30歳未経験からネットワークエンジニアに転職し、運用→構築→設計の仕事をやってます。色んな機器(Cisco、YAMAHA、Fortigate、PaloAlto)を触らせてもらいとても楽しい仕事です!

現在は派遣にて主にCiscoを中心としたネットワーク設計~構築をしております。

また、2023年より副業で個人事業主や小規模企業からのパソコン設定~ネットワーク作業の仕事を請け負っておりますので、もしお困りの方がいましたらお気軽にお問い合わせください。

●今までの作業履歴
- パソコンの新旧入れ替え
- 拠点間のインターネットVPN接続(YAMAHA-Fortigate)

コメント

コメントする

目次