スイッチのトランク設定直後にForwarding VLANがnoneになる事象の備忘録
先日、CML2を利用してVLANとHSRPによる冗長ゲートウェイを構築していた際、アクセススイッチのトランクポート設定において少し戸惑う事象に遭遇しました。
スイッチにVLANを作成し、ルーター向けのインターフェースをトランクポートとして設定した直後に状態を確認したところ、設定上は許可されているはずのVLANが転送可能な状態になっていませんでした。今回は、その時に確認したコマンド出力と、調べた内容を備忘録として残しておきます。
トランクポート設定直後の状態確認
対象のアクセススイッチ(SW1)にて、インターフェースをトランクポートに設定した後、状態を確認するために show interfaces trunk を実行しました。
SW1#show interfaces trunk
Port Mode Encapsulation Status Native vlan
Et0/0 on 802.1q trunking 1
Et0/1 on 802.1q trunking 1
Port Vlans allowed on trunk
Et0/0 1-4094
Et0/1 1-4094
Port Vlans allowed and active in management domain
Et0/0 1,10,20
Et0/1 1,10,20
Port Vlans in spanning tree forwarding state and not pruned
Et0/0 none
Et0/1 none
出力結果を見ると、Status は trunking になっており、Vlans allowed and active in management domain にも設定した 10,20 が表示されています。しかし、実際に通信を転送できる状態を示す Vlans in spanning tree forwarding state and not pruned の項目が none になっていました。
設定直後だったため、「何か許可コマンドを入れ忘れたか?」や「対向のルーター側の設定に問題があるのか?」と疑問に思い、出力項目を手がかりに原因を調べてみました。
原因の調査と時間経過による変化
出力の項目名にある spanning tree というキーワードについて調べてみたところ、STP(Spanning Tree Protocol)の仕様が関係していることが分かりました。
STPが有効な環境では、ループやブロードキャストストームを防ぐため、リンクがアップしてもすぐには通信を転送(Forwarding)しません。ループ計算を行うため、一定時間はListening状態やLearning状態にとどまり、パケットの転送をブロックする仕組みになっています。
もしこれが原因であれば、設定ミスではなく単なる「STPの収束待ち」ということになります。それを確かめるため、設定変更から30秒ほど待ってから再度同じコマンドを実行してみました。
SW1#show interfaces trunk
Port Mode Encapsulation Status Native vlan
Et0/0 on 802.1q trunking 1
Et0/1 on 802.1q trunking 1
Port Vlans allowed on trunk
Et0/0 1-4094
Et0/1 1-4094
Port Vlans allowed and active in management domain
Et0/0 1,10,20
Et0/1 1,10,20
Port Vlans in spanning tree forwarding state and not pruned
Et0/0 1,10,20
Et0/1 1,10,20
再確認したところ、Vlans in spanning tree forwarding state and not pruned に 1,10,20 が表示されました。これにより、対象のVLANがSTPのブロック状態を抜け、無事に通信を転送できる状態になったことが分かります。
今回の検証で得られた学び
設定直後に想定した通信状態になっていないと、つい「設定を間違えたかもしれない」と焦って設定変更を繰り返してしまいがちです。しかし今回のように、裏で動いているプロトコル(STPなど)の仕様によって、状態が安定するまでにタイムラグが発生するケースがあることを改めて実感しました。