1. Overview
It is strongly recommended to implement Cisco ASA firewall clustering such as active/active or active/standby in a production environment to achieve the high available of the critical services.
In this instruction will explains you how to configure high availability clustering using active/standby mode or failover mode between two Cisco ASA firewall running IOS version 9.x.
2. Prerequisites
In this article, it is presumed that:
a. You have two Cisco ASA firewall hardware appliance with the same model, the same number and types of interfaces, and the same amount of RAM.
b. You have a direct console access to ASA firewall
4. Network Diagram
We will set up the active/standby clustering on Cisco ASA firewalls using the following diagram. In case of the primary unit fails, the secondary unit will becomes active automatically without any downtime.
The following is IP address plan to be used in above diagram for this set up.
Primary Unit | Secondary Unit | |
Port | Gi0/2 | Gi0/2 |
Interface Name | outside | outside |
P2P Public IP | 117.111.111.1/29 | 117.111.111.2/29 |
Port | Gi0/1 | Gi0/1 |
Interface Name | inside | inside |
P2P Private IP | 10.0.0.1/24 | 10.0.0.2/24 |
Failover Port | Gi0/0 | Gi0/0 |
Failover IP | 172.16.0.1/30 | 172.16.0.2/30 |
5. Configure Primary Unit
First, we need to bring up the interface Gi0/0 to be used for LAN failover and make this firewall the primary unit for this failover cluster.
# config t
# int g0/0
no sh
# failover lan unit primary
Next, we need to assign the failover interface, names it as “FAIL-LAN”, and failover IP address. This interface, in our case now is Gi0/0 will be used to replicate the configuration between primary unit and the secondary unit.
# failover lan int FAIL-LAN g0/0
# failover link FAIL-LAN
# failover int ip FAIL-LAN 172.16.0.1 255.255.255.252 standby 172.16.0.2
Now, we need to configure the IP address for the outside interface. We also need to set the standby IP address on that will be used by the secondary unit.
# int g0/2
nameif outside
ip address 117.111.111.1 255.255.255.248 standby 117.111.111.2
no sh
Next, we need to configure the IP address for the inside interface. We also need to set the standby IP address that will be used by the secondary unit.
# int g0/1
nameif inside
ip address 10.0.0.1 255.255.255.0 standby 10.0.0.2
no sh
Finally, We need to enable failover by execute the following command.
# failover
6. Configure Secondary Unit
On the secondary unit, we need to bring up the interface Gi0/0 to be used for LAN failover and make this firewall the secondary unit for this failover cluster.
# int g0/0
no sh
# failover lan unit secondary
Then, we just need to execute the following few commands, and the rest of the configuration will be automatically replicated from the primary unit.
# failover lan int FAIL-LAN g0/0
# failover link FAIL-LAN
# failover int ip FAIL-LAN 172.16.0.1 255.255.255.252 standby 172.16.0.2
# failover
You probably got the following message log in your console screen after finish executing those above commands.
Detected an Active mate
Beginning configuration replication from mate.
Creating trustpoint "_SmartCallHome_ServerCA" and installing certificate...
Trustpoint '_SmartCallHome_ServerCA' is a subordinate CA and holds a non self-signed certificate.
Trustpoint CA certificate accepted.
WARNING: Trustpoint _SmartCallHome_ServerCA is already authenticated.
End configuration replication from mate.
7. Verify the Configuration
We can use the following command to verify the failover clustering configuration on Cisco ASA firewall and following is the command out on the primary unit.
# sh failover
Failover On
Failover unit Primary
Failover LAN Interface: FAIL-LAN GigabitEthernet0/0 (up)
Reconnect timeout 0:00:00
Unit Poll frequency 1 seconds, holdtime 15 seconds
Interface Poll frequency 5 seconds, holdtime 25 seconds
Interface Policy 1
Monitored Interfaces 2 of 61 maximum
MAC Address Move Notification Interval not set
Version: Ours 9.4(1)203, Mate 9.4(1)203
Last Failover at: 15:13:54 UTC Jun 10 2017
This host: Primary - Active
Active time: 1143 (sec)
slot 0: empty
Interface outside (117.111.111.1): Normal (Monitored)
Interface inside (10.0.0.1): Normal (Monitored)
Other host: Secondary - Standby Ready
Active time: 0 (sec)
Interface outside (117.111.111.2): Normal (Monitored)
Interface inside (10.0.0.2): Normal (Monitored)
Stateful Failover Logical Update Statistics
Link : FAIL-LAN GigabitEthernet0/0 (up)
Stateful Obj xmit xerr rcv rerr
General 57 0 56 0
sys cmd 56 0 56 0
up time 0 0 0 0
RPC services 0 0 0 0
TCP conn 0 0 0 0
UDP conn 0 0 0 0
ARP tbl 0 0 0 0
Xlate_Timeout 0 0 0 0
IPv6 ND tbl 0 0 0 0
VPN IKEv1 SA 0 0 0 0
VPN IKEv1 P2 0 0 0 0
VPN IKEv2 SA 0 0 0 0
VPN IKEv2 P2 0 0 0 0
VPN CTCP upd 0 0 0 0
VPN SDI upd 0 0 0 0
VPN DHCP upd 0 0 0 0
SIP Session 0 0 0 0
SIP Tx 0 0 0 0
SIP Pinhole 0 0 0 0
Route Session 0 0 0 0
Router ID 0 0 0 0
User-Identity 1 0 0 0
CTS SGTNAME 0 0 0 0
CTS PAC 0 0 0 0
TrustSec-SXP 0 0 0 0
IPv6 Route 0 0 0 0
STS Table 0 0 0 0
Logical Update Queue Information
Cur Max Total
Recv Q: 0 17 57
Xmit Q: 0 29 341
Below is the command out put on secondary unit.
# sh failover
Failover On
Failover unit Secondary
Failover LAN Interface: FAIL-LAN GigabitEthernet0/0 (up)
Reconnect timeout 0:00:00
Unit Poll frequency 1 seconds, holdtime 15 seconds
Interface Poll frequency 5 seconds, holdtime 25 seconds
Interface Policy 1
Monitored Interfaces 2 of 61 maximum
MAC Address Move Notification Interval not set
Version: Ours 9.4(1)203, Mate 9.4(1)203
Last Failover at: 15:07:04 UTC Jun 10 2017
This host: Secondary - Standby Ready
Active time: 0 (sec)
slot 0: empty
Interface inside (10.0.0.2): Normal (Monitored)
Interface outside (117.111.111.2): Normal (Monitored)
Other host: Primary - Active
Active time: 1333 (sec)
Interface inside (10.0.0.1): Normal (Monitored)
Interface outside (117.111.111.1): Normal (Monitored)
Stateful Failover Logical Update Statistics
Link : FAIL-LAN GigabitEthernet0/0 (up)
Stateful Obj xmit xerr rcv rerr
General 82 0 83 0
sys cmd 82 0 82 0
up time 0 0 0 0
RPC services 0 0 0 0
TCP conn 0 0 0 0
UDP conn 0 0 0 0
ARP tbl 0 0 0 0
Xlate_Timeout 0 0 0 0
IPv6 ND tbl 0 0 0 0
VPN IKEv1 SA 0 0 0 0
VPN IKEv1 P2 0 0 0 0
VPN IKEv2 SA 0 0 0 0
VPN IKEv2 P2 0 0 0 0
VPN CTCP upd 0 0 0 0
VPN SDI upd 0 0 0 0
VPN DHCP upd 0 0 0 0
SIP Session 0 0 0 0
SIP Tx 0 0 0 0
SIP Pinhole 0 0 0 0
Route Session 0 0 0 0
Router ID 0 0 0 0
User-Identity 0 0 1 0
CTS SGTNAME 0 0 0 0
CTS PAC 0 0 0 0
TrustSec-SXP 0 0 0 0
IPv6 Route 0 0 0 0
STS Table 0 0 0 0
Logical Update Queue Information
Cur Max Total
Recv Q: 0 17 468
Xmit Q: 0 1 82
If you do not want read a long message out put, you can use the following command instead and below is the out put from primary unit.
# sh failover state
State Last Failure Reason Date/Time
This host - Primary
Active None
Other host - Secondary
Standby Ready Comm Failure 15:14:13 UTC Jun 10 2017
====Configuration State===
Sync Done
====Communication State===
Mac set
====VM Properties Compatibility===
vCPUs - This host: 1
Other host: 1
Memory - This host: 2048 Mhz
Other host: 2048 Mhz
Interfaces - This host: 5
Other host: 5
8. Setup Additional Configuration
For security reason, you should also configure a failover key. Execute the following command on the primary unit. You don’t need to execute this command again on the secondary unit since the configuration will sync to the secondary unit automatically.
# failover key Hi@K1y
9. Conclusion
Now you should be able configure the high availability clustering using active/standby mode or failover mode between two Cisco ASA firewall running IOS version 9.x. Hopefully, you can find this document informative. If you have any questions or suggestions you can always leave your comments below. I will try all of my best to review and reply them.