はじめに
FortiGate を導入した環境で、以下のような通信トラブルに悩まされていませんか?

IP 電話(SIP) で、着信はできるのに通話が始まると「お互いの声が聞こえない」あるいは「片方の声しか聞こえない(片通話)」



FTP でサーバーへのログインは成功するのに、ファイル一覧の取得や転送でタイムアウトする。
ファイアウォールのポリシー(許可設定)は合っているはずなのに繋がらない……。 その原因は、FortiGate の ALG(Application Level Gateway) 機能、FortiGate 用語で言うところの 「セッションヘルパー」 が、お節介をして通信を書き換えてしまっていることにあるかもしれません。
本記事では、ALG の基本的な仕組みと、FortiGate における設定の確認・変更手順(特にトラブルの元になりやすい無効化の手順)について解説します。
- ALG とは?: 通信の「中身」を書き換える仕組み
- トラブル原因: なぜ ALG があると IP 電話が繋がらないのか
- 設定手順: SIP ALG や FTP ALG の確認と無効化/有効化コマンド
ALG(Application Level Gateway)とは?
ALG(Application Level Gateway)とは、その名の通りアプリケーション層(レイヤー7)まで踏み込んで通信を制御する機能のことです。FortiGate では、この機能を担うモジュールを 「セッションヘルパー(Session Helper)」 と呼びます。
「気の利くお世話係」としての役割
通常のファイアウォールは、パケットの「ヘッダー(宛先 IP やポート番号)」しか見ません。手紙で言えば「封筒の宛名」だけを見て配送する郵便屋さんのようなものです。
しかし、FTP や SIP(VoIP)といった古いプロトコルは、手紙の中身(データ部分/ペイロード)に「私の IP アドレスはこれです、このポートに返信ください」と書いてしまう癖があります。



NAT 環境下では、ここに「プライベート IP」が書かれていると、インターネット越しの相手は返信できません。
そこで ALG の登場です。ALG は封筒を開けて中身を読み、「おっと、ここはプライベート IP だと通じないから、グローバル IP に書き換えておいてあげよう」 と、気を利かせてデータを修正してくれます。さらに、返信に必要なポートも動的に開けてくれます。
【重要】なぜ今は「邪魔(お節介)」になるのか?
昔はこの機能が必須でしたが、近年は状況が変わりました。 クラウド PBX や現代のアプリケーションは、自分自身で NAT を超える仕組み(STUN/TURN など)を持っていることがほとんどです。アプリ側ですでに「正しいグローバルIP」をデータに書き込んで送信しています。
ここに ALG が介入するとどうなるでしょうか?



「自分でグローバル IP に書き換えて送ろう(正)」



「お、IPが書いてあるな。よし、変換してやろう(書き換え)」→ 二重変換でデータ破損
結果として、パケットの整合性が取れなくなり、「繋がっているのに声が聞こえない(片通話)」 や 「通信が切断される」 といったトラブルを引き起こします。 現代のネットワーク設定において、「まず ALG(SIP-ALG)を疑え」 と言われるのはこのためです。
現状の設定を確認するコマンド
FortiGate の ALG(セッションヘルパー)設定は、基本的に GUI のメニューには表示されません。 確認や変更を行うには、SSH またはコンソールケーブルで接続し、CLI(コマンドラインインターフェース)を使用する必要があります。
設定一覧の表示
CLI にログインしたら、以下のコマンドを入力して現在の設定一覧を表示します。
show system session-helper▼ 出力例 ズラッと設定が表示されますが、注目すべきは「name」と「port」です。
config system session-helper
edit 1
set name ftp
set port 21
set protocol 6
next
...
edit 13
set name sip
set port 5060
set protocol 17
next
end出力の見方
edit [数字]: これが各ヘルパーの ID です。設定を変更・削除する際にこの番号を指定します。set name: 対応するプロトコル名(ftp, sip, tftp など)set port: 監視しているポート番号(例: SIPなら 5060)



多くの FortiGate のバージョンでは、SIP(VoIP)の設定は ID: 13 あたりに、FTP は ID: 1 あたりに定義されています。
ケース①: IP 電話(SIP)が繋がらない場合【無効化手順】
クラウド PBX や IP 電話サービスを利用していて、「片通話になる」「着信しない」「切断される」という場合、サービス事業者から 「ルーターの SIP ALG を無効にしてください」 と指示されることがほとんどです。
FortiGate で SIP ALG を無効化する手順は以下の通りです。
まず、SIP がどの番号(ID)で登録されているかを確認します。
show system session-helper出力結果の中から、set name sip となっている項目の番号を探します。 (多くの機種では 13 番ですが、環境によって異なるため必ず確認してください)
edit 13
set name sip
set protocol 17
set port 5060
next特定した番号(ここでは13)を指定して、設定を削除します。
config system session-helper
delete 13
endこれで、SIP 通信に対する「お節介(アドレス変換)」が行われなくなります。 基本的にはこれで改善するはずです。
FortiOS のバージョン(特に 6.2 以降など)によっては、セッションヘルパーを削除しただけでは ALG の挙動が完全に止まらないことがあります。 その場合は、「VoIP プロファイル」 の設定も確認が必要です。
ファイアウォールポリシーに default などの VoIP プロファイルが適用されている場合、そちらの設定が優先して ALG として動作してしまうことがあります。 もしセッションヘルパー削除でも改善しない場合は、ポリシー設定で VoIP プロファイルを「なし」にする か、別途カーネルパラメータの変更(default-voip-alg-mode)を検討してください。
ケース②: FTP が繋がらない場合【有効化手順】
次は逆に、ALG が有効でないと困るケースです。 特に 「アクティブモード(Active Mode)」 で FTP を使用する場合、サーバー側からクライアント側へ接続を折り返す動作が発生するため、ALG のサポートが必須となります。



「FTP サーバーに接続はできるが、ファイル一覧が出ない(タイムアウトする)」という場合は、FTP ヘルパーが正しく設定されているか確認しましょう。
手順: FTP ヘルパーの確認
通常はデフォルトで有効(ID: 1)になっています。
show system session-helper以下のような設定が存在すれば有効です。
edit 1
set name ftp
set port 21
set protocol 6
nextもし誤って削除してしまっていた場合は、以下のコマンドで再登録します。
config system session-helper
edit 1
set name ftp
set port 21
set protocol 6
next
endこれにより、FortiGate は FTP の通信(PORT コマンド等)を監視し、データ転送に必要なポートを動的に開放してくれるようになります。
まとめ
本記事では、FortiGate の ALG(セッションヘルパー)機能について解説しました。
- ALG とは
-
通信の中身を見て、NAT 越えを助けてくれる機能
- SIP(VoIP)の場合
-
現代のクラウド PBX では「邪魔」になることが多いため、無効化(削除) が基本
- FTP の場合
-
アクティブモードなど古い形式を利用する場合は、有効化 が必要
以上、最後までお読みいただきありがとうございました。






