Initial Setup of Catalyst SDWAN Controllers

It’s been a while since I did an on-premises installation of the Catalyst SDWAN controllers and as I recently had to go through the process, I thought I would document it and post it here for people that want to build their own lab.

The first thing that happens after booting the Manager is that you need to login with admin/admin and then set a new password:

vmanage login: Admin
Password:
Welcome to Viptela CLI
admin connected from 127.0.0.1 using console on vmanage
You must set an initial admin password different from default password.
Password:
Re-enter password:

After that we must select the persona (what services the Manager should run). For a non-cluster install it’s going to be both COMPUTE and DATA:

1) COMPUTE_AND_DATA
2) DATA
3) COMPUTE
Select persona for vManage [1, 2 or 3]:

Select 1.

You will be asked to confirm:

You chose persona COMPUTE_AND_DATA (1)
Are you sure? [y/n]

Type y.

You will then be asked what storage device to be used (you need a secondary disk):

vManage has been deployed with persona : {"persona": "COMPUTE_AND_DATA"}
Available storage devices:
sdb      100GB
1) sdb
Select storage device to use:

Here I’ll select 1.

Then we are asked to format the disk:

Would you like to format sdb? (y/n):

Type y.

Youll now see output similar to:

umount: /dev/sdb: not mounted.
mke2fs 1.47.0 (5-feb-2023)
Discarding device blocks: done
Creating filesystem with 26214400 4k blocks and 6553600 inodes
Filesystem UUID: 73087407-c9bd-46d8-a31f-3f67bd874d5a
Superblock backups stored on blocks:

        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Allocatin groupe tables: done
Writing inode tables: 38/800
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done

grep: /boot/uuid_data: No such file or directory
Extracting vManage extra-packages
vManage Extra-Package extracted to /tmp_install/extra-packages/20.18.3.1/

Eventually you’ll get the prompt again:

viptela 20.18.3 vmanage /dev/tty0

vmanage login:

Login via console or SSH (if it has an IP via DHCP) and check what interfaces are up:

vmanage# show interface | tab

                                          IF      IF      IF                                                              TCP                                   
                AF                        ADMIN   OPER    TRACKER  ENCAP  PORT                             SPEED          MSS                 RX       TX       
VPN  INTERFACE  TYPE  IP ADDRESS          STATUS  STATUS  STATUS   TYPE   TYPE     MTU  HWADDR             MBPS   DUPLEX  ADJUST  UPTIME      PACKETS  PACKETS  
----------------------------------------------------------------------------------------------------------------------------------------------------------------
0    eth0       ipv4  192.168.128.130/24  Up      Up      -        null   service  -    00:50:56:ad:70:f7  1000   full    -       0:00:03:13  598      585      
0    eth1       ipv4  -                   Down    Down    -        -      -        -    00:50:56:ad:3f:a9  1000   full    -       -           -        -        
0    eth2       ipv4  -                   Down    Down    -        -      -        -    00:50:56:ad:fb:7e  1000   full    -       -           -        -

Next I’ll apply basic settings:

conf t
 system
  host-name manager
  system-ip 192.168.128.30
  site-id 1
  organization-name "lostintransit.se"
  vbond 172.16.0.31
 vpn 0
  interface eth0
   ip address 172.16.0.30/24
   tunnel-interface
   allow-service all
   no shut
 vpn 512
  dns 192.168.128.53 primary
  interface eth1
  ip address 192.168.128.30/24
  no shut
  ip route 0.0.0.0/0 192.168.128.1
 commit

I’m setting allow-service to all initially to not have any issues with building the control connections.

We need a Smart Account to be able to create a virtual account where we will then create our Validator profile and also generate serial numbers for our virtual routers. Got to Cisco Software Central and click Access Cisco License Central:

Then click Create new Virtual Account:

Give the VA a name and then click Create Virtual Account and View Details:

I’m setting the access level to **Restricted** as this VA should not be listed when for example working with CCW.

Now we need to create a PNP profile. Go to Network Plug and Play and click Manage devices:

Select the right VA:

Now click Controller Profiles and then + Add Profile…. Select VBOND as the Controller Type:

Then provide the details like the name/IP to the Validator and the organization name:

I’ve entered a FQDN for my Validator but you can also use an IP. It doesn’t matter so much if you don’t intend to have Cisco’s PNP server redirect to your Validator. I’ve also put my root CA cert chain which doesn’t really do anything for this setup since I’m not going to use it with connectivity to the internet.

Note that the organization name must match between all the controllers and the edge devices.

Click through until you get to the Review and then click Submit:

Then we need to add devices. Go to Devices and click + Add Software Devices…. Select C8000V as the PID, a quantity, and the correct controller profile and then click Save:

You will see something similar to the image below:

Move forward in the wizard and finally click Submit.

The devices have been added:

Now we will be doing the initial install. You will see this screen (if using same version as me):

The first step is to select tenancy, select Single Tenant and then Save. Click Mark as complete to move on. This is true for all steps:

Now configure the organization name, I’m using lostintransit.se.

Next let’s configure control component settings. I’m adding a DNS server in VPN 512 and a static host mapping for the validator in VPN 0:

For the Certificate authorization setting I’m using Enterprise and I’m also inserting the root CA cert:

Also configure WAN edge cloud to use Enterprise CA:

Now configure the validator to use:

Next I’m generating a CSR for the web server certificate with the following settings:

Now I’m going to generate a web server certificate using certbot with the CSR we generated previously. I have saved the cert in my home folder in the directory cert:

sudo certbot certonly \
  --csr /home/ddib/cert/manager.csr \
  --dns-cloudflare \
  --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
  --dns-cloudflare-propagation-seconds 60 \
  -d manager.lostintransit.se
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for manager.lostintransit.se
Waiting 60 seconds for DNS changes to propagate

Successfully received certificate.
Certificate is saved at:            /home/ddib/cert/0000_cert.pem
Intermediate CA chain is saved at:  /home/ddib/cert/0000_chain.pem
Full certificate chain is saved at: /home/ddib/cert/0001_chain.pem
This certificate expires on 2026-09-10.

NEXT STEPS:
- Certificates created using --csr will not be renewed automatically by Certbot. You will need to renew the certificate before it expires, by running the same Certbot command again.

Then we need to combine the certificate for the manager with the intermediate:

cat 0000_cert.pem 0000_chain.pem > fullchain.pem

Import the certificate by going to Administration -> Settings -> Web Server Certificate and then clicking Import.

I can now access the manager using a valid certificate:

We also need to generate a controller certificate for the Manager. Go to Configuration -> Certificates -> Control Components. It looks like this currently:

Click the three dots and then select Generate CSR and then click Yes:

We can see and download the CSR:

Now I’m going to sign the CSR using Step CA:

sudo step ca sign \
  --ca-url https://stepca.lostintransit.se \
  --root /etc/step-ca/certs/root_ca.crt \
  --not-after 8760h \
  manager_control.txt manager_control.crt
✔ Provisioner: [email protected] (JWK) [kid: 2SLZVubh2qvHTfbyAi4dvLL0HrLm3znTdVK_1Ke94_E]
Please enter the password to decrypt the provisioner key: 
✔ CA: https://stepca.lostintransit.se
✔ Certificate: manager_control.crt

We can inspect the certificate:

openssl x509 -in ~/cert/manager_control.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            3d:19:9f:68:4d:9f:a3:f7:d9:bc:41:7a:e7:a0:22:47
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: O = lostintransit.se, CN = lostintransit.se Intermediate CA
        Validity
            Not Before: Jun 12 14:54:53 2026 GMT
            Not After : Jun 12 14:55:53 2027 GMT
        Subject: CN = vmanage-4d0b24d3-3e91-4380-9a4f-5e0ce94c8373-0.cisco.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:9e:8d:3d:e5:d8:ea:fa:8d:1f:e3:c4:ef:34:23:
                    1c:4f:50:d1:ce:7e:0a:ff:b7:80:2e:0e:10:d3:bf:
                    18:49:c6:f6:5a:80:d5:cb:f4:8f:ab:41:37:69:65:
                    c9:f8:0e:88:27:19:e9:17:df:cf:55:86:05:f4:5a:
                    4e:53:b9:9b:05:a8:c3:8e:2c:f6:1c:b2:fa:8d:60:
                    b2:0c:e4:f4:c6:f6:bc:c1:8c:1e:3e:ba:3b:dd:66:
                    fe:a4:b4:d0:0e:3b:6c:da:f5:b6:9b:67:43:79:cb:
                    68:c3:af:ed:69:46:72:c7:c0:f3:c4:95:93:59:77:
                    7d:34:8f:3b:df:03:ed:c7:f4:73:c0:57:0a:c9:7b:
                    5d:38:58:69:1c:11:1f:c2:47:47:d8:b6:4e:9c:13:
                    59:ab:b8:e0:87:9d:69:60:8b:62:d6:53:76:00:b4:
                    3f:1e:5a:f3:bf:8f:26:dc:58:4f:fa:72:72:92:b0:
                    fb:44:98:8a:e6:10:53:90:5b:73:75:dc:e1:1c:f4:
                    2e:ac:3d:41:73:9f:f5:d9:55:57:ee:a2:1e:c0:a6:
                    43:7c:20:48:8b:3d:98:14:40:e1:31:29:fb:fc:8d:
                    64:b0:b3:75:6b:6a:20:cb:3e:1e:9e:36:a2:3b:c4:
                    eb:b3:ee:a1:95:41:4b:99:49:ec:ae:9a:cc:5b:19:
                    04:95
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Subject Key Identifier: 
                B3:BC:5E:67:24:69:B5:48:DE:F3:24:B7:72:08:6C:BE:09:E9:97:8C
            X509v3 Authority Key Identifier: 
                92:5D:76:F6:28:CE:19:62:13:3C:3A:F8:15:85:2B:10:63:1B:CC:E4
            X509v3 Subject Alternative Name: 
                DNS:vmanage-4d0b24d3-3e91-4380-9a4f-5e0ce94c8373-0.cisco.com
            1.3.6.1.4.1.37476.9000.64.1: 
                [email protected].+2SLZVubh2qvHTfbyAi4dvLL0HrLm3znTdVK_1Ke94_E
    Signature Algorithm: ecdsa-with-SHA256
    Signature Value:
        30:45:02:20:5d:a0:fc:8b:b3:c4:38:4e:71:51:da:3c:98:e7:
        90:49:0e:a9:72:ff:7d:eb:75:6d:fe:7b:b8:78:97:4f:74:5f:
        02:21:00:ca:47:3c:97:8a:a6:80:cf:94:f8:c0:e4:8b:a0:35:
        d4:61:d4:ad:9b:ca:9a:85:3c:9e:eb:b1:21:db:e4:21:b9

Now we will install it in the Manager. Go to Configuration -> Certificates -> Control Components** and then click **Install Certificate:

I will select my file and then click Install:

This failed to install. I then realized that Manager didn’t have the full chain of Intermediate and Root. I need to concatenate them:

sudo cat /etc/step-ca/certs/intermediate_ca.crt /etc/step-ca/certs/root_ca.crt > /tmp/chain.pem

Then upload to Manager:

scp /tmp/chain.pem [email protected]:/home/admin/
The authenticity of host '192.168.128.30 (192.168.128.30)' can't be established.
ED25519 key fingerprint is SHA256:r/8fvJziY9UpsNsFbW/UIJQA39t43bIAIiPpuIu9wCQ.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.128.30' (ED25519) to the list of known hosts.
([email protected]) Password: 
chain.pem                                                                                                                                                                    100% 1389     2.3MB/s   00:00

Then install it:

manager# request root-cert-chain install /home/admin/chain.pem          
Uploading root-ca-cert-chain via VPN 0
Copying /home/admin/chain.pem to /usr/share/viptela/root-ca.crt.tmp via VPN 0
Moving /usr/share/viptela/root-ca.crt.tmp to /usr/share/viptela/root-ca.crt via VPN 0
Updating the root certificate chain..
inotify_modify_file: setting file /etc/viptela/rootcert_reinstall to id 1781276883
send_root_ca_cert_chain_notification
Successfully installed the root certificate chain
Successfully installed the root certificate chain

Now the installation of the certificate succeeds:

The certificate has been installed:

Now we’ll configure the Validator with this initial configuration:

conf t
 system
  host-name validator
  system-ip 192.168.128.31
  site-id 2
  organization-name "lostintransit.se"
  vbond 172.16.0.31 local
 vpn 0
  interface gi0/0
  ip address 172.16.0.31/24
  tunnel-interface
  allow-service all
  no shut
 vpn 512
  dns 192.168.128.53 primary
  interface eth0
  ip address 192.168.128.31/24
  no shut
  ip route 0.0.0.0/0 192.168.128.1
 commit

Then I upload the full chain to the Validator:

scp /tmp/chain.pem [email protected]:/home/admin/
The authenticity of host '192.168.128.31 (192.168.128.31)' can't be established.
ED25519 key fingerprint is SHA256:RVVlj3oczu7R+KIq4eFSy9rD1spxOoUAi6uOOfPiPwk.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.128.31' (ED25519) to the list of known hosts.
([email protected]) Password: 
chain.pem  

Then install it:

validator# request root-cert-chain install /home/admin/chain.pem
Uploading root-ca-cert-chain via VPN 0
Copying /home/admin/chain.pem to /usr/share/viptela/root-ca.crt.tmp via VPN 0
Moving /usr/share/viptela/root-ca.crt.tmp to /usr/share/viptela/root-ca.crt via VPN 0
Updating the root certificate chain..
inotify_modify_file: setting file /etc/viptela/rootcert_reinstall to id 1781278688
send_root_ca_cert_chain_notification
Successfully installed the root certificate chain
Successfully installed the root certificate chain

Now we are going to add the Validator in the Manager. Go to Configuration -> Devices -> Control Components and click + Add control component. Then click Let’s do it:

Enter the VPN 0 or VPN 512 IP as well as credentials. Select Validator. I won’t generate a CSR at this point:

Click Next.

You can now add configuration if you want to or just review:

Click Next.

A summary is shown:

Click Deploy to add the Validator.

Next we’ll need a certificate for the Validator so we repeat the steps of generating a CSR and then signing it with Step CA (refer to Manager).

sudo step ca sign \
  --ca-url https://stepca.lostintransit.se \
  --root /etc/step-ca/certs/root_ca.crt \
  --not-after 8760h \
  validator_control.txt validator_control.crt
✔ Provisioner: [email protected] (JWK) [kid: 2SLZVubh2qvHTfbyAi4dvLL0HrLm3znTdVK_1Ke94_E]
Please enter the password to decrypt the provisioner key: 
✔ CA: https://stepca.lostintransit.se
✔ Certificate: validator_control.crt

The certificate has been installed:

We can now see the control connections forming:

validator# show orchestrator connections
                                                                                     PEER                      PEER                                                                            
         PEER     PEER     PEER             SITE        DOMAIN      PEER             PRIVATE  PEER             PUBLIC                                   ORGANIZATION                           
INSTANCE TYPE     PROTOCOL SYSTEM IP        ID          ID          PRIVATE IP       PORT     PUBLIC IP        PORT    REMOTE COLOR     STATE           NAME                    UPTIME         
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0        vmanage  dtls     192.168.128.30   1           0           172.16.0.30      12346    172.16.0.30      12346   default          up              lostintransit.se        0:00:00:44     
0        vmanage  dtls     192.168.128.30   1           0           172.16.0.30      12446    172.16.0.30      12446   default          up              lostintransit.se        0:00:00:43     
0        vmanage  dtls     192.168.128.30   1           0           172.16.0.30      12546    172.16.0.30      12546   default          up              lostintransit.se        0:00:00:44     
0        vmanage  dtls     192.168.128.30   1           0           172.16.0.30      12646    172.16.0.30      12646   default          up              lostintransit.se        0:00:00:43     
0        vmanage  dtls     192.168.128.30   1           0           172.16.0.30      12746    172.16.0.30      12746   default          up              lostintransit.se        0:00:00:44     
0        vmanage  dtls     192.168.128.30   1           0           172.16.0.30      12846    172.16.0.30      12846   default          up              lostintransit.se        0:00:00:44     
0        vmanage  dtls     192.168.128.30   1           0           172.16.0.30      12946    172.16.0.30      12946   default          up              lostintransit.se        0:00:00:44     
1        vmanage  dtls     192.168.128.30   1           0           172.16.0.30      13046    172.16.0.30      13046   default          up              lostintransit.se        0:00:00:44

Next we’ll install the Controller. It will have the following initial configuration:

conf t
 system
  host-name controller
  system-ip 192.168.128.32
  site-id 3
  organization-name "lostintransit.se"
  vbond 172.16.0.31
 vpn 0
  interface eth0
  ip address 172.16.0.32/24
  tunnel-interface
  allow-service all
  no shut
 vpn 512
  dns 192.168.128.53 primary
  interface eth0
  ip address 192.168.128.32/24
  no shut
  ip route 0.0.0.0/0 192.168.128.1
 commit

I upload the full cert chain to the Controller:

scp /tmp/chain.pem [email protected]:/home/admin/
The authenticity of host '192.168.128.32 (192.168.128.32)' can't be established.
ED25519 key fingerprint is SHA256:p4auDWZZaLd3K8W7Tr1a5+lYe8xkNtKbUKSusp0JZqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.128.32' (ED25519) to the list of known hosts.
([email protected]) Password: 
chain.pem                                                                                                                                                                    100% 1389     1.9MB/s   00:00    

Then install it:

controller# request root-cert-chain install /home/admin/chain.pem
Uploading root-ca-cert-chain via VPN 0
Copying /home/admin/chain.pem to /usr/share/viptela/root-ca.crt.tmp via VPN 0
Moving /usr/share/viptela/root-ca.crt.tmp to /usr/share/viptela/root-ca.crt via VPN 0
Updating the root certificate chain..
inotify_modify_file: setting file /etc/viptela/rootcert_reinstall to id 1781323661
send_root_ca_cert_chain_notification
Successfully installed the root certificate chain
Successfully installed the root certificate chain

Then we add the Controller in the Manager, same process as before. Just select Controller instead of Validator:

We generate a CSR and then sign the certificate:

sudo step ca sign \
  --ca-url https://stepca.lostintransit.se \
  --root /etc/step-ca/certs/root_ca.crt \
  --not-after 8760h \
  controller_control.txt controller_control.crt
✔ Provisioner: [email protected] (JWK) [kid: 2SLZVubh2qvHTfbyAi4dvLL0HrLm3znTdVK_1Ke94_E]
Please enter the password to decrypt the provisioner key: 
✔ CA: https://stepca.lostintransit.se
✔ Certificate: controller_control.crt

Then install the certificate.

The control connections have now been established:

controller# show control connections
                                                                                             PEER                                          PEER                                          
      PEER    PEER PEER            SITE       DOMAIN PEER                                    PRIV  PEER                                    PUB                                           
INDEX TYPE    PROT SYSTEM IP       ID         ID     PRIVATE IP                              PORT  PUBLIC IP                               PORT  ORGANIZATION            REMOTE COLOR     STATE UPTIME     
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0     vbond   dtls 192.168.128.31  0          0      172.16.0.31                             12346 172.16.0.31                             12346 lostintransit.se          default         up     0:00:01:15 
0     vmanage dtls 192.168.128.30  1          0      172.16.0.30                             12346 172.16.0.30                             12346 lostintransit.se          default         up     0:00:01:14 
1     vbond   dtls 192.168.128.31  0          0      172.16.0.31                             12346 172.16.0.31                             12346 lostintransit.se          default         up     0:00:01:15 

That’s all for the initial installation of the controllers. Next we’ll onboard a couple of routers just to have some data and devices to interact with. Before we can do that, we have to upload the serial file that has the serial numbers of our edge devices. Go to Configuration -> Devices -> WAN Edges. It’s currently empty:

Click Add WAN edges and select Upload WAN Edge List:

I’ll select Upload file with serial numbers and select my file that I downloaded previously:

Then click **Next**.

Then I’ll select all devices and click Skip configuration:

We can now see the devices at Configuration -> Devices -> WAN Edges:

That’s it! While there are mechanisms to automate the installation of the controllers, I recommend you try it at least once manually to understand how the components work together.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top