この記事は「Trunk to Access – Will It Work?」の日本語訳です。
著者の Daniel Dib (@danieldibswe) さんに許可をいただいて翻訳・掲載しています。彼のブログは非常に学びのあるネットワークに関する記事が多いので是非訪れてみてください。
===
最近、2台のCisco Catalystスイッチを接続するという質問をTwitterに投稿しました。1台のスイッチはすでに起動しており、以下の設定があります:
interface GigabitEthernet0/0
description SW02
switchport mode trunk
switchport trunk allowed vlan 1,10,20,30
switchport nonegotiate
もう1台のスイッチはGi1/0/48に接続され、電源を入れたばかりで、デフォルト設定のまま起動しています。このスイッチをPlug and Play(PNP)を使用してCatalyst Centerにオンボードすることを目的としています。
回答を基に、多くの人がこのシナリオが機能するかどうか、またその理由を説明できなかったことがわかりました。このシナリオにはいくつかの興味深い詳細があります。私自身、このシナリオに遭遇する前は機能するかもしれないと思っていましたが、実際にはどうでしょうか。まず、現在の時点でスイッチSW01とSW02についてわかっていることを整理してみましょう。
SW01については:
- ポートがトランクモードに設定されている
- トランクで許可されているVLANは1,10,20,30
- DTP(Dynamic Trunking Protocol)が無効化されている
- ネイティブVLANは1
SW02については:
- すべてのポートが有効な状態で起動する
- これらのポートはVLAN 1に所属する
- ポートではDTPが有効化されている
この設定の下では、SW02のポートはVLAN 1のアクセスポートとして起動し、SW01のポートはVLAN 1のネイティブVLANを持つトランクであるため、理論的には機能するはずです。つまり、SW02はタグなしフレームをSW01に送信し、SW01はそれをVLAN 1内で転送します。逆にSW01もタグなしフレームをVLAN 1に送り、双方向のフレームの流れが生じます。理論的には正しいですが、実際にはそうなりません。なぜでしょうか?見ていきましょう。
SW02#show int gi0/0 switchport
Name: Gi0/0
Switchport: Enabled
Administrative Mode: dynamic auto
Operational Mode: static access
Administrative Trunking Encapsulation: negotiate
Operational Trunking Encapsulation: native
Negotiation of Trunking: On
Access Mode VLAN: 1 (default)
Trunking Native Mode VLAN: 1 (default)
Administrative Native VLAN tagging: enabled
Voice VLAN: none
Administrative private-vlan host-association: none
Administrative private-vlan mapping: none
Administrative private-vlan trunk native VLAN: none
Administrative private-vlan trunk Native VLAN tagging: enabled
Administrative private-vlan trunk encapsulation: dot1q
Administrative private-vlan trunk normal VLANs: none
Administrative private-vlan trunk associations: none
Administrative private-vlan trunk mappings: none
Operational private-vlan: none
Trunking VLANs Enabled: ALL
Pruning VLANs Enabled: 2-1001
Capture Mode Disabled
Capture VLANs Allowed: ALL
Protected: false
Appliance trust: none
SW02のポートがデフォルトで dynamic auto
に設定されており、他方ではDTPが無効化されているため、ポートはVLAN 1のアクセスポートとして起動します。これを別のコマンドで確認してみましょう:
Protected: false
Appliance trust: none
SW02#show int gi0/0 trunk
Port Mode Encapsulation Status Native vlan
Gi0/0 auto negotiate not-trunking 1
Port Vlans allowed on trunk
Gi0/0 1
Port Vlans allowed and active in management domain
Gi0/0 1
Port Vlans in spanning tree forwarding state and not pruned
Gi0/0 1
これを見ると、一見すると機能しそうですが、コンソールには以下のメッセージが記録されています:
*Dec 9 07:10:32.320: %SPANTREE-7-RECV_1Q_NON_TRUNK: Received 802.1Q BPDU on non trunk GigabitEthernet0/0 VLAN1.
*Dec 9 07:10:32.320: %SPANTREE-7-BLOCK_PORT_TYPE: Blocking GigabitEthernet0/0 on VLAN0001. Inconsistent port type.
これはどういう意味でしょうか?これは、SW01がタグ付けされたSTP BPDUをSW02に送信したことを意味します。メッセージの「inconsistent port type」は何が起こっているかを説明しています。トランクがアクセスポートに接続されています。なぜこれが起こっているのかを理解するためには、Catalystスイッチが生成するBPDUの種類に戻る必要があります。この件についてはCisco TACが説明しているPVIDの不一致のトラブルシューティングをご覧ください。もしネイティブVLANが1の場合、Catalystスイッチは以下のBPDUを生成します:
- VLAN 1のタグなしBPDUをIEEE STPのMACアドレス0180.c200.0000に送信
- VLAN 1のタグなしBPDUをPVST+のMACアドレス0100.0ccc.cccdに送信
- 非VLAN 1のタグ付きBPDUをPVST+のMACアドレス0100.0ccc.cccdに送信
なぜCatalystスイッチはVLAN1や現在のネイティブVLANに対して2つのBPDUを生成するのですか?これは、CiscoがPer VLAN Spanning Treeを実行している一方で、VLANごとに動作しないIEEE標準のSTPとも互換性があるためです。
では、ポートの不一致はどのように検出されるのでしょうか?これは、CiscoのBPDUにBPDUの発信元VLANを含むフィールドがあるためです。
フレームがタグなしで送信されたとしても、BPDU内の発信元VLANはこれがトランクであることを示しています。一方で、SW02はアクセスポートであるため、IEEE STPのMACアドレスにのみBPDUを送信しています:
SW02は次のように不整合なポートを持っていることを確認できます:
SW02#show span inconsistentports
Name Interface Inconsistency
-------------------- ------------------------ ------------------
VLAN0001 GigabitEthernet0/0 Port Type Inconsistent
Number of inconsistent ports (segments) in the system : 1
ポートがまだアップしていることにも注意が必要です:
SW02#show int gi0/0
GigabitEthernet0/0 is up, line protocol is up (connected)
Hardware is iGbE, address is 5254.0002.2f7d (bia 5254.0002.2f7d)
MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
Auto Duplex, Auto Speed, link type is auto, media type is RJ45
output flow-control is unsupported, input flow-control is unsupported
ARP type: ARPA, ARP Timeout 04:00:00
Last input 00:00:00, output 00:00:00, output hang never
Last clearing of "show interface" counters never
Input queue: 3/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/0 (size/max)
5 minute input rate 1000 bits/sec, 2 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
733 packets input, 52654 bytes, 0 no buffer
Received 729 broadcasts (729 multicasts)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 watchdog, 729 multicast, 0 pause input
396 packets output, 32042 bytes, 0 underruns
0 output errors, 0 collisions, 3 interface resets
0 unknown protocol drops
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier, 0 pause output
0 output buffer failures, 0 output buffers swapped out
STPの詳細を見ると、以下のように確認できます:
SW02#show span int gi0/0
Vlan Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
VLAN0001 Desg BKN*4 128.1 P2p *TYPE_Inc
SW02#show span int gi0/0 det
Port 1 (GigabitEthernet0/0) of VLAN0001 is broken (Port Type Inconsistent)
Port path cost 4, Port priority 128, Port Identifier 128.1.
Designated root has priority 32769, address 5254.0002.2f7d
Designated bridge has priority 32769, address 5254.0002.2f7d
Designated port id is 128.1, designated path cost 0
Timers: message age 0, forward delay 13, hold 0
Number of transitions to forwarding state: 0
Link type is point-to-point by default
BPDU: sent 71, received 71
BPDUsの送受信の数に注目してください。安定したトポロジでは、リンクのどちらがデザインされた側であるかに応じて、送信または受信されるBPDUsの数が多くなります。このシナリオでは、不整合のためにトポロジが安定していないため、両側が自分たちがデザインされた側だと思い続けてBPDUsを送信し続けています。
したがってデータプレーンの観点からは、ネイティブVLAN 1を持つトランクがVLAN 1のアクセスポートに接続することが可能である一方、制御プレーンがポートの不整合を防いでいます。不整合は一般的に何かが誤って構成されていることを意味するので、良くないことです。
以前、トランクには複数のVLANがあったことを思い出してください。もしVLAN 1のみを許可した場合、どうなるでしょうか?
interface GigabitEthernet0/0
switchport trunk allowed vlan 1
switchport mode trunk
switchport nonegotiate
結果は同じです。SW01はVLAN情報を含むBPDUsを発信しています。以下がSW02で記録された内容です:
*Dec 9 07:35:43.405: %SPANTREE-7-RECV_1Q_NON_TRUNK: Received 802.1Q BPDU on non trunk GigabitEthernet0/0 VLAN1.
*Dec 9 07:35:43.406: %SPANTREE-7-BLOCK_PORT_TYPE: Blocking GigabitEthernet0/0 on VLAN0001. Inconsistent port type.
それでは安定したトポロジにどうやってするのでしょうか?SW01でDTPを有効にするのはどうでしょう?
SW01#conf t
Enter configuration commands, one per line. End with CNTL/Z.
SW01(config)#int gi0/0
SW01(config-if)#no switchport nonegotiate
SW02のポートはどうなるでしょうか?
SW02#show int gi0/0 switchport
Name: Gi0/0
Switchport: Enabled
Administrative Mode: dynamic auto
Operational Mode: trunk
Administrative Trunking Encapsulation: negotiate
Operational Trunking Encapsulation: dot1q
Negotiation of Trunking: On
Access Mode VLAN: 1 (default)
Trunking Native Mode VLAN: 1 (default)
Administrative Native VLAN tagging: enabled
Voice VLAN: none
Administrative private-vlan host-association: none
Administrative private-vlan mapping: none
Administrative private-vlan trunk native VLAN: none
Administrative private-vlan trunk Native VLAN tagging: enabled
Administrative private-vlan trunk encapsulation: dot1q
Administrative private-vlan trunk normal VLANs: none
Administrative private-vlan trunk associations: none
Administrative private-vlan trunk mappings: none
Operational private-vlan: none
Trunking VLANs Enabled: ALL
Pruning VLANs Enabled: 2-1001
Capture Mode Disabled
Capture VLANs Allowed: ALL
Protected: false
Appliance trust: none
それがトランクポートに変わりました!一方が dynamic auto
で、もう一方がトランクに設定されているため、SW02でトランクが形成されました。これにより不整合が解消されました:
SW02#show span inconsistentports
Name Interface Inconsistency
-------------------- ------------------------ ------------------
Number of inconsistent ports (segments) in the system : 0
これはSTPの出力を確認してもわかります:
SW02#show span int gi0/0
Vlan Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
VLAN0001 Root FWD 4 128.1 P2p
SW02#show span int gi0/0 det
Port 1 (GigabitEthernet0/0) of VLAN0001 is root forwarding
Port path cost 4, Port priority 128, Port Identifier 128.1.
Designated root has priority 1, address 5254.001a.aa98
Designated bridge has priority 1, address 5254.001a.aa98
Designated port id is 128.1, designated path cost 0
Timers: message age 16, forward delay 0, hold 0
Number of transitions to forwarding state: 1
Link type is point-to-point by default
BPDU: sent 4, received 49
素晴らしい!問題は解決しました!さて、SW01でネイティブVLANを1以外に変更したらどうなるでしょうか?
SW01(config)#int gi0/0
SW01(config-if)#switchport trunk native vlan 10
SW01(config-if)#
SW01のログには次のようなメッセージが表示されます:
*Dec 9 07:21:24.939: %SPANTREE-2-RECV_PVID_ERR: Received BPDU with inconsistent peer vlan id 1 on GigabitEthernet0/0 VLAN10.
*Dec 9 07:21:24.939: %SPANTREE-2-BLOCK_PVID_PEER: Blocking GigabitEthernet0/0 on VLAN0001. Inconsistent peer vlan.
*Dec 9 07:21:24.940: %SPANTREE-2-BLOCK_PVID_LOCAL: Blocking GigabitEthernet0/0 on VLAN0010. Inconsistent local vlan.
*Dec 9 07:22:14.563: %CDP-4-NATIVE_VLAN_MISMATCH: Native VLAN mismatch discovered on GigabitEthernet0/0 (10), with SW02 GigabitEthernet0/0 (1).
ネイティブVLANの不一致が発生しています!CDPが不一致を報告しますが、不一致はVLAN 10でBPDUを受信し、元のVLANが1であることから発見されました:
SW01はVLAN1とVLAN10を矛盾しているのでブロックしています:
SW01#show span inconsistentports
Name Interface Inconsistency
-------------------- ------------------------ ------------------
VLAN0001 GigabitEthernet0/0 Port VLAN ID Mismatch
VLAN0010 GigabitEthernet0/0 Port VLAN ID Mismatch
Number of inconsistent ports (segments) in the system : 2
ただし、他のVLANは転送が許可されています:
SW01#show span int gi0/0
Vlan Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
VLAN0001 Desg BKN*4 128.1 P2p *PVID_Inc
VLAN0010 Desg BKN*4 128.1 P2p *PVID_Inc
VLAN0020 Desg FWD 4 128.1 P2p
VLAN0030 Desg FWD 4 128.1 P2p
SW01#show span int gi0/0 det
Port 1 (GigabitEthernet0/0) of VLAN0001 is broken (Port VLAN ID Mismatch)
Port path cost 4, Port priority 128, Port Identifier 128.1.
Designated root has priority 1, address 5254.001a.aa98
Designated bridge has priority 1, address 5254.001a.aa98
Designated port id is 128.1, designated path cost 0
Timers: message age 0, forward delay 14, hold 0
Number of transitions to forwarding state: 1
Link type is point-to-point by default
BPDU: sent 219, received 110
Port 1 (GigabitEthernet0/0) of VLAN0010 is broken (Port VLAN ID Mismatch)
Port path cost 4, Port priority 128, Port Identifier 128.1.
Designated root has priority 10, address 5254.001a.aa98
Designated bridge has priority 10, address 5254.001a.aa98
Designated port id is 128.1, designated path cost 0
Timers: message age 0, forward delay 14, hold 0
Number of transitions to forwarding state: 1
Link type is point-to-point by default
BPDU: sent 219, received 0
Port 1 (GigabitEthernet0/0) of VLAN0020 is designated forwarding
Port path cost 4, Port priority 128, Port Identifier 128.1.
Designated root has priority 20, address 5254.001a.aa98
Designated bridge has priority 20, address 5254.001a.aa98
Designated port id is 128.1, designated path cost 0
Timers: message age 0, forward delay 0, hold 0
Number of transitions to forwarding state: 1
Link type is point-to-point by default
BPDU: sent 219, received 0
Port 1 (GigabitEthernet0/0) of VLAN0030 is designated forwarding
Port path cost 4, Port priority 128, Port Identifier 128.1.
Designated root has priority 30, address 5254.001a.aa98
Designated bridge has priority 30, address 5254.001a.aa98
Designated port id is 128.1, designated path cost 0
Timers: message age 0, forward delay 0, hold 0
Number of transitions to forwarding state: 1
Link type is point-to-point by default
BPDU: sent 219, received 0
同様に、SW02もブロックしています:
*Dec 9 07:21:24.266: %SPANTREE-2-RECV_PVID_ERR: Received BPDU with inconsistent peer vlan id 10 on GigabitEthernet0/0 VLAN1.
*Dec 9 07:21:24.268: %SPANTREE-2-BLOCK_PVID_LOCAL: Blocking GigabitEthernet0/0 on VLAN0001. Inconsistent local vlan.
*Dec 9 07:21:57.891: %CDP-4-NATIVE_VLAN_MISMATCH: Native VLAN mismatch discovered on GigabitEthernet0/0 (1), with SW01 GigabitEthernet0/0 (10).
正しいネイティブVLANが設定されると、不整合は解消されます。SW01のログメッセージ:
*Dec 9 07:33:44.054: %SPANTREE-2-UNBLOCK_CONSIST_PORT: Unblocking GigabitEthernet0/0 on VLAN0001. Port consistency restored.
*Dec 9 07:33:44.055: %SPANTREE-2-UNBLOCK_CONSIST_PORT: Unblocking GigabitEthernet0/0 on VLAN0010. Port consistency restored.
SW02のログメッセージ:
*Dec 9 07:33:43.859: %SPANTREE-2-UNBLOCK_CONSIST_PORT: Unblocking GigabitEthernet0/0 on VLAN0001. Port consistency restored.
この投稿は詳細が多いですが、STPの概念と設定ミスの検出について理解するのに役立ったことを願います。学んだことは以下の通りです:
- Catalystスイッチは、すべてのポートをVLAN 1で起動し、DTPを有効にします。
- ポートはデフォルトで
dynamic auto
として設定され、もう一方がトランクである限り、トランクが形成されます。 - トランクがアクセスポートに接続されても、データプレーンの観点では機能するかもしれませんが、コントロールプレーンが設定ミスを検出します。
- CiscoスイッチはIEEEのMACアドレスとCiscoのMACアドレスの両方にBPDUを送信します。
- CiscoのBPDUには、元のVLANに関する情報が含まれています。
- CDPはネイティブVLANの設定ミスを報告しますが、実際に検出しているのはSTPです。
ご覧いただきありがとうございます!