VMware NSX-T Knowledge Base

Phase 1 — Top 10 Common Issues ⚠ 8 Break ✓ 2 Fix
10
Total Issues
8
Break Scenarios
2
Fix Procedures
Phase 1
Current Phase
1
Transport Node Preparation Failure
Host fails NSX preparation — VIB installation failure, kernel module issues, agent connectivity loss
Impact: Host cannot participate in NSX overlay networking. VMs on this host have no DFW protection. No GENEVE encapsulation means overlay segments are unreachable. The host is effectively outside the NSX fabric.
Symptoms
  • Transport Node status shows "Failed" or "In Progress" indefinitely
  • NSX Manager UI: Host state stuck at "NSX Install Pending"
  • Error: "VIB installation failed on host" in NSX Manager alarms
  • /var/log/esxupdate.log shows VIB dependency conflicts
  • Host agent nsx-cfgagent not running or crashing
Root Causes
  • Incompatible ESXi version for the NSX-T release (check interop matrix)
  • Pre-existing third-party VIBs conflicting with NSX kernel modules
  • Insufficient disk space on ESXi host for VIB installation
  • Network connectivity issues between host and NSX Manager cluster
  • Host firewall blocking TCP 1234/1235 (NSX messaging ports)
1

Check transport node state from NSX Manager

# NSX Manager CLI:
get transport-nodes status

# NSX API — Check specific transport node:
GET https://<nsx-manager>/api/v1/transport-nodes/<tn-id>/state

# Look for "state": "failed" or "in_progress"
2

Verify VIB installation status on ESXi host

# On the ESXi host via SSH:
esxcli software vib list | grep -i nsx

# Expected VIBs:
# nsx-esx-datapath
# nsx-host
# nsx-vdpi
# nsx-exsi-transportnode-* (varies by version)

# Check for failed VIB install:
cat /var/log/esxupdate.log | grep -i "error\|fail"
3

Verify NSX agent health on the host

# Check nsx-cfgagent status:
/etc/init.d/nsx-cfgagent status

# Check nsx-proxy (MPA) agent:
/etc/init.d/nsx-proxy status

# View agent logs:
tail -100 /var/log/nsx-cfgagent.log
tail -100 /var/log/nsx-proxy.log
1

Verify ESXi host compatibility and disk space

# Check ESXi version:
esxcli system version get

# Check available disk space:
vdf -h

# Ensure /locker has at least 200MB free
# Ensure /tmp has at least 100MB free
2

Remove conflicting VIBs and retry preparation

# List all third-party VIBs:
esxcli software vib list | grep -v VMware | grep -v VMW

# Remove conflicting VIB (if identified):
esxcli software vib remove -n <conflicting-vib-name>

# Retry transport node preparation from NSX Manager:
# NSX API:
POST https://<nsx-manager>/api/v1/transport-nodes/<tn-id>?action=retry_prepare
3

Restart NSX agents and verify connectivity

# Restart NSX messaging proxy agent:
/etc/init.d/nsx-proxy restart

# Restart NSX config agent:
/etc/init.d/nsx-cfgagent restart

# Verify connectivity to NSX Manager (port 1235):
nc -z <nsx-manager-ip> 1235

# Check ESXi firewall rules:
esxcli network firewall ruleset list | grep nsx
4

Force re-realize the transport node configuration

# From NSX Manager CLI:
# Re-deploy host preparation
POST https://<nsx-manager>/api/v1/transport-nodes/<tn-id>?action=restore_cluster_config

# Monitor the state transition:
GET https://<nsx-manager>/api/v1/transport-nodes/<tn-id>/state
# Wait for "state": "success"
# Confirm transport node is UP:
get transport-nodes status
# Should show "Success" for the host

# Verify TEP interfaces are created:
esxcli network ip interface list | grep nsx
# Should show vmk10 or vmk50 (NSX TEP vmkernel)

# Verify overlay connectivity:
vmkping ++netstack=vxlan -d -s 1572 <remote-tep-ip>

# Check from NSX Manager UI:
# System → Fabric → Nodes → Host Transport Nodes → Status = "Up"
2
T0/T1 Gateway Connectivity Loss
Tier-0 or Tier-1 gateway loses northbound/southbound connectivity — routing, uplinks, and SR/DR issues
Impact: Complete loss of north-south routing. All VMs behind affected gateways lose external connectivity. If T0 is affected, the entire NSX fabric is isolated from the physical network. Services dependent on external access (DNS, NTP, backup) fail.
Symptoms
  • VMs cannot reach external (physical) network destinations
  • NSX Manager shows T0/T1 gateway status as "Degraded" or "Down"
  • BGP peers show neighbor state "Idle" on physical router
  • Edge node CLI: get route-table shows missing routes
  • Ping from Edge service router to upstream gateway fails
Root Causes
  • Edge uplink interface down — physical NIC, VLAN, or port-group misconfigured
  • BGP session dropped due to hold-timer expiry or misconfigured ASN
  • SR (Service Router) not allocated on any Edge node
  • T0-to-T1 link failure — transit segment connectivity broken
  • Edge node crashed or datapath process restarted
1

Check gateway realization status from NSX Manager

# NSX API — Get T0 gateway status:
GET https://<nsx-manager>/api/v1/logical-routers/<t0-id>/status

# NSX Manager CLI:
get logical-routers
get logical-router <lr-id> interfaces

# Check edge allocation:
get logical-router <lr-id> service-router
2

Verify Edge uplink and BGP status

# On Edge node CLI:
get interfaces
# Check uplink interfaces — should show "admin up" and "link up"

get bgp neighbor summary
# Check if neighbors are in "Established" state

get route-table
# Verify default route and expected prefixes exist
3

Test connectivity from Service Router context

# Enter the T0 Service Router VRF on the Edge:
vrf <t0-sr-id>

# Ping the upstream physical gateway:
ping <upstream-gateway-ip>

# Check ARP table:
get arp

# Exit VRF:
exit
1

Verify and fix Edge uplink connectivity

# Check Edge VM NIC status from vSphere:
# Ensure the Edge uplink port-group VLAN matches the physical switch config

# On Edge CLI — verify interface state:
get interfaces
# If interface shows "link down", check:
# 1. vSphere port-group connectivity
# 2. Physical switch port status
# 3. VLAN tagging consistency

# Reset the interface if needed:
set interface <interface-name> state down
set interface <interface-name> state up
2

Re-establish BGP peering

# Verify BGP configuration on Edge:
get bgp neighbor summary
get bgp config

# If ASN is wrong — fix via NSX Manager UI:
# Networking → Tier-0 Gateways → Edit → BGP → Neighbors

# Clear BGP session to force re-establish:
clear bgp neighbor <neighbor-ip>

# Verify convergence:
get bgp neighbor <neighbor-ip> detail
3

Force SR reallocation if edge is healthy but SR missing

# Check if SR is allocated:
get logical-routers
# Look for the T0 SR entry — if missing:

# From NSX API — trigger reallocation:
POST https://<nsx-manager>/api/v1/logical-routers/<t0-id>?action=reallocate

# Or force Edge cluster failover:
POST https://<nsx-manager>/api/v1/edge-clusters/<cluster-id>?action=replace_transport_node
# Verify BGP is established:
get bgp neighbor summary
# All neighbors should show "Established"

# Verify routes are learned:
get route-table
# Should show default route and external prefixes

# Test end-to-end from a VM:
# VM → T1 DR → T0 DR → T0 SR (Edge) → Physical Router
ping <external-ip>

# NSX Manager UI:
# Networking → Tier-0 Gateways → Status should show "Success"
3
Edge Node Cluster Failover Issues
Edge cluster fails to failover — active/standby misconfiguration, ECMP imbalance, preemptive mode issues
Impact: Service Routers may not failover during Edge node failure, causing prolonged outage of north-south traffic. Stateful services (NAT, firewall, LB) on the failed Edge are disrupted. ECMP-based T0 may route traffic to a non-functional member.
Symptoms
  • North-south traffic drops during Edge node maintenance or failure
  • Edge cluster shows "Degraded" but does not failover
  • BFD sessions between Edge nodes report "Down"
  • Active/Standby status unclear or both nodes claim Standby
  • Stateful sessions (NAT, LB) reset after failover
Root Causes
  • Inter-Edge BFD communication failure (overlay or VLAN issue)
  • Preemptive failover mode causing unnecessary flapping
  • Edge cluster member count below quorum for HA
  • Edge node datapath failure — dp-fp process crash
  • Anti-affinity rules not set — both Edges on same ESXi host
1

Check Edge cluster status and member health

# NSX Manager CLI:
get edge-cluster status

# NSX API:
GET https://<nsx-manager>/api/v1/edge-clusters/<cluster-id>/status

# On each Edge node:
get high-availability status
2

Verify inter-Edge BFD sessions

# On Edge node:
get bfd-sessions

# Check for "Up" status between cluster members
# If Down — check overlay/underlay connectivity between Edge nodes

# Verify internal transit VLAN between Edge members:
get interfaces | grep -i transit
3

Check service router allocation

# From NSX Manager:
get logical-routers

# Look for SR entries and their edge-node allocation:
# If SR shows "standby" on both nodes — split-brain condition

# API check:
GET https://<nsx-manager>/api/v1/logical-routers?router_type=SERVICE_ROUTER_TIER0
1

Fix inter-Edge connectivity for BFD

# Verify overlay TEP connectivity between Edge nodes:
# On Edge-1:
ping <Edge-2-TEP-IP> source <Edge-1-TEP-IP>

# If using VLAN-backed HA interface:
get interfaces
# Check the HA interface (typically fp-ethX) link state

# Ensure DRS anti-affinity is configured:
# vSphere → VMs → Edge-1, Edge-2 → Create Anti-Affinity Rule
2

Disable preemptive failover if causing flapping

# NSX Manager UI:
# Networking → Tier-0 Gateways → Edit → Edge Cluster
# Set "Failover Mode" to "Non-Preemptive"

# API equivalent:
PUT https://<nsx-manager>/policy/api/v1/infra/tier-0s/<t0-id>
{
  "failover_mode": "NON_PREEMPTIVE"
}
3

Force failover to recover from stuck state

# If Edge is in degraded state — force failover:
# NSX API — Force failover to specific member:
POST https://<nsx-manager>/api/v1/edge-clusters/<cluster-id>?action=replace_transport_node
{
  "transport_node_id": "<failed-edge-tn-id>",
  "new_transport_node_id": "<healthy-edge-tn-id>"
}

# Or from Edge CLI — restart HA:
restart service dataplane
# Verify cluster health:
get edge-cluster status
# All members should show "Up"

# Verify HA state:
get high-availability status
# Should show clear Active/Standby designation

# Verify BFD sessions:
get bfd-sessions
# All sessions should show "Up"

# Test failover manually (if maintenance window):
# Shut down Active Edge VM → verify Standby promotes within 10s
4
Distributed Firewall Rules Not Applied
DFW policy fails to push to hosts — realized state errors, stale rules, vNIC filter issues
Impact: VMs are unprotected by microsegmentation policy. Security posture is compromised — traffic that should be denied is permitted. Compliance violations if DFW is required for PCI-DSS or HIPAA.
Symptoms
  • DFW rules visible in NSX Manager but not enforced on VMs
  • Policy shows "Realized State: Error" or "In Progress"
  • VM-to-VM traffic allowed when it should be blocked
  • Host nsxcli shows stale or empty firewall rules
  • Alarm: "DFW rule push failed on transport node"
Root Causes
  • CCP (Central Control Plane) connectivity lost from host to controllers
  • DFW filter not attached to VM vNIC (transport node agent issue)
  • Policy conflict — overlapping rules with different actions
  • NSX Manager database inconsistency after failed upgrade
  • Host has too many DFW rules exceeding memory capacity
1

Check DFW realization status

# NSX API — Check policy realization:
GET https://<nsx-manager>/policy/api/v1/infra/realized-state/status

# Check specific security policy:
GET https://<nsx-manager>/policy/api/v1/infra/domains/default/security-policies/<policy-id>/realized-state

# Look for "publish_status": "REALIZED" vs "ERROR"
2

Verify DFW rules on the ESXi host

# SSH to the ESXi host, enter nsxcli:
nsxcli -c "get firewall rules"

# Check DFW filter on a specific VM vNIC:
nsxcli -c "get firewall <vm-vnic-uuid> rules"

# List all DFW filters:
summarize-dvfilter

# Check if filter is attached to the VM:
vsipioctl getfilters
3

Check controller connectivity from host

# On ESXi host via nsxcli:
nsxcli -c "get controllers"

# Should show controller IP with status "Connected"
# If "Disconnected" — DFW rules cannot be updated

# Check messaging channel:
nsxcli -c "get control-plane-stats"
1

Restore controller connectivity

# Restart nsx-proxy on the host (reconnects to controllers):
/etc/init.d/nsx-proxy restart

# Verify connection re-establishes:
nsxcli -c "get controllers"
# Wait up to 60 seconds for "Connected" status

# If still disconnected — check NSX Manager cluster health:
get cluster status
2

Force DFW rule re-push from NSX Manager

# Re-publish the security policy:
POST https://<nsx-manager>/policy/api/v1/infra/domains/default/security-policies/<policy-id>?action=revise

# Or force full re-sync for a transport node:
POST https://<nsx-manager>/api/v1/transport-nodes/<tn-id>/state?action=resync
3

Restart DFW on the host if filters are missing

# WARNING: This briefly interrupts DFW enforcement on ALL VMs on this host
# Schedule during maintenance window

# Restart the firewall daemon:
/etc/init.d/nsx-cfgagent restart

# Wait for filters to reattach (monitor):
nsxcli -c "get firewall rules" | wc -l
# Should return expected rule count within 60-120 seconds
# Confirm DFW realized state:
GET https://<nsx-manager>/policy/api/v1/infra/realized-state/status
# All policies should show "REALIZED"

# On host — verify rules are present:
nsxcli -c "get firewall rules" | head -20

# Test enforcement — try traffic that should be blocked:
# From VM-A (blocked by rule) → VM-B should timeout/reset
5
BFD Session Flapping
BFD sessions flap between Edge nodes or to physical routers — causes route withdrawal and traffic blackholing
Impact: BGP session teardown when BFD fails, causing route withdrawal. Traffic blackholed during flap windows. Frequent failovers between Active/Standby Edge nodes, disrupting stateful services.
Symptoms
  • Edge syslog shows repeated "BFD session down" / "BFD session up"
  • BGP neighbor flaps correlated with BFD state changes
  • Intermittent packet loss to external destinations
  • Edge HA failover log entries without actual node failure
  • get bfd-sessions shows session toggling between Up/Down
Root Causes
  • BFD timers too aggressive for the network (sub-second detection on lossy link)
  • Physical network micro-bursts causing BFD packet drops
  • CPU pressure on Edge node delaying BFD packet processing
  • MTU mismatch causing BFD packet fragmentation/drops
  • QoS policy deprioritizing BFD control traffic
1

Check current BFD timers and session state

# On Edge node CLI:
get bfd-sessions
get bfd-config

# Check the negotiated timer values:
# Tx Interval, Rx Interval, Detect Multiplier
# Default: 500ms interval, 3x multiplier = 1.5s detection
2

Increase BFD timers to reduce false positives

# NSX Manager UI:
# Networking → Tier-0 → BGP → BFD Configuration
# Set:
#   BFD Interval: 1000 (ms)
#   BFD Multiplier: 4
# This gives 4-second detection time — reduces false flaps

# API:
PUT https://<nsx-manager>/policy/api/v1/infra/tier-0s/<t0-id>
{
  "bfd_config": {
    "interval": 1000,
    "multiple": 4
  }
}
3

Ensure QoS marking for BFD traffic on physical network

# BFD uses UDP port 3784 (single-hop) or 4784 (multi-hop)
# On physical switches — mark BFD as high priority:
# Example Cisco IOS-XE:
# class-map match-any BFD-TRAFFIC
#   match access-group name BFD-ACL
# policy-map MARK-BFD
#   class BFD-TRAFFIC
#     set dscp ef

# Verify from Edge — check for packet drops:
get dataplane-stats interface <uplink-interface>
# Monitor BFD stability over 15 minutes:
get bfd-sessions
# All sessions should remain "Up" consistently

# Check BGP is stable (no flaps):
get bgp neighbor summary
# Uptime should be increasing, not resetting

# Verify no Edge CPU pressure:
get dataplane-stats cpu
6
NSX Manager Cluster Split-Brain
NSX Manager cluster loses quorum or enters split-brain — Corfu DB divergence, API conflicts
Impact: NSX management plane is non-functional. No configuration changes can be made. DFW rules stop updating (though existing rules remain enforced). New VM provisioning fails. CCP may lose connectivity to hosts if prolonged.
Symptoms
  • NSX Manager UI returns HTTP 503 or fails to load
  • get cluster status shows "DEGRADED" or "UNAVAILABLE"
  • Corfu logs show "QuorumUnreachableException"
  • Two manager nodes claim to be the leader simultaneously
  • API calls return conflicting data depending on which node responds
Root Causes
  • Network partition isolating one manager from the other two
  • NTP drift exceeding 5 seconds between manager nodes
  • Disk full on one manager node — Corfu DB cannot write
  • Manager node VM snapshot causing I/O freeze and timeout
  • vCenter HA event moving manager VMs to isolated hosts
1

Check cluster status from each manager node

# SSH to each NSX Manager node and run:
get cluster status

# Expected output for healthy cluster:
# Cluster Id: ...
# Cluster Status: STABLE
# Node Status: UP (for all 3 nodes)

# If DEGRADED — check which node is unhealthy:
get cluster status verbose
2

Check Corfu database health

# Check Corfu service status:
get service corfu

# Check Corfu cluster health:
get corfu-cluster status

# Look for replication lag or epoch divergence:
# /var/log/corfu/corfu.log
tail -100 /var/log/corfu/corfu.log | grep -i "error\|exception\|quorum"
3

Verify inter-node connectivity

# From each manager, ping the other two:
ping <manager-2-ip>
ping <manager-3-ip>

# Check if cluster port (7777 for Corfu) is reachable:
nc -z <manager-2-ip> 7777
nc -z <manager-3-ip> 7777

# Check NTP synchronization:
get ntp-status
1

Restore network connectivity between manager nodes

# Identify the isolated node:
get cluster status
# The node with "UNKNOWN" status is likely isolated

# Verify the network path:
traceroute <isolated-manager-ip>

# Fix: Ensure manager VMs are on the same L2 network or
# that routing between them is reliable.
# Check vSphere DRS did not separate VMs to different sites.
2

Fix NTP drift and restart services

# On each manager — fix NTP:
set ntp-server <ntp-server-ip>
get ntp-status

# If drift was the issue — restart cluster services:
restart service cluster-manager

# Wait 2-3 minutes for consensus to re-establish:
get cluster status
3

If split-brain persists — detach and re-join the divergent node

# CAUTION: Only perform if standard recovery fails
# Identify the minority node (the one that diverged):

# On the healthy majority (2 nodes):
detach node <divergent-node-uuid>

# Wait for cluster to stabilize with 2 nodes:
get cluster status
# Should show STABLE (2/3 nodes)

# Re-join the detached node:
join <divergent-node-ip> cluster-id <cluster-id> username admin
# Confirm cluster is STABLE:
get cluster status
# All 3 nodes should show "UP"
# Cluster Status: STABLE

# Verify API is functional:
GET https://<nsx-manager>/api/v1/cluster/status
# Should return 200 OK with all nodes listed

# Verify CCP connectivity to hosts:
get transport-nodes status
# All hosts should show "Success"
7
VTEP Communication Failure
Tunnel Endpoint (TEP) communication broken — VMs on different hosts cannot communicate via overlay
Impact: VMs on overlay segments cannot communicate across hosts. East-west traffic between hosts is completely broken. Only VMs co-located on the same ESXi host can communicate. Effectively partitions the NSX network fabric.
Symptoms
  • VMs on different hosts but same overlay segment cannot ping each other
  • VMs on the same host communicate fine (local switching)
  • TEP-to-TEP ping fails: vmkping ++netstack=vxlan times out
  • NSX Manager shows transport node tunnel status as "Down"
  • Physical network drops GENEVE packets (port 6081/UDP)
Root Causes
  • Physical network MTU too low — GENEVE adds 54-byte overhead (need 1600+ MTU)
  • TEP VLAN not configured on physical switch (uplink trunk missing VLAN)
  • Duplicate TEP IP addresses in the pool
  • N-VDS or VDS uplink failure — no physical path for TEP traffic
  • Physical firewall blocking UDP 6081 (GENEVE encapsulation port)
1

Verify TEP interface and IP on host

# On ESXi host:
esxcli network ip interface list | grep -A5 "vmk10\|vmk50"

# Check TEP IP address:
esxcli network ip interface ipv4 address list | grep vmk10

# Verify the TEP vmkernel is on the correct VLAN:
esxcli network vswitch dvs vmware list
2

Test TEP-to-TEP connectivity with proper MTU

# Ping remote TEP with GENEVE overhead accounted for:
vmkping ++netstack=vxlan -d -s 1572 <remote-tep-ip>
# -d = don't fragment
# -s 1572 = 1572 + 28 (IP+ICMP header) = 1600 = minimum MTU for GENEVE

# If this fails but standard ping works:
vmkping ++netstack=vxlan <remote-tep-ip>
# → MTU issue on physical network
3

Check tunnel status from NSX Manager

# NSX API — Get tunnel status:
GET https://<nsx-manager>/api/v1/transport-nodes/<tn-id>/tunnels

# On host via nsxcli:
nsxcli -c "get logical-switch <ls-uuid> vtep-table"
nsxcli -c "get logical-switch <ls-uuid> mac-table"
1

Fix physical network MTU (must be ≥1600)

# GENEVE overhead = 54 bytes
# Minimum physical MTU = 1500 (inner) + 54 (GENEVE) + ~50 (safety) = 1600+
# Recommended: 9000 (jumbo frames end-to-end)

# Verify on ESXi uplink:
esxcli network vswitch dvs vmware lacp config get
esxcli network nic get -n vmnic0 | grep MTU

# Set MTU on N-VDS/VDS from vCenter:
# Networking → DVS → Configure → Properties → MTU = 9000

# On physical switch (example Cisco):
# interface range GigabitEthernet1/0/1-48
#   mtu 9216
2

Verify TEP VLAN is trunked on physical switch

# Identify TEP VLAN from NSX Manager:
# System → Fabric → Profiles → Uplink Profiles → VLAN (Transport VLAN)

# On physical switch — ensure VLAN is trunked:
# Example Cisco:
# interface GigabitEthernet1/0/1
#   switchport trunk allowed vlan add <tep-vlan-id>

# Verify from ESXi:
esxcli network vswitch dvs vmware list
# Check the transport VLAN ID matches
3

Resolve duplicate TEP IP conflict

# Check TEP IP pool allocation:
GET https://<nsx-manager>/api/v1/pools/ip-pools/<pool-id>/allocations

# If duplicate found — release and reallocate:
# 1. Put host in maintenance mode
# 2. Delete transport node config
# 3. Remove the conflicting IP from pool
# 4. Re-add transport node

# Verify no ARP conflicts:
vmkping ++netstack=vxlan -I vmk10 <suspected-duplicate-ip>
# If responds from wrong MAC — duplicate confirmed
# Full TEP connectivity test:
vmkping ++netstack=vxlan -d -s 1572 <remote-tep-ip>
# Should succeed with 0% packet loss

# Verify tunnel is UP in NSX Manager:
GET https://<nsx-manager>/api/v1/transport-nodes/<tn-id>/tunnels
# tunnel_status should be "UP"

# Test VM-to-VM across hosts:
# From VM on host-A → ping VM on host-B (same overlay segment)
# Should now succeed
8
BGP Peering Failure on Edge
BGP neighbor relationship fails to establish or drops — ASN mismatch, authentication, or hold timer issues
Impact: No dynamic route exchange between NSX and physical network. Default route not learned — north-south traffic fails. If ECMP, reduced path diversity and potential oversubscription on remaining paths.
Symptoms
  • get bgp neighbor summary shows state "Idle" or "Active" (not Established)
  • Physical router logs: "BGP notification: OPEN message error"
  • Edge cannot learn any external routes (empty route table)
  • Hold timer expires repeatedly — session resets every 90 seconds
  • MD5 authentication mismatch errors in Edge syslog
Root Causes
  • Remote ASN configured incorrectly on NSX side (or vice versa)
  • BGP password (MD5) mismatch between Edge and physical router
  • Source IP not matching — Edge using wrong interface for peering
  • Physical router ACL blocking TCP port 179 (BGP)
  • eBGP multihop not configured when peers are not directly connected
1

Check BGP neighbor state on Edge

# On Edge node CLI:
get bgp neighbor summary

# Detailed neighbor info:
get bgp neighbor <neighbor-ip> detail

# Check BGP configuration:
get bgp config

# Verify local AS and remote AS match expectations
2

Verify TCP 179 reachability to BGP peer

# From Edge Service Router context:
vrf <t0-sr-id>

# Test BGP port connectivity:
# Note: nc may not be available — use ping first:
ping <bgp-peer-ip>

# Check if TCP 179 is being blocked:
get dataplane-stats interface <uplink>
# Look for dropped packets on the uplink interface
1

Fix ASN and neighbor configuration

# NSX Manager UI:
# Networking → Tier-0 Gateways → <T0> → BGP
# Verify:
#   Local AS Number matches what physical router expects as "remote-as"
#   Neighbor IP is the correct interface IP of the physical router
#   Remote AS matches the physical router's actual AS number

# API — Update BGP neighbor:
PATCH https://<nsx-manager>/policy/api/v1/infra/tier-0s/<t0-id>/locale-services/<ls-id>/bgp/neighbors/<neighbor-id>
{
  "remote_as_num": "<correct-remote-asn>",
  "neighbor_address": "<peer-ip>"
}
2

Fix MD5 authentication password

# Set password on NSX side to match physical router:
# NSX Manager UI:
# Networking → Tier-0 → BGP → Neighbors → Edit
# Password field — enter the exact same password as physical router

# On physical router (Cisco example):
# router bgp 65000
#   neighbor <edge-ip> password <same-password>

# After fixing, clear and re-establish:
# Edge CLI:
clear bgp neighbor <peer-ip>
3

Configure eBGP multi-hop if needed

# If BGP peers are not directly connected (L3 hop between them):
# NSX Manager → BGP Neighbor → Advanced Settings
# Set "Hop Limit" to appropriate value (e.g., 2 or 3)

# On physical router:
# router bgp 65000
#   neighbor <edge-ip> ebgp-multihop 3
#   neighbor <edge-ip> update-source Loopback0
# Verify BGP session is Established:
get bgp neighbor summary
# State should show "Established" with route counts

# Verify routes are being exchanged:
get bgp neighbor <peer-ip> received-routes
get bgp neighbor <peer-ip> advertised-routes

# Verify route table has expected entries:
get route-table
# Should show default route and/or specific prefixes learned via BGP
9
Controller Connectivity Lost
Host transport nodes lose connection to Central Control Plane (CCP) — stale forwarding tables, no updates
Impact: No new MAC/ARP entries learned on overlay segments. DFW rules stop updating (existing rules remain). New VMs cannot join overlay segments properly. Forwarding tables become stale — new workloads unreachable.
Symptoms
  • nsxcli -c "get controllers" shows "Disconnected"
  • New VMs provisioned but cannot communicate on overlay
  • Existing VMs work fine (stale but valid forwarding entries)
  • NSX Manager shows host as "Controller Disconnected"
  • MPA (Management Plane Agent) log shows connection timeouts
Root Causes
  • ESXi host firewall blocking port 1235 (controller messaging)
  • NSX Manager cluster unhealthy — CCP service not running
  • Network MTU issue on management network (fragmentation)
  • nsx-proxy (MPA) agent crashed or stuck on the host
  • Certificate mismatch — host certificate not trusted by manager
1

Verify and restart NSX proxy agent on host

# Check agent status:
/etc/init.d/nsx-proxy status

# If not running or in bad state:
/etc/init.d/nsx-proxy restart

# Wait 30 seconds, then verify:
nsxcli -c "get controllers"
# Should show "Connected"
2

Check firewall and network connectivity

# Verify ESXi firewall allows NSX traffic:
esxcli network firewall ruleset list | grep nsx

# Enable NSX firewall rules if disabled:
esxcli network firewall ruleset set --ruleset-id=nsx-manager --enabled=true

# Test port connectivity to all 3 NSX Manager nodes:
nc -z <nsx-mgr-1> 1235
nc -z <nsx-mgr-2> 1235
nc -z <nsx-mgr-3> 1235
3

Verify CCP health on NSX Manager side

# On NSX Manager CLI:
get service proton
get service local-controller

# If services are not running:
restart service proton
restart service local-controller

# Check manager cluster is healthy:
get cluster status
# On host — confirm controller connected:
nsxcli -c "get controllers"
# Status: Connected

# Verify control-plane stats are updating:
nsxcli -c "get control-plane-stats"

# Provision a new VM on overlay segment — verify it gets connectivity
# New MAC should appear in the segment MAC table:
nsxcli -c "get logical-switch <ls-uuid> mac-table"
10
Upgrade Coordinator Failure
NSX Upgrade Coordinator stuck, pre-checks failing, or upgrade bundle upload issues
🛈 Impact: NSX upgrade cannot proceed. Environment remains on older version with known vulnerabilities. Planned maintenance window may be missed. Security patches cannot be applied.
Symptoms
  • Upgrade Coordinator shows "Not Running" or "Failed to start"
  • Bundle upload fails with "insufficient disk space" or timeout
  • Pre-check phase fails with "Host not ready for upgrade"
  • Upgrade stuck at specific host group — won't proceed
  • Edge upgrade fails with "Datapath connectivity check failed"
Root Causes
  • NSX Manager disk space insufficient for upgrade bundle (/opt/vmware/nsx)
  • Pre-existing transport node failures blocking pre-checks
  • Network partition between Manager and host during upgrade
  • Upgrade Coordinator service crashed — requires restart
  • Bundle version incompatible with current installation
1

Check and restart Upgrade Coordinator service

# On NSX Manager:
get service upgrade-coordinator

# If not running:
restart service upgrade-coordinator

# Wait 60 seconds, then verify:
get service upgrade-coordinator
# Should show "running"

# Access UC UI:
# https://<nsx-manager>/upgrade/index.html
2

Check disk space and clean up if needed

# Check disk usage on NSX Manager:
df -h

# If /opt/vmware is full — clean old bundles:
ls -la /opt/vmware/nsx/upgrade-coordinator/bundles/
# Remove old/failed bundle files

# Alternatively, clean repository:
GET https://<nsx-manager>/api/v1/upgrade/bundles
# DELETE old bundles via API
3

Fix pre-check failures before retrying

# Run pre-checks manually:
POST https://<nsx-manager>/api/v1/upgrade?action=execute_pre_upgrade_checks

# Review pre-check results:
GET https://<nsx-manager>/api/v1/upgrade/pre-upgrade-checks

# Common fixes:
# 1. Resolve all transport node failures first
# 2. Ensure all manager nodes are healthy
# 3. Take NSX backup before proceeding
# 4. Verify compute manager (vCenter) connectivity
4

Resume a stuck upgrade

# If upgrade is stuck on a host group:
GET https://<nsx-manager>/api/v1/upgrade/status-summary

# Identify the failed unit:
GET https://<nsx-manager>/api/v1/upgrade/upgrade-unit-groups

# Skip the failed host (if non-critical) or retry:
POST https://<nsx-manager>/api/v1/upgrade?action=continue
# Or:
POST https://<nsx-manager>/api/v1/upgrade?action=retry
# Verify upgrade completed:
GET https://<nsx-manager>/api/v1/upgrade/status-summary
# Should show "SUCCESS" for all components

# Verify all nodes are on new version:
get version
get transport-nodes status

# Run post-upgrade checks:
POST https://<nsx-manager>/api/v1/upgrade?action=execute_post_upgrade_checks