本記事について
本記事では、Fortinet 社のファイアウォール製品である FortiGate について、ヘアピン NAT を設定して内部端末から外部 IP アドレスを経由して内部サーバにアクセスできるようにする方法について説明します。
動作確認環境
本記事の内容は以下の機器にて動作確認を行った結果に基づいて作成されています。
- FortiGate-60F
- バージョン 7.4.3
ヘアピン NAT とは
以下図のようなネットワークにおいて、DMZ に存在する Web サーバを外部ネットワークに公開する要件があるとします。これを実現するためには FortiGate にて外部ネットワーク側の特定アドレス・ポート宛の通信を Web サーバ宛にポートフォワーディング(宛先変換)するよう設定します。さらに、内部ネットワークの端末から同じように外部ネットワークの特定アドレス・ポート宛に通信した場合にも Web サーバに接続させたい場合があります(下図オレンジの通信)。このためには、外部ネットワークから通信させる場合とは異なる設定が必要となります。

このときの内部ネットワークの端末から外部ネットワーク側のアドレスを経由して内部のアドレスに接続できるようにするための NAT 設定のことをヘアピン NAT と呼びます。
以下ではヘアピン NAT の設定方法を説明します。
外部アドレスが FortiGate のインターフェースアドレスの場合
まず、内部端末からの宛先アドレスが FortiGate の外部側インターフェースのアドレスである場合のヘアピン NAT の設定方法について説明します。
ここでは以下のようなネットワーク構成を想定します。FortiGate の wan1 インターフェースのアドレスである 10.100.1.2 の TCP ポート 8888 宛の接続について、宛先を 10.10.10.100 ポート 80 に変換し DMZ 内の Web サーバと通信させることを考えます。

この場合、以下の設定が必要となります。
- ポートフォワーディング用の VIP
- 内部から外部アドレスへの通信を許可するファイアウォールポリシー
- 外部から DMZ への通信を許可するファイアウォールポリシー
ここでは GUI で設定する場合について説明します。
ポートフォワーディング用の VIP の設定
GUI 左側のメニューから「ポリシー&オブジェクト > バーチャルIP」をクリックします。

表示されたバーチャルIP画面にて「新規作成」をクリックします。

バーチャルIP設定画面が表示されるため各項目を設定します。

- 名前には任意の分かりやすい名前を入力します
- ネットワーク欄では次の通り設定します
- インターフェースは対象通信を着信するインターフェースを設定します
- タイプはスタティックNATとします
- 外部IPアドレス/範囲には変換前の宛先アドレスを入力します
- 今回の例では FortiGate の wan1 のアドレスです
- マップ>IPv4アドレス/範囲には変換後の宛先アドレスを入力します
- 今回の例では Web サーバのアドレスです
- ポートフォワードを有効にし次の通り設定します
- プロトコルは対象通信に合わせて選択します
- 今回の例では TCP です
- ポートマッピングタイプは 1対1 にします
- 外部サービスポートは変換前の宛先ポート番号を入力します
- 今回の例では 8888 です
- IPv4ポートへマップは変換後の宛先ポート番号を入力します
- 今回の例では 80 です
- プロトコルは対象通信に合わせて選択します
以上の設定ができたら「OK」をクリックします。
バーチャルIP画面でバーチャルIPが追加されたことを確認します。

以上でバーチャルIPの設定は完了です。
内部から外部アドレスへの通信を許可するファイアウォールポリシーの設定
内部ネットワークから FortiGate の外部側インターフェースのアドレスへの通信を許可するファイアウォールポリシーを設定します。ポイントは宛先のアドレスを FortiGate の外部側インターフェースのアドレスとし(今回の例では wan1 のアドレス)、サービスを変換前のポート(今回の例では TCP/8888) にすることです。

外部から DMZ への通信を許可するファイアウォールポリシー
外部から DMZ への通信を許可するファイアウォールポリシーは、通常のポートフォワーディング設定と同様に設定します。送信元は外部の任意のアドレスからの通信を許可することとして all にします。宛先はあらかじめ作成していた VIP を指定します。サービスには変換後のポートとなるサービスを設定します。

以上でヘアピン NAT の設定は完了です。
外部アドレスが FortiGate が持つアドレスとは異なる場合
続いて外部アドレスが FortiGate が持つアドレスとは異なるアドレスである場合のヘアピン NAT の設定方法を説明します。
ここでは以下のようなネットワーク構成を想定します。FortiGate の wan1 インターフェースのアドレスセグメントに含まれる 10.100.1.10 の TCP ポート 8888 宛の接続について、宛先を 10.10.10.100 ポート 80 に変換し DMZ 内の Web サーバと通信させることを考えます。

この場合、以下の設定が必要となります。
- ポートフォワーディング用の VIP
- 内部から外部アドレスへの通信を許可するファイアウォールポリシー
- 外部から DMZ への通信を許可するファイアウォールポリシー
ここでは GUI で設定する場合について説明します。
ポートフォワーディング用の VIP の設定
GUI 左側のメニューから「ポリシー&オブジェクト > バーチャルIP」をクリックします。

表示されたバーチャルIP画面にて「新規作成」をクリックします。

バーチャルIP設定画面が表示されるため各項目を設定します。

- 名前には任意の分かりやすい名前を入力します
- ネットワーク欄では次の通り設定します
- インターフェースは対象通信を着信するインターフェースを設定します
- タイプはスタティックNATとします
- 外部IPアドレス/範囲には変換前の宛先アドレスを入力します
- 今回の例では 10.100.1.10 です
- マップ>IPv4アドレス/範囲には変換後の宛先アドレスを入力します
- 今回の例では Web サーバのアドレスです
- ポートフォワードを有効にし次の通り設定します
- プロトコルは対象通信に合わせて選択します
- 今回の例では TCP です
- ポートマッピングタイプは 1対1 にします
- 外部サービスポートは変換前の宛先ポート番号を入力します
- 今回の例では 8888 です
- IPv4ポートへマップは変換後の宛先ポート番号を入力します
- 今回の例では 80 です
- プロトコルは対象通信に合わせて選択します
以上の設定ができたら「OK」をクリックします。
バーチャルIP画面でバーチャルIPが追加されたことを確認します。

以上でバーチャルIPの設定は完了です。
内部から外部アドレスへの通信を許可するファイアウォールポリシーの設定
内部ネットワークから外部アドレスへの通信を許可するファイアウォールポリシーを設定します。ポイントは宛先のアドレスを外部のアドレスとし(今回の例では 10.100.1.10 のアドレス)、サービスを変換前のポート(今回の例では TCP/8888) にすることです。

外部から DMZ への通信を許可するファイアウォールポリシー
外部から DMZ への通信を許可するファイアウォールポリシーは、通常のポートフォワーディング設定と同様に設定します。送信元は外部の任意のアドレスからの通信を許可することとして all にします。宛先はあらかじめ作成していた VIP を指定します。サービスには変換後のポートとなるサービスを設定します。

以上でヘアピン NAT の設定は完了です。
参考:VIP の CLI コンフィグ
CLI コンフィグでは VIP の設定はconfig firewall vip
に該当します。
以下は VIP のコンフィグ例です。
config firewall vip
edit "VIP_10.100.1.10_8888"
set uuid 696741ce-0303-51ef-361a-cc6d16ae7028
set extip 10.100.1.10
set mappedip "10.10.10.100"
set extintf "wan1"
set portforward enable
set extport 8888
set mappedport 80
next
end
参考資料
FortiGate 記事一覧は以下記事でチェック

Amazon アフィリエイトリンク
以下は Amazon アフィリエイトリンクです。インフラエンジニアにそこそこおすすめなアイテムです。
note メンバーシップへの参加もお待ちしています!

コメント