<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>cisco Archives | Abdul Wahab Junaid</title>
	<atom:link href="https://awjunaid.com/tag/cisco/feed/" rel="self" type="application/rss+xml" />
	<link>https://awjunaid.com/tag/cisco/</link>
	<description>Offensive Security Researcher &#38; Quantum Cryptography Analyst</description>
	<lastBuildDate>Wed, 29 Jul 2026 10:02:49 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://i0.wp.com/awjunaid.com/wp-content/uploads/2023/06/cropped-1668274976669.jpeg?fit=32%2C32&#038;ssl=1</url>
	<title>cisco Archives | Abdul Wahab Junaid</title>
	<link>https://awjunaid.com/tag/cisco/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">220030102</site>	<item>
		<title>How to Configure and Verify VLANs (Normal Range) Spanning Multiple Switches</title>
		<link>https://awjunaid.com/networking/how-to-configure-and-verify-vlans-normal-range-spanning-multiple-switches/</link>
					<comments>https://awjunaid.com/networking/how-to-configure-and-verify-vlans-normal-range-spanning-multiple-switches/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Abdul Wahab Junaid]]></dc:creator>
		<pubDate>Sun, 24 Dec 2023 11:41:09 +0000</pubDate>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[networking]]></category>
		<guid isPermaLink="false">https://awjunaid.com/?p=8761</guid>

					<description><![CDATA[<p>A VLAN (Virtual Local Area Network) lets you take a single physical switch — or a whole group&#8230;</p>
<p>The post <a href="https://awjunaid.com/networking/how-to-configure-and-verify-vlans-normal-range-spanning-multiple-switches/">How to Configure and Verify VLANs (Normal Range) Spanning Multiple Switches</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">A <strong>VLAN (Virtual Local Area Network)</strong> lets you take a single physical switch — or a whole group of switches — and logically divide it into multiple separate broadcast domains, as if they were physically separate networks, without running separate cabling for each department or function.</p>



<p class="wp-block-paragraph">This article focuses specifically on <strong>normal-range VLANs (1–1005)</strong> and how to make them <strong>span multiple switches</strong>, so that, for example, VLAN 10 in Building A behaves as the exact same Layer 2 network as VLAN 10 in Building B.</p>



<h2 class="wp-block-heading">What Is a VLAN, Conceptually?</h2>



<p class="wp-block-paragraph">Physically, all your devices might be plugged into the same switch (or chain of switches). But logically, a VLAN groups switch ports into separate broadcast domains. Devices in VLAN 10 cannot directly communicate at Layer 2 with devices in VLAN 20, even if they&#8217;re plugged into the same physical switch — a router (or Layer 3 switch) is required to pass traffic between VLANs.</p>



<h3 class="wp-block-heading">Analogy</h3>



<p class="wp-block-paragraph">Think of a large office building with one shared elevator system (the physical switch), but separate secured floors (VLANs) that require a security badge (routing) to move between them. Two people on the same floor can walk to each other&#8217;s offices freely (same VLAN = same broadcast domain), but moving to a different floor requires going through security (a router).</p>



<h2 class="wp-block-heading">VLAN Ranges</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Range</th><th>Name</th><th>Notes</th></tr></thead><tbody><tr><td>0, 4095</td><td>Reserved</td><td>Not usable</td></tr><tr><td>1</td><td>Default VLAN</td><td>Exists automatically; cannot be deleted or renamed on most switches</td></tr><tr><td>2–1001</td><td>Normal range</td><td>Stored in <code>vlan.dat</code>, supported on all switches, focus of this article</td></tr><tr><td>1002–1005</td><td>Reserved for legacy Token Ring/FDDI</td><td>Not typically used</td></tr><tr><td>1006–4094</td><td>Extended range</td><td>Requires VTP transparent mode on older platforms; supported natively on modern switches</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">This article focuses on <strong>normal-range VLANs (2–1001)</strong>, which is what the CCNA exam blueprint specifically references.</p>



<h2 class="wp-block-heading">Step-by-Step: Configuring VLANs Spanning Multiple Switches</h2>



<h3 class="wp-block-heading">Topology</h3>



<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">graph TB
    subgraph SW1["Switch 1 - Building A"]
        PC1["PC1 - VLAN 10"]
        PC2["PC2 - VLAN 20"]
    end
    subgraph SW2["Switch 2 - Building B"]
        PC3["PC3 - VLAN 10"]
        PC4["PC4 - VLAN 20"]
    end
    SW1 ---|"Trunk Link (802.1Q)"| SW2</pre></div>



<p class="wp-block-paragraph">The goal: PC1 (VLAN 10, SW1) should be able to communicate at Layer 2 with PC3 (VLAN 10, SW2), while remaining completely isolated from PC2 and PC4 (VLAN 20), even though all four devices share the same physical trunk link between switches.</p>



<h3 class="wp-block-heading">Step 1: Create the VLANs on Both Switches</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SW1(config)# vlan 10
SW1(config-vlan)# name SALES
SW1(config-vlan)# exit
SW1(config)# vlan 20
SW1(config-vlan)# name ENGINEERING
SW1(config-vlan)# exit</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">SW1(config</span><span style="color: #D8DEE9FF">)# vlan 10</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-vlan</span><span style="color: #D8DEE9FF">)# name SALES</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-vlan</span><span style="color: #D8DEE9FF">)# exit</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config</span><span style="color: #D8DEE9FF">)# vlan 20</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-vlan</span><span style="color: #D8DEE9FF">)# name ENGINEERING</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-vlan</span><span style="color: #D8DEE9FF">)# exit</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SW2(config)# vlan 10
SW2(config-vlan)# name SALES
SW2(config-vlan)# exit
SW2(config)# vlan 20
SW2(config-vlan)# name ENGINEERING
SW2(config-vlan)# exit</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">SW2(config</span><span style="color: #D8DEE9FF">)# vlan 10</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-vlan</span><span style="color: #D8DEE9FF">)# name SALES</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-vlan</span><span style="color: #D8DEE9FF">)# exit</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config</span><span style="color: #D8DEE9FF">)# vlan 20</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-vlan</span><span style="color: #D8DEE9FF">)# name ENGINEERING</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-vlan</span><span style="color: #D8DEE9FF">)# exit</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>Important:</strong> VLAN numbers must match across switches for devices to be considered part of the same VLAN — the VLAN <em>name</em> is just a label for humans and doesn&#8217;t need to match, but best practice is to keep names consistent too, to avoid confusion.</p>



<h3 class="wp-block-heading">Step 2: Assign Access Ports to VLANs</h3>



<p class="wp-block-paragraph">On SW1:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SW1(config)# interface GigabitEthernet0/1
SW1(config-if)# switchport mode access
SW1(config-if)# switchport access vlan 10
SW1(config-if)# exit

SW1(config)# interface GigabitEthernet0/2
SW1(config-if)# switchport mode access
SW1(config-if)# switchport access vlan 20</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">SW1(config</span><span style="color: #D8DEE9FF">)# interface GigabitEthernet0/1</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-if</span><span style="color: #D8DEE9FF">)# switchport mode access</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-if</span><span style="color: #D8DEE9FF">)# switchport access vlan 10</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-if</span><span style="color: #D8DEE9FF">)# exit</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">SW1(config</span><span style="color: #D8DEE9FF">)# interface GigabitEthernet0/2</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-if</span><span style="color: #D8DEE9FF">)# switchport mode access</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-if</span><span style="color: #D8DEE9FF">)# switchport access vlan 20</span></span></code></pre></div>



<p class="wp-block-paragraph">On SW2:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SW2(config)# interface GigabitEthernet0/1
SW2(config-if)# switchport mode access
SW2(config-if)# switchport access vlan 10
SW2(config-if)# exit

SW2(config)# interface GigabitEthernet0/2
SW2(config-if)# switchport mode access
SW2(config-if)# switchport access vlan 20</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">SW2(config</span><span style="color: #D8DEE9FF">)# interface GigabitEthernet0/1</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-if</span><span style="color: #D8DEE9FF">)# switchport mode access</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-if</span><span style="color: #D8DEE9FF">)# switchport access vlan 10</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-if</span><span style="color: #D8DEE9FF">)# exit</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">SW2(config</span><span style="color: #D8DEE9FF">)# interface GigabitEthernet0/2</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-if</span><span style="color: #D8DEE9FF">)# switchport mode access</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-if</span><span style="color: #D8DEE9FF">)# switchport access vlan 20</span></span></code></pre></div>



<h3 class="wp-block-heading">Step 3: Configure the Trunk Link Between Switches</h3>



<p class="wp-block-paragraph">This is the crucial step that lets VLANs &#8220;span&#8221; multiple switches — without a properly configured trunk, VLAN 10 on SW1 and VLAN 10 on SW2 would be entirely isolated islands with no way to communicate.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SW1(config)# interface GigabitEthernet0/24
SW1(config-if)# switchport trunk encapsulation dot1q
SW1(config-if)# switchport mode trunk
SW1(config-if)# switchport trunk allowed vlan 10,20</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">SW1(config</span><span style="color: #D8DEE9FF">)# interface GigabitEthernet0/24</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-if</span><span style="color: #D8DEE9FF">)# switchport trunk encapsulation dot1q</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-if</span><span style="color: #D8DEE9FF">)# switchport mode trunk</span></span>
<span class="line"><span style="color: #88C0D0">SW1(config-if</span><span style="color: #D8DEE9FF">)# switchport trunk allowed vlan 10,20</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SW2(config)# interface GigabitEthernet0/24
SW2(config-if)# switchport trunk encapsulation dot1q
SW2(config-if)# switchport mode trunk
SW2(config-if)# switchport trunk allowed vlan 10,20</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">SW2(config</span><span style="color: #D8DEE9FF">)# interface GigabitEthernet0/24</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-if</span><span style="color: #D8DEE9FF">)# switchport trunk encapsulation dot1q</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-if</span><span style="color: #D8DEE9FF">)# switchport mode trunk</span></span>
<span class="line"><span style="color: #88C0D0">SW2(config-if</span><span style="color: #D8DEE9FF">)# switchport trunk allowed vlan 10,20</span></span></code></pre></div>



<p class="wp-block-paragraph">(See the dedicated interswitch connectivity article for full trunking details, native VLAN considerations, and DTP behavior.)</p>



<h2 class="wp-block-heading">How Traffic Actually Flows Across the Trunk</h2>



<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">sequenceDiagram
    participant PC1 as PC1 (VLAN 10, SW1)
    participant SW1
    participant SW2
    participant PC3 as PC3 (VLAN 10, SW2)
    PC1->>SW1: Untagged frame (access port)
    SW1->>SW1: Tag frame with VLAN 10 (802.1Q)
    SW1->>SW2: Tagged frame sent across trunk
    SW2->>SW2: Read VLAN tag, strip it
    SW2->>PC3: Untagged frame delivered (access port, VLAN 10)</pre></div>



<p class="wp-block-paragraph">Notice that the 802.1Q tag only exists <strong>on the trunk link itself</strong>. The end devices (PC1 and PC3) never see or generate tags — tagging is purely a switch-to-switch mechanism.</p>



<h2 class="wp-block-heading">Verification Commands</h2>



<h3 class="wp-block-heading"><code>show vlan brief</code></h3>



<p class="wp-block-paragraph">Confirms VLANs exist and shows which <strong>access ports</strong> belong to each VLAN (trunk ports are not listed here since they carry multiple VLANs):</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SW1# show vlan brief
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Gi0/3, Gi0/4, Gi0/5
10   SALES                            active    Gi0/1
20   ENGINEERING                      active    Gi0/2</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">SW1#</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">show</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">vlan</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">brief</span></span>
<span class="line"><span style="color: #88C0D0">VLAN</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Name</span><span style="color: #D8DEE9FF">                             </span><span style="color: #A3BE8C">Status</span><span style="color: #D8DEE9FF">    </span><span style="color: #A3BE8C">Ports</span></span>
<span class="line"><span style="color: #88C0D0">----</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">--------------------------------</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">---------</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">-------------------------------</span></span>
<span class="line"><span style="color: #88C0D0">1</span><span style="color: #D8DEE9FF">    </span><span style="color: #A3BE8C">default</span><span style="color: #D8DEE9FF">                          </span><span style="color: #A3BE8C">active</span><span style="color: #D8DEE9FF">    </span><span style="color: #A3BE8C">Gi0/3,</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Gi0/4,</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Gi0/5</span></span>
<span class="line"><span style="color: #88C0D0">10</span><span style="color: #D8DEE9FF">   </span><span style="color: #A3BE8C">SALES</span><span style="color: #D8DEE9FF">                            </span><span style="color: #A3BE8C">active</span><span style="color: #D8DEE9FF">    </span><span style="color: #A3BE8C">Gi0/1</span></span>
<span class="line"><span style="color: #88C0D0">20</span><span style="color: #D8DEE9FF">   </span><span style="color: #A3BE8C">ENGINEERING</span><span style="color: #D8DEE9FF">                      </span><span style="color: #A3BE8C">active</span><span style="color: #D8DEE9FF">    </span><span style="color: #A3BE8C">Gi0/2</span></span></code></pre></div>



<h3 class="wp-block-heading"><code>show interfaces &lt;interface&gt; switchport</code></h3>



<p class="wp-block-paragraph">Confirms an individual port&#8217;s VLAN assignment and mode:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SW1# show interfaces GigabitEthernet0/1 switchport
Name: Gi0/1
Switchport: Enabled
Administrative Mode: static access
Operational Mode: static access
Access Mode VLAN: 10 (SALES)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">SW1#</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">show</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">interfaces</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">GigabitEthernet0/1</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">switchport</span></span>
<span class="line"><span style="color: #88C0D0">Name:</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Gi0/1</span></span>
<span class="line"><span style="color: #88C0D0">Switchport:</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Enabled</span></span>
<span class="line"><span style="color: #88C0D0">Administrative</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Mode:</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">static</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">access</span></span>
<span class="line"><span style="color: #88C0D0">Operational</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Mode:</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">static</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">access</span></span>
<span class="line"><span style="color: #88C0D0">Access</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Mode</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">VLAN:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span><span style="color: #D8DEE9FF"> (SALES)</span></span></code></pre></div>



<h3 class="wp-block-heading"><code>show interfaces trunk</code></h3>



<p class="wp-block-paragraph">Confirms VLANs 10 and 20 are actually being carried across the trunk (covered in detail in the interswitch connectivity article):</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SW1# show interfaces trunk
Port        Mode    Encapsulation  Status        Native vlan
Gi0/24      on      802.1q         trunking      1

Port        Vlans allowed on trunk
Gi0/24      10,20</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">SW1#</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">show</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">interfaces</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">trunk</span></span>
<span class="line"><span style="color: #88C0D0">Port</span><span style="color: #D8DEE9FF">        </span><span style="color: #A3BE8C">Mode</span><span style="color: #D8DEE9FF">    </span><span style="color: #A3BE8C">Encapsulation</span><span style="color: #D8DEE9FF">  </span><span style="color: #A3BE8C">Status</span><span style="color: #D8DEE9FF">        </span><span style="color: #A3BE8C">Native</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">vlan</span></span>
<span class="line"><span style="color: #88C0D0">Gi0/24</span><span style="color: #D8DEE9FF">      </span><span style="color: #A3BE8C">on</span><span style="color: #D8DEE9FF">      </span><span style="color: #B48EAD">802.1</span><span style="color: #A3BE8C">q</span><span style="color: #D8DEE9FF">         </span><span style="color: #A3BE8C">trunking</span><span style="color: #D8DEE9FF">      </span><span style="color: #B48EAD">1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">Port</span><span style="color: #D8DEE9FF">        </span><span style="color: #A3BE8C">Vlans</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">allowed</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">on</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">trunk</span></span>
<span class="line"><span style="color: #88C0D0">Gi0/24</span><span style="color: #D8DEE9FF">      </span><span style="color: #B48EAD">10</span><span style="color: #A3BE8C">,20</span></span></code></pre></div>



<h3 class="wp-block-heading"><code>show mac address-table vlan 10</code></h3>



<p class="wp-block-paragraph">Confirms which MAC addresses the switch has learned within VLAN 10 specifically — useful for confirming end-to-end Layer 2 connectivity:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SW1# show mac address-table vlan 10
Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
10      aaaa.bbbb.0001    DYNAMIC     Gi0/1
10      cccc.dddd.0002    DYNAMIC     Gi0/24</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">SW1#</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">show</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">mac</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">address-table</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">vlan</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span></span>
<span class="line"><span style="color: #88C0D0">Vlan</span><span style="color: #D8DEE9FF">    </span><span style="color: #A3BE8C">Mac</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Address</span><span style="color: #D8DEE9FF">       </span><span style="color: #A3BE8C">Type</span><span style="color: #D8DEE9FF">        </span><span style="color: #A3BE8C">Ports</span></span>
<span class="line"><span style="color: #88C0D0">----</span><span style="color: #D8DEE9FF">    </span><span style="color: #A3BE8C">-----------</span><span style="color: #D8DEE9FF">       </span><span style="color: #A3BE8C">--------</span><span style="color: #D8DEE9FF">    </span><span style="color: #A3BE8C">-----</span></span>
<span class="line"><span style="color: #88C0D0">10</span><span style="color: #D8DEE9FF">      </span><span style="color: #A3BE8C">aaaa.bbbb.0001</span><span style="color: #D8DEE9FF">    </span><span style="color: #A3BE8C">DYNAMIC</span><span style="color: #D8DEE9FF">     </span><span style="color: #A3BE8C">Gi0/1</span></span>
<span class="line"><span style="color: #88C0D0">10</span><span style="color: #D8DEE9FF">      </span><span style="color: #A3BE8C">cccc.dddd.0002</span><span style="color: #D8DEE9FF">    </span><span style="color: #A3BE8C">DYNAMIC</span><span style="color: #D8DEE9FF">     </span><span style="color: #A3BE8C">Gi0/24</span></span></code></pre></div>



<p class="wp-block-paragraph">The second entry (learned via Gi0/24, the trunk port) confirms the switch has learned about a VLAN 10 device on the <em>other</em> switch — proof the VLAN is genuinely spanning across the trunk.</p>



<h3 class="wp-block-heading">End-to-End Connectivity Test</h3>



<p class="wp-block-paragraph">Ultimately, the simplest verification is a ping test between two devices in the same VLAN on different switches:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>C:\Users\PC1> ping 192.168.10.20

Pinging 192.168.10.20 with 32 bytes of data:
Reply from 192.168.10.20: bytes=32 time=1ms TTL=128</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">C:\Users\PC1&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">ping</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">192.168</span><span style="color: #A3BE8C">.10.20</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">Pinging</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">192.168</span><span style="color: #A3BE8C">.10.20</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">with</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">32</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">bytes</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">of</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">data:</span></span>
<span class="line"><span style="color: #88C0D0">Reply</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">from</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">192.168</span><span style="color: #A3BE8C">.10.20:</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">bytes=</span><span style="color: #B48EAD">32</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">time=</span><span style="color: #B48EAD">1</span><span style="color: #A3BE8C">ms</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">TTL=</span><span style="color: #B48EAD">128</span></span></code></pre></div>



<p class="wp-block-paragraph">If PC1 (VLAN 10, SW1, IP <code>192.168.10.10</code>) can successfully ping PC3 (VLAN 10, SW2, IP <code>192.168.10.20</code>), and both are on the same subnet, this confirms the VLAN genuinely spans both switches correctly.</p>



<h2 class="wp-block-heading">Comparison Table: Access Port vs. Trunk Port</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Feature</th><th>Access Port</th><th>Trunk Port</th></tr></thead><tbody><tr><td>Number of VLANs carried</td><td>1</td><td>Multiple (all allowed VLANs)</td></tr><tr><td>Frame tagging</td><td>None (untagged)</td><td>802.1Q tagged (except native VLAN)</td></tr><tr><td>Typical use</td><td>Connects end devices (PCs, printers, phones)</td><td>Connects switches, routers, or APs</td></tr><tr><td>Configuration command</td><td><code>switchport mode access</code></td><td><code>switchport mode trunk</code></td></tr><tr><td>VLAN assignment command</td><td><code>switchport access vlan &lt;id&gt;</code></td><td><code>switchport trunk allowed vlan &lt;list&gt;</code></td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Common Mistakes When Spanning VLANs</h2>



<ol class="wp-block-list">
<li><strong>Forgetting to create the VLAN on the second switch.</strong> VLANs are locally significant to each switch&#8217;s database unless you use VTP (VLAN Trunking Protocol) to synchronize them — and even then, VTP has version-specific quirks. Many organizations avoid VTP altogether and manually replicate VLAN configuration for tighter control.</li>



<li><strong>Forgetting to allow the VLAN across the trunk.</strong> Even if VLAN 10 exists on both switches, if the trunk&#8217;s allowed VLAN list doesn&#8217;t include 10, traffic won&#8217;t pass.</li>



<li><strong>Assigning the wrong VLAN to an access port</strong>, resulting in a device that can&#8217;t reach others in its intended VLAN.</li>



<li><strong>IP addressing mismatches</strong> — remember, VLANs are a Layer 2 concept; you still need consistent Layer 3 subnetting (same subnet on both switches&#8217; VLAN 10 ports) for IP communication to succeed.</li>
</ol>



<h2 class="wp-block-heading">Best Practices</h2>



<ol class="wp-block-list">
<li><strong>Use a consistent VLAN numbering scheme</strong> across your entire organization (e.g., VLAN 10 = Sales everywhere, VLAN 20 = Engineering everywhere) to reduce confusion.</li>



<li><strong>Document VLAN-to-subnet mappings</strong> clearly (e.g., VLAN 10 = 192.168.10.0/24) so Layer 2 and Layer 3 designs stay aligned.</li>



<li><strong>Avoid VLAN 1 for user traffic.</strong> Reserve it as the default/native VLAN only, and place real traffic in explicitly created VLANs.</li>



<li><strong>Prune unnecessary VLANs from trunks</strong> using <code>switchport trunk allowed vlan</code> to reduce unnecessary broadcast propagation across the network.</li>



<li><strong>Verify both configuration AND live state.</strong> <code>show running-config</code> shows intended configuration; <code>show vlan brief</code>, <code>show interfaces trunk</code>, and <code>show mac address-table</code> show what&#8217;s actually happening — always check both.</li>
</ol>



<h2 class="wp-block-heading">Troubleshooting Checklist</h2>



<ol class="wp-block-list">
<li>Does the VLAN exist on <strong>both</strong> switches? (<code>show vlan brief</code>)</li>



<li>Is the access port&#8217;s VLAN assignment correct? (<code>show interfaces switchport</code>)</li>



<li>Is the VLAN included in the trunk&#8217;s allowed list on <strong>both ends</strong>? (<code>show interfaces trunk</code>)</li>



<li>Is the trunk actually up and trunking (not stuck in access mode)?</li>



<li>Are the two end devices in the same IP subnet, with correct default gateways?</li>



<li>Has the switch actually learned the remote device&#8217;s MAC address in the correct VLAN? (<code>show mac address-table vlan &lt;id></code>)</li>
</ol>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">Making a VLAN &#8220;span&#8221; multiple switches requires three coordinated pieces: the VLAN must exist with the same VLAN ID on every switch involved, end devices must be assigned to that VLAN via access ports, and the VLAN must be explicitly permitted across every trunk link connecting the switches. Once all three pieces are in place, devices in the same VLAN — regardless of which physical switch they&#8217;re plugged into — behave as if they&#8217;re on the same local network segment, and devices in different VLANs remain isolated at Layer 2 even when sharing the same physical infrastructure.</p>



<h2 class="wp-block-heading">Further Reading</h2>



<ul class="wp-block-list">
<li><a href="https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst9300/software/release/17-3/configuration_guide/vlan/b_173_vlan_9300_cg.html">Cisco: VLAN Configuration Guide</a></li>



<li><a href="https://standards.ieee.org/ieee/802.1Q/6844/">IEEE 802.1Q VLAN Standard</a></li>



<li><a href="https://www.cisco.com/c/en/us/support/docs/lan-switching/vtp/98155-vtp-in-a-nutshell.html">Cisco: Understanding VLAN Trunk Protocol (VTP)</a></li>



<li><a href="https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst3750x_3560x/software/release/15-2_2_e/command_reference/b_command_reference.html">Cisco Command Reference: show vlan</a></li>
</ul>
<p>The post <a href="https://awjunaid.com/networking/how-to-configure-and-verify-vlans-normal-range-spanning-multiple-switches/">How to Configure and Verify VLANs (Normal Range) Spanning Multiple Switches</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://awjunaid.com/networking/how-to-configure-and-verify-vlans-normal-range-spanning-multiple-switches/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8761</post-id>	</item>
		<item>
		<title>How to Implement Cisco Threat Grid for Advanced Threat Analysis and Malware Detection</title>
		<link>https://awjunaid.com/cisco/how-to-implement-cisco-threat-grid-for-advanced-threat-analysis-and-malware-detection/</link>
					<comments>https://awjunaid.com/cisco/how-to-implement-cisco-threat-grid-for-advanced-threat-analysis-and-malware-detection/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Abdul Wahab Junaid]]></dc:creator>
		<pubDate>Tue, 12 Sep 2023 12:09:24 +0000</pubDate>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[cisco]]></category>
		<guid isPermaLink="false">https://awjunaid.com/?p=5527</guid>

					<description><![CDATA[<p>Malware doesn&#8217;t announce itself anymore. It hides inside PDFs, macros, and seemingly harmless executables, waiting for the right&#8230;</p>
<p>The post <a href="https://awjunaid.com/cisco/how-to-implement-cisco-threat-grid-for-advanced-threat-analysis-and-malware-detection/">How to Implement Cisco Threat Grid for Advanced Threat Analysis and Malware Detection</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Malware doesn&#8217;t announce itself anymore. It hides inside PDFs, macros, and seemingly harmless executables, waiting for the right moment to detonate. Traditional signature-based antivirus catches maybe half of what&#8217;s out there today, and that&#8217;s being generous. If you&#8217;re running a network of any real size in 2026, you need something that actually watches what a file <em>does</em> rather than just comparing it against a list of known bad hashes. That&#8217;s where Cisco Threat Grid comes in, and after implementing it across several enterprise environments, I want to walk you through exactly how it works and how to set it up properly.</p>



<h2 class="wp-block-heading">What Threat Grid Actually Does</h2>



<p class="wp-block-paragraph">Cisco Threat Grid is a malware analysis and threat intelligence platform that combines dynamic and static analysis (commonly called sandboxing) with a massive, continuously updated threat intelligence database. When a suspicious file enters your network — through email, web download, or a file share — Threat Grid detonates it in an isolated virtual environment and observes exactly what happens: registry changes, network calls, process spawning, file drops, and privilege escalation attempts.</p>



<p class="wp-block-paragraph">The output isn&#8217;t just a binary &#8220;malicious&#8221; or &#8220;clean&#8221; verdict. You get a behavioral score, a detailed report, and correlation against a global feed of indicators of compromise (IOCs) gathered from Cisco&#8217;s Talos intelligence group and millions of other samples analyzed worldwide.</p>



<p class="wp-block-paragraph">Threat Grid integrates natively with several other Cisco products, which is honestly one of its biggest strengths:</p>



<ul class="wp-block-list">
<li><strong>Cisco Secure Email</strong> (formerly ESA) — attachments get detonated before delivery</li>



<li><strong>Cisco Secure Endpoint</strong> (formerly AMP for Endpoints) — file trajectory and retrospective detection</li>



<li><strong>Cisco Firepower/Secure Firewall</strong> — network-based file inspection</li>



<li><strong>Cisco Umbrella</strong> — DNS-layer correlation with sandbox verdicts</li>
</ul>



<h2 class="wp-block-heading">Networking and Security Fundamentals Before You Start</h2>



<p class="wp-block-paragraph">Before touching the console, it helps to understand where Threat Grid sits in the security stack. Traditional perimeter defenses — firewalls, IPS signatures — operate on known patterns. Sandboxing operates on <strong>behavior</strong>. This distinction matters because modern malware is often polymorphic; the hash changes every time it&#8217;s compiled, but the <em>behavior</em> (dropping a payload into <code>%APPDATA%</code>, beaconing to a C2 server, disabling Windows Defender) tends to stay consistent.</p>



<p class="wp-block-paragraph">Threat Grid sits either in the cloud (Cisco-hosted) or as an on-premises appliance (Threat Grid Appliance, TGA), depending on your compliance requirements. Financial and healthcare organizations often need the on-prem appliance because samples never leave their network boundary — this matters if you&#8217;re handling files that could contain sensitive customer data even when benign.</p>



<h2 class="wp-block-heading">Deployment Architecture Planning</h2>



<p class="wp-block-paragraph">Before implementation, map out your architecture:</p>



<ol class="wp-block-list">
<li><strong>Sample submission sources</strong> — which devices will forward files (email gateway, firewall, endpoint agents)</li>



<li><strong>Network segmentation</strong> — the sandbox environment needs internet access to observe real malware behavior (C2 beaconing, download attempts), so it must sit in a controlled DMZ, isolated from production</li>



<li><strong>Bandwidth planning</strong> — file submission and report retrieval consume bandwidth; plan for peak submission volume</li>



<li><strong>Licensing</strong> — Threat Grid licensing is typically bundled with Secure Endpoint, Secure Email, or purchased standalone with sample-volume tiers</li>
</ol>



<h2 class="wp-block-heading">Step-by-Step Implementation</h2>



<h3 class="wp-block-heading">Step 1: Choose Cloud or On-Premises Appliance</h3>



<p class="wp-block-paragraph">For cloud deployment, you simply need an organization account provisioned through the Cisco Secure portal and API keys. For on-premises, you&#8217;re racking a physical or virtual Threat Grid Appliance (TGA5504 or the VM-based OVA).</p>



<p class="wp-block-paragraph">For the appliance, initial setup is via the OPAdmin (Operations Portal Admin) console:</p>



<pre class="wp-block-code"><code>https:&#47;&#47;&lt;TGA-management-IP&gt;/opadmin
</code></pre>



<p class="wp-block-paragraph">Default login on first boot is <code>opadmin</code> with the password printed on the appliance pull-tab or set during OVA deployment.</p>



<h3 class="wp-block-heading">Step 2: Configure Network Interfaces on the Appliance</h3>



<p class="wp-block-paragraph">The TGA has three logical interfaces you must configure correctly:</p>



<ul class="wp-block-list">
<li><strong>Admin interface</strong> — management access</li>



<li><strong>Clean interface</strong> — for legitimate outbound update traffic</li>



<li><strong>Dirty interface</strong> — dedicated egress for sandboxed malware to &#8220;call home&#8221; safely, fully isolated from your production network</li>
</ul>



<pre class="wp-block-code"><code>opadmin# configure network
opadmin(config-net)# interface admin
opadmin(config-net-admin)# ip address 10.10.10.5 255.255.255.0
opadmin(config-net-admin)# gateway 10.10.10.1
opadmin(config-net-admin)# exit
opadmin(config-net)# interface dirty
opadmin(config-net-dirty)# ip address 192.168.99.5 255.255.255.0
opadmin(config-net-dirty)# gateway 192.168.99.1
opadmin(config-net-dirty)# exit
opadmin(config-net)# commit
</code></pre>



<p class="wp-block-paragraph">The dirty interface routing is critical — it must have unrestricted (but monitored) internet egress. If you sandbox malware and it can&#8217;t reach out to its C2 infrastructure, you&#8217;ll get an incomplete behavioral picture. Many first-time implementations fail here because network security teams reflexively lock down every interface, defeating the entire purpose of the dirty network.</p>



<h3 class="wp-block-heading">Step 3: Integrate Threat Grid with Cisco Secure Firewall (Firepower)</h3>



<p class="wp-block-paragraph">On your Firepower Management Center (FMC), enable Threat Grid as your malware and file analysis cloud connection:</p>



<ol class="wp-block-list">
<li>Navigate to <strong>System > Integration > Cloud Services</strong></li>



<li>Enable <strong>Cisco Success Network</strong> and <strong>Threat Grid Cloud</strong></li>



<li>Under <strong>Policies > Access Control > Malware &amp; File Policy</strong>, create a new file policy</li>
</ol>



<p class="wp-block-paragraph">For CLI-based verification on the managed FTD device:</p>



<pre class="wp-block-code"><code>&gt; show cloud-connector status
Cloud Connector Status: Enabled
Threat Grid Integration: Active
Last Sample Submission: 2026-07-28 14:22:03 UTC
</code></pre>



<p class="wp-block-paragraph">Configure a File Policy rule to send unknown SHA256 files for dynamic analysis:</p>



<pre class="wp-block-code"><code>File Policy: Malware-Detection-Policy
Rule 1:
  Application Protocol: Any
  Direction: Any
  File Type Category: Executables, PDF files, Office Documents
  Action: Block Malware
  Advanced: Spero Analysis for MSEXE, Dynamic Analysis (Threat Grid) enabled
</code></pre>



<h3 class="wp-block-heading">Step 4: Integrate with Cisco Secure Email</h3>



<p class="wp-block-paragraph">On the Email Security Appliance (ESA), enable File Analysis under the mail policies:</p>



<pre class="wp-block-code"><code>esa.example.com&gt; mailconfig
Choose the operation you want to perform:
- SETUP - Configure global settings
&gt; setup

Enable File Reputation and File Analysis? &#91;Y]: Y
Threat Grid Cloud URL: https://panacea.threatgrid.com
API Key: &lt;your-org-api-key&gt;
</code></pre>



<p class="wp-block-paragraph">Then verify:</p>



<pre class="wp-block-code"><code>esa.example.com&gt; filereputationconfig

File reputation service: Enabled
File analysis service: Enabled
Cloud server: panacea.threatgrid.com
Connection status: Connected
</code></pre>



<h3 class="wp-block-heading">Step 5: Integrate with Cisco Secure Endpoint (AMP for Endpoints)</h3>



<p class="wp-block-paragraph">In the Secure Endpoint console (<code>securex.us.security.cisco.com</code> or your regional console):</p>



<ol class="wp-block-list">
<li>Go to <strong>Management > Policies</strong></li>



<li>Edit your endpoint policy</li>



<li>Under <strong>File Analysis</strong>, set unknown executable behavior to &#8220;Auto-submit low prevalence executables&#8221;</li>



<li>Ensure the connector is at least version 7.x for full sandbox submission support</li>
</ol>



<p class="wp-block-paragraph">On an endpoint, verify connector status via CLI:</p>



<pre class="wp-block-code"><code>C:\Program Files\Cisco\AMP\&gt; sfc.exe -c
Connector GUID: a1b2c3d4-....
Threat Grid Submission: Enabled
Cloud: US-East
Policy Serial: 4521
</code></pre>



<h3 class="wp-block-heading">Step 6: API-Based Sample Submission (Custom Integration)</h3>



<p class="wp-block-paragraph">For SOC teams building custom workflows, Threat Grid exposes a REST API. Submitting a sample manually for testing:</p>



<pre class="wp-block-code"><code>curl -H "Authorization: Bearer &lt;API_KEY&gt;" \
  -F "sample=@suspicious_file.exe" \
  -F "private=true" \
  https:&#47;&#47;panacea.threatgrid.com/api/v3/samples
</code></pre>



<p class="wp-block-paragraph">Retrieving the analysis report once processing completes:</p>



<pre class="wp-block-code"><code>curl -H "Authorization: Bearer &lt;API_KEY&gt;" \
  https:&#47;&#47;panacea.threatgrid.com/api/v3/samples/&lt;sample-id&gt;/analysis.json
</code></pre>



<p class="wp-block-paragraph">Expected JSON output includes a <code>threat_score</code> (0–100), behavioral indicators, and network artifacts observed during detonation.</p>



<h2 class="wp-block-heading">Verification and Testing</h2>



<p class="wp-block-paragraph">Use the EICAR test file or, better, Cisco&#8217;s own documented safe test samples to confirm the pipeline works end-to-end without submitting live malware into your lab.</p>



<p class="wp-block-paragraph">Check appliance health:</p>



<pre class="wp-block-code"><code>opadmin# show status
System Status: Operational
Disk Usage: 42%
Queue Depth: 3 samples pending
Last Successful Analysis: 2026-07-29 09:14:11 UTC
</code></pre>



<p class="wp-block-paragraph">Check integration logs on FMC:</p>



<pre class="wp-block-code"><code>&gt; show file-events | include Dynamic Analysis
2026-07-29 09:10:02 | Dynamic Analysis Submitted | invoice_2026.doc | SHA256: 9f8a...
2026-07-29 09:12:45 | Dynamic Analysis Result | Score: 95 | Verdict: Malicious
</code></pre>



<h2 class="wp-block-heading">Real-World Enterprise Scenario</h2>



<p class="wp-block-paragraph">Picture a mid-size financial services company receiving roughly 40,000 emails daily. Before Threat Grid, their email gateway relied purely on reputation and signature filtering — effective against known threats but blind to a new banking trojan variant delivered via a macro-enabled invoice document. After integrating Threat Grid with their ESA, every unrecognized attachment gets detonated automatically. The sandbox observes the macro spawning PowerShell, which then attempts to download a second-stage payload from a newly registered domain — a classic malicious pattern. The file gets quarantined before it ever reaches an inbox, and the IOC (the malicious domain) is automatically pushed to their Umbrella DNS policies to block it network-wide, even for machines that might already be compromised through other vectors.</p>



<p class="wp-block-paragraph">This is the real value: one detonation event generates protection across multiple layers of the security stack simultaneously.</p>



<h2 class="wp-block-heading">Best Practices</h2>



<ul class="wp-block-list">
<li><strong>Isolate the dirty network completely.</strong> Never let it touch production VLANs, even accidentally through misconfigured routing.</li>



<li><strong>Tune your file policies.</strong> Sandboxing every single file type kills performance and creates alert fatigue. Focus on high-risk categories: executables, Office documents with macros, PDFs, and archives.</li>



<li><strong>Set retrospective alerting.</strong> Files judged clean today can be reclassified malicious tomorrow as global intelligence updates — make sure retrospective detection notifications are enabled in Secure Endpoint.</li>



<li><strong>Regularly review the dirty interface bandwidth.</strong> Malware beaconing behavior can spike egress traffic; monitor it like any other segment.</li>



<li><strong>Rotate API keys</strong> used for custom integrations every 90 days.</li>
</ul>



<h2 class="wp-block-heading">Common Configuration Mistakes</h2>



<ol class="wp-block-list">
<li><strong>Blocking the dirty interface&#8217;s internet access</strong> — defeats dynamic analysis entirely; malware just sits idle with nothing to observe.</li>



<li><strong>Forgetting to renew appliance SSL certificates</strong>, which silently breaks cloud intelligence sync.</li>



<li><strong>Submitting files with <code>private=false</code></strong> unintentionally, sharing potentially sensitive internal documents with the broader community sample pool.</li>



<li><strong>Not correlating verdicts across products</strong> — treating Threat Grid as a standalone tool instead of feeding its output into firewall and DNS policy automatically.</li>



<li><strong>Ignoring appliance disk capacity</strong>, which fills up quickly under high sample volume and silently drops new submissions.</li>
</ol>



<h2 class="wp-block-heading">Performance Tuning</h2>



<ul class="wp-block-list">
<li>Increase the sample analysis VM pool on the appliance if you&#8217;re consistently seeing queue depth above 10–15 pending samples during peak hours.</li>



<li>Use file-type pre-filtering upstream (on the firewall or email gateway) so only genuinely ambiguous files reach the sandbox, reducing unnecessary load.</li>



<li>For high-throughput environments, consider a clustered TGA deployment rather than a single appliance.</li>
</ul>



<h2 class="wp-block-heading">Troubleshooting</h2>



<p class="wp-block-paragraph"><strong>Samples stuck in &#8220;pending&#8221; indefinitely:</strong> Check dirty interface connectivity first — this is the number one cause. Run <code>opadmin# show network dirty</code> to confirm the interface is up and has a valid route.</p>



<p class="wp-block-paragraph"><strong>Integration shows &#8220;disconnected&#8221; on FMC or ESA:</strong> Usually an API key mismatch or expired certificate. Regenerate the API key from the Threat Grid organization admin panel and re-enter it.</p>



<p class="wp-block-paragraph"><strong>High false-positive rate:</strong> Review your sandbox VM images — outdated or unpatched sandbox OS images can trigger unusual behavior unrelated to the actual sample, skewing scores.</p>



<h2 class="wp-block-heading">FAQs</h2>



<p class="wp-block-paragraph"><strong>Does Threat Grid replace traditional antivirus?</strong> No. It complements signature-based detection by catching unknown and zero-day threats that signatures miss. Run both in tandem.</p>



<p class="wp-block-paragraph"><strong>Can Threat Grid analyze non-Windows files?</strong> Yes, more recent appliance versions support Android APKs and limited macOS analysis alongside the traditional Windows sandbox VMs.</p>



<p class="wp-block-paragraph"><strong>How long does a typical analysis take?</strong> Most samples complete dynamic analysis in 5–15 minutes, though this depends on queue depth and whether the malware employs sandbox-evasion delay tactics.</p>



<p class="wp-block-paragraph"><strong>Is cloud or on-premises better?</strong> Cloud is faster to deploy and requires no hardware maintenance. On-premises is necessary when compliance mandates that files never leave your network boundary.</p>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">Cisco Threat Grid closes a real gap that signature-based tools can&#8217;t cover: unknown, zero-day, and evasive malware that behaves maliciously but doesn&#8217;t match any existing pattern. Implementing it properly means understanding the dirty-network architecture, integrating it thoughtfully across your email, firewall, and endpoint products, and tuning file policies so you&#8217;re sandboxing the right files without drowning your SOC in noise. Done right, it turns a single malicious file detonation into network-wide protection within minutes.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li>Cisco Threat Grid Appliance Administrator Guide — cisco.com/c/en/us/support/security/amp-threat-grid-appliances</li>



<li>Cisco Secure Firewall Management Center Configuration Guide — cisco.com/c/en/us/support/security/defense-center</li>



<li>Cisco Secure Endpoint User Guide — cisco.com/c/en/us/support/security/amp-endpoints</li>



<li>Cisco Threat Grid API Documentation — Cisco DevNet portal</li>
</ul>
<p>The post <a href="https://awjunaid.com/cisco/how-to-implement-cisco-threat-grid-for-advanced-threat-analysis-and-malware-detection/">How to Implement Cisco Threat Grid for Advanced Threat Analysis and Malware Detection</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://awjunaid.com/cisco/how-to-implement-cisco-threat-grid-for-advanced-threat-analysis-and-malware-detection/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5527</post-id>	</item>
		<item>
		<title>How to Set Up Cisco DNA Center for Network Automation and Intent-Based Networking</title>
		<link>https://awjunaid.com/cisco/how-to-set-up-cisco-dna-center-for-network-automation-and-intent-based-networking/</link>
					<comments>https://awjunaid.com/cisco/how-to-set-up-cisco-dna-center-for-network-automation-and-intent-based-networking/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Abdul Wahab Junaid]]></dc:creator>
		<pubDate>Tue, 12 Sep 2023 12:07:50 +0000</pubDate>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[cisco]]></category>
		<guid isPermaLink="false">https://awjunaid.com/?p=5524</guid>

					<description><![CDATA[<p>Anyone who has spent a career configuring switches one CLI session at a time knows the pain of&#8230;</p>
<p>The post <a href="https://awjunaid.com/cisco/how-to-set-up-cisco-dna-center-for-network-automation-and-intent-based-networking/">How to Set Up Cisco DNA Center for Network Automation and Intent-Based Networking</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Anyone who has spent a career configuring switches one CLI session at a time knows the pain of scaling that process across hundreds of devices. Manual configuration doesn&#8217;t just slow you down — it introduces inconsistency, human error, and configuration drift that becomes a nightmare during audits or troubleshooting. Cisco DNA Center changes that equation entirely by shifting network management from device-by-device configuration to intent-based networking, where you describe <em>what</em> you want the network to do and the controller figures out <em>how</em> to make it happen across every device. Here&#8217;s how I approach setting it up in a real enterprise environment.</p>



<h2 class="wp-block-heading">Understanding Intent-Based Networking</h2>



<p class="wp-block-paragraph">Before diving into setup steps, it&#8217;s worth understanding the paradigm shift. Traditional networking is imperative — you log into each device and type the exact commands needed. Intent-based networking is declarative — you define a policy (&#8220;this VLAN needs this QoS treatment across the whole campus&#8221;) and DNA Center translates that into the appropriate configuration for every switch, router, and wireless controller in scope, then continuously verifies the network matches that intent.</p>



<p class="wp-block-paragraph">DNA Center&#8217;s architecture rests on a few pillars:</p>



<ul class="wp-block-list">
<li><strong>Design</strong> — network hierarchy, sites, IP address pools, and templates</li>



<li><strong>Policy</strong> — group-based access control, application policies, and segmentation</li>



<li><strong>Provision</strong> — pushing configuration to devices based on design and policy</li>



<li><strong>Assurance</strong> — continuous telemetry and AI-driven analytics validating the network is behaving as intended</li>
</ul>



<h2 class="wp-block-heading">Networking Fundamentals You Need First</h2>



<p class="wp-block-paragraph">DNA Center leans heavily on a few underlying technologies you should understand before deployment:</p>



<ul class="wp-block-list">
<li><strong>Cisco SD-Access</strong> uses LISP (Locator/ID Separation Protocol) for the control plane and VXLAN for the data plane, decoupling a device&#8217;s identity from its location — this is what enables consistent policy enforcement as users roam across the campus.</li>



<li><strong>Cisco TrustSec</strong> provides Security Group Tags (SGTs) for identity-based segmentation instead of traditional VLAN-based ACLs.</li>



<li><strong>NETCONF/RESTCONF and YANG models</strong> are the underlying protocols DNA Center uses to push structured configuration to devices, replacing screen-scraped CLI automation.</li>
</ul>



<h2 class="wp-block-heading">Pre-Deployment Planning</h2>



<p class="wp-block-paragraph">Before racking anything, map out:</p>



<ol class="wp-block-list">
<li><strong>Physical appliance sizing</strong> — DNA Center ships as a physical appliance (DN2-HW-APL series) or scalable cluster; sizing depends on device count (small: &lt;1,000 devices, medium: up to 5,000, large: up to 25,000+)</li>



<li><strong>Network hierarchy</strong> — Areas, Buildings, and Floors need to mirror your actual physical topology for accurate assurance and location-based analytics</li>



<li><strong>IP address pool planning</strong> — SD-Access fabric requires dedicated pools for underlay and overlay networks</li>



<li><strong>Device readiness</strong> — minimum IOS-XE versions required for full DNA Center management (generally 16.x or later; verify per platform)</li>
</ol>



<h2 class="wp-block-heading">Step-by-Step Implementation</h2>



<h3 class="wp-block-heading">Step 1: Initial Appliance Configuration</h3>



<p class="wp-block-paragraph">Connect to the appliance console and run the initial configuration wizard:</p>



<pre class="wp-block-code"><code>Welcome to Cisco DNA Center Configuration Wizard

Enter Enterprise DHCP server: 10.1.1.10
Enter Enterprise DNS server(s): 10.1.1.10, 10.1.1.11
Enter Cluster Virtual IP: 10.1.1.50
Enter Network Adapter for Enterprise: eth0
Enter Network Adapter for Management: eth1
Configure NTP server: 10.1.1.5
</code></pre>



<p class="wp-block-paragraph">After the wizard completes and services initialize (this can take 30–60 minutes on first boot), access the GUI at <code>https://&lt;cluster-VIP&gt;</code>.</p>



<h3 class="wp-block-heading">Step 2: Define Your Network Hierarchy</h3>



<p class="wp-block-paragraph">Under <strong>Design &gt; Network Hierarchy</strong>, build out your site structure:</p>



<pre class="wp-block-code"><code>Global
 └─ Area: North-America
     └─ Building: HQ-Campus
         ├─ Floor: Floor-1
         ├─ Floor: Floor-2
         └─ Floor: Floor-3
     └─ Building: Branch-Chicago
</code></pre>



<p class="wp-block-paragraph">This isn&#8217;t cosmetic — assurance analytics, wireless heatmaps, and fabric provisioning are all scoped to this hierarchy.</p>



<h3 class="wp-block-heading">Step 3: Configure Network Settings and Credentials</h3>



<p class="wp-block-paragraph">Under <strong>Design &gt; Network Settings</strong>, define:</p>



<pre class="wp-block-code"><code>AAA Server: ISE (10.1.1.20)
Shared Secret: &lt;configured&gt;
NTP Server: 10.1.1.5
DHCP Server: 10.1.1.10
DNS Server: 10.1.1.10
Syslog Server: 10.1.1.30
SNMP Credentials: Read/Write community strings
CLI Credentials: netadmin / &lt;encrypted&gt;
</code></pre>



<p class="wp-block-paragraph">Devices must be reachable via SSH and SNMP with these credentials for discovery to succeed.</p>



<h3 class="wp-block-heading">Step 4: Discover Devices</h3>



<p class="wp-block-paragraph">Navigate to <strong>Provision &gt; Inventory &gt; Discovery</strong>, and configure an IP range or CDP-based discovery seed:</p>



<pre class="wp-block-code"><code>Discovery Name: Campus-Discovery-01
Discovery Type: CDP
Seed IP: 10.1.1.1
CDP Level: 16
Preferred Management IP: Use Loopback
</code></pre>



<p class="wp-block-paragraph">Run discovery and verify devices land in inventory:</p>



<pre class="wp-block-code"><code>show network-device count
Total Devices Discovered: 142
Reachable: 140
Unreachable: 2
</code></pre>



<p class="wp-block-paragraph">On the actual device CLI, confirm SNMP and SSH are correctly enabled to support this:</p>



<pre class="wp-block-code"><code>switch(config)# snmp-server community DNACread RO
switch(config)# ip ssh version 2
switch(config)# username netadmin privilege 15 secret &lt;password&gt;
</code></pre>



<h3 class="wp-block-heading">Step 5: Assign Devices to Sites</h3>



<p class="wp-block-paragraph">Once discovered, assign each device under <strong>Provision &gt; Inventory</strong> to its corresponding site in the hierarchy. This step is mandatory before any provisioning or SD-Access fabric work can proceed.</p>



<h3 class="wp-block-heading">Step 6: Build the SD-Access Fabric</h3>



<p class="wp-block-paragraph">Under <strong>Provision &gt; Fabric Sites</strong>, create a fabric domain:</p>



<pre class="wp-block-code"><code>Fabric Name: Campus-Fabric-01
Associated Site: HQ-Campus
</code></pre>



<p class="wp-block-paragraph">Designate fabric roles for your devices:</p>



<ul class="wp-block-list">
<li><strong>Control Plane Node</strong> — typically a core switch or dedicated appliance running LISP</li>



<li><strong>Border Node</strong> — connects the fabric to the external network (internet, data center)</li>



<li><strong>Edge Node</strong> — access layer switches where endpoints connect</li>
</ul>



<pre class="wp-block-code"><code>Device: Core-SW-01 → Role: Control Plane + Border
Device: Access-SW-01 → Role: Edge Node
Device: Access-SW-02 → Role: Edge Node
</code></pre>



<p class="wp-block-paragraph">Underlying LISP configuration pushed automatically resembles:</p>



<pre class="wp-block-code"><code>router lisp
 locator-set RLOC-Campus
  10.1.1.1 priority 1 weight 100
 !
 instance-id 4099
  service ipv4
   eid-table vlan 10
   map-server
   map-resolver
</code></pre>



<p class="wp-block-paragraph">You don&#8217;t type this manually — DNA Center generates and pushes it — but understanding what&#8217;s happening under the hood is critical for troubleshooting.</p>



<h3 class="wp-block-heading">Step 7: Define Virtual Networks and Segmentation</h3>



<p class="wp-block-paragraph">Under <strong>Policy &gt; Virtual Network</strong>, create VNs mapped to business intent, such as separating IoT devices, guest traffic, and corporate endpoints:</p>



<pre class="wp-block-code"><code>Virtual Network: VN-Corporate
Virtual Network: VN-IoT
Virtual Network: VN-Guest
</code></pre>



<p class="wp-block-paragraph">Then define group-based access control policies under <strong>Policy &gt; Group-Based Access Control</strong>:</p>



<pre class="wp-block-code"><code>Source SGT: Employees (SGT 10)
Destination SGT: Servers (SGT 20)
Access Contract: Permit-HTTPS-Only
</code></pre>



<p class="wp-block-paragraph">This pushes SGACL policy to devices via TrustSec, enforcing segmentation without needing per-device ACLs.</p>



<h3 class="wp-block-heading">Step 8: Provision and Verify</h3>



<p class="wp-block-paragraph">Push the fabric configuration:</p>



<pre class="wp-block-code"><code>Provision &gt; Fabric Sites &gt; Campus-Fabric-01 &gt; Provision Devices
</code></pre>



<p class="wp-block-paragraph">Verify fabric status on the actual switch:</p>



<pre class="wp-block-code"><code>switch# show fabric edge summary
Fabric Role: Edge Node
Fabric Status: Enabled
Control Plane Reachability: Reachable
VNI Count: 3
</code></pre>



<p class="wp-block-paragraph">Check LISP registration:</p>



<pre class="wp-block-code"><code>switch# show lisp session
Sessions for VRF default, total: 1, established: 1
Peer                          State    Up/Down     In/Out
10.1.1.1                      Up       02:14:33    142/138
</code></pre>



<h2 class="wp-block-heading">Real-World Enterprise Scenario</h2>



<p class="wp-block-paragraph">Consider a healthcare campus with 30 buildings, thousands of medical IoT devices, guest Wi-Fi for patients, and strict compliance requirements around segmenting clinical devices from general corporate traffic. Manually maintaining VLAN-based segmentation across that many access switches would require constant, error-prone updates every time a device moves or a new building comes online.</p>



<p class="wp-block-paragraph">With DNA Center and SD-Access, the organization defines a &#8220;Clinical-IoT&#8221; virtual network once. As infusion pumps and monitoring equipment connect anywhere across the campus — even as biomedical staff physically relocate equipment between floors — the fabric automatically applies consistent segmentation and policy based on the device&#8217;s group membership rather than its physical port. Assurance dashboards flag any device experiencing packet loss or onboarding failures in real time, letting the network team fix issues before clinical staff even notice a problem.</p>



<h2 class="wp-block-heading">Best Practices</h2>



<ul class="wp-block-list">
<li><strong>Start with a pilot fabric site</strong> before rolling SD-Access out campus-wide; validate policy behavior in a controlled segment first.</li>



<li><strong>Keep IOS-XE versions consistent</strong> across fabric devices to avoid feature mismatches during provisioning.</li>



<li><strong>Use Assurance proactively</strong>, not just reactively — set up daily health score reviews rather than waiting for a ticket.</li>



<li><strong>Document your SGT and VN mapping</strong> outside of DNA Center too, since audits often need this at a glance.</li>



<li><strong>Back up the DNA Center database</strong> regularly; a controller failure without backups means rebuilding your entire intent model from scratch.</li>
</ul>



<h2 class="wp-block-heading">Common Configuration Mistakes</h2>



<ol class="wp-block-list">
<li><strong>Skipping site hierarchy planning</strong>, leading to a flat, unusable structure that has to be rebuilt later.</li>



<li><strong>Mismatched SSH/SNMP credentials</strong> across the fleet, causing partial discovery failures that are tedious to debug device-by-device.</li>



<li><strong>Assigning fabric roles without underlay connectivity verified first</strong> — the underlay (basic IP reachability) must work before the LISP/VXLAN overlay can succeed.</li>



<li><strong>Not isolating a test fabric site</strong>, pushing fabric-wide changes directly into production and causing outages.</li>



<li><strong>Ignoring certificate warnings</strong> during appliance setup, leading to broken trust between DNA Center and ISE for pxGrid integration.</li>
</ol>



<h2 class="wp-block-heading">Performance Tuning</h2>



<ul class="wp-block-list">
<li>Right-size your DNA Center cluster from the start; undersized single-node deployments struggle with device counts beyond their rated capacity.</li>



<li>Stagger telemetry collection intervals in Assurance settings for very large device counts to avoid overwhelming the collector.</li>



<li>Use software image management (SWIM) golden images and scheduled maintenance windows for firmware upgrades rather than manual per-device upgrades.</li>
</ul>



<h2 class="wp-block-heading">Troubleshooting</h2>



<p class="wp-block-paragraph"><strong>Devices stuck in &#8220;Unreachable&#8221; during discovery:</strong> Verify SNMP community strings and SSH credentials match exactly what&#8217;s configured on the device; also check ACLs blocking DNA Center&#8217;s management IP.</p>



<p class="wp-block-paragraph"><strong>Fabric provisioning fails at LISP registration:</strong> Confirm underlay routing (typically ISIS or OSPF) is fully converged between control plane and edge nodes before fabric provisioning.</p>



<p class="wp-block-paragraph"><strong>Assurance shows &#8220;Health Score: Poor&#8221; with no obvious cause:</strong> Check for interface errors, high CPU, or an outdated IOS-XE version — Assurance heavily weights these in its scoring algorithm.</p>



<h2 class="wp-block-heading">FAQs</h2>



<p class="wp-block-paragraph"><strong>Does DNA Center support non-Cisco devices?</strong> Discovery and basic inventory work for some third-party SNMP-capable devices, but full intent-based provisioning and SD-Access fabric features are Cisco-device specific.</p>



<p class="wp-block-paragraph"><strong>Can I run DNA Center virtually instead of on physical appliances?</strong> Cisco offers a virtual appliance option for smaller deployments and lab/PoC environments, though production-scale deployments typically use the physical DN2-HW-APL cluster.</p>



<p class="wp-block-paragraph"><strong>How is DNA Center licensed?</strong> Through Cisco DNA subscription tiers (Essentials, Advantage, Premier), which also gate feature availability like SD-Access and advanced Assurance analytics.</p>



<p class="wp-block-paragraph"><strong>What happens if the DNA Center cluster goes down — does the network stop working?</strong> No. Already-provisioned configuration remains on devices and continues functioning; you lose centralized management and new provisioning capability until the controller is restored.</p>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">Cisco DNA Center represents a genuine shift in how enterprise networks get built and maintained — from manually typing configuration into hundreds of individual devices to defining intent once and letting the controller handle consistent, policy-driven provisioning across the fabric. The learning curve involves understanding SD-Access, LISP, VXLAN, and TrustSec concepts underneath the GUI, but the operational payoff — consistent segmentation, faster troubleshooting through Assurance, and dramatically reduced configuration drift — is substantial for any network beyond a handful of devices.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li>Cisco DNA Center Installation Guide — cisco.com/c/en/us/support/cloud-systems-management/dna-center</li>



<li>Cisco SD-Access Solution Design Guide — cisco.com/c/en/us/solutions/enterprise-networks/software-defined-access</li>



<li>Cisco DNA Center Assurance User Guide — cisco.com/c/en/us/td/docs/cloud-systems-management/network-automation-and-management/dna-center</li>



<li>Cisco TrustSec Configuration Guide — cisco.com/c/en/us/solutions/enterprise-networks/trustsec</li>
</ul>
<p>The post <a href="https://awjunaid.com/cisco/how-to-set-up-cisco-dna-center-for-network-automation-and-intent-based-networking/">How to Set Up Cisco DNA Center for Network Automation and Intent-Based Networking</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://awjunaid.com/cisco/how-to-set-up-cisco-dna-center-for-network-automation-and-intent-based-networking/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5524</post-id>	</item>
		<item>
		<title>How to Configure Cisco CallManager for IP Telephony and VoIP Deployment</title>
		<link>https://awjunaid.com/cisco/how-to-configure-cisco-callmanager-for-ip-telephony-and-voip-deployment/</link>
					<comments>https://awjunaid.com/cisco/how-to-configure-cisco-callmanager-for-ip-telephony-and-voip-deployment/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Abdul Wahab Junaid]]></dc:creator>
		<pubDate>Tue, 12 Sep 2023 12:06:48 +0000</pubDate>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[cisco]]></category>
		<guid isPermaLink="false">https://awjunaid.com/?p=5519</guid>

					<description><![CDATA[<p>There&#8217;s a moment in every VoIP migration project where someone asks, &#8220;why is call quality worse than the&#8230;</p>
<p>The post <a href="https://awjunaid.com/cisco/how-to-configure-cisco-callmanager-for-ip-telephony-and-voip-deployment/">How to Configure Cisco CallManager for IP Telephony and VoIP Deployment</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">There&#8217;s a moment in every VoIP migration project where someone asks, &#8220;why is call quality worse than the old phone system?&#8221; Nine times out of ten, it comes down to fundamentals that got skipped during CallManager setup — QoS not configured properly, codec mismatches, or a dial plan that was never designed for scale. Cisco Unified Communications Manager (CUCM), still widely called CallManager from its earlier naming, is the backbone of enterprise VoIP for a huge number of organizations, and getting it right from day one saves you months of firefighting later. Here&#8217;s a complete walkthrough of how to configure it properly.</p>



<h2 class="wp-block-heading">Understanding CUCM&#8217;s Role in the Voice Architecture</h2>



<p class="wp-block-paragraph">CUCM is the call processing engine of a Cisco IP telephony deployment. It handles call setup, teardown, routing, feature invocation (hold, transfer, conference), and endpoint registration for IP phones, softphones, and gateways. It doesn&#8217;t carry voice traffic itself — that&#8217;s the job of the media (RTP) stream flowing directly between endpoints or through a media resource — CUCM handles the signaling layer using protocols like SCCP (Skinny Client Control Protocol) and SIP.</p>



<h2 class="wp-block-heading">VoIP Fundamentals Before Configuration</h2>



<p class="wp-block-paragraph">A few core concepts underpin everything you&#8217;ll configure:</p>



<ul class="wp-block-list">
<li><strong>Signaling vs. Media</strong>: CUCM controls call signaling (SIP/SCCP); actual voice packets flow as RTP streams, often directly between phones once the call is established.</li>



<li><strong>Codecs</strong>: G.711 offers the best quality but consumes the most bandwidth (~64 kbps plus overhead); G.729 compresses audio to around 8 kbps, ideal for WAN links but with a slight quality tradeoff.</li>



<li><strong>QoS</strong>: Voice traffic is extremely sensitive to jitter and latency (ITU recommends under 150ms one-way latency, under 30ms jitter). Without proper DSCP marking and priority queuing, voice quality degrades badly under network congestion.</li>



<li><strong>Dial Plan</strong>: The logical structure that determines how digits dialed by a user get routed — internally, to voicemail, or out to the PSTN via a gateway or SIP trunk.</li>
</ul>



<h2 class="wp-block-heading">Pre-Deployment Planning</h2>



<ol class="wp-block-list">
<li><strong>Cluster sizing</strong> — determine how many CUCM nodes you need (Publisher + Subscribers) based on endpoint count and redundancy requirements</li>



<li><strong>Codec and bandwidth planning</strong> — especially critical for branch offices connected over limited WAN links</li>



<li><strong>Dial plan design</strong> — partition and calling search space (CSS) structure needs to be mapped before phones start getting configured</li>



<li><strong>PSTN connectivity</strong> — SIP trunk to a provider, or traditional PRI/gateway-based trunking</li>
</ol>



<h2 class="wp-block-heading">Step-by-Step Implementation</h2>



<h3 class="wp-block-heading">Step 1: Initial CUCM Installation and Cluster Setup</h3>



<p class="wp-block-paragraph">CUCM is deployed as a virtual appliance (OVA) on ESXi. After OS installation via the platform installation wizard, the Publisher node is configured first:</p>



<pre class="wp-block-code"><code>Administrator Login Configuration:
  Username: ccmadmin
  Password: &lt;strong-password&gt;

Network Configuration:
  Hostname: cucm-pub-01
  IP Address: 10.2.1.10
  Subnet Mask: 255.255.255.0
  Gateway: 10.2.1.1
  DNS: 10.1.1.10

NTP Server: 10.1.1.5 (mandatory — CUCM is extremely NTP-sensitive)
</code></pre>



<p class="wp-block-paragraph">Subscriber nodes are added afterward via <strong>System &gt; Server</strong> in CUCM Administration, pointing to the Publisher for database replication.</p>



<h3 class="wp-block-heading">Step 2: Configure Core System Settings</h3>



<p class="wp-block-paragraph">Log into CUCM Administration at <code>https://cucm-pub-01/ccmadmin</code>. Under <strong>System &gt; CallManager Group</strong>, define your CallManager Group for redundancy:</p>



<pre class="wp-block-code"><code>CallManager Group Name: HQ-CM-Group
Members: cucm-pub-01, cucm-sub-01
</code></pre>



<p class="wp-block-paragraph">Under <strong>System &gt; Date/Time Group</strong> and <strong>System &gt; Region Information &gt; Region</strong>, define your codec regions:</p>



<pre class="wp-block-code"><code>Region: HQ-Region
Max Audio Bit Rate: G.711 (within site)
Region: WAN-Branch-Region
Max Audio Bit Rate: G.729 (across WAN link)
</code></pre>



<h3 class="wp-block-heading">Step 3: Configure Device Pools</h3>



<p class="wp-block-paragraph">Device pools bundle together region, CallManager group, date/time group, and other settings applied to phones:</p>



<pre class="wp-block-code"><code>Device Pool Name: HQ-DevicePool
CallManager Group: HQ-CM-Group
Date/Time Group: HQ-DateTime
Region: HQ-Region
Media Resource Group List: HQ-MRGL
</code></pre>



<h3 class="wp-block-heading">Step 4: Build the Dial Plan — Partitions and Calling Search Spaces</h3>



<p class="wp-block-paragraph">This is where most poorly planned deployments start showing cracks. Partitions group dialable patterns; Calling Search Spaces (CSS) determine which partitions a device can reach.</p>



<pre class="wp-block-code"><code>Route Partition: PT-Internal
Route Partition: PT-Voicemail
Route Partition: PT-Local-PSTN
Route Partition: PT-LongDistance
Route Partition: PT-International

Calling Search Space: CSS-Employee
  Partitions: PT-Internal, PT-Voicemail, PT-Local-PSTN, PT-LongDistance

Calling Search Space: CSS-Executive
  Partitions: PT-Internal, PT-Voicemail, PT-Local-PSTN, PT-LongDistance, PT-International

Calling Search Space: CSS-Lobby-Phone
  Partitions: PT-Internal
</code></pre>



<p class="wp-block-paragraph">This structure lets you restrict a lobby phone to internal-only calls while executives get full international dialing — all through CSS/partition combinations rather than per-device restriction lists.</p>



<h3 class="wp-block-heading">Step 5: Configure Route Patterns and Route Groups for PSTN Access</h3>



<p class="wp-block-paragraph">Assuming a SIP trunk to your carrier:</p>



<pre class="wp-block-code"><code>SIP Trunk Configuration:
  Trunk Name: SIP-Trunk-Carrier01
  Destination Address: 203.0.113.10
  Destination Port: 5060
  SIP Trunk Security Profile: Non-Secure-SIP-Trunk

Route Group: RG-PSTN-Primary
  Member: SIP-Trunk-Carrier01

Route List: RL-PSTN-Outbound
  Route Group: RG-PSTN-Primary

Route Pattern: 9.@
  Partition: PT-Local-PSTN
  Gateway/Route List: RL-PSTN-Outbound
  Discard Digits: PreDot
</code></pre>



<p class="wp-block-paragraph">The <code>9.@</code> pattern is the classic &#8220;dial 9 to get an outside line&#8221; pattern, with the <code>@</code> macro matching the North American Numbering Plan automatically.</p>



<h3 class="wp-block-heading">Step 6: Configure IP Phones</h3>



<p class="wp-block-paragraph">Phones can be added manually, via bulk administration (BAT), or through auto-registration (not recommended for production due to security concerns). Manual configuration:</p>



<pre class="wp-block-code"><code>Phone Type: Cisco 8865
MAC Address: SEP001A2B3C4D5E
Device Pool: HQ-DevicePool
Calling Search Space: CSS-Employee
Directory Number: 4001
  Partition: PT-Internal
  Voicemail Profile: VM-Default
  Call Forward All: Voicemail
</code></pre>



<p class="wp-block-paragraph">Verify phone registration status via CLI on CUCM:</p>



<pre class="wp-block-code"><code>admin:show cluster nodes
admin:utils diagnose test

admin:show tech phones registered
Phone SEP001A2B3C4D5E registered to cucm-pub-01
Status: Registered
IP Address: 10.2.5.44
Protocol: SCCP
</code></pre>



<h3 class="wp-block-heading">Step 7: Configure QoS Marking End to End</h3>



<p class="wp-block-paragraph">CUCM automatically marks signaling and media with DSCP values, but your network infrastructure must honor and trust these markings. On the access-layer switch:</p>



<pre class="wp-block-code"><code>switch(config)# mls qos
switch(config-if)# interface GigabitEthernet1/0/1
switch(config-if)# switchport voice vlan 110
switch(config-if)# mls qos trust device cisco-phone
switch(config-if)# mls qos trust cos
</code></pre>



<p class="wp-block-paragraph">At the WAN edge router, apply priority queuing for voice traffic:</p>



<pre class="wp-block-code"><code>router(config)# class-map match-all VOICE
router(config-cmap)# match dscp ef
router(config)# policy-map WAN-QOS
router(config-pmap)# class VOICE
router(config-pmap-c)# priority percent 20
router(config)# interface Serial0/0/0
router(config-if)# service-policy output WAN-QOS
</code></pre>



<p class="wp-block-paragraph">Verify DSCP marking is present on outgoing voice traffic using a packet capture or:</p>



<pre class="wp-block-code"><code>router# show policy-map interface Serial0/0/0
  Class-map: VOICE (match-all)
    5000 packets, 320000 bytes
    Priority: 20% (200 kbps), burst 5000 bytes
</code></pre>



<h3 class="wp-block-heading">Step 8: Configure Media Resources (Conferencing, MOH, Transcoding)</h3>



<pre class="wp-block-code"><code>Music On Hold Server: MOH-Server-01
Conference Bridge: CFB-Software-01
  Max Sessions: 48
Transcoder: XCODE-Gateway-01

Media Resource Group: MRG-HQ
  Members: MOH-Server-01, CFB-Software-01

Media Resource Group List: HQ-MRGL
  Priority 1: MRG-HQ
</code></pre>



<h2 class="wp-block-heading">Real-World Enterprise Scenario</h2>



<p class="wp-block-paragraph">Consider a company with a headquarters and three branch offices connected via a WAN with limited bandwidth. Without proper region configuration, all calls default to G.711, and during a Monday morning surge of branch-to-HQ calls, the WAN link saturates, causing choppy audio company-wide. After implementing region-based codec selection (G.729 across the WAN link, G.711 for local calls) combined with LLQ (low latency queuing) on the WAN routers, voice quality issues disappear even during peak call volume, because voice packets get prioritized ahead of bulk data transfers and the codec itself uses a fraction of the bandwidth.</p>



<h2 class="wp-block-heading">Best Practices</h2>



<ul class="wp-block-list">
<li><strong>Always configure redundant CallManager groups</strong> — a single point of failure for call processing is unacceptable in production.</li>



<li><strong>Use SRST (Survivable Remote Site Telephony)</strong> on branch routers so phones retain basic calling capability if WAN connectivity to the central CUCM cluster drops.</li>



<li><strong>Standardize on CSS/Partition naming conventions</strong> early — retrofitting a poorly named dial plan across thousands of phones is painful.</li>



<li><strong>Enable device-level and phone-level security profiles</strong> (TLS/SRTP) rather than leaving trunks and phones on non-secure profiles.</li>



<li><strong>Monitor via Real-Time Monitoring Tool (RTMT)</strong> proactively rather than waiting for user complaints.</li>
</ul>



<h2 class="wp-block-heading">Common Configuration Mistakes</h2>



<ol class="wp-block-list">
<li><strong>Skipping NTP configuration</strong> — CUCM is extremely time-sensitive; clock drift breaks certificate validation and call detail record accuracy.</li>



<li><strong>Using a single flat CSS for all devices</strong>, eliminating any meaningful call restriction capability.</li>



<li><strong>Forgetting to trust QoS markings</strong> on access switches, causing voice packets to be treated as best-effort traffic.</li>



<li><strong>Not planning codec regions</strong>, leading to G.711 traffic saturating WAN links.</li>



<li><strong>Auto-registering phones in production</strong>, creating a security gap where any device plugged into a voice VLAN gets a directory number.</li>
</ol>



<h2 class="wp-block-heading">Performance Tuning</h2>



<ul class="wp-block-list">
<li>Use G.729 selectively — only where bandwidth is genuinely constrained, since it does have measurable quality tradeoffs versus G.711.</li>



<li>Enable Call Admission Control (CAC) via locations to prevent oversubscribing limited-bandwidth WAN links during high call volume.</li>



<li>Tune RTMT alert thresholds for CPU, memory, and call processing metrics rather than relying on defaults.</li>
</ul>



<h2 class="wp-block-heading">Troubleshooting</h2>



<p class="wp-block-paragraph"><strong>Phones stuck in &#8220;Registering&#8221; state:</strong> Check DHCP option 150 (TFTP server address) delivery and verify the phone can reach CUCM on TCP 2000 (SCCP) or 5060 (SIP).</p>



<p class="wp-block-paragraph"><strong>One-way audio:</strong> Almost always a NAT/firewall traversal issue with the RTP stream, or asymmetric routing between endpoints — check media resource and region path config.</p>



<p class="wp-block-paragraph"><strong>Calls dropping after exactly 32 seconds:</strong> Classic symptom of an ALG (Application Layer Gateway) interfering with SIP signaling on a firewall — disable SIP ALG/fixup.</p>



<h2 class="wp-block-heading">FAQs</h2>



<p class="wp-block-paragraph"><strong>Is CallManager the same as CUCM?</strong> Yes — &#8220;CallManager&#8221; is the legacy name; Cisco Unified Communications Manager (CUCM) is the current official product name.</p>



<p class="wp-block-paragraph"><strong>Can CUCM integrate with Microsoft Teams?</strong> Yes, through Cisco&#8217;s Unified Communications integrations and SIP trunking, though native feature parity depends on the specific integration approach used.</p>



<p class="wp-block-paragraph"><strong>How many phones can a single CUCM cluster support?</strong> Cluster capacity varies by OVA sizing template, ranging from a few hundred to tens of thousands of endpoints across a properly sized multi-node cluster.</p>



<p class="wp-block-paragraph"><strong>Do I need separate voice VLANs?</strong> Yes, strongly recommended — separating voice and data VLANs simplifies QoS policy and improves security segmentation.</p>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">Configuring CUCM properly means thinking beyond just getting phones to register — it requires deliberate dial plan architecture, codec and region planning matched to your WAN topology, and end-to-end QoS that your network infrastructure actually honors. Skipping any of these fundamentals is exactly how organizations end up with the classic &#8220;the new phone system sounds worse than the old one&#8221; complaint. Get the foundation right, and CUCM delivers the flexibility and features that made IP telephony worth the migration in the first place.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li>Cisco Unified Communications Manager Administration Guide — cisco.com/c/en/us/support/unified-communications/unified-communications-manager-callmanager</li>



<li>Cisco Collaboration System Solution Reference Network Designs (SRND) — cisco.com/c/en/us/solutions/collaboration</li>



<li>Cisco QoS Design Guide for Voice — cisco.com/c/en/us/td/docs/solutions/Enterprise/QoS_SRND</li>



<li>Cisco SRST Configuration Guide — cisco.com/c/en/us/support/unified-communications/unified-survivable-remote-site-telephony</li>
</ul>
<p>The post <a href="https://awjunaid.com/cisco/how-to-configure-cisco-callmanager-for-ip-telephony-and-voip-deployment/">How to Configure Cisco CallManager for IP Telephony and VoIP Deployment</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://awjunaid.com/cisco/how-to-configure-cisco-callmanager-for-ip-telephony-and-voip-deployment/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5519</post-id>	</item>
		<item>
		<title>How to Set Up Cisco Unity Express for Voicemail and Unified Messaging</title>
		<link>https://awjunaid.com/cisco/how-to-set-up-cisco-unity-express-for-voicemail-and-unified-messaging/</link>
					<comments>https://awjunaid.com/cisco/how-to-set-up-cisco-unity-express-for-voicemail-and-unified-messaging/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Abdul Wahab Junaid]]></dc:creator>
		<pubDate>Tue, 12 Sep 2023 12:05:35 +0000</pubDate>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[cisco]]></category>
		<guid isPermaLink="false">https://awjunaid.com/?p=5516</guid>

					<description><![CDATA[<p>Small and mid-size branch offices rarely need — or want to pay for — a full standalone voicemail&#8230;</p>
<p>The post <a href="https://awjunaid.com/cisco/how-to-set-up-cisco-unity-express-for-voicemail-and-unified-messaging/">How to Set Up Cisco Unity Express for Voicemail and Unified Messaging</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Small and mid-size branch offices rarely need — or want to pay for — a full standalone voicemail server infrastructure. That&#8217;s the exact gap Cisco Unity Express (CUE) was built to fill: voicemail and basic auto-attendant functionality running directly on an integrated services router or as a module, without requiring a separate Unity Connection server. Having deployed CUE across dozens of branch offices over the years, I can tell you it&#8217;s refreshingly straightforward once you understand the handful of pieces that need to line up. Here&#8217;s the complete configuration walkthrough.</p>



<h2 class="wp-block-heading">What Unity Express Is (and Isn&#8217;t)</h2>



<p class="wp-block-paragraph">Unity Express is a voicemail and auto-attendant solution embedded in a Cisco Integrated Services Router (ISR) — either as a Network Module (NM), Advanced Integration Module (AIM), or in later generations, a virtualized service module. It integrates with Cisco Unified Communications Manager Express (CME) or full CUCM to provide:</p>



<ul class="wp-block-list">
<li>Voicemail box per extension</li>



<li>Auto-attendant (AA) call routing menus</li>



<li>Basic unified messaging (voicemail-to-email)</li>



<li>Simple IVR scripting for branch-level call handling</li>
</ul>



<p class="wp-block-paragraph">It&#8217;s important to understand what CUE is <em>not</em>: it&#8217;s not designed for large-scale enterprise deployments (that&#8217;s Unity Connection&#8217;s job), and it has hard capacity limits depending on the hardware module — typically topping out around 250 mailboxes on higher-end modules.</p>



<h2 class="wp-block-heading">Fundamentals: How CUE Fits Into the Call Flow</h2>



<p class="wp-block-paragraph">When a call comes into a branch office and isn&#8217;t answered, CUCM Express (or CUCM) forwards it to CUE using SCCP or SIP integration, depending on your deployment. CUE then plays the appropriate greeting, records the message, and — if unified messaging is configured — forwards that message as a WAV attachment via SMTP to the user&#8217;s email inbox.</p>



<p class="wp-block-paragraph">The two integration modes matter a lot for how you configure things:</p>



<ul class="wp-block-list">
<li><strong>SCCP Integration</strong> — traditional, tightly coupled with CUCME, phones&#8217; Messages button lights up natively</li>



<li><strong>SIP Integration</strong> — more flexible, works with either CUCME or full CUCM, increasingly the preferred modern approach</li>
</ul>



<h2 class="wp-block-heading">Pre-Deployment Planning</h2>



<ol class="wp-block-list">
<li><strong>Determine your integration mode</strong> (SCCP vs. SIP) based on whether you&#8217;re running CUCME or full CUCM at the site</li>



<li><strong>Mailbox capacity planning</strong> against your hardware module&#8217;s supported limits</li>



<li><strong>SMTP relay availability</strong> if you want voicemail-to-email unified messaging</li>



<li><strong>Storage sizing</strong> — voicemail messages consume flash/disk space on the module; plan retention policies accordingly</li>
</ol>



<h2 class="wp-block-heading">Step-by-Step Implementation</h2>



<h3 class="wp-block-heading">Step 1: Verify Module Installation and Initial Access</h3>



<p class="wp-block-paragraph">Once the CUE module is physically installed in the router, verify it&#8217;s recognized:</p>



<pre class="wp-block-code"><code>router# show interface | include Service-Engine
Service-Engine1/0 is up, line protocol is up

router# service-module service-Engine 1/0 status
Service Module is Cisco service-Engine1/0
Service Module supports session via TTY line
Service Module is in Steady state
</code></pre>



<p class="wp-block-paragraph">Access the CUE module&#8217;s own CLI via a session:</p>



<pre class="wp-block-code"><code>router# service-module service-Engine 1/0 session
Trying 10.1.1.1, 2066 ... Open

CUE-Module&gt; enable
CUE-Module# configure terminal
</code></pre>



<h3 class="wp-block-heading">Step 2: Configure Basic Network Settings on the CUE Module</h3>



<pre class="wp-block-code"><code>CUE-Module(config)# ip address 10.1.1.1 255.255.255.0
CUE-Module(config)# ip default-gateway 10.1.1.254
CUE-Module(config)# ip domain-name company.local
CUE-Module(config)# ip name-server 10.1.1.10
CUE-Module(config)# clock timezone CST -6
CUE-Module(config)# ntp server 10.1.1.5
</code></pre>



<h3 class="wp-block-heading">Step 3: Configure CUCM Express Integration (SCCP Mode)</h3>



<p class="wp-block-paragraph">On the router hosting CUCM Express, define the CUE module as a voicemail service:</p>



<pre class="wp-block-code"><code>router(config)# telephony-service
router(config-telephony)# max-ephones 48
router(config-telephony)# max-dn 96
router(config-telephony)# voicemail 4000
router(config-telephony)# max-conferences 8
router(config-telephony)# exit

router(config)# ephone-dn 1
router(config-ephone-dn)# number 4000
router(config-ephone-dn)# name Voicemail
</code></pre>



<p class="wp-block-paragraph">On the CUE module side, configure the SCCP integration parameters:</p>



<pre class="wp-block-code"><code>CUE-Module(config)# ccn subsystem sccp
CUE-Module(config-sccp)# ip source-address 10.1.1.1 port 2000
CUE-Module(config-sccp)# max-ephones 48
CUE-Module(config-sccp)# max-dn 96
CUE-Module(config-sccp)# exit
</code></pre>



<h3 class="wp-block-heading">Step 4: Alternative — SIP Integration Mode</h3>



<p class="wp-block-paragraph">For SIP-based integration (recommended for newer deployments or full CUCM environments):</p>



<pre class="wp-block-code"><code>CUE-Module(config)# ccn subsystem sip
CUE-Module(config-sip)# gateway address 10.1.1.254 port 5060
CUE-Module(config-sip)# max-sessions 8
CUE-Module(config-sip)# exit
</code></pre>



<p class="wp-block-paragraph">On CUCM, configure the CUE module as a SIP trunk destination for voicemail routing:</p>



<pre class="wp-block-code"><code>SIP Trunk Name: SIP-Trunk-CUE
Destination Address: 10.1.1.1
Destination Port: 5060

Voicemail Pilot: 4000
Voicemail Profile: VM-Branch-Default
  Voicemail Pilot: 4000
</code></pre>



<h3 class="wp-block-heading">Step 5: Configure Voicemail Boxes</h3>



<p class="wp-block-paragraph">Back on the CUE module CLI, define subscribers (mailbox owners):</p>



<pre class="wp-block-code"><code>CUE-Module(config)# username jsmith create
CUE-Module(config-user)# phonenumber 4001
CUE-Module(config-user)# firstname John
CUE-Module(config-user)# lastname Smith
CUE-Module(config-user)# email jsmith@company.local
CUE-Module(config-user)# pin 135790
CUE-Module(config-user)# exit
</code></pre>



<p class="wp-block-paragraph">Bulk provisioning for larger branch sites is possible via CSV import through the GUI (<code>https://&lt;CUE-IP&gt;/ccn</code>), which is far more practical than manual entry beyond a handful of users.</p>



<h3 class="wp-block-heading">Step 6: Configure Unified Messaging (Voicemail-to-Email)</h3>



<pre class="wp-block-code"><code>CUE-Module(config)# ccn subsystem sip
CUE-Module(config-sip)# exit
CUE-Module(config)# mailbox owner jsmith
CUE-Module(config-mailbox)# notification-preference imap
CUE-Module(config-mailbox)# exit

CUE-Module(config)# smtp server address 10.1.1.15 port 25
CUE-Module(config)# smtp server timeout 30
</code></pre>



<p class="wp-block-paragraph">Verify SMTP connectivity for message forwarding:</p>



<pre class="wp-block-code"><code>CUE-Module# test smtp-server
Connecting to 10.1.1.15:25 ... Success
SMTP handshake: OK
</code></pre>



<h3 class="wp-block-heading">Step 7: Configure Auto-Attendant (AA)</h3>



<p class="wp-block-paragraph">Auto-attendant scripts route incoming calls through menu options (e.g., &#8220;Press 1 for Sales, Press 2 for Support&#8221;). Using the built-in default script:</p>



<pre class="wp-block-code"><code>CUE-Module(config)# ccn application AABranchMain
CUE-Module(config-application)# description "Branch Main Auto Attendant"
CUE-Module(config-application)# script "aa.aef"
CUE-Module(config-application)# parameter "MaxRetry" "3"
CUE-Module(config-application)# parameter "operExtn" "4000"
CUE-Module(config-application)# parameter "welcomePrompt" "AABranchWelcome.wav"
CUE-Module(config-application)# exit

CUE-Module(config)# ccn trigger sip phonenumber 4100
CUE-Module(config-trigger)# application AABranchMain
CUE-Module(config-trigger)# enabled
CUE-Module(config-trigger)# exit
</code></pre>



<p class="wp-block-paragraph">Custom greeting prompts get uploaded through the CUE GUI under <strong>Voice Mail &gt; Prompts</strong>, since recording high-quality WAV prompts via CLI isn&#8217;t practical.</p>



<h3 class="wp-block-heading">Step 8: Verification and Testing</h3>



<p class="wp-block-paragraph">Check overall module status:</p>



<pre class="wp-block-code"><code>CUE-Module# show ccn subsystem sccp
SCCP Subsystem is READY
Number of active calls: 3
Number of registered ephones: 46/48

CUE-Module# show voice mail status
Voicemail System Status: In Service
Total Mailboxes: 46
Storage Used: 210MB / 1024MB
</code></pre>



<p class="wp-block-paragraph">Test a mailbox greeting playback and confirm SMTP delivery by leaving a test voicemail and checking the recipient&#8217;s inbox for the WAV attachment.</p>



<h2 class="wp-block-heading">Real-World Enterprise Scenario</h2>



<p class="wp-block-paragraph">A regional insurance company with 15 small branch offices, each with 20–40 employees, needed voicemail without the cost of provisioning full Unity Connection licensing at every site. Deploying CUE modules integrated with CUCME at each branch gave every employee a functioning voicemail box with email notification, and a simple auto-attendant handled after-hours calls routing to the appropriate regional on-call number. Because CUE runs directly on the branch router hardware they already had for WAN connectivity, there was no additional server hardware to rack, patch, or maintain at each site — a meaningful operational win for a company without dedicated branch-level IT staff.</p>



<h2 class="wp-block-heading">Best Practices</h2>



<ul class="wp-block-list">
<li><strong>Enforce strong PIN policies</strong> for voicemail boxes — default or weak PINs are a common toll-fraud vector when auto-attendants allow external transfer options.</li>



<li><strong>Regularly monitor storage utilization</strong> — full mailboxes silently stop accepting new messages, frustrating users who don&#8217;t realize why callers can&#8217;t leave voicemail.</li>



<li><strong>Keep auto-attendant menus short</strong> — more than 4–5 options per menu frustrates callers; use nested menus sparingly.</li>



<li><strong>Back up the CUE configuration and mailbox data</strong> before any IOS or module firmware upgrade.</li>



<li><strong>Disable unused features</strong> like external call transfer from auto-attendant if not explicitly required, reducing toll-fraud exposure.</li>
</ul>



<h2 class="wp-block-heading">Common Configuration Mistakes</h2>



<ol class="wp-block-list">
<li><strong>Mismatched max-ephones/max-dn values</strong> between CUCME and the CUE module, causing registration failures.</li>



<li><strong>Forgetting SMTP relay authentication requirements</strong>, silently breaking voicemail-to-email even though local voicemail still works fine.</li>



<li><strong>Weak or default PINs left unchanged</strong>, creating security exposure.</li>



<li><strong>Not planning storage capacity</strong>, leading to full mailboxes during high call volume periods like holidays.</li>



<li><strong>Overly complex auto-attendant trees</strong> that frustrate callers instead of helping them.</li>
</ol>



<h2 class="wp-block-heading">Performance Tuning</h2>



<ul class="wp-block-list">
<li>Adjust <code>max-sessions</code> for SIP integration based on actual concurrent voicemail/AA usage patterns rather than defaults.</li>



<li>Periodically archive or purge old voicemail messages according to a defined retention policy to keep storage headroom healthy.</li>



<li>Use G.729 codec for voicemail prompts on bandwidth-constrained WAN links if CUE is centralized rather than local to the branch.</li>
</ul>



<h2 class="wp-block-heading">Troubleshooting</h2>



<p class="wp-block-paragraph"><strong>Messages button on phones doesn&#8217;t light up:</strong> Check the SCCP integration&#8217;s max-dn/max-ephones alignment and confirm the voicemail pilot number matches on both CUCME and CUE.</p>



<p class="wp-block-paragraph"><strong>Voicemail-to-email not arriving:</strong> Test SMTP connectivity directly from the module (<code>test smtp-server</code>) and check for relay authentication or firewall blocking port 25 outbound.</p>



<p class="wp-block-paragraph"><strong>Auto-attendant plays default prompt instead of custom greeting:</strong> Confirm the custom WAV file was uploaded correctly and referenced by the correct filename in the application&#8217;s <code>welcomePrompt</code> parameter — filename mismatches are the most common cause.</p>



<h2 class="wp-block-heading">FAQs</h2>



<p class="wp-block-paragraph"><strong>Is Cisco Unity Express still sold and supported?</strong> CUE reached end-of-sale status for most hardware platforms; existing deployments remain supported per Cisco&#8217;s standard lifecycle policy, but new deployments increasingly favor cloud-based or Unity Connection solutions — check current Cisco EoL bulletins before new purchases.</p>



<p class="wp-block-paragraph"><strong>Can CUE integrate with full CUCM instead of just CUCM Express?</strong> Yes, via SIP integration, CUE can serve as a branch voicemail solution even when the call processing is handled by a centralized CUCM cluster.</p>



<p class="wp-block-paragraph"><strong>What&#8217;s the maximum mailbox capacity?</strong> It depends on the specific hardware module (NM, AIM, or service module variant) — ranges generally span from around 6 to 250 mailboxes.</p>



<p class="wp-block-paragraph"><strong>Does CUE support visual voicemail?</strong> Limited support depending on phone model and firmware; it&#8217;s primarily an audio-based voicemail system with basic web access rather than a full visual voicemail experience.</p>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">Cisco Unity Express fills a specific and valuable niche: dependable, low-maintenance voicemail and auto-attendant functionality for branch offices that don&#8217;t need the scale of a full Unity Connection deployment. The setup process comes down to getting the SCCP or SIP integration correctly aligned between CUCME/CUCM and the module, provisioning mailboxes with sane security policies, and testing unified messaging delivery end to end. Once configured, it tends to run quietly in the background for years with minimal intervention — exactly what a branch office needs.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li>Cisco Unity Express Administration Guide — cisco.com/c/en/us/support/unified-communications/unity-express</li>



<li>Cisco Unified CME and CUE Integration Guide — cisco.com/c/en/us/support/unified-communications/unified-communications-manager-express</li>



<li>Cisco Unity Express End-of-Life Bulletins — cisco.com/c/en/us/products/eos-eol-listing</li>



<li>Cisco Voice and Unified Communications Command Reference — cisco.com/c/en/us/td/docs/voice_ip_comm</li>
</ul>
<p>The post <a href="https://awjunaid.com/cisco/how-to-set-up-cisco-unity-express-for-voicemail-and-unified-messaging/">How to Set Up Cisco Unity Express for Voicemail and Unified Messaging</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://awjunaid.com/cisco/how-to-set-up-cisco-unity-express-for-voicemail-and-unified-messaging/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5516</post-id>	</item>
		<item>
		<title>How to Implement WPA/WPA2 Security on Cisco Wireless Networks: Complete Configuration Guide</title>
		<link>https://awjunaid.com/cisco/how-to-implement-wpa-wpa2-security-on-cisco-wireless-networks-complete-configuration-guide/</link>
					<comments>https://awjunaid.com/cisco/how-to-implement-wpa-wpa2-security-on-cisco-wireless-networks-complete-configuration-guide/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Abdul Wahab Junaid]]></dc:creator>
		<pubDate>Tue, 12 Sep 2023 12:04:21 +0000</pubDate>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[cisco]]></category>
		<guid isPermaLink="false">https://awjunaid.com/?p=5513</guid>

					<description><![CDATA[<p>Open wireless networks are basically an invitation. Anyone within range can see your traffic, and worse, can potentially&#8230;</p>
<p>The post <a href="https://awjunaid.com/cisco/how-to-implement-wpa-wpa2-security-on-cisco-wireless-networks-complete-configuration-guide/">How to Implement WPA/WPA2 Security on Cisco Wireless Networks: Complete Configuration Guide</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Open wireless networks are basically an invitation. Anyone within range can see your traffic, and worse, can potentially associate to your network entirely. Getting wireless security right isn&#8217;t optional in any serious deployment, and while WPA3 is now the current standard being pushed across the industry, WPA2 remains extremely common in production environments, and understanding both — along with the transition path — matters for anyone managing Cisco wireless infrastructure. This guide walks through implementing WPA/WPA2 security properly on Cisco Wireless LAN Controllers (WLC) and access points, from the fundamentals up through enterprise-grade deployment.</p>



<h2 class="wp-block-heading">Understanding WPA and WPA2 Fundamentals</h2>



<p class="wp-block-paragraph">WPA (Wi-Fi Protected Access) was introduced as an interim fix for WEP&#8217;s well-documented vulnerabilities, using TKIP (Temporal Key Integrity Protocol) for encryption. WPA2 followed with full 802.11i compliance, replacing TKIP with AES-CCMP, a considerably stronger encryption standard. In 2026, TKIP should be considered legacy-only — if you&#8217;re deploying new wireless infrastructure, you want WPA2-AES at minimum, ideally with a migration path toward WPA3.</p>



<p class="wp-block-paragraph">There are two authentication modes that matter:</p>



<ul class="wp-block-list">
<li><strong>WPA2-Personal (PSK)</strong> — a single pre-shared key shared across all devices; appropriate for small networks or guest access, but doesn&#8217;t scale securely for larger organizations since everyone shares one key</li>



<li><strong>WPA2-Enterprise (802.1X)</strong> — uses RADIUS-based authentication with individual user credentials, typically via EAP methods like PEAP or EAP-TLS; this is what serious enterprise deployments should use</li>
</ul>



<h2 class="wp-block-heading">Core Protocol Operations</h2>



<p class="wp-block-paragraph">Understanding the 4-way handshake matters for troubleshooting later. When a client associates to an AP:</p>



<ol class="wp-block-list">
<li>The AP sends an ANonce (a random value) to the client</li>



<li>The client generates its own SNonce, derives a Pairwise Transient Key (PTK), and sends the SNonce back with a MIC (Message Integrity Code)</li>



<li>The AP verifies the MIC, derives its own PTK, and sends the Group Temporal Key (GTK) for broadcast/multicast traffic</li>



<li>The client confirms receipt and the encrypted session begins</li>
</ol>



<p class="wp-block-paragraph">This handshake is also the mechanism that made KRACK attacks possible in older WPA2 implementations — a good reason to keep AP and client firmware current.</p>



<h2 class="wp-block-heading">Pre-Deployment Planning</h2>



<ol class="wp-block-list">
<li><strong>Choose Personal vs. Enterprise mode</strong> based on your environment — enterprise networks with more than a handful of users should almost always use 802.1X</li>



<li><strong>RADIUS infrastructure</strong> — Cisco ISE or a third-party RADIUS server needs to be in place before configuring Enterprise mode</li>



<li><strong>SSID and VLAN mapping</strong> — decide whether corporate, guest, and IoT traffic need separate SSIDs mapped to separate VLANs</li>



<li><strong>Certificate infrastructure</strong> — required if using EAP-TLS for the strongest authentication method</li>
</ol>



<h2 class="wp-block-heading">Step-by-Step Implementation</h2>



<h3 class="wp-block-heading">Step 1: Access the Wireless LAN Controller</h3>



<p class="wp-block-paragraph">Log into the WLC GUI (<code>https://&lt;WLC-management-IP&gt;</code>) or via CLI:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt;show sysinfo
Manufacturer's Name.............. Cisco Systems Inc.
Product Name..................... Cisco Controller
Version.......................... 8.10.185.0
</code></pre>



<h3 class="wp-block-heading">Step 2: Configure WPA2-Personal (PSK) — Simpler Deployments</h3>



<p class="wp-block-paragraph">Under <strong>WLANs &gt; Create New</strong>, define the SSID:</p>



<pre class="wp-block-code"><code>WLAN ID: 2
Profile Name: Branch-Guest
SSID: CompanyGuest
</code></pre>



<p class="wp-block-paragraph">Under the <strong>Security &gt; Layer 2</strong> tab:</p>



<pre class="wp-block-code"><code>Layer 2 Security: WPA+WPA2
WPA2 Policy: Enabled
WPA2 Encryption: AES
Auth Key Mgmt: PSK
PSK Format: ASCII
Pre-Shared Key: &lt;strong-passphrase-min-12-chars&gt;
</code></pre>



<p class="wp-block-paragraph">Equivalent CLI configuration:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt;config wlan create 2 Branch-Guest CompanyGuest
(Cisco Controller) &gt;config wlan security wpa akm psk enable 2
(Cisco Controller) &gt;config wlan security wpa akm psk set-key ascii &lt;passphrase&gt; 2
(Cisco Controller) &gt;config wlan security wpa wpa2 ciphers aes enable 2
(Cisco Controller) &gt;config wlan security wpa wpa1 disable 2
(Cisco Controller) &gt;config wlan enable 2
</code></pre>



<p class="wp-block-paragraph"><strong>Important:</strong> explicitly disable WPA1/TKIP unless you have legacy devices that genuinely require it — mixed-mode WPA/WPA2 support weakens your overall security posture by keeping the older, broken cipher available.</p>



<h3 class="wp-block-heading">Step 3: Configure WPA2-Enterprise (802.1X) — Recommended for Corporate SSIDs</h3>



<p class="wp-block-paragraph">First, define the RADIUS server on the WLC under <strong>Security &gt; RADIUS &gt; Authentication</strong>:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt;config radius auth add 1 10.1.1.20 1812 ascii &lt;shared-secret&gt;
(Cisco Controller) &gt;config radius auth enable 1
</code></pre>



<p class="wp-block-paragraph">Create the corporate WLAN:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt;config wlan create 1 Corporate-WiFi CorporateSSID
(Cisco Controller) &gt;config wlan security wpa akm 802.1x enable 1
(Cisco Controller) &gt;config wlan security wpa wpa2 ciphers aes enable 1
(Cisco Controller) &gt;config wlan security wpa wpa1 disable 1
(Cisco Controller) &gt;config wlan radius_server auth add 1 1
(Cisco Controller) &gt;config wlan enable 1
</code></pre>



<p class="wp-block-paragraph">Via GUI, under <strong>Security &gt; AAA Servers</strong>, ensure the RADIUS server is properly associated with the WLAN, and under <strong>Security &gt; Layer 2</strong>:</p>



<pre class="wp-block-code"><code>Layer 2 Security: WPA+WPA2
Auth Key Mgmt: 802.1X
</code></pre>



<h3 class="wp-block-heading">Step 4: Configure VLAN Mapping and Interface Assignment</h3>



<p class="wp-block-paragraph">Map the SSID to the correct VLAN interface:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt;config interface create Corp-VLAN10 10
(Cisco Controller) &gt;config interface address dynamic-interface Corp-VLAN10 10.5.10.1 255.255.255.0 10.5.10.254
(Cisco Controller) &gt;config wlan interface 1 Corp-VLAN10
</code></pre>



<p class="wp-block-paragraph">On the upstream switch, ensure the trunk to the AP/WLC carries the appropriate VLANs:</p>



<pre class="wp-block-code"><code>switch(config)# interface GigabitEthernet1/0/24
switch(config-if)# switchport mode trunk
switch(config-if)# switchport trunk allowed vlan 10,20,110
</code></pre>



<h3 class="wp-block-heading">Step 5: Configure ISE (or RADIUS Server) for 802.1X Authentication</h3>



<p class="wp-block-paragraph">On Cisco ISE, define the network device (WLC) and policy:</p>



<pre class="wp-block-code"><code>Network Device Name: WLC-HQ-01
IP Address: 10.1.1.5
Shared Secret: &lt;matches WLC config&gt;

Authentication Policy:
  Condition: Wireless_802.1X
  Allowed Protocols: PEAP, EAP-TLS

Authorization Policy:
  Condition: AD-Group Equals "Corp-Employees"
  Result: PermitAccess, VLAN 10
</code></pre>



<h3 class="wp-block-heading">Step 6: Configure Fast Transition (802.11r) for Roaming (Optional but Recommended)</h3>



<p class="wp-block-paragraph">For environments with VoWiFi or latency-sensitive applications where users roam between APs:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt;config wlan security ft enable 1
(Cisco Controller) &gt;config wlan security ft over-the-air enable 1
</code></pre>



<p class="wp-block-paragraph">This reduces re-authentication delay during roaming from potentially hundreds of milliseconds down to under 50ms, which matters significantly for voice quality on wireless handsets.</p>



<h3 class="wp-block-heading">Step 7: Verification</h3>



<p class="wp-block-paragraph">Check WLAN configuration:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt;show wlan 1
WLAN Identifier.................................. 1
Profile Name...................................... Corporate-WiFi
Network Name (SSID)............................... CorporateSSID
Status............................................ Enabled
Security
  802.11 Authentication:........................ Open System
  Static WEP Keys................................ Disabled
  Wi-Fi Protected Access (WPA/WPA2)............... Enabled
    WPA (SSN IE)................................. Disabled
    WPA2 (RSN IE)................................. Enabled
      TKIP Cipher................................ Disabled
      AES Cipher.................................. Enabled
    Auth Key Management
      802.1x....................................  Enabled
</code></pre>



<p class="wp-block-paragraph">Check client association and encryption status:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt;show client summary
Number of Clients................................ 148

MAC Address       AP Name        WLAN  Auth   Protocol   Status
aa:bb:cc:11:22:33 AP-Floor2-01   1     Yes    802.11ac   Associated

(Cisco Controller) &gt;show client detail aa:bb:cc:11:22:33
Encryption Cipher................................ CCMP (AES)
WPA2 Auth Key Mgmt............................... 802.1X
</code></pre>



<h2 class="wp-block-heading">Real-World Enterprise Scenario</h2>



<p class="wp-block-paragraph">A university campus with tens of thousands of students and staff needed to secure their wireless network without forcing IT to manage individual PSKs for every device — an operationally impossible task at that scale. Deploying WPA2-Enterprise with 802.1X, integrated with their existing Active Directory via ISE, meant students authenticated with their existing university credentials. When a student graduated or a staff member left, their access was revoked centrally through AD account deactivation — no need to rotate a shared network-wide passphrase that thousands of other users would have needed to be informed about, which is exactly the operational nightmare PSK-based deployments create at scale.</p>



<h2 class="wp-block-heading">Best Practices</h2>



<ul class="wp-block-list">
<li><strong>Never use WPA2-Personal for large organizations</strong> — a shared PSK across hundreds or thousands of users is a security and operational liability; anyone who leaves the organization still knows the key unless you rotate it network-wide.</li>



<li><strong>Disable WPA1/TKIP entirely</strong> unless supporting genuinely legacy hardware that cannot be upgraded.</li>



<li><strong>Use EAP-TLS over PEAP where certificate infrastructure allows it</strong> — certificate-based authentication is significantly stronger than credential-based PEAP.</li>



<li><strong>Separate SSIDs by trust level</strong> — corporate, guest, and IoT devices should never share the same SSID or VLAN.</li>



<li><strong>Enable 802.11r for voice/latency-sensitive environments</strong>, but test compatibility with older client devices first, as some legacy clients handle fast transition poorly.</li>



<li><strong>Regularly rotate PSKs</strong> for any Personal-mode SSIDs still in use (guest networks, IoT segments).</li>
</ul>



<h2 class="wp-block-heading">Common Configuration Mistakes</h2>



<ol class="wp-block-list">
<li><strong>Leaving mixed WPA/WPA2 mode enabled</strong> long after there&#8217;s any legitimate need for WPA1/TKIP client support, weakening the overall cipher suite.</li>



<li><strong>Weak or short PSKs</strong> on guest networks — always enforce a minimum of 12+ characters with complexity.</li>



<li><strong>Misconfigured RADIUS shared secrets</strong> between WLC and ISE, causing silent authentication failures that are hard to diagnose without checking both sides.</li>



<li><strong>Forgetting VLAN trunk configuration upstream</strong>, resulting in clients authenticating successfully but getting no DHCP lease because the VLAN isn&#8217;t actually carried to the WLC.</li>



<li><strong>Not testing roaming behavior</strong> before rolling out 802.11r broadly, especially with mixed-vendor client device fleets.</li>
</ol>



<h2 class="wp-block-heading">Performance Tuning</h2>



<ul class="wp-block-list">
<li>Use band steering to push capable clients to 5GHz/6GHz where interference is typically lower and throughput higher.</li>



<li>Tune RF profiles (power and channel settings) via RRM (Radio Resource Management) rather than static channel assignment in most enterprise deployments.</li>



<li>For high-density environments, consider disabling lower basic data rates (1, 2, 5.5 Mbps) to reduce airtime consumed by legacy-rate management frames.</li>
</ul>



<h2 class="wp-block-heading">Troubleshooting</h2>



<p class="wp-block-paragraph"><strong>Clients see the SSID but fail to authenticate:</strong> Check RADIUS shared secret match between WLC and ISE/RADIUS server first — this is the single most common 802.1X failure point. Use <code>show radius summary</code> on the WLC to confirm the server is reachable and responding.</p>



<p class="wp-block-paragraph"><strong>Client connects but gets no IP address:</strong> Verify VLAN trunking upstream and that the dynamic interface on the WLC is correctly mapped and has a functioning DHCP scope.</p>



<p class="wp-block-paragraph"><strong>Intermittent disconnections during roaming:</strong> Check for channel overlap or excessive co-channel interference via RRM reports; also verify 802.11r configuration consistency across all APs in the same mobility group.</p>



<p class="wp-block-paragraph"><strong>4-way handshake failures in packet captures:</strong> Usually indicates a PSK mismatch (Personal mode) or a client-side supplicant configuration issue (Enterprise mode) — verify against a known-working device first to isolate whether it&#8217;s infrastructure or endpoint-side.</p>



<h2 class="wp-block-heading">FAQs</h2>



<p class="wp-block-paragraph"><strong>Should I still be deploying WPA2 in 2026, or move straight to WPA3?</strong> Where hardware and client compatibility allow, WPA3 is the better choice going forward, offering stronger protection against offline dictionary attacks via SAE (Simultaneous Authentication of Equals). Many enterprise deployments run WPA2/WPA3 transition mode during migration to support older client devices while pushing capable devices to the newer standard — check Cisco&#8217;s current WLC and AP release notes for your platform&#8217;s WPA3 support status.</p>



<p class="wp-block-paragraph"><strong>What&#8217;s the practical difference between WPA2-Personal and WPA2-Enterprise for a small office?</strong> For under a dozen trusted devices, Personal mode with a strong, regularly rotated PSK is often sufficient. Once you&#8217;re managing dozens or hundreds of users with turnover, Enterprise mode&#8217;s per-user authentication and centralized revocation become operationally necessary.</p>



<p class="wp-block-paragraph"><strong>Does enabling 802.1X slow down initial connection time?</strong> Slightly, due to the RADIUS authentication round-trip, though this is generally imperceptible to users and further minimized when combined with fast transition (802.11r) for subsequent roams.</p>



<p class="wp-block-paragraph"><strong>Can I run WPA2-Personal and WPA2-Enterprise SSIDs simultaneously on the same APs?</strong> Yes — this is common practice, typically with a Personal-mode guest SSID and an Enterprise-mode corporate SSID broadcast from the same physical access points, mapped to different VLANs.</p>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">Implementing WPA2 security properly on Cisco wireless infrastructure comes down to a few non-negotiables: disable legacy TKIP wherever possible, use Enterprise mode with 802.1X and a proper RADIUS/ISE backend for any organization beyond trivial size, and make sure your VLAN and interface mapping actually delivers traffic where it belongs after authentication succeeds. The protocol fundamentals — the 4-way handshake, AES-CCMP encryption, RADIUS-based authorization — aren&#8217;t just academic details; understanding them is what makes the difference between a quick fix and hours of guessing when authentication issues inevitably show up in a live environment.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li>Cisco Wireless LAN Controller Configuration Guide — cisco.com/c/en/us/support/wireless/wireless-lan-controller-software</li>



<li>Cisco ISE Administrator Guide — cisco.com/c/en/us/support/security/identity-services-engine</li>



<li>Wi-Fi Alliance WPA3 Specification — wi-fi.org/discover-wi-fi/security</li>



<li>Cisco Enterprise Mobility Design Guide — cisco.com/c/en/us/td/docs/wireless/controller/technotes</li>
</ul>
<p>The post <a href="https://awjunaid.com/cisco/how-to-implement-wpa-wpa2-security-on-cisco-wireless-networks-complete-configuration-guide/">How to Implement WPA/WPA2 Security on Cisco Wireless Networks: Complete Configuration Guide</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://awjunaid.com/cisco/how-to-implement-wpa-wpa2-security-on-cisco-wireless-networks-complete-configuration-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5513</post-id>	</item>
		<item>
		<title>How to Configure Guest Access on Cisco Wireless Networks with Secure Isolation</title>
		<link>https://awjunaid.com/cisco/how-to-configure-guest-access-on-cisco-wireless-networks-with-secure-isolation/</link>
					<comments>https://awjunaid.com/cisco/how-to-configure-guest-access-on-cisco-wireless-networks-with-secure-isolation/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Abdul Wahab Junaid]]></dc:creator>
		<pubDate>Tue, 12 Sep 2023 12:03:04 +0000</pubDate>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[cisco]]></category>
		<guid isPermaLink="false">https://awjunaid.com/?p=5510</guid>

					<description><![CDATA[<p>Setting up guest Wi-Fi sounds simple until you actually sit down and do it properly. Anyone can throw&#8230;</p>
<p>The post <a href="https://awjunaid.com/cisco/how-to-configure-guest-access-on-cisco-wireless-networks-with-secure-isolation/">How to Configure Guest Access on Cisco Wireless Networks with Secure Isolation</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Setting up guest Wi-Fi sounds simple until you actually sit down and do it properly. Anyone can throw an open SSID on a wireless controller in five minutes. Doing it in a way that keeps guest traffic completely walled off from the corporate network, passes a security audit, and doesn&#8217;t turn into a support headache six months later — that&#8217;s a different job entirely. This guide walks through that job from the ground up, using Cisco Wireless LAN Controllers (WLC) as the platform, covering everything from the underlying concepts to the exact CLI you&#8217;ll type.</p>



<h2 class="wp-block-heading">Why Guest Isolation Matters</h2>



<p class="wp-block-paragraph">A guest network exists to give visitors, contractors, and customers internet access without giving them a path into anything that matters — file servers, printers, internal applications, VoIP infrastructure, or other connected clients. Without proper isolation, a guest network becomes an open door. A compromised guest laptop sitting on the same broadcast domain as corporate devices can run ARP spoofing, scan for open shares, or simply eavesdrop on unencrypted traffic.</p>



<p class="wp-block-paragraph">Secure isolation in a Cisco wireless deployment typically means three things working together:</p>



<ol class="wp-block-list">
<li><strong>Logical separation</strong> — guest traffic lives in its own VLAN and often its own tunnel, never touching internal VLANs.</li>



<li><strong>Client isolation (P2P blocking)</strong> — guest devices can&#8217;t see or talk to each other, only to the upstream gateway.</li>



<li><strong>Policy enforcement</strong> — a captive portal, rate limiting, and firewall rules that restrict where guest traffic can go.</li>
</ol>



<h2 class="wp-block-heading">Networking Fundamentals Before You Configure Anything</h2>



<h3 class="wp-block-heading">VLANs and Traffic Segmentation</h3>



<p class="wp-block-paragraph">Every WLAN (the SSID broadcast to clients) on a Cisco WLC maps to an interface, and that interface maps to a VLAN. If your guest SSID and your corporate SSID share the same interface/VLAN, you have already failed at isolation regardless of anything else you configure. The first rule is: guest gets its own VLAN, its own subnet, its own DHCP scope, and ideally its own upstream firewall zone.</p>



<h3 class="wp-block-heading">The Foreign/Anchor Controller Model</h3>



<p class="wp-block-paragraph">In multi-site or campus deployments, Cisco&#8217;s traditional (AireOS) architecture uses <strong>Guest Anchoring</strong>. Here&#8217;s the idea: your internal WLCs (the &#8220;foreign&#8221; controllers) sit inside the corporate network at branch sites. A dedicated WLC — the &#8220;anchor&#8221; — sits in the DMZ. Guest traffic is picked up by the foreign controller at the access point, then tunneled over an Ethernet-over-IP (EoIP) or CAPWAP mobility tunnel straight to the anchor controller in the DMZ, without ever touching the internal network in between. The anchor then breaks the traffic out to the internet from the DMZ.</p>



<p class="wp-block-paragraph">This is the gold standard for secure isolation because guest traffic is never locally switched inside the corporate network at all — it&#8217;s tunneled in an encapsulated form until it reaches the DMZ.</p>



<h3 class="wp-block-heading">Client Isolation (P2P Blocking)</h3>



<p class="wp-block-paragraph">Separately from VLAN segmentation, Cisco controllers support <strong>P2P (peer-to-peer) blocking</strong>, which prevents wireless clients on the same WLAN from communicating directly with each other at Layer 2, even if they&#8217;re on the same VLAN and subnet. For guest networks this is almost always mandatory — you don&#8217;t want a guest in the lobby able to see another guest&#8217;s shared folder or print jobs.</p>



<h3 class="wp-block-heading">Captive Portal / Web Authentication</h3>



<p class="wp-block-paragraph">Guest access almost always pairs with a captive portal — a webpage guests must interact with (accept terms, enter a code, register an email) before the WLC opens the ACL to allow real traffic. Cisco supports internal (hosted on the controller) and external (hosted on ISE or a third-party portal) web authentication.</p>



<h2 class="wp-block-heading">Lab Topology</h2>



<p class="wp-block-paragraph">For this walkthrough, assume:</p>



<ul class="wp-block-list">
<li>Cisco WLC (AireOS 8.10, e.g. a 5520 or vWLC) as the foreign controller, management IP <code>10.10.1.5</code></li>



<li>A second WLC in the DMZ as the anchor, IP <code>192.168.200.5</code></li>



<li>Guest VLAN 900, subnet <code>172.16.90.0/24</code> on the anchor side</li>



<li>Access points already joined to the foreign controller</li>



<li>A mobility group already established between foreign and anchor</li>
</ul>



<h2 class="wp-block-heading">Step 1: Create the Guest VLAN and Interface (Anchor Controller)</h2>



<p class="wp-block-paragraph">On the anchor WLC, create the dynamic interface for the guest VLAN.</p>



<pre class="wp-block-code"><code>(Cisco Controller-Anchor) &gt; config interface create guest-vlan900 900
(Cisco Controller-Anchor) &gt; config interface address dynamic-interface guest-vlan900 172.16.90.2 255.255.255.0 172.16.90.1
(Cisco Controller-Anchor) &gt; config interface port guest-vlan900 1
(Cisco Controller-Anchor) &gt; config interface dhcp dynamic-interface guest-vlan900 primary 172.16.90.1
</code></pre>



<p class="wp-block-paragraph">Verify:</p>



<pre class="wp-block-code"><code>(Cisco Controller-Anchor) &gt; show interface summary
</code></pre>



<p class="wp-block-paragraph">Expected output should list <code>guest-vlan900</code> with the correct IP, VLAN tag, and port.</p>



<h2 class="wp-block-heading">Step 2: Configure the Mobility Group Between Foreign and Anchor</h2>



<p class="wp-block-paragraph">On both controllers, they must be members of each other&#8217;s mobility list.</p>



<p class="wp-block-paragraph">On the foreign controller:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; config mobility group member add 00:1a:2b:3c:4d:5e 192.168.200.5
</code></pre>



<p class="wp-block-paragraph">On the anchor:</p>



<pre class="wp-block-code"><code>(Cisco Controller-Anchor) &gt; config mobility group member add 00:aa:bb:cc:dd:ee 10.10.1.5
</code></pre>



<p class="wp-block-paragraph">Verify mobility status — this is the single most common point of failure in anchor deployments:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; show mobility summary
</code></pre>



<p class="wp-block-paragraph">Expected output:</p>



<pre class="wp-block-code"><code>Mobility Protocol Port........................ 16666
Default Mobility Domain....................... CorpMobility
Mobility Keepalive Interval.................... 10
Mobility Keepalive Count....................... 3
Mobility Group Members configured.............. 2
Mobility Control Message DSCP Value............ 0

Controllers configured in the Mobility Group
IP Address       MAC Address        Group Name    Multicast IP  Status
10.10.1.5        00:aa:bb:cc:dd:ee  CorpMobility  0.0.0.0       Up
192.168.200.5    00:1a:2b:3c:4d:5e  CorpMobility  0.0.0.0       Up
</code></pre>



<p class="wp-block-paragraph">If status shows &#8220;Control and Data Path Down&#8221; instead of &#8220;Up,&#8221; check that UDP 16666 (control) and IP protocol 97 (EoIP data, or UDP 16667 for CAPWAP mobility) are permitted between the two controller IPs through any intermediate firewall.</p>



<h2 class="wp-block-heading">Step 3: Create the Guest WLAN on the Foreign Controller</h2>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; config wlan create 5 GuestWiFi GuestWiFi
(Cisco Controller) &gt; config wlan security wpa disable 5
(Cisco Controller) &gt; config wlan security web-auth enable 5
(Cisco Controller) &gt; config wlan mobility anchor add 5 192.168.200.5
(Cisco Controller) &gt; config wlan exclusionlist 5 180
(Cisco Controller) &gt; config wlan peer-blocking enable 5
(Cisco Controller) &gt; config wlan broadcast-ssid enable 5
(Cisco Controller) &gt; config wlan enable 5
</code></pre>



<p class="wp-block-paragraph">The <code>mobility anchor add</code> command is what tells the foreign controller: any client joining WLAN ID 5 gets tunneled straight to the anchor at 192.168.200.5 instead of being locally switched.</p>



<h2 class="wp-block-heading">Step 4: Configure the Anchor&#8217;s Copy of the Same WLAN</h2>



<p class="wp-block-paragraph">The WLAN ID, SSID name, and profile name must match exactly on the anchor.</p>



<pre class="wp-block-code"><code>(Cisco Controller-Anchor) &gt; config wlan create 5 GuestWiFi GuestWiFi
(Cisco Controller-Anchor) &gt; config wlan interface 5 guest-vlan900
(Cisco Controller-Anchor) &gt; config wlan security web-auth enable 5
(Cisco Controller-Anchor) &gt; config wlan mobility anchor add 5 192.168.200.5
(Cisco Controller-Anchor) &gt; config wlan peer-blocking enable 5
(Cisco Controller-Anchor) &gt; config wlan enable 5
</code></pre>



<p class="wp-block-paragraph">Notice the anchor also lists itself as an anchor for WLAN 5 — this is required syntax in AireOS; it tells the anchor &#8220;traffic for this WLAN terminates and is switched locally here.&#8221;</p>



<h2 class="wp-block-heading">Step 5: Enforce Client (P2P) Isolation</h2>



<p class="wp-block-paragraph">Peer-blocking was already enabled above, but confirm the enforcement mode:</p>



<pre class="wp-block-code"><code>(Cisco Controller-Anchor) &gt; config wlan peer-blocking drop 5
</code></pre>



<p class="wp-block-paragraph">Options are <code>drop</code> (silently discard inter-client traffic), <code>forward-upstream</code> (send it to the upstream router to let an ACL decide), or <code>disable</code>. For guest networks, <code>drop</code> is the simplest and most secure choice.</p>



<h2 class="wp-block-heading">Step 6: Build the Pre-Authentication and Post-Authentication ACLs</h2>



<p class="wp-block-paragraph">Before authentication, guests need access only to the portal and DNS. After authentication, restrict them to the internet only — never to internal RFC1918 ranges.</p>



<pre class="wp-block-code"><code>(Cisco Controller-Anchor) &gt; config acl create Guest-PreAuth
(Cisco Controller-Anchor) &gt; config acl rule add Guest-PreAuth 1
(Cisco Controller-Anchor) &gt; config acl rule action Guest-PreAuth 1 permit
(Cisco Controller-Anchor) &gt; config acl rule protocol Guest-PreAuth 1 17
(Cisco Controller-Anchor) &gt; config acl rule destination port range Guest-PreAuth 1 53 53
(Cisco Controller-Anchor) &gt; config acl rule add Guest-PreAuth 2
(Cisco Controller-Anchor) &gt; config acl rule action Guest-PreAuth 2 deny
(Cisco Controller-Anchor) &gt; config acl rule destination address Guest-PreAuth 2 10.0.0.0 255.0.0.0
(Cisco Controller-Anchor) &gt; config acl rule add Guest-PreAuth 3
(Cisco Controller-Anchor) &gt; config acl rule action Guest-PreAuth 3 deny
(Cisco Controller-Anchor) &gt; config acl rule destination address Guest-PreAuth 3 172.16.0.0 255.240.0.0
(Cisco Controller-Anchor) &gt; config acl rule add Guest-PreAuth 4
(Cisco Controller-Anchor) &gt; config acl rule action Guest-PreAuth 4 deny
(Cisco Controller-Anchor) &gt; config acl rule destination address Guest-PreAuth 4 192.168.0.0 255.255.0.0
(Cisco Controller-Anchor) &gt; config acl rule add Guest-PreAuth 5
(Cisco Controller-Anchor) &gt; config acl rule action Guest-PreAuth 5 permit
(Cisco Controller-Anchor) &gt; config acl apply Guest-PreAuth
</code></pre>



<p class="wp-block-paragraph">Apply it to the WLAN as the pre-auth (web-auth) ACL:</p>



<pre class="wp-block-code"><code>(Cisco Controller-Anchor) &gt; config wlan security web-auth acl-type webauth
(Cisco Controller-Anchor) &gt; config wlan security web-auth exclude Guest-PreAuth 5
</code></pre>



<p class="wp-block-paragraph">The three &#8220;deny&#8221; rules covering the private RFC1918 ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) — with the guest&#8217;s own subnet carved out ahead of them if it happens to fall inside one of those ranges — are what actually prevent a guest, even after authenticating, from ever reaching internal hosts. The final &#8220;permit any&#8221; lets everything else (i.e., the internet) through.</p>



<h2 class="wp-block-heading">Step 7: Configure the Captive Portal</h2>



<p class="wp-block-paragraph">For an internal (controller-hosted) portal:</p>



<pre class="wp-block-code"><code>(Cisco Controller-Anchor) &gt; config wlan security web-auth webauth-type internal 5
(Cisco Controller-Anchor) &gt; config custom-web webauth_type internal
(Cisco Controller-Anchor) &gt; config custom-web redirectUrl https://portal.example.com/welcome
</code></pre>



<p class="wp-block-paragraph">For an external portal (ISE, Cloudpath, or a splash-page vendor):</p>



<pre class="wp-block-code"><code>(Cisco Controller-Anchor) &gt; config wlan security web-auth webauth-type external 5
(Cisco Controller-Anchor) &gt; config wlan security web-auth server-precedence 5 radius local ldap
</code></pre>



<h2 class="wp-block-heading">Step 8: Rate Limiting Guest Bandwidth</h2>



<p class="wp-block-paragraph">Prevent guest usage from saturating the internet circuit using per-client bandwidth contracts:</p>



<pre class="wp-block-code"><code>(Cisco Controller-Anchor) &gt; config qos wlan-bandwidth-contract 5 average-data-rate down 10000
(Cisco Controller-Anchor) &gt; config qos wlan-bandwidth-contract 5 average-data-rate up 5000
</code></pre>



<p class="wp-block-paragraph">Values are in kbps — this example caps each guest client to 10 Mbps down / 5 Mbps up.</p>



<h2 class="wp-block-heading">Verification and Testing</h2>



<p class="wp-block-paragraph">Confirm the WLAN is active and correctly anchored:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; show wlan 5
</code></pre>



<p class="wp-block-paragraph">Look for <code>Mobility Anchor List</code> populated with the DMZ controller&#8217;s IP.</p>



<p class="wp-block-paragraph">Confirm a test client&#8217;s session:</p>



<pre class="wp-block-code"><code>(Cisco Controller-Anchor) &gt; show client summary
(Cisco Controller-Anchor) &gt; show client detail &lt;MAC address&gt;
</code></pre>



<p class="wp-block-paragraph">The client detail output should show <code>Mobility Role: Export Foreign</code> on the foreign controller side and <code>Mobility Role: Export Anchor</code> on the anchor side, along with the correct VLAN interface and WebAuth status of PASS after portal login.</p>



<h2 class="wp-block-heading">Enterprise Deployment Considerations</h2>



<p class="wp-block-paragraph">In a real enterprise rollout, a few things separate a lab config from a production one:</p>



<ul class="wp-block-list">
<li><strong>Redundant anchors</strong>: run at least two anchor controllers in the DMZ so a single controller failure doesn&#8217;t take guest Wi-Fi down across every branch.</li>



<li><strong>NAT at the DMZ edge</strong>: the anchor&#8217;s guest interface typically sits behind a NAT boundary so guest source IPs never appear on the internal routed network.</li>



<li><strong>Centralized authentication logging</strong>: point web-auth through ISE so every guest session is logged with a MAC address, timestamp, and sponsor (if using sponsor-approved guest access) for compliance and incident response.</li>



<li><strong>Bandwidth and session limits</strong>: cap concurrent guest sessions per SSID to avoid a single busy lobby from starving other floors.</li>



<li><strong>Separate SSID for BYOD vs. true guest</strong>: many enterprises run three tiers — corporate, BYOD (authenticated but internal), and guest (fully isolated) — don&#8217;t collapse these into one policy.</li>
</ul>



<h2 class="wp-block-heading">Common Configuration Mistakes</h2>



<ul class="wp-block-list">
<li>Forgetting to add the mobility anchor on <strong>both</strong> controllers — it must be configured on the foreign controller (pointing to the anchor) and on the anchor itself (pointing to itself).</li>



<li>Using the same VLAN for guest and a &#8220;quarantine&#8221; or IoT network — isolation should never be shared.</li>



<li>Leaving <code>peer-blocking</code> disabled, which lets two guest devices on the same SSID talk to each other directly.</li>



<li>Placing the anchor controller&#8217;s management interface reachable from the internet — it should only be reachable from a controlled management network.</li>



<li>Not restricting DNS — guests with unrestricted DNS can sometimes tunnel data through DNS queries even when other ports are blocked.</li>



<li>Applying the ACL only in one direction — Cisco WLC ACLs are stateless by default in some releases, so both inbound and outbound rules must be explicit.</li>
</ul>



<h2 class="wp-block-heading">Troubleshooting Checklist</h2>



<ul class="wp-block-list">
<li>Client stuck in <code>WebAuth Pending</code>: check that the pre-auth ACL permits DNS and HTTP/HTTPS to the portal address before authentication.</li>



<li>Client shows <code>Anchor Deny</code> or never appears on the anchor: verify mobility group status and that the WLAN ID, profile name, and SSID name match exactly on both controllers.</li>



<li>Guest gets an IP but no captive portal redirect: confirm the DHCP scope&#8217;s DNS server is one the pre-auth ACL permits, and that the redirect URL is reachable.</li>



<li>Guests can ping internal hosts: re-check the ACL ordering — ACL rules on Cisco WLCs are evaluated top-down, so a broad &#8220;permit any&#8221; placed above the deny-RFC1918 rules will bypass isolation entirely.</li>
</ul>



<h2 class="wp-block-heading">FAQs</h2>



<p class="wp-block-paragraph"><strong>Does guest anchoring require a dedicated hardware controller in the DMZ?</strong> No — a virtual WLC (vWLC) or a Catalyst 9800 in embedded wireless mode can serve as the anchor, as long as it has a routed path to the DMZ segment and mobility connectivity to the foreign controllers.</p>



<p class="wp-block-paragraph"><strong>Can I skip anchoring and just use a local VLAN with ACLs?</strong> For a single-site, single-controller deployment, yes — local guest VLAN with tight ACLs at the upstream firewall is a valid, simpler pattern. Anchoring becomes valuable specifically when you have multiple sites/controllers and want all guest traffic to break out from one controlled DMZ point rather than at every branch&#8217;s local internet circuit.</p>



<p class="wp-block-paragraph"><strong>How do I handle guest devices roaming between access points?</strong> Because the client&#8217;s mobility role is anchored to the DMZ controller, roaming between APs on different foreign controllers is handled transparently — the client&#8217;s session state moves with it, and the anchor relationship is preserved.</p>



<p class="wp-block-paragraph"><strong>Is 802.1X ever used for guest networks?</strong> Rarely for anonymous guests, but yes for sponsor-based or partner access where each guest gets unique RADIUS credentials tied to an identity, often issued through Cisco ISE&#8217;s guest portal.</p>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">Secure guest Wi-Fi on Cisco infrastructure comes down to layering three controls: put guest traffic on its own VLAN and, ideally, tunnel it to a dedicated anchor controller in the DMZ; block peer-to-peer communication between guest clients; and enforce ACLs that block access to private address space both before and after portal authentication. None of these individually is enough — it&#8217;s the combination that gives you real isolation. Once the anchor/foreign mobility relationship and ACLs are verified with <code>show mobility summary</code> and <code>show client detail</code>, the setup is stable and requires very little ongoing maintenance beyond periodic portal and certificate renewal.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li>Cisco: Wireless LAN Controller Guest Access — https://www.cisco.com/c/en/us/support/docs/wireless/5500-series-wireless-controllers/113606-wlc-guest-anchor-config.html</li>



<li>Cisco: Wireless Controller Configuration Guide (Mobility Groups) — https://www.cisco.com/c/en/us/td/docs/wireless/controller/8-10/config-guide/b_cg810.html</li>



<li>Cisco: Catalyst 9800 Series Wireless Controller Guest Access Configuration Guide — https://www.cisco.com/c/en/us/td/docs/wireless/controller/9800/config-guide/b_wl_17_1_cg.html</li>
</ul>
<p>The post <a href="https://awjunaid.com/cisco/how-to-configure-guest-access-on-cisco-wireless-networks-with-secure-isolation/">How to Configure Guest Access on Cisco Wireless Networks with Secure Isolation</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://awjunaid.com/cisco/how-to-configure-guest-access-on-cisco-wireless-networks-with-secure-isolation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5510</post-id>	</item>
		<item>
		<title>How to Set Up Wireless LANs with Cisco Wireless Controllers: Step-by-Step Configuration</title>
		<link>https://awjunaid.com/cisco/how-to-set-up-wireless-lans-with-cisco-wireless-controllers-step-by-step-configuration/</link>
					<comments>https://awjunaid.com/cisco/how-to-set-up-wireless-lans-with-cisco-wireless-controllers-step-by-step-configuration/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Abdul Wahab Junaid]]></dc:creator>
		<pubDate>Tue, 12 Sep 2023 12:01:46 +0000</pubDate>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[cisco]]></category>
		<guid isPermaLink="false">https://awjunaid.com/?p=5507</guid>

					<description><![CDATA[<p>Deploying enterprise wireless with a Cisco Wireless LAN Controller (WLC) is fundamentally different from configuring a home router.&#8230;</p>
<p>The post <a href="https://awjunaid.com/cisco/how-to-set-up-wireless-lans-with-cisco-wireless-controllers-step-by-step-configuration/">How to Set Up Wireless LANs with Cisco Wireless Controllers: Step-by-Step Configuration</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Deploying enterprise wireless with a Cisco Wireless LAN Controller (WLC) is fundamentally different from configuring a home router. You&#8217;re not setting up one radio — you&#8217;re centrally managing dozens or hundreds of access points, each broadcasting multiple SSIDs, all governed by policies pushed from a single point of control. This guide walks through the full process, from understanding the architecture to typing the CLI commands that bring a WLAN live, using both the AireOS (5520/8540/vWLC) and the newer Catalyst 9800 IOS-XE platforms where the syntax differs.</p>



<h2 class="wp-block-heading">Understanding the Split-MAC Architecture</h2>



<p class="wp-block-paragraph">Cisco enterprise wireless uses a <strong>split-MAC</strong> design under CAPWAP (Control and Provisioning of Wireless Access Points). The access point (AP) handles real-time 802.11 functions — beaconing, ACK frames, retransmission — while the controller handles everything else: authentication, mobility, RF management, QoS policy, and encryption key management. This split is why a lightweight AP is useless without a controller to join, and why controller configuration is where almost all the actual policy lives.</p>



<p class="wp-block-paragraph">Traffic between AP and WLC travels over two CAPWAP tunnels:</p>



<ul class="wp-block-list">
<li><strong>Control tunnel</strong> (UDP 5246) — carries management traffic: join requests, configuration, RF reports.</li>



<li><strong>Data tunnel</strong> (UDP 5247) — carries the actual client data frames, encapsulated from the AP back to the controller.</li>
</ul>



<p class="wp-block-paragraph">Understanding this matters because most early-stage troubleshooting (&#8220;AP won&#8217;t join,&#8221; &#8220;clients associate but get no IP&#8221;) traces back to one of these two tunnels being blocked somewhere in the network path.</p>



<h2 class="wp-block-heading">Core Building Blocks of a WLAN</h2>



<p class="wp-block-paragraph">Before touching the CLI, understand the four objects that make up any WLAN configuration on a Cisco controller:</p>



<ol class="wp-block-list">
<li><strong>Dynamic Interface</strong> — the VLAN/IP the WLAN&#8217;s traffic is mapped to on the controller.</li>



<li><strong>WLAN Profile</strong> — the logical container defining SSID name, profile name, and WLAN ID.</li>



<li><strong>Security Policy</strong> — WPA2/WPA3-Personal, WPA2/WPA3-Enterprise (802.1X), or open/web-auth.</li>



<li><strong>RF/AP Group</strong> — which physical APs broadcast this WLAN, and under what radio policy.</li>
</ol>



<h2 class="wp-block-heading">Lab Topology</h2>



<ul class="wp-block-list">
<li>Cisco 5520 WLC or vWLC running AireOS 8.10 (management IP 10.10.1.5)</li>



<li>Alternatively, a Catalyst 9800-CL running IOS-XE 17.9</li>



<li>Access points already discovered and joined via DHCP Option 43 or DNS</li>



<li>Core switch trunking VLANs 10 (corporate), 20 (voice), and 900 (guest) down to the WLC&#8217;s uplink port</li>
</ul>



<h2 class="wp-block-heading">Part 1: AireOS (Classic WLC) Configuration</h2>



<h3 class="wp-block-heading">Step 1 — Create the Dynamic Interface</h3>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; config interface create Corp-Data 10
(Cisco Controller) &gt; config interface address dynamic-interface Corp-Data 10.10.20.5 255.255.255.0 10.10.20.1
(Cisco Controller) &gt; config interface port Corp-Data 1
(Cisco Controller) &gt; config interface dhcp dynamic-interface Corp-Data primary 10.10.20.10
</code></pre>



<p class="wp-block-paragraph">Verify:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; show interface summary

Interface Name                  Port Vlan Id  IP Address      Type    Ap Mgr
-------------------------------- ---- -------- --------------- ------- ------
Corp-Data                        1    10       10.10.20.5      Dynamic No
management                       1    1        10.10.1.5       Static  Yes
</code></pre>



<h3 class="wp-block-heading">Step 2 — Create the WLAN</h3>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; config wlan create 10 CorpWiFi CorpWiFi
(Cisco Controller) &gt; config wlan interface 10 Corp-Data
</code></pre>



<h3 class="wp-block-heading">Step 3 — Configure Security (WPA2/WPA3-Enterprise with 802.1X)</h3>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; config wlan security wpa akm 802.1x enable 10
(Cisco Controller) &gt; config wlan security wpa wpa2 enable 10
(Cisco Controller) &gt; config wlan security wpa wpa2 ciphers aes enable 10
(Cisco Controller) &gt; config wlan radius_server auth add 10 1812 1 shared-secret
(Cisco Controller) &gt; config wlan radius_server auth enable 10
</code></pre>



<p class="wp-block-paragraph">For a simpler PSK-based branch office SSID instead:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; config wlan security wpa akm psk enable 10
(Cisco Controller) &gt; config wlan security wpa akm psk set-key ascii MyStrongPassphrase123! 10
</code></pre>



<h3 class="wp-block-heading">Step 4 — Enable QoS, Band Selection, and Broadcast</h3>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; config wlan qos 10 platinum
(Cisco Controller) &gt; config wlan band-select allow 10
(Cisco Controller) &gt; config wlan broadcast-ssid enable 10
</code></pre>



<p class="wp-block-paragraph">Platinum QoS is typically reserved for voice; data SSIDs usually use Silver or Bronze. Use the level appropriate to the traffic type.</p>



<h3 class="wp-block-heading">Step 5 — Assign to an AP Group (Optional but Recommended)</h3>



<p class="wp-block-paragraph">Rather than broadcasting every SSID from every AP, use AP groups to scope WLANs to specific floors or buildings.</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; config wlan apgroup create FloorTwoAPs
(Cisco Controller) &gt; config wlan apgroup interface-mapping add FloorTwoAPs 10 Corp-Data
(Cisco Controller) &gt; config ap group-name FloorTwoAPs AP-F2-01
(Cisco Controller) &gt; config ap group-name FloorTwoAPs AP-F2-02
</code></pre>



<h3 class="wp-block-heading">Step 6 — Enable the WLAN</h3>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; config wlan enable 10
</code></pre>



<h3 class="wp-block-heading">Step 7 — Verify</h3>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; show wlan 10
</code></pre>



<p class="wp-block-paragraph">Expected output (trimmed):</p>



<pre class="wp-block-code"><code>WLAN Identifier................................. 10
Profile Name..................................... CorpWiFi
Network Name (SSID).............................. CorpWiFi
Status............................................ Enabled
MAC Filtering..................................... Disabled
Interface......................................... Corp-Data
Security
   802.11 Authentication:........................ Open System
   Wi-Fi Protected Access (WPA/WPA2/WPA3)......... Enabled
      WPA2 (AES)................................. Enabled
      Auth Key Management
        802.1x.................................... Enabled
</code></pre>



<h2 class="wp-block-heading">Part 2: Catalyst 9800 (IOS-XE) Configuration</h2>



<p class="wp-block-paragraph">The 9800 platform uses IOS-XE CLI syntax and separates configuration into policy profiles, WLAN profiles, and policy tags — a more modular model than AireOS.</p>



<h3 class="wp-block-heading">Step 1 — Create the WLAN</h3>



<pre class="wp-block-code"><code>9800(config)# wlan CorpWiFi 10 CorpWiFi
9800(config-wlan)# security wpa akm dot1x
9800(config-wlan)# security wpa wpa2 ciphers aes
9800(config-wlan)# no shutdown
9800(config-wlan)# exit
</code></pre>



<h3 class="wp-block-heading">Step 2 — Create the Policy Profile (maps WLAN to VLAN)</h3>



<pre class="wp-block-code"><code>9800(config)# wireless profile policy Corp-Policy
9800(config-wireless-policy)# vlan 10
9800(config-wireless-policy)# no shutdown
9800(config-wireless-policy)# exit
</code></pre>



<h3 class="wp-block-heading">Step 3 — Create a RADIUS Server and AAA Method</h3>



<pre class="wp-block-code"><code>9800(config)# radius server ISE1
9800(config-radius-server)# address ipv4 10.10.1.20 auth-port 1812 acct-port 1813
9800(config-radius-server)# key MySharedSecret123
9800(config-radius-server)# exit
9800(config)# aaa new-model
9800(config)# aaa group server radius ISE-GROUP
9800(config-sg-radius)# server name ISE1
9800(config-sg-radius)# exit
9800(config)# aaa authentication dot1x ISE-METHOD group ISE-GROUP
</code></pre>



<p class="wp-block-paragraph">Attach the method list to the WLAN:</p>



<pre class="wp-block-code"><code>9800(config)# wlan CorpWiFi
9800(config-wlan)# security dot1x authentication-list ISE-METHOD
</code></pre>



<h3 class="wp-block-heading">Step 4 — Create the Policy Tag and Bind Everything Together</h3>



<pre class="wp-block-code"><code>9800(config)# wireless tag policy Corp-PolicyTag
9800(config-policy-tag)# wlan CorpWiFi policy Corp-Policy
9800(config-policy-tag)# exit
</code></pre>



<h3 class="wp-block-heading">Step 5 — Apply the Policy Tag to Access Points</h3>



<pre class="wp-block-code"><code>9800(config)# ap F4CF.E2XX.XXXX
9800(config-ap-tag)# policy-tag Corp-PolicyTag
9800(config-ap-tag)# exit
</code></pre>



<p class="wp-block-paragraph">Or apply to a whole AP filter/site tag for bulk deployment.</p>



<h3 class="wp-block-heading">Step 6 — Verify</h3>



<pre class="wp-block-code"><code>9800# show wlan summary
9800# show wireless tag policy detailed Corp-PolicyTag
9800# show ap tag summary
</code></pre>



<p class="wp-block-paragraph">Expected <code>show wlan summary</code> output:</p>



<pre class="wp-block-code"><code>Number of WLANs: 1

ID  Profile Name  SSID       Status  Security
--  ------------  ---------  ------  --------------
10  CorpWiFi      CorpWiFi   UP      &#91;WPA2]&#91;802.1x]
</code></pre>



<h2 class="wp-block-heading">Real-World Enterprise Scenario: Multi-SSID Office Deployment</h2>



<p class="wp-block-paragraph">A typical mid-size office needs at least three WLANs:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>SSID</th><th>Purpose</th><th>VLAN</th><th>Security</th><th>QoS</th></tr></thead><tbody><tr><td>CorpWiFi</td><td>Employee data</td><td>10</td><td>WPA2/3-Enterprise (802.1X)</td><td>Silver</td></tr><tr><td>CorpVoice</td><td>VoWiFi handsets</td><td>20</td><td>WPA2-Enterprise + CCKM</td><td>Platinum</td></tr><tr><td>GuestWiFi</td><td>Visitor internet</td><td>900</td><td>Open + Web-Auth</td><td>Bronze</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Each maps to its own dynamic interface/VLAN, and CorpVoice specifically needs Cisco Centralized Key Management (CCKM) enabled for fast roaming so handsets don&#8217;t drop calls moving between APs:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; config wlan security wpa akm cckm enable 20
</code></pre>



<h2 class="wp-block-heading">Optimization: RF and Band Steering</h2>



<p class="wp-block-paragraph">For dense deployments, tune the RF profile to reduce co-channel interference and push clients to 5 GHz:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; config 802.11a channel global auto
(Cisco Controller) &gt; config 802.11a txPower global auto
(Cisco Controller) &gt; config wlan band-select allow 10
(Cisco Controller) &gt; config band-select cycle-count 2
(Cisco Controller) &gt; config band-select cycle-threshold 200
</code></pre>



<p class="wp-block-paragraph">On the 9800, RF profiles are configured under <code>ap dot11 5ghz rf-profile</code> and applied via RF tags, giving per-building control over channel width, minimum RSSI, and DCA (Dynamic Channel Assignment).</p>



<h2 class="wp-block-heading">Common Configuration Mistakes</h2>



<ul class="wp-block-list">
<li>Forgetting <code>no shutdown</code> on IOS-XE WLAN and policy profile objects — unlike AireOS, they&#8217;re created in a shutdown state by default.</li>



<li>Mismatched VLAN trunking — the switchport connecting to the WLC or AP must trunk every VLAN referenced by a dynamic interface/policy profile, or clients will associate but never get a DHCP lease.</li>



<li>Using the same RF/AP group for all SSIDs on a large campus, causing unnecessary broadcast overhead on APs that don&#8217;t need every SSID.</li>



<li>Skipping CCKM/802.11r on voice SSIDs, leading to audible gaps during handset roaming.</li>



<li>Not setting a strong enough RADIUS shared secret or mismatching it between the WLC and the RADIUS server — this is the most common single cause of 802.1X clients failing authentication silently.</li>
</ul>



<h2 class="wp-block-heading">Troubleshooting</h2>



<p class="wp-block-paragraph">Check AP join status:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; show ap join stats summary all
</code></pre>



<p class="wp-block-paragraph">Check a specific client&#8217;s association and authentication state:</p>



<pre class="wp-block-code"><code>(Cisco Controller) &gt; show client detail &lt;MAC address&gt;
</code></pre>



<p class="wp-block-paragraph">Look for <code>Policy Manager State: RUN</code> — anything stuck at <code>AUTHCHECK</code>, <code>DHCP_REQD</code>, or <code>WEBAUTH_REQD</code> tells you exactly which stage is failing.</p>



<p class="wp-block-paragraph">On IOS-XE:</p>



<pre class="wp-block-code"><code>9800# show wireless client mac-address &lt;MAC address&gt; detail
9800# show wireless client summary
</code></pre>



<p class="wp-block-paragraph">Enable client debug (use sparingly in production, it&#8217;s verbose):</p>



<pre class="wp-block-code"><code>9800# debug wireless mac &lt;client-mac&gt; trace
</code></pre>



<h2 class="wp-block-heading">FAQs</h2>



<p class="wp-block-paragraph"><strong>How many WLANs can a Cisco controller support?</strong> AireOS controllers typically support up to 512 WLANs system-wide, but only 16 can be broadcast simultaneously per AP radio due to beacon overhead — this is why AP groups matter for scoping.</p>



<p class="wp-block-paragraph"><strong>What&#8217;s the difference between a WLAN profile and an SSID?</strong> The SSID is the broadcast network name clients see; the WLAN profile is the internal controller object (with its own ID and settings) that can, in some setups, share the same SSID name across multiple profiles for different AP groups.</p>



<p class="wp-block-paragraph"><strong>Do I need a separate controller per site?</strong> No — a single controller (physical or virtual) can manage APs across multiple sites over a WAN, as long as CAPWAP control/data ports are reachable, though latency-sensitive designs sometimes prefer local controllers per site.</p>



<p class="wp-block-paragraph"><strong>Should I use AireOS or Catalyst 9800 for a new deployment?</strong> Cisco has moved all new feature development to IOS-XE/Catalyst 9800; new deployments should default to 9800 unless there&#8217;s a specific compatibility reason to stay on legacy AireOS hardware.</p>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">Setting up a Cisco wireless LAN comes down to defining four things correctly and consistently: the VLAN/interface the traffic lands on, the WLAN profile itself, the security policy governing how clients authenticate, and the AP scope that determines where the SSID is actually broadcast. AireOS and Catalyst 9800 use different CLI syntax and object models — the 9800&#8217;s policy-tag/policy-profile separation is more modular — but the underlying concepts are identical. Once configured, <code>show wlan</code>, <code>show client detail</code>, and AP join statistics are your primary tools for confirming the deployment is healthy.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li>Cisco: Wireless LAN Controller Configuration Guide, Release 8.10 — https://www.cisco.com/c/en/us/td/docs/wireless/controller/8-10/config-guide/b_cg810.html</li>



<li>Cisco: Catalyst 9800 Series Wireless Controller Software Configuration Guide — https://www.cisco.com/c/en/us/td/docs/wireless/controller/9800/config-guide/b_wl_17_1_cg.html</li>



<li>Cisco: CAPWAP Configuration Guide — https://www.cisco.com/c/en/us/td/docs/wireless/controller/technotes/8-3/b_capwap.html</li>
</ul>
<p>The post <a href="https://awjunaid.com/cisco/how-to-set-up-wireless-lans-with-cisco-wireless-controllers-step-by-step-configuration/">How to Set Up Wireless LANs with Cisco Wireless Controllers: Step-by-Step Configuration</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://awjunaid.com/cisco/how-to-set-up-wireless-lans-with-cisco-wireless-controllers-step-by-step-configuration/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5507</post-id>	</item>
		<item>
		<title>How to Configure NetFlow on Cisco Routers for Network Traffic Monitoring and Analysis</title>
		<link>https://awjunaid.com/cisco/how-to-configure-netflow-on-cisco-routers-for-network-traffic-monitoring-and-analysis/</link>
					<comments>https://awjunaid.com/cisco/how-to-configure-netflow-on-cisco-routers-for-network-traffic-monitoring-and-analysis/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Abdul Wahab Junaid]]></dc:creator>
		<pubDate>Tue, 12 Sep 2023 12:00:11 +0000</pubDate>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[cisco]]></category>
		<guid isPermaLink="false">https://awjunaid.com/?p=5504</guid>

					<description><![CDATA[<p>There&#8217;s a specific moment every network engineer eventually hits: something is eating bandwidth, a link is saturated, or&#8230;</p>
<p>The post <a href="https://awjunaid.com/cisco/how-to-configure-netflow-on-cisco-routers-for-network-traffic-monitoring-and-analysis/">How to Configure NetFlow on Cisco Routers for Network Traffic Monitoring and Analysis</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">There&#8217;s a specific moment every network engineer eventually hits: something is eating bandwidth, a link is saturated, or security wants to know &#8220;what talked to what&#8221; during an incident window — and packet captures alone won&#8217;t answer it at scale. That&#8217;s the exact problem NetFlow was built to solve. Rather than capturing every packet, NetFlow summarizes traffic into flow records: who talked to whom, over what protocol, for how long, and how much data moved. This guide covers NetFlow from first principles through full Cisco IOS/IOS-XE configuration, verification, and real troubleshooting.</p>



<h2 class="wp-block-heading">What NetFlow Actually Is</h2>



<p class="wp-block-paragraph">A <strong>flow</strong> is defined by a unique combination of seven key fields (the &#8220;seven-tuple&#8221;):</p>



<ol class="wp-block-list">
<li>Source IP address</li>



<li>Destination IP address</li>



<li>Source port</li>



<li>Destination port</li>



<li>Layer 3 protocol (TCP, UDP, ICMP, etc.)</li>



<li>Type of Service (ToS) byte</li>



<li>Input interface</li>
</ol>



<p class="wp-block-paragraph">Every packet matching the same seven-tuple within an active flow window is counted into that single flow record instead of being logged individually. The router (or switch) builds these records in a local flow cache, then periodically exports them — via UDP, typically — to a <strong>flow collector</strong>, a server running analysis software like Cisco Stealthwatch, SolarWinds NTA, ntopng, or an open-source tool like nfdump.</p>



<p class="wp-block-paragraph">This is fundamentally different from SPAN/port mirroring (which copies full packets) or SNMP (which gives interface-level counters only). NetFlow sits in between: far more detail than SNMP, far less overhead than full packet capture.</p>



<h2 class="wp-block-heading">NetFlow Versions</h2>



<ul class="wp-block-list">
<li><strong>NetFlow v5</strong> — fixed fields, IPv4 only, still widely used for its simplicity and broad tool support.</li>



<li><strong>NetFlow v9</strong> — template-based, supports IPv6, MPLS, and custom fields.</li>



<li><strong>Flexible NetFlow (FNF)</strong> — Cisco&#8217;s modern implementation, built on v9 templates, letting you define exactly which fields to match and collect per flow monitor. This is the standard for any IOS-XE deployment today and is what this guide focuses on.</li>



<li><strong>IPFIX</strong> — the IETF-standardized evolution of NetFlow v9, supported alongside FNF on newer platforms.</li>
</ul>



<h2 class="wp-block-heading">Core Building Blocks of Flexible NetFlow</h2>



<ol class="wp-block-list">
<li><strong>Flow Record</strong> — defines which fields are used to key a flow (match) and which are just collected (collect).</li>



<li><strong>Flow Exporter</strong> — defines where and how flow data is sent (destination IP, port, transport, version).</li>



<li><strong>Flow Monitor</strong> — ties a record and exporter together into a single monitoring policy, plus cache behavior (timers, size).</li>



<li><strong>Flow Sampler</strong> (optional) — for very high-traffic interfaces, samples 1-in-N packets instead of processing every packet, reducing CPU load.</li>
</ol>



<h2 class="wp-block-heading">Lab Topology</h2>



<ul class="wp-block-list">
<li>Cisco ISR 4331 router running IOS-XE 17.6, hostname R1</li>



<li>WAN interface: GigabitEthernet0/0/0, IP 203.0.113.1</li>



<li>LAN interface: GigabitEthernet0/0/1, IP 10.10.10.1</li>



<li>Flow collector at 10.10.10.50, listening on UDP 2055</li>
</ul>



<h2 class="wp-block-heading">Step 1: Define the Flow Record</h2>



<pre class="wp-block-code"><code>R1(config)# flow record CORP-RECORD
R1(config-flow-record)# description IPv4 traffic flow record
R1(config-flow-record)# match ipv4 tos
R1(config-flow-record)# match ipv4 protocol
R1(config-flow-record)# match ipv4 source address
R1(config-flow-record)# match ipv4 destination address
R1(config-flow-record)# match transport source-port
R1(config-flow-record)# match transport destination-port
R1(config-flow-record)# match interface input
R1(config-flow-record)# match flow direction
R1(config-flow-record)# collect routing next-hop address ipv4
R1(config-flow-record)# collect interface output
R1(config-flow-record)# collect counter bytes
R1(config-flow-record)# collect counter packets
R1(config-flow-record)# collect timestamp sys-uptime first
R1(config-flow-record)# collect timestamp sys-uptime last
</code></pre>



<p class="wp-block-paragraph"><code>match</code> fields define the flow key (what makes two packets part of the same flow); <code>collect</code> fields are additional data gathered but not used to distinguish flows.</p>



<h2 class="wp-block-heading">Step 2: Define the Flow Exporter</h2>



<pre class="wp-block-code"><code>R1(config)# flow exporter CORP-EXPORTER
R1(config-flow-exporter)# destination 10.10.10.50
R1(config-flow-exporter)# transport udp 2055
R1(config-flow-exporter)# source GigabitEthernet0/0/1
R1(config-flow-exporter)# export-protocol netflow-v9
R1(config-flow-exporter)# template data timeout 60
</code></pre>



<p class="wp-block-paragraph">Using the physical interface&#8217;s IP as the export source ensures the collector always sees flow data coming from a consistent, predictable address, which matters for collector-side filtering and firewall rules.</p>



<h2 class="wp-block-heading">Step 3: Define the Flow Monitor</h2>



<pre class="wp-block-code"><code>R1(config)# flow monitor CORP-MONITOR
R1(config-flow-monitor)# description Main traffic monitor
R1(config-flow-monitor)# record CORP-RECORD
R1(config-flow-monitor)# exporter CORP-EXPORTER
R1(config-flow-monitor)# cache timeout active 60
R1(config-flow-monitor)# cache timeout inactive 15
</code></pre>



<ul class="wp-block-list">
<li><strong>Active timeout</strong> — how long a still-ongoing flow is allowed to run before it&#8217;s exported anyway (prevents long-lived flows like a large file transfer from never being reported).</li>



<li><strong>Inactive timeout</strong> — how long the cache waits after the last packet of a flow before considering it finished and exporting it.</li>
</ul>



<h2 class="wp-block-heading">Step 4: Apply the Flow Monitor to Interfaces</h2>



<p class="wp-block-paragraph">Apply on the WAN interface, capturing both directions of traffic:</p>



<pre class="wp-block-code"><code>R1(config)# interface GigabitEthernet0/0/0
R1(config-if)# ip flow monitor CORP-MONITOR input
R1(config-if)# ip flow monitor CORP-MONITOR output
R1(config-if)# exit
</code></pre>



<p class="wp-block-paragraph">For IPv6 traffic, a separate flow record/monitor referencing <code>match ipv6</code> fields is needed and applied with <code>ipv6 flow monitor</code>.</p>



<h2 class="wp-block-heading">Step 5: Verify NetFlow Is Capturing Data</h2>



<pre class="wp-block-code"><code>R1# show flow monitor CORP-MONITOR statistics
</code></pre>



<p class="wp-block-paragraph">Expected output (trimmed):</p>



<pre class="wp-block-code"><code>Cache type:                             Normal (Platform cache)
Cache size:                            10000
Current entries:                          124
High Watermark:                          201

Flows added:                            8452
Flows aged:                             8328
   - Active timeout       (  60 secs)     212
   - Inactive timeout     (  15 secs)    8116
</code></pre>



<p class="wp-block-paragraph">Check the live cache contents directly:</p>



<pre class="wp-block-code"><code>R1# show flow monitor CORP-MONITOR cache format table
</code></pre>



<p class="wp-block-paragraph">Expected output (trimmed):</p>



<pre class="wp-block-code"><code>IPV4 SRC ADDR    IPV4 DST ADDR    TRNS SRC PORT  TRNS DST PORT  IP PROT  bytes  pkts
10.10.10.15      93.184.216.34    54221          443            6        45812  38
10.10.10.22      203.0.113.55     51422          80             6        2044   6
</code></pre>



<p class="wp-block-paragraph">Confirm the exporter is actually sending packets out:</p>



<pre class="wp-block-code"><code>R1# show flow exporter CORP-EXPORTER statistics
</code></pre>



<p class="wp-block-paragraph">Expected output (trimmed):</p>



<pre class="wp-block-code"><code>Client send statistics
  Client: Flow Monitor
    Records added:                                       8452
      - sent:                                             8452
    Bytes added:                                         608544
      - sent:                                            608544
</code></pre>



<p class="wp-block-paragraph">If &#8220;sent&#8221; stays at zero while &#8220;added&#8221; climbs, the router is generating flows but failing to export them — almost always a routing or ACL problem between the router and collector.</p>



<h2 class="wp-block-heading">Sampling for High-Throughput Interfaces</h2>



<p class="wp-block-paragraph">On a busy core or edge interface (multi-gigabit), full NetFlow can add meaningful CPU load. Use a flow sampler to process only a fraction of packets:</p>



<pre class="wp-block-code"><code>R1(config)# sampler CORP-SAMPLER
R1(config-sampler)# mode random 1 out-of 100
R1(config)# interface GigabitEthernet0/0/0
R1(config-if)# ip flow monitor CORP-MONITOR sampler CORP-SAMPLER input
</code></pre>



<p class="wp-block-paragraph">This samples 1 in every 100 packets and extrapolates flow statistics — acceptable for trend and top-talker analysis, not for exact byte-accurate billing.</p>



<h2 class="wp-block-heading">Real-World Enterprise Scenario: Identifying a Bandwidth Hog</h2>



<p class="wp-block-paragraph">A branch office WAN circuit is consistently near capacity during business hours. With NetFlow already exporting to a collector:</p>



<ol class="wp-block-list">
<li>Pull top talkers by bytes over the last hour from the collector UI or via <code>nfdump</code>-style query.</li>



<li>Cross-reference the top source IP against DHCP leases to identify the device.</li>



<li>Check destination ports — a flow to TCP 443 sustained for hours at high byte counts often indicates cloud backup or video streaming rather than malicious activity, while unusual destination ports or a fan-out pattern (one host talking to hundreds of external IPs) suggests something worth investigating further, such as a compromised host doing reconnaissance or exfiltration.</li>



<li>Apply a QoS policy or ACL to that host/application once identified, rather than blindly throttling the whole circuit.</li>
</ol>



<p class="wp-block-paragraph">This is the core value proposition of NetFlow: it turns &#8220;the link is full&#8221; into &#8220;here is exactly which host and application is responsible,&#8221; without ever needing a packet capture.</p>



<h2 class="wp-block-heading">Performance Tuning</h2>



<ul class="wp-block-list">
<li><strong>Increase cache size</strong> on routers with high flow counts to avoid premature cache eviction: <code>flow monitor CORP-MONITOR</code> → <code>cache size 65536</code>.</li>



<li><strong>Reduce active timeout</strong> (e.g., to 30 seconds) if you need near-real-time visibility for security use cases, at the cost of more export traffic.</li>



<li><strong>Use hardware-accelerated NetFlow</strong> where available (e.g., on ASR or Catalyst platforms with dedicated flow ASICs) rather than software (CPU-based) flow export on high-throughput links.</li>



<li><strong>Limit collected fields</strong> to what you actually analyze — every additional <code>collect</code> field increases per-flow cache memory usage across potentially tens of thousands of concurrent flows.</li>
</ul>



<h2 class="wp-block-heading">Common Configuration Mistakes</h2>



<ul class="wp-block-list">
<li>Applying the flow monitor only in the <code>input</code> direction, missing outbound traffic entirely (most designs need both directions applied, one per interface, to see full bidirectional flow data on a routed interface).</li>



<li>Forgetting that Flexible NetFlow record/monitor/exporter objects must all be created <strong>before</strong> they can reference each other — the CLI will reject a monitor referencing a record that doesn&#8217;t exist yet.</li>



<li>Not accounting for asymmetric routing — if inbound and outbound traffic take different paths through different routers, no single device sees the complete flow, skewing analysis.</li>



<li>Overloading a low-end router&#8217;s CPU by running full (unsampled) NetFlow on a very high-bandwidth interface.</li>



<li>Forgetting to permit UDP 2055 (or whatever export port is chosen) through any firewall sitting between the router and the collector.</li>
</ul>



<h2 class="wp-block-heading">Troubleshooting Checklist</h2>



<ul class="wp-block-list">
<li>No flows appearing on collector: verify routing to the collector (<code>ping 10.10.10.50</code> from the router), confirm the exporter source interface has a valid route, and check <code>show flow exporter … statistics</code> for &#8220;sent&#8221; vs. &#8220;added&#8221; mismatches.</li>



<li>Flows show but fields are all zero: check the flow record&#8217;s <code>match</code>/<code>collect</code> statements — a typo or unsupported field combination on certain platforms silently produces incomplete templates.</li>



<li>High CPU after enabling NetFlow: check <code>show processes cpu sorted</code> for the NetFlow-related process and consider enabling a sampler.</li>



<li>Collector shows old/stale templates only: template refresh intervals (<code>template data timeout</code>) may be too long relative to how often the collector expects fresh templates — lower the timeout.</li>
</ul>



<h2 class="wp-block-heading">FAQs</h2>



<p class="wp-block-paragraph"><strong>Does NetFlow capture packet payloads?</strong> No — NetFlow only records metadata about flows (addresses, ports, byte/packet counts, timing). It never captures the actual packet contents, which is one reason it&#8217;s lighter-weight and generally has fewer privacy implications than full packet capture.</p>



<p class="wp-block-paragraph"><strong>What&#8217;s the difference between NetFlow and sFlow?</strong> sFlow (used mostly on switches from vendors like Arista and older Cisco Nexus platforms) samples packets at the interface level and is protocol-agnostic; NetFlow builds full flow records in a cache and exports summarized data, giving more precise per-flow statistics at the cost of more router resources.</p>



<p class="wp-block-paragraph"><strong>Can NetFlow run on a switch instead of a router?</strong> Yes — many Catalyst switches (9300, 9400, 9500 series) support Flexible NetFlow in hardware; the same record/exporter/monitor model applies, though field support varies by platform ASIC.</p>



<p class="wp-block-paragraph"><strong>How much bandwidth does NetFlow export traffic itself use?</strong> Typically well under 1% of monitored traffic, since only summarized records are sent, not full packets — though this scales with the number of unique flows, not the byte volume, so a network with many short-lived flows can generate more export overhead than one with a few large flows.</p>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">NetFlow configuration on modern Cisco IOS-XE routers boils down to four objects: a flow record defining what to match and collect, an exporter defining where to send it, a monitor tying the two together with cache timers, and interface-level application in both traffic directions. Once running, <code>show flow monitor … statistics</code> and <code>show flow exporter … statistics</code> are the two commands that confirm the pipeline is healthy end to end. From there, NetFlow becomes the primary tool for answering &#8220;who is using the bandwidth and why&#8221; without resorting to full packet captures.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li>Cisco: Flexible NetFlow Configuration Guide — https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/fnetflow/configuration/xe-16/fnf-xe-16-book.html</li>



<li>Cisco: NetFlow Overview — https://www.cisco.com/c/en/us/products/ios-nx-os-software/ios-netflow/index.html</li>



<li>Cisco: IPFIX and NetFlow Version 9 — https://www.cisco.com/en/US/technologies/tk648/tk362/technologies_white_paper09186a00800a3db9.html</li>
</ul>
<p>The post <a href="https://awjunaid.com/cisco/how-to-configure-netflow-on-cisco-routers-for-network-traffic-monitoring-and-analysis/">How to Configure NetFlow on Cisco Routers for Network Traffic Monitoring and Analysis</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://awjunaid.com/cisco/how-to-configure-netflow-on-cisco-routers-for-network-traffic-monitoring-and-analysis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5504</post-id>	</item>
		<item>
		<title>How to Implement Port Mirroring (SPAN) on Cisco Switches for Traffic Analysis</title>
		<link>https://awjunaid.com/cisco/how-to-implement-port-mirroring-span-on-cisco-switches-for-traffic-analysis/</link>
					<comments>https://awjunaid.com/cisco/how-to-implement-port-mirroring-span-on-cisco-switches-for-traffic-analysis/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Abdul Wahab Junaid]]></dc:creator>
		<pubDate>Tue, 12 Sep 2023 11:58:09 +0000</pubDate>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[cisco]]></category>
		<guid isPermaLink="false">https://awjunaid.com/?p=5501</guid>

					<description><![CDATA[<p>Whenever a network problem needs a real packet capture — not summarized flow statistics, not interface counters, but&#8230;</p>
<p>The post <a href="https://awjunaid.com/cisco/how-to-implement-port-mirroring-span-on-cisco-switches-for-traffic-analysis/">How to Implement Port Mirroring (SPAN) on Cisco Switches for Traffic Analysis</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Whenever a network problem needs a real packet capture — not summarized flow statistics, not interface counters, but the actual bytes on the wire — SPAN (Switched Port Analyzer) is the tool that gets you there. It&#8217;s the feature that lets you plug a laptop with Wireshark into a switch and see traffic that isn&#8217;t even addressed to that laptop. This guide covers SPAN, RSPAN, and ERSPAN on Cisco Catalyst switches: the theory, the exact CLI, verification steps, and the mistakes that trip people up in production.</p>



<h2 class="wp-block-heading">Why You Can&#8217;t Just Plug In and Capture</h2>



<p class="wp-block-paragraph">Ethernet switches forward frames based on MAC address tables — a switch sends a unicast frame only out the port where the destination MAC lives, not to every port. That&#8217;s the entire point of switching versus using a hub. It means a packet capture tool plugged into a random switch port sees only its own traffic and broadcast/multicast frames — nothing else. SPAN exists specifically to override that behavior for one or more designated ports, copying their traffic to a separate monitoring port without disrupting normal switching.</p>



<h2 class="wp-block-heading">SPAN Terminology</h2>



<ul class="wp-block-list">
<li><strong>Source port/VLAN</strong> — the traffic you want to capture (a physical port, port-channel, or entire VLAN).</li>



<li><strong>Destination port</strong> — the port where a capture device (packet analyzer, IDS sensor) is connected. This port stops normal switching behavior and becomes dedicated to receiving mirrored traffic.</li>



<li><strong>Local SPAN</strong> — source and destination are on the same physical switch.</li>



<li><strong>RSPAN (Remote SPAN)</strong> — source and destination are on different switches, connected via a special RSPAN VLAN that carries mirrored traffic across a trunk.</li>



<li><strong>ERSPAN (Encapsulated Remote SPAN)</strong> — Cisco proprietary, encapsulates mirrored traffic in GRE so it can be routed across Layer 3 boundaries to a remote destination, even off-site.</li>
</ul>



<h2 class="wp-block-heading">Fundamentals: Ingress, Egress, and Both</h2>



<p class="wp-block-paragraph">Every SPAN session lets you choose direction per source:</p>



<ul class="wp-block-list">
<li><code>rx</code> (ingress) — traffic entering the source port.</li>



<li><code>tx</code> (egress) — traffic leaving the source port.</li>



<li><code>both</code> — the default if unspecified, captures both directions.</li>
</ul>



<p class="wp-block-paragraph">This matters a lot for interpreting captures — mirroring only <code>rx</code> on an uplink port shows you what&#8217;s coming from downstream devices, while <code>tx</code> shows what the switch is sending out to them. For full visibility into a conversation, <code>both</code> is typically what you want, understanding you&#8217;ll see some frames duplicated if source and destination of a conversation are both being monitored on the same session.</p>



<h2 class="wp-block-heading">Lab Topology</h2>



<ul class="wp-block-list">
<li>Cisco Catalyst 9300 switch, hostname SW1</li>



<li>Source: Gi1/0/5 (a server uplink you want to monitor)</li>



<li>Destination: Gi1/0/24 (packet analyzer / IDS sensor)</li>



<li>For RSPAN: a second switch SW2 with the sensor attached, connected to SW1 via a trunk carrying VLAN 999 (dedicated RSPAN VLAN)</li>
</ul>



<h2 class="wp-block-heading">Part 1: Local SPAN Configuration</h2>



<h3 class="wp-block-heading">Step 1 — Create the SPAN Session</h3>



<pre class="wp-block-code"><code>SW1(config)# monitor session 1 source interface GigabitEthernet1/0/5 both
SW1(config)# monitor session 1 destination interface GigabitEthernet1/0/24
</code></pre>



<p class="wp-block-paragraph">To mirror an entire VLAN instead of a single port:</p>



<pre class="wp-block-code"><code>SW1(config)# monitor session 1 source vlan 10 both
</code></pre>



<p class="wp-block-paragraph">To mirror multiple sources into the same session:</p>



<pre class="wp-block-code"><code>SW1(config)# monitor session 1 source interface GigabitEthernet1/0/5 - 6 both
</code></pre>



<h3 class="wp-block-heading">Step 2 — (Optional) Preserve Encapsulation or Allow Ingress Traffic on the Destination</h3>



<p class="wp-block-paragraph">By default, the destination port drops any traffic it receives from the connected device (it&#8217;s receive-only for normal switching purposes). If your analyzer also needs to send traffic out that port (uncommon, but needed for some inline tools), allow ingress:</p>



<pre class="wp-block-code"><code>SW1(config)# monitor session 1 destination interface GigabitEthernet1/0/24 ingress vlan 10
</code></pre>



<h3 class="wp-block-heading">Step 3 — Verify</h3>



<pre class="wp-block-code"><code>SW1# show monitor session 1
</code></pre>



<p class="wp-block-paragraph">Expected output:</p>



<pre class="wp-block-code"><code>Session 1
---------
Type                   : Local Session
Source Ports           :
    Both               : Gi1/0/5
Destination Ports      : Gi1/0/24
    Encapsulation       : Native
    Ingress             : Disabled
</code></pre>



<p class="wp-block-paragraph">At this point, anything plugged into Gi1/0/24 running Wireshark (or tcpdump on a Linux box) sees a full copy of traffic entering and leaving Gi1/0/5.</p>



<h2 class="wp-block-heading">Part 2: RSPAN Configuration (Cross-Switch Capture)</h2>



<h3 class="wp-block-heading">Step 1 — Create the RSPAN VLAN on Both Switches</h3>



<pre class="wp-block-code"><code>SW1(config)# vlan 999
SW1(config-vlan)# name RSPAN-VLAN
SW1(config-vlan)# remote-span
SW1(config-vlan)# exit
</code></pre>



<pre class="wp-block-code"><code>SW2(config)# vlan 999
SW2(config-vlan)# name RSPAN-VLAN
SW2(config-vlan)# remote-span
SW2(config-vlan)# exit
</code></pre>



<p class="wp-block-paragraph">The <code>remote-span</code> keyword is what makes VLAN 999 behave specially — switches will flood traffic tagged with this VLAN without normal MAC learning, since mirrored traffic isn&#8217;t meant to be &#8220;learned&#8221; as if it were a real host.</p>



<h3 class="wp-block-heading">Step 2 — Ensure the Trunk Between Switches Carries VLAN 999</h3>



<pre class="wp-block-code"><code>SW1(config)# interface GigabitEthernet1/0/48
SW1(config-if)# switchport trunk allowed vlan add 999
</code></pre>



<p class="wp-block-paragraph">Repeat the equivalent on SW2&#8217;s uplink toward SW1.</p>



<h3 class="wp-block-heading">Step 3 — Configure the Source Session on SW1 (where the monitored traffic lives)</h3>



<pre class="wp-block-code"><code>SW1(config)# monitor session 2 source interface GigabitEthernet1/0/5 both
SW1(config)# monitor session 2 destination remote vlan 999
</code></pre>



<h3 class="wp-block-heading">Step 4 — Configure the Destination Session on SW2 (where the analyzer is connected)</h3>



<pre class="wp-block-code"><code>SW2(config)# monitor session 2 source remote vlan 999
SW2(config)# monitor session 2 destination interface GigabitEthernet1/0/24
</code></pre>



<h3 class="wp-block-heading">Step 5 — Verify on Both Switches</h3>



<pre class="wp-block-code"><code>SW1# show monitor session 2
SW2# show monitor session 2
</code></pre>



<p class="wp-block-paragraph">On SW1, expect <code>Type: Remote Source Session</code>. On SW2, expect <code>Type: Remote Destination Session</code>.</p>



<h2 class="wp-block-heading">Part 3: ERSPAN Configuration (Layer 3, GRE-Encapsulated)</h2>



<p class="wp-block-paragraph">ERSPAN is used when the analyzer is on a completely different part of the network reachable only via routing (common with centralized IDS/NDR platforms like Cisco Stealthwatch or a SPAN aggregation appliance). Supported on higher-end platforms (Catalyst 9000 with the right license/hardware, Nexus, ASR).</p>



<h3 class="wp-block-heading">Source Switch Configuration</h3>



<pre class="wp-block-code"><code>SW1(config)# monitor session 3 type erspan-source
SW1(config-mon-erspan-src)# source interface GigabitEthernet1/0/5 both
SW1(config-mon-erspan-src)# destination
SW1(config-mon-erspan-src-dst)# erspan-id 100
SW1(config-mon-erspan-src-dst)# ip address 192.168.50.10
SW1(config-mon-erspan-src-dst)# origin ip address 192.168.10.1
SW1(config-mon-erspan-src-dst)# end
</code></pre>



<p class="wp-block-paragraph"><code>192.168.50.10</code> is the remote analyzer/collector&#8217;s IP; <code>192.168.10.1</code> is the source switch&#8217;s own routed interface used as the GRE tunnel&#8217;s origin.</p>



<h3 class="wp-block-heading">Destination Side (Analyzer Reachable via Routed Network)</h3>



<p class="wp-block-paragraph">If the destination is another Cisco switch re-presenting ERSPAN traffic to a local port:</p>



<pre class="wp-block-code"><code>SW2(config)# monitor session 3 type erspan-destination
SW2(config-mon-erspan-dst)# destination interface GigabitEthernet1/0/24
SW2(config-mon-erspan-dst)# source
SW2(config-mon-erspan-dst-src)# erspan-id 100
SW2(config-mon-erspan-dst-src)# ip address 192.168.50.10
SW2(config-mon-erspan-dst-src)# end
</code></pre>



<p class="wp-block-paragraph">More commonly, the destination is a purpose-built collector appliance or virtual machine that natively decapsulates ERSPAN/GRE — in that case no destination-side switch config is needed at all, just IP reachability to <code>192.168.50.10</code>.</p>



<h2 class="wp-block-heading">Real-World Enterprise Scenario: Feeding an IDS Sensor</h2>



<p class="wp-block-paragraph">A common production pattern is mirroring an entire VLAN or a firewall&#8217;s inside interface to a Cisco Secure IDS / Snort / Suricata sensor for passive threat detection:</p>



<pre class="wp-block-code"><code>SW1(config)# monitor session 4 source vlan 10 , 20 rx
SW1(config)# monitor session 4 destination interface GigabitEthernet1/0/24
</code></pre>



<p class="wp-block-paragraph">Using <code>rx</code> only (rather than <code>both</code>) on VLAN sources here specifically avoids doubling the traffic volume the sensor must process, since with VLAN-based sources every ingress frame into that VLAN is already captured regardless of which port it entered on.</p>



<h2 class="wp-block-heading">Performance and Capacity Considerations</h2>



<ul class="wp-block-list">
<li>SPAN destination ports typically shouldn&#8217;t run at a lower link speed than the aggregate of the sources feeding them, or frames get dropped under load. Mirroring two full-duplex gigabit sources into one gigabit destination port can oversubscribe it during high traffic bursts — plan destination bandwidth accordingly, or use a 10G destination port for multiple 1G sources.</li>



<li>Catalyst platforms have a limited number of concurrent monitor sessions (commonly 2-8 local/RSPAN sessions per switch, platform-dependent) — check the specific model&#8217;s datasheet before assuming unlimited sessions are available.</li>



<li>SPAN and RSPAN sessions add negligible CPU load on modern switches since mirroring happens in hardware ASICs, but ERSPAN (GRE encapsulation) can be more resource-intensive depending on platform.</li>
</ul>



<h2 class="wp-block-heading">Common Configuration Mistakes</h2>



<ul class="wp-block-list">
<li>Forgetting that a SPAN destination port loses its normal switching function entirely — plugging a regular device into a destination port results in that device having no network connectivity.</li>



<li>Not allowing the RSPAN VLAN on every trunk link between source and destination switches, breaking the mirror silently.</li>



<li>Using <code>both</code> direction on VLAN-wide sources, which doubles traffic unnecessarily since ingress into a VLAN already implies egress somewhere else in that VLAN.</li>



<li>Exceeding the platform&#8217;s maximum simultaneous SPAN session count and having later sessions silently fail or overwrite earlier ones.</li>



<li>Mirroring a trunk port without realizing 802.1Q tags will appear in the capture, which can confuse an analyzer expecting untagged frames — plan for this in Wireshark/tcpdump filters.</li>
</ul>



<h2 class="wp-block-heading">Troubleshooting Checklist</h2>



<ul class="wp-block-list">
<li>No traffic seen at the analyzer: confirm <code>show monitor session &lt;id></code> shows the session as active, check that the destination interface isn&#8217;t administratively down, and confirm no ACL or port-security is blocking traffic on that port.</li>



<li>RSPAN not working across switches: verify VLAN 999 (or your chosen RSPAN VLAN) is allowed on every trunk in the path with <code>show interfaces trunk</code>, and confirm <code>remote-span</code> is configured on the VLAN on <strong>every</strong> switch in the path, not just source and destination.</li>



<li>Traffic seen but incomplete: check whether the session direction (<code>rx</code>/<code>tx</code>/<code>both</code>) matches what you actually need, and confirm you&#8217;re not hitting the platform&#8217;s maximum source port/session limits.</li>



<li>ERSPAN not reaching destination: verify basic IP reachability between origin and destination IPs (<code>ping</code>), and confirm no upstream firewall is blocking GRE (IP protocol 47).</li>
</ul>



<h2 class="wp-block-heading">FAQs</h2>



<p class="wp-block-paragraph"><strong>Does SPAN affect switch performance for normal traffic?</strong> On modern Catalyst hardware, no — mirroring is done in the switching ASIC, so normal forwarding on source ports is unaffected. The exception is oversubscribing the destination port itself, which can cause mirrored frames to be dropped, but this never impacts the original live traffic.</p>



<p class="wp-block-paragraph"><strong>Can I mirror traffic to a port that&#8217;s also a normal access or trunk port?</strong> No — once configured as a SPAN destination, a port is dedicated to that role and stops participating in normal Layer 2 forwarding, spanning-tree, and (by default) doesn&#8217;t accept inbound traffic either.</p>



<p class="wp-block-paragraph"><strong>What&#8217;s the difference between SPAN and a TAP?</strong> SPAN is a switch feature that copies traffic in software/ASIC logic and can drop frames under oversubscription; a TAP is a physical inline device that copies every bit at the physical layer with zero chance of drops, but requires physical insertion into the cable path and doesn&#8217;t scale as easily to monitoring many ports at once.</p>



<p class="wp-block-paragraph"><strong>Can I run SPAN and NetFlow at the same time on the same interface?</strong> Yes — they operate independently and are commonly run together, with NetFlow providing lightweight ongoing visibility and SPAN reserved for targeted, deeper investigation when needed.</p>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">SPAN, RSPAN, and ERSPAN all solve the same core problem — getting a copy of switched traffic to an analysis tool that wouldn&#8217;t otherwise see it — at increasing levels of geographic reach. Local SPAN handles same-switch capture, RSPAN extends that across switches within a Layer 2 domain using a dedicated VLAN, and ERSPAN goes further still by encapsulating traffic in GRE for delivery across a routed network. In every case, the pattern is the same: define your source (port or VLAN, with direction), define your destination, and verify with <code>show monitor session</code>. Plan destination port bandwidth and platform session limits ahead of time, and you&#8217;ll have reliable, production-safe visibility whenever deep packet analysis is needed.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li>Cisco: Catalyst 9300 Series Switches Configuration Guide — SPAN and RSPAN — https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst9300/software/release/17-x/configuration_guide/span/b_spanrspanerspan_17_1_2013_e_9300_cg.html</li>



<li>Cisco: Configuring ERSPAN — https://www.cisco.com/c/en/us/td/docs/switches/datacenter/nexus9000/sw/7-x/system_management/configuration/guide/b_Cisco_Nexus_9000_Series_NX-OS_System_Management_Configuration_Guide_7x/b_Cisco_Nexus_9000_Series_NX-OS_System_Management_Configuration_Guide_7x_chapter_0100.html</li>



<li>Cisco: SPAN, RSPAN, and ERSPAN Overview and Restrictions — https://www.cisco.com/c/en/us/support/docs/switches/catalyst-6500-series-switches/10570-41.html</li>
</ul>
<p>The post <a href="https://awjunaid.com/cisco/how-to-implement-port-mirroring-span-on-cisco-switches-for-traffic-analysis/">How to Implement Port Mirroring (SPAN) on Cisco Switches for Traffic Analysis</a> appeared first on <a href="https://awjunaid.com">Abdul Wahab Junaid</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://awjunaid.com/cisco/how-to-implement-port-mirroring-span-on-cisco-switches-for-traffic-analysis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5501</post-id>	</item>
	</channel>
</rss>
