外部(インターネット側)から公開が必要な社内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-web | test-vip-web |
| インターフェース | wan1 | wan1 |
| 外部IPアドレス | 192.168.10.201 | 192.168.10.201 |
| マップ先IPアドレス | 192.168.1.120 | 192.168.1.110 |
| ポートフォワード | TCP 80 → 80 | TCP 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を作成する
- ポリシー&オブジェクト > バーチャルIP を開きます。
- 「新規作成」を選択します。
- 名前、インターフェース(wan1)、外部IPアドレス、マップ先のIPv4アドレスを入力します。
- ポートフォワード を有効にし、プロトコル(TCP)、外部サービスポート(80)、マップ先ポート(80)を指定します。
- 「OK」を選択して保存します。



ポートフォワードを使わず「1対1」でIPだけ変換することもできますが、その場合は全ポートが内部へ通るため、公開範囲を絞りたいときはポートフォワードで必要なポートだけを開けます。
手順2: ファイアウォールポリシーで許可する
VIPを作っただけでは通信は通りません。WAN側からの通信を、宛先VIP宛に許可するポリシーを作成します。ポイントは、ポリシーの宛先に内部IPではなくVIPオブジェクトを指定することです。
- ポリシー&オブジェクト > ファイアウォールポリシー で「新規作成」を選択します。
- 着信インターフェースをwan1、発信インターフェースをinternal(内部サーバー側)にします。
- 宛先に作成したVIP(test-vip-web)を指定します。送信元はallでも、公開相手を絞るなら特定アドレスにします。
- サービスを公開するもの(今回はHTTP)に絞り、アクションを許可にします。
- 「OK」で保存します。


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

実際の疎通は、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が効いている状態です。

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"

この実疎通確認では、検証ネットワークの戻り通信を対称にするためポリシーの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後の宛先と許可ポリシーを確認します。
関連記事・公式資料
あわせて、ポリシーの作成・管理の基本は以下も参照してください。

コメント