FortiGate の QoS 設定|トラフィックシェーピングと優先度の設計

  • URLをコピーしました!
目次

はじめに

FortiGate で QoS を設定しようとすると、Cisco などとは用語も構成も異なることに気づきます。FortiOS では QoS を「トラフィックシェーピング(Traffic Shaping)」という枠組みで扱い、帯域や優先度を定義する「シェーパー」と、それをどの通信に適用するかを決める「シェーピングポリシー」を組み合わせます。

この構成を理解しないまま設定すると、シェーパーを作ったのに適用されない、複数のシェーパーのどれが効いているか分からない、といった状況になりがちです。本記事では、FortiOS のトラフィックシェーピングの全体像を整理したうえで、設定方法と、効かないときの切り分けまでを扱います。

なお、QoS そのものの全体像(分類・マーキング・キューイング・帯域制御の役割や、優先制御の設計の考え方)は、関連記事『QoS とは|優先制御の仕組みと製品共通で押さえる設計のポイント』で扱っています。本記事は、その考え方を FortiGate の設定に落とし込む位置づけです。

この記事でわかること
  • FortiOS のトラフィックシェーピングの構成(シェーパーとシェーピングポリシーの関係)
  • 3 種類のシェーパー(共有 / Per-IP / アプリケーション)の違いと使い分け
  • 帯域保証・最大帯域・優先度・DSCP マーキングの設定方法
  • SD-WAN と QoS の関係
  • シェーピングが効かないときの確認ポイントと diagnose での切り分け

FortiGate の QoS(トラフィックシェーピング)の全体像

FortiOS のトラフィックシェーピングは、「帯域・優先度を定義するシェーパー」と「どの通信に適用するかを決めるシェーピングポリシー」の 2 つの要素で構成されます。まずはこの関係を整理します。

構成要素: トラフィックシェーパーとシェーピングポリシー

FortiOS の QoS は、役割の異なる 2 つの要素を組み合わせて設定します。

トラフィックシェーパー

帯域(保証・最大)や優先度を定義する「部品」です。単体では動作せず、ポリシーから参照されて初めて効果を持ちます。

シェーピングポリシー

送信元・宛先・サービス・アプリケーションなどの条件で通信を照合し、どのシェーパーを適用するか、あるいは DSCP タグを付けるかを決める「適用ルール」です。

参考: Fortinet — FortiGate Administration Guide(Traffic shaping policies)
“A traffic shaping policy is a rule that matches traffic based on certain IP header fields and/or upper layer criteria”
(シェーピングポリシーは、特定の IP ヘッダーフィールドや上位レイヤの条件で通信を照合するルールである)
https://docs.fortinet.com/document/fortigate/7.6.4/administration-guide/673634/traffic-shaping-policies

照合の順序にも特徴があります。FortiGate はまずファイアウォールポリシーを確認し、その後にシェーピングポリシーを照合します。シェーピングポリシーはリストの上から順に評価されるため、より限定的なポリシーを上位に、一般的なポリシーを下位に並べることが、意図どおりに効かせるための要点です。

参考までに、Cisco では MQC(class-map / policy-map / service-policy)という別の枠組みで QoS を構成します。同じ「分類して帯域・優先度を割り当てる」考え方でも、製品ごとに実装が異なる一例として、関連記事『Cisco の QoS 設定|MQC で構成する優先制御の設計のポイント』も参考になります。

なお、シェーパーやシェーピングポリシーの設定場所(GUI のメニュー構成)や利用できる方式は FortiOS のバージョンによって異なります。新しいバージョンでは、クラス ID を用いるシェーピングプロファイルなども提供されます。実際の設定にあたっては、対象バージョンの公式ドキュメントでの確認を推奨します。

3 種類のシェーパー(共有 / Per-IP / アプリケーション)

FortiOS のシェーパーには、適用範囲の異なる 3 種類があります。

共有シェーパー(Shared)

帯域保証(guaranteed bandwidth)・最大帯域(maximum bandwidth)・優先度(high / medium / low)を定義します。ポリシー単位で個別に適用するか、複数ポリシーで共有するかを選べます。既定では順方向(アップロード方向)に作用し、ダウンロード方向を制限するには逆方向(reverse)シェーパーとして設定します。

Per-IP シェーパー

IP アドレスごとに帯域を割り当てます。たとえば 1 Mbps を設定すると、利用者ごとに 1 Mbps が割り当てられ、1 人が帯域を占有する状況を避けられます。アップロード・ダウンロードの両方に作用し、IP ごとの最大同時セッション数も制限できます。

アプリケーションシェーパー(Application control)

アプリケーション単位で帯域を制御します。ポリシーでアプリケーション制御を有効にしたうえで、シェーピングポリシーに適用します。

これらは併用でき、FortiOS には適用の優先順位があります。アプリケーション制御のシェーパーが最も優先され、次に共有シェーパー、最後に Per-IP シェーパーの順で評価されます。いずれかの上限を超えた通信は破棄されます。

シェーパーは「帯域と優先度を定義する部品」、シェーピングポリシーは「それをどの通信に適用するかを決めるルール」という役割分担を押さえておくと、次のセクション以降の設定が整理しやすくなります。

トラフィックシェーパーの設定(帯域保証・最大帯域・優先度)

シェーパーは、帯域や優先度を定義する「部品」です。ここでは共有シェーパーと Per-IP シェーパーを作成します。作成したシェーパーは、後述のシェーピングポリシーから参照して初めて効果を持ちます。

共有シェーパー(guaranteed / maximum bandwidth・priority)

共有シェーパーは、帯域保証(guaranteed-bandwidth)・最大帯域(maximum-bandwidth)・優先度(priority)を定義します。GUI では「Policy & Objects」内のトラフィックシェーピング(Traffic Shapers)から、CLI では次のように設定します(FortiOS のバージョンによりメニュー名が異なります)。

config firewall shaper traffic-shaper
 edit "VOICE-10M"
  set guaranteed-bandwidth 10000
  set maximum-bandwidth 20000
  set bandwidth-unit kbps
  set priority high
  set per-policy disable
 next
end

各設定の意味は次のとおりです。guaranteed-bandwidth は輻輳時の最低保証、maximum-bandwidth は上限、priorityhigh / medium / low から選びます。FortiOS は、優先度の低い接続には、優先度の高い接続が帯域を必要としないときにのみ帯域を割り当てます。maximum-bandwidth に 0 を指定すると無制限になります(CLI のみ)。per-policyenable にすると各ポリシーへ個別に同じ帯域を適用し、disable では複数ポリシーで帯域を共有します。

参考: Fortinet — FortiGate Administration Guide(Shared traffic shaper)
“ensure that the value is significantly less than the interface’s bandwidth capacity”
(保証帯域は、インターフェースの帯域容量より十分に小さい値にすることが望ましい)
https://docs.fortinet.com/document/fortigate/7.4.3/administration-guide/933502/shared-traffic-shaper

保証帯域を回線容量に近い値にすると、他の通信がほとんど通らなくなり、かえって遅延を招くおそれがあるため、保証帯域は控えめに設定することを推奨します。なお、共有シェーパーは適用するシェーピングポリシーの方向(アップロード方向)に作用します。ダウンロード方向を制御する場合は、後述の逆方向シェーパー(traffic-shaper-reverse)として適用します。

Per-IP シェーパー

Per-IP シェーパーは、IP アドレスごとに帯域を割り当てる方式です。1 人の利用者が帯域を占有する状況を避けたいときに用います。最大帯域に加え、IP ごとの最大同時セッション数も制限できます。

config firewall shaper per-ip-shaper
 edit "PERIP-1M"
  set max-bandwidth 1000
  set bandwidth-unit kbps
  set max-concurrent-session 10
 next
end

Per-IP シェーパーは、アップロード・ダウンロードの両方向に作用します。共有シェーパーが「対象通信全体」で帯域を共有するのに対し、Per-IP シェーパーは「IP ごと」に上限を割り当てる点が異なります。

シェーピングポリシーと DSCP マーキング

作成したシェーパーを通信に適用するのが、シェーピングポリシーです。DSCP(ToS)マーキングも、このポリシー(またはシェーパー)で設定できます。

シェーピングポリシーでシェーパーを適用する

シェーピングポリシーは、送信元・宛先・サービス・アプリケーション・出力インターフェースなどの条件で通信を照合し、シェーパーを適用します。GUI では「Policy & Objects > Traffic Shaping Policy」から設定します。

config firewall shaping-policy
 edit 1
  set name "VOICE-SHAPING"
  set service "SIP" "RTP"
  set srcaddr "all"
  set dstaddr "all"
  set dstintf "wan1"
  set traffic-shaper "VOICE-10M"
  set traffic-shaper-reverse "VOICE-10M"
 next
end

traffic-shaper はポリシー方向(上り)、traffic-shaper-reverse は逆方向(下り)、per-ip-shaper は IP ごとの制御を適用します。アプリケーション単位で制御する場合は、set application <ID> を指定し、あわせて該当のファイアウォールポリシーでアプリケーション制御を有効にします。

設定上の注意点が 2 つあります。1 つは、FortiOS 5.6 以降ではトラフィックシェーピングをシェーピングポリシーで設定する点です(ファイアウォールポリシーの GUI からは設定しません)。もう 1 つは並び順で、より限定的なシェーピングポリシーをリストの上位に、一般的なポリシーを下位に並べることで、意図どおりに適用されます。

DSCP(ToS)マーキングの設定

ネットワーク内部や下流の機器で優先制御を効かせるため、FortiGate で DSCP を付与できます。シェーピングポリシーで設定する場合は、diffserv-forward を有効にし、diffservcode-forward に DSCP 値を指定します。

config firewall shaping-policy
 edit 1
  set name "VOICE-SHAPING"
  set service "SIP" "RTP"
  set srcaddr "all"
  set dstaddr "all"
  set dstintf "wan1"
  set traffic-shaper "VOICE-10M"
  set diffserv-forward enable
  set diffservcode-forward 101110
 next
end

diffservcode-forward には、DSCP 値を 6 ビットの 2 進数で指定します。たとえば音声で用いられる EF(DSCP 46)は 101110 です。逆方向には diffserv-reversediffservcode-rev を使います。DSCP マーキングは、信頼境界となる FortiGate で値を付与し、ネットワーク内部のマーキングを一貫させる用途で有効です。DSCP マーキングはシェーパー側(config firewall shaper traffic-shaperset diffserv enable / set diffservcode)でも設定できますが、設定箇所が分散すると分かりにくくなるため、どちらで付与するかを統一しておくことを推奨します。

SD-WAN と QoS の関係

FortiGate を SD-WAN として運用する場合、QoS との役割分担を整理しておくと設計しやすくなります。SD-WAN は「どの回線に通すか(経路選択)」、トラフィックシェーピングは「選んだ経路で帯域や優先度をどう配分するか」を担い、両者は補完関係にあります。

SD-WAN ルールでの品質・帯域ベースの制御

SD-WAN では、Performance SLA(ヘルスチェック)が各回線の遅延(latency)・ジッタ(jitter)・パケットロス(packet-loss)を計測し、その結果に基づいて経路を選びます。

参考: Fortinet — FortiGate Administration Guide(Lowest cost (SLA) strategy)
“SD-WAN will choose the lowest cost link that satisfies SLA to forward traffic”
(SD-WAN は、SLA を満たす最も低コストな回線を選んで通信を転送する)
https://docs.fortinet.com/document/fortigate/7.6.5/administration-guide/342836/lowest-cost-sla-strategy

SD-WAN ルールの戦略には、手動(Manual)、品質優先(Best Quality)、SLA を満たす最低コスト(Lowest Cost SLA)、帯域最大化(Maximize Bandwidth SLA)などがあります。ヘルスチェックは CLI で次のように定義します。

config system sdwan
 config health-check
  edit "HC-INET"
   set server "8.8.8.8"
   set members 1 2
   config sla
    edit 1
     set latency-threshold 100
     set jitter-threshold 30
     set packetloss-threshold 2
    next
   end
  next
 end
end

加えて、SD-WAN はインターネットサービスデータベース(ISDB)やアプリケーション制御を用いて、アプリケーション単位で経路を振り分けられます。暗号化通信が多い環境では、SSL インスペクションを併用するとアプリケーションの識別精度が高まります。

SD-WAN は経路選択、トラフィックシェーピングは帯域・優先度の配分という役割分担を押さえ、両者を組み合わせることで、回線品質に応じた経路選択と、経路上での優先制御を両立できます。なお、設定コマンドは新しいバージョンの config system sdwan と、旧バージョンの config system virtual-wan-link で異なります。

よくあるトラブルと対処

シェーピングを設定したのに効果が見えない場合、設定値よりも、適用条件や前提に原因があることが少なくありません。diagnose コマンドの出力を起点に切り分けると、原因を絞り込みやすくなります。

シェーピングが効かないときの確認ポイント

代表的な原因は次のとおりです。

シェーピングポリシーの並び順

限定的なポリシーが一般的なポリシーより下位にあると、意図したシェーパーが適用されません。アプリケーション制御のポリシーを上位に置くことが推奨されます。

アプリケーション制御

アプリケーション単位で制御する場合に、該当のファイアウォールポリシーでアプリケーション制御が有効になっていない。

設定箇所の誤り

FortiOS 5.6 以降は、シェーピングをシェーピングポリシーで設定します。

方向の誤り

上り方向は traffic-shaper、下り方向は traffic-shaper-reverse、IP ごとの制御は per-ip-shaper を用います。

そもそも輻輳していない

優先制御は輻輳時にはじめて効くため、平常時の確認では差が現れません。

物理層の問題

インターフェースでエラーやバッファのオーバーランが出ていないかも確認します。

なお、VLAN・VDOM・IPsec などの仮想インターフェースはキューを持たず、トラフィックは下位の物理ポートで処理されます。シェーピングの挙動を見る際は、この点も考慮します。

diagnose コマンドでの確認

シェーパーの状態やドロップは、diagnose コマンドで確認できます。

参考: Fortinet — FortiGate Handbook(Troubleshooting traffic shaping)
“verify if packets were discarded by viewing dropped packet counters”
(各シェーパーの破棄パケットカウンタを見ることで、パケットが破棄されたかを確認できる)
https://docs.fortinet.com/document/fortigate/6.0.0/handbook/173541/troubleshooting-traffic-shaping

代表的なコマンドと用途は次のとおりです。

  • diagnose firewall shaper traffic-shaper list:
    • 共有シェーパーの状態(最大・保証・現在の帯域、優先度、破棄パケット数)を表示します。
  • diagnose firewall shaper per-ip-shaper list:
    • Per-IP シェーパーの状態を表示します。
  • diagnose firewall iprope list 100015:
    • どの通信がどのシェーパーに紐づいているかを確認します。
  • diagnose sys session list:
    • セッションに適用されているシェーパーを確認します。
  • diagnose sys sdwan health-check status(旧 diagnose sys virtual-wan-link health-check):
    • SD-WAN の回線品質(遅延・ジッタ・ロス)を確認します。

diagnose firewall shaper traffic-shaper list の出力は、次のような形式です。

# diagnose firewall shaper traffic-shaper list
name VOICE-10M
maximum-bandwidth 2500 KB/sec
guaranteed-bandwidth 1250 KB/sec
current-bandwidth 0 B/sec
priority 2
packets dropped 0 bytes dropped 0

切り分けは、「紐づけ(iprope list)→ セッションへの適用(session list)→ ドロップの有無(shaper ... list)」の順に確認すると進めやすくなります。あわせて、実際にパケットへ付与された DSCP 値を確認すると、マーキングと配分のどちらに原因があるかを切り分けられます。キャプチャでの絞り込み方法は、関連記事 『Wireshark のフィルタ書き方と複数条件の使い分け|TCP 再送と HTTP エラーの追跡』で扱っています。

まとめ

  • FortiGate の QoS は「トラフィックシェーピング」で、シェーパー(部品)とシェーピングポリシー(適用ルール)で構成します。
  • シェーパーには共有・Per-IP・アプリケーションの 3 種類があり、適用には優先順位があります。
  • 共有シェーパーは帯域保証・最大帯域・優先度を、Per-IP シェーパーは IP ごとの上限を定義します。
  • シェーピングポリシーで通信を照合し、上り(traffic-shaper)・下り(traffic-shaper-reverse)・IP ごと(per-ip-shaper)に適用します。
  • DSCP マーキングは diffserv-forward / diffservcode-forward で付与できます。
  • SD-WAN は経路選択、トラフィックシェーピングは帯域・優先度の配分という補完関係です。
  • 効かないときは、ポリシーの順序・方向・前提を確認し、diagnose コマンドでドロップを確認します。

以上、最後までお読みいただきありがとうございました。

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

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次