FortiGate の VLAN 設定|VLAN インターフェースとポリシーの手順

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

はじめに

FortiGate で VLAN を扱う際は、スイッチとは VLAN の考え方が異なる点を最初に押さえておく必要があります。FortiGate の VLAN インターフェースは IP アドレスを持つ L3 インターフェースであり、VLAN 間で通信させるにはファイアウォールポリシーの設定が欠かせません。この違いを知らないまま進めると、「VLAN は作成したのに VLAN 間で通信できない」という状況になりがちです。本記事は FortiGate(FortiOS)を前提に、VLAN インターフェースの作成からトランクの受け、ポリシーによる VLAN 間通信、確認までをコマンドと GUI 操作の両面で整理します。

VLAN の設計そのものの考え方(アクセスとトランクの使い分けや VLAN 間ルーティングの方式選定、セキュリティ)は、別記事『VLAN 設計の基礎|トランクと VLAN 間ルーティングの設計指針』で扱っています。本記事は、その考え方を FortiGate で設定に落とし込む手順に集中します。

この記事でわかること
  • FortiGate(FortiOS)での VLAN インターフェースの作成(GUI / CLI)
  • 802.1Q トランクの受けとネイティブ VLAN の扱い
  • ファイアウォールポリシーによる VLAN 間通信の許可
  • software switch・hardware switch と VLAN の関係
  • 設定確認とトラブルシュートに使うコマンド

FortiGate の VLAN 設定は、物理インターフェース上に VLAN インターフェース(サブインターフェース)を作成して IP アドレスを割り当て、VLAN 間で通したい通信にファイアウォールポリシーを設定する、という流れに集約されます。スイッチの SVI が ip routing の有効化だけで VLAN 間を疎通させるのに対し、FortiGate ではポリシーで許可しない限り VLAN 間は通信できません。 この点が設定上の最大の違いです。

前提: FortiGate の VLAN モデルと VDOM

FortiGate の VLAN サブインターフェースは、物理インターフェース上に作成する仮想インターフェースです。802.1Q タグの VLAN ID(1〜4094)でトラフィックを識別し、一致する VLAN ID のサブインターフェースへ振り分けます。各 VLAN サブインターフェースは IP アドレスを持つ L3 インターフェースである点が、スイッチの L2 VLAN との大きな違いです。

VLAN サブインターフェースは、物理インターフェースのほか、集約(802.3ad / LAG)インターフェースの上にも作成できます。設定上の制約として、同一の物理インターフェース上に同じ VLAN ID を 2 つ作成することはできません。一方で、異なる物理インターフェースであれば同じ VLAN ID を使えます。

動作モードによる違いもあります。NAT / route モードでは、802.1Q 準拠のスイッチやルーターとのトランクリンクをサポートし、トランクで届いた VLAN タグ付きパケットを、一致する VLAN サブインターフェースへ振り分けます。transparent モードでは扱いが異なるため、本記事は NAT / route モードを前提とします。

VDOM を有効にしている場合は、追加のルールに注意が必要です。各 VLAN サブインターフェースはいずれかの VDOM に所属し、親の物理インターフェースとは別の VDOM に置くこともできます。ただし、別々の VDOM に属する VLAN サブインターフェース同士は直接通信できず、トラフィックはいったん FortiGate を出て再び入る形で、双方向にファイアウォールを通過します。 また、2 つの VDOM が同じインターフェースや VLAN を共有することはできません。

なお、VLAN ID のうち 0 は高優先度フレーム用、4095 は予約済みのため、実際に利用できるのは 1〜4094 です。

参考: VLAN | FortiGate / FortiOS 7.6.4 Administration Guide(Fortinet Document Library)
“The FortiGate unit directs packets with VLAN IDs to subinterfaces with matching IDs.”
(FortiGate は、VLAN ID を持つパケットを、ID が一致するサブインターフェースへ振り分ける。)
https://docs.fortinet.com/document/fortigate/7.6.4/administration-guide/402940/vlan

VLAN インターフェースの作成

FortiGate での VLAN 設定は、トランクを接続した物理インターフェースの上に VLAN インターフェース(サブインターフェース)を作成し、VLAN ID と IP アドレスを設定するところから始まります。GUI と CLI のどちらでも作成できます。

GUI での作成

GUI では、Network > Interfaces から「+Create New > Interface」を選択し、次の項目を設定します。

  • Name: VLAN インターフェースの名前(例: VLAN_100)。
  • Type: VLAN を選択します。
  • Interface: トランクを接続した親の物理インターフェース(例: internal)を選択します。
  • VLAN ID: 802.1Q タグの VLAN ID(例: 100)を入力します。
  • IP/Netmask: その VLAN のゲートウェイとなる IP アドレスとマスクを設定します。
  • Administrative Access: 必要に応じて PING や HTTPS などを許可します。
  • DHCP Server: 必要であれば、その VLAN のクライアント向けに DHCP サーバーを有効化します。

CLI での作成

CLI では、config system interface配下で VLAN インターフェースを定義します。テンプレートでの一括展開には CLI が向いています。

config system interface
    edit "VLAN_100"
        set vdom "root"
        set interface "internal"
        set type vlan
        set vlanid 100
        set mode static
        set ip 10.1.1.1 255.255.255.0
        set allowaccess ping https ssh
    next
    edit "VLAN_200"
        set vdom "root"
        set interface "internal"
        set type vlan
        set vlanid 200
        set mode static
        set ip 10.1.2.1 255.255.255.0
        set allowaccess ping https
    next
end

各設定の役割は次のとおりです。set interfaceが親の物理インターフェース、set type vlanが VLAN インターフェースであることの指定、set vlanidが 802.1Q タグの VLAN ID、set ipがその VLAN のゲートウェイ IP、set allowaccessが管理アクセスの許可です。

設定順の注意点として、set type vlanset vlanidより前に実行する必要があります。 インターフェースのタイプを VLAN にして初めて、VLAN ID を設定できるようになります(出典: FortiOS Administration Guide「VLAN」 https://docs.fortinet.com/document/fortigate/8.0.0/administration-guide/402940/vlan

トランクの受けとネイティブ VLAN の扱い

FortiGate は、親の物理インターフェースで 802.1Q トランクを受け取り、タグ付きフレームを VLAN ID が一致するサブインターフェースへ振り分けます。対向スイッチ側ではトランクと許可 VLAN を設定し、FortiGate 側では対応する VLAN ID のサブインターフェースを作成して、両端で VLAN ID を一致させます。

ネイティブ VLAN の扱いは、スイッチと考え方が異なります。FortiGate には、Cisco のswitchport trunk native vlanのような明示的なネイティブ VLAN コマンドはありません。タグなし(ネイティブ VLAN)のフレームは VLAN サブインターフェースではなく、親の物理インターフェース自体が受け取って処理します。 そのため、トランク上で想定外のタグなしトラフィックが流入しないよう、対向スイッチ側でネイティブ VLAN を未使用 VLAN に変更し、明示的にタグ付けする設計が安全です。この考え方は、ハブ記事で扱った VLAN ホッピング対策と整合します。背景は『VLAN 設計の基礎|トランクと VLAN 間ルーティングの設計指針』を参照してください。

なお、トランクが経由するすべての機器が該当の VLAN ID をサポートしている必要があります。経路上に未対応の機器があると、そのトラフィックは宛先に届く前に破棄されます。

参考: VLAN configuration in NAT mode(Fortinet Document Library, FortiGate Cookbook)
“the FortiGate unit supports VLAN trunk links with IEEE 802.1Q-compliant switches or routers.”
(FortiGate は、IEEE 802.1Q 準拠のスイッチやルーターとの VLAN トランクリンクをサポートする。)
https://docs.fortinet.com/document/fortigate/6.2.0/cookbook/402940/vlans

ファイアウォールポリシーによる VLAN 間通信

FortiGate では、VLAN インターフェースを作成しただけでは VLAN 間は通信できません。前提セクションで触れたとおり、VLAN 間で通したい通信はファイアウォールポリシーで明示的に許可する必要があります。手順は、各 VLAN のサブネットをアドレスオブジェクトとして定義し、送信元・宛先のインターフェースに VLAN インターフェースを指定したポリシーを作成する、という流れです。

まず、各 VLAN サブネットのアドレスオブジェクトを定義します。

config firewall address
    edit "VLAN_100_Net"
        set subnet 10.1.1.0 255.255.255.0
    next
    edit "VLAN_200_Net"
        set subnet 10.1.2.0 255.255.255.0
    next
end

次に、VLAN_100 から VLAN_200 への通信を許可するポリシーを作成します。

config firewall policy
    edit 1
        set name "VLAN100-to-VLAN200"
        set srcintf "VLAN_100"
        set dstintf "VLAN_200"
        set srcaddr "VLAN_100_Net"
        set dstaddr "VLAN_200_Net"
        set action accept
        set schedule "always"
        set service "ALL"
    next
end

設定上のポイントは次のとおりです。

  • set srcintfset dstintfに VLAN インターフェースを指定します。
  • FortiGate のポリシーには方向性があるため、双方向で通信させる場合は逆方向のポリシーも作成します。
  • 同一 FortiGate 内の VLAN 間ルーティングでは、NAT は基本的に不要です(set natは無効のままにします)。インターネット向けなどセグメント境界を越える通信では NAT を有効化します。
  • set serviceで許可するサービスを絞り、必要に応じてログや UTM プロファイルを適用すると、セグメント間に細かなセキュリティ制御を効かせられます。

スイッチの SVI が ip routing だけで VLAN 間を疎通させるのに対し、FortiGate ではポリシーが無ければ VLAN 間は通信できません。これは制約というより、セグメント間に標準でポリシー制御を効かせられる利点と捉えられます。

参考: VLANs | FortiGate / FortiOS 6.4.0 Administration Guide(Fortinet Document Library)
“The FortiGate unit has policies that allow traffic to flow between the VLANs.”
(FortiGate は、VLAN 間でトラフィックを流すためのポリシーを持つ。)
https://docs.fortinet.com/document/fortigate/6.4.0/administration-guide/402940/vlans

software switch・hardware switch と VLAN の関係

複数の物理ポートを 1 つの L2 セグメントとしてまとめたい場合は、hardware switch または software switch を使います。VLAN サブインターフェースは、これらのスイッチインターフェースの上にも作成できます。両者は処理の仕組みと柔軟性が異なります。

hardware switch(type hard-switch)は、FortiGate 内蔵のスイッチングハードウェア(ISF: Integrated Switch Fabric)を使い、L2 トラフィックをハードウェアで処理します。ハードウェアスイッチングのため高性能で、CPU 負荷を抑えられます。 メンバーにできるのは物理インターフェースで、複数の物理ポートを 1 つのスイッチインターフェースにまとめます(多くの機種で既定の internal や lan がこれにあたります)。

software switch(type switch)は、CPU で処理するソフトウェア実装のスイッチです。処理性能は CPU に依存しますが、物理インターフェース・VLAN インターフェース・トンネルインターフェースなど多様なインターフェースをメンバーにできる柔軟性があり、FortiGate-VM を含む全機種で利用できます。メンバー間通信の扱いはintra-switch-policyで制御でき、既定のimplicitはメンバー間を自動的に許可し、explicitに変更するとメンバー間にもファイアウォールポリシーを要求します。

VLAN との関係を整理すると、VLAN サブインターフェースは、物理・集約インターフェースのほか、hardware switch インターフェースの上にも作成できます(複数ポートを束ねたうえでタグ VLAN を載せる構成)。また、software switch には VLAN インターフェース自体をメンバーとして含められます。

選定の目安としては、単純に複数ポートを同一セグメントにまとめたい場合は高性能な hardware switch、多様なインターフェースを柔軟にまとめたい、またはセグメント内でもポリシー制御したい場合は software switch、VLAN でセグメントを分割して VLAN 間をポリシー制御したい場合は VLAN サブインターフェース(前述の構成)が向きます。

参考: Hardware switch | FortiGate / FortiOS 7.6.6 Administration Guide(Fortinet Document Library)
“Configure a firewall policy to allow traffic between the software switch members.”
(software switch のメンバー間で通信を許可するには、ファイアウォールポリシーを設定する。)
https://docs.fortinet.com/document/fortigate/7.6.6/administration-guide/100999/hardware-switch

設定確認とトラブルシューティングのコマンド

設定後の確認と障害時の切り分けには、インターフェースの状態、ルーティング、トラフィックの流れを見るコマンドを使います。まず、確認によく使うコマンドを整理します。

  • get system interface physical: 物理・VLAN インターフェースの up / down と状態を確認します。
  • show system interface <名前>: VLAN インターフェースの設定(vlanid・interface・ip)を確認します。
  • get router info routing-table all: ルーティングテーブルを表示し、各 VLAN が接続ルートとして見えているかを確認します。
  • diagnose sniffer packet <インターフェース> '<フィルター>' <verbose> <count>: パケットキャプチャを実行します。

トラフィックの流れを追う最も有効な手段が、パケットキャプチャと debug flow です。

VLAN タグを確認したい場合は、VLAN サブインターフェースではなく、親の物理インターフェースでスニファを実行します。 VLAN サブインターフェース名を指定するとタグ部分が見えないためです。特定の VLAN ID だけを絞り込むには、VLAN ID を 16 進数にしたフィルターを使います。

# VLAN ID 100(16 進数 0x0064)のフレームを port1 でキャプチャ
diagnose sniffer packet port1 "ether[14:2]=0x0064" 6 0 l

VLAN 間で通信できない場合は、ポリシーの有無と方向(srcintf / dstintf)、アドレスオブジェクト、ルーティングを確認したうえで、debug flow でパケットの処理を追跡します。

diagnose debug enable
diagnose debug flow filter addr 10.1.1.10
diagnose debug flow show function-name enable
diagnose debug flow trace start 100

debug flow の出力では、ルート検索の結果(find a route)やマッチしたポリシー(Allowed by Policy-x)が確認でき、どのポリシーで許可・拒否されたか、ルーティングが想定どおりかを切り分けられます。

FortiGate 特有の注意点が 3 つあります。まず、NP(ネットワークプロセッサー)でオフロードされたトラフィックは CPU を通らないため、スニファや debug flow では初期セッションのみが見える場合があります。切り分け時にはオフロードの無効化を検討します。次に、非対称ルーティングがあると RPF(逆経路転送)チェックでパケットが破棄されることがあります。最後に、複数 VDOM 環境では、コマンドを対象の VDOM コンテキストで実行する必要があります。

参考: Debugging the packet flow | FortiGate / FortiOS 8.0.0 Administration Guide(Fortinet Document Library)
“Debug the packet flow when network traffic is not entering and leaving the FortiGate.”
(ネットワークトラフィックが想定どおりに FortiGate を出入りしないとき、パケットフローをデバッグする。)
https://docs.fortinet.com/document/fortigate/8.0.0/administration-guide/54688/debugging-the-packet-flow

まとめ

FortiGate の VLAN 設定は、物理インターフェース上に VLAN インターフェースを作成し、VLAN 間で通したい通信をファイアウォールポリシーで許可する、という流れに集約されます。スイッチとの最大の違いは、ポリシーが無ければ VLAN 間が通信できない点であり、これはセグメント間にポリシー制御を効かせられる利点でもあります。

  • FortiGate の VLAN インターフェースは IP を持つ L3 インターフェース
  • VLAN 作成では set type vlan を set vlanid より前に実行する。
  • ネイティブ VLAN のタグなしフレームは親の物理インターフェースが処理
  • VLAN 間通信はファイアウォールポリシーで明示的に許可する。
  • 同一 FortiGate 内の VLAN 間ルーティングは NAT が基本不要
  • 複数ポートを束ねる場合は hardware / software switch を使い分ける。
  • VLAN タグの確認は親の物理インターフェースでスニファを実行する。

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

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

この記事を書いた人

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

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

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

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

目次