Distribuzione di un cluster di bilanciamento del carico VPN ASA

In questo articolo, vorrei fornire istruzioni dettagliate su come implementare rapidamente lo schema più scalabile al momento. VPN di accesso remoto accesso alla base AnyConnect e Cisco ASA - Cluster di bilanciamento del carico VPN.

Introduzione: Molte aziende in tutto il mondo, vista l'attuale situazione con COVID-19, si stanno impegnando per trasferire i propri dipendenti al lavoro a distanza. A causa della transizione di massa al lavoro remoto, il carico sui gateway VPN esistenti delle aziende sta aumentando notevolmente ed è richiesta una capacità molto rapida di scalarli. D'altra parte, molte aziende sono costrette a padroneggiare frettolosamente da zero il concetto di lavoro a distanza.

Per aiutare le aziende a ottenere un accesso VPN conveniente, sicuro e scalabile per i dipendenti nel più breve tempo possibile, Cisco concede in licenza il client VPN SSL ricco di funzionalità AnyConnect per un massimo di 13 settimane. Puoi anche portare ASAv per un test (Virtual ASA per hypervisor VMWare/Hyper-V/KVM e piattaforme cloud AWS/Azure) da partner autorizzati o contattando i rappresentanti Cisco che lavorano con te.

La procedura per il rilascio delle licenze AnyConnect COVID-19 è descritta qui.

Ho preparato una guida dettagliata per una semplice implementazione del cluster di bilanciamento del carico VPN come tecnologia VPN più scalabile.

L'esempio seguente sarà abbastanza semplice in termini di algoritmi di autenticazione e autorizzazione utilizzati, ma sarà una buona opzione per un avvio rapido (che attualmente non è sufficiente per molti) con la possibilità di un adattamento approfondito alle proprie esigenze durante la distribuzione processi.

Brevi informazioni: La tecnologia VPN Load Balancing Cluster non è un failover e non è una funzione di clustering nel suo senso nativo, questa tecnologia può combinare modelli ASA completamente diversi (con alcune restrizioni) per bilanciare il carico delle connessioni VPN ad accesso remoto. Non c'è sincronizzazione di sessioni e configurazioni tra i nodi di tale cluster, ma è possibile bilanciare automaticamente il carico delle connessioni VPN e garantire la tolleranza agli errori delle connessioni VPN fino a quando almeno un nodo attivo rimane nel cluster. Il carico nel cluster viene bilanciato automaticamente in base al carico di lavoro dei nodi in base al numero di sessioni VPN.

Per il failover di nodi specifici del cluster (se richiesto), è possibile utilizzare un filer, in modo che la connessione attiva venga gestita dal nodo primario del filer. Il fileover non è una condizione necessaria per garantire la tolleranza ai guasti all'interno del cluster Load-Balancing, il cluster stesso, in caso di guasto di un nodo, trasferirà la sessione utente su un altro nodo live, ma senza salvare lo stato della connessione, che è appunto fornito dal depositante. Di conseguenza, è possibile, se necessario, combinare queste due tecnologie.

Un cluster di bilanciamento del carico VPN può contenere più di due nodi.

Il cluster di bilanciamento del carico VPN è supportato su ASA 5512-X e versioni successive.

Poiché ogni ASA all'interno del cluster di bilanciamento del carico VPN è un'unità indipendente in termini di impostazioni, eseguiamo tutti i passaggi di configurazione individualmente su ogni singolo dispositivo.

Dettagli tecnologici qui

La topologia logica dell'esempio dato:

Distribuzione di un cluster di bilanciamento del carico VPN ASA

Distribuzione principale:

  1. Distribuiamo istanze ASAv dei modelli di cui abbiamo bisogno (ASAv5/10/30/50) dall'immagine.

  2. Assegniamo le interfacce INSIDE/OUTSIDE alle stesse VLAN (Outside nella propria VLAN, INSIDE nella propria, ma generalmente all'interno del cluster, vedi topologia), è importante che interfacce dello stesso tipo siano nello stesso segmento L2.

  3. Licenze:

    • Al momento l'installazione di ASAv non avrà alcuna licenza e sarà limitata a 100kbps.
    • Per installare una licenza, devi generare un token nel tuo Smart-Account: https://software.cisco.com/ -> Licenze software intelligenti
    • Nella finestra che si apre, fai clic sul pulsante Nuovo gettone

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    • Assicurati che nella finestra che si apre ci sia un campo attivo e che sia spuntato un segno di spunta Consenti funzionalità controllate dall'esportazione… Senza questo campo attivo, non sarai in grado di utilizzare le funzioni di crittografia avanzata e, di conseguenza, VPN. Se questo campo non è attivo, contatta il team del tuo account con una richiesta di attivazione.

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    • Dopo aver fatto clic sul pulsante Crea token, verrà creato un token che utilizzeremo per ottenere una licenza per ASAv, copialo:

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    • Ripetere i passaggi C, D, E per ogni ASAv distribuito.
    • Per semplificare la copia del token, consentiamo temporaneamente telnet. Configuriamo ogni ASA (l'esempio sotto illustra le impostazioni su ASA-1). telnet non funziona con l'esterno, se ne hai davvero bisogno, cambia il livello di sicurezza da 100 a esterno, quindi restituiscilo.

    !
    ciscoasa(config)# int gi0/0
    ciscoasa(config)# nameif outside
    ciscoasa(config)# ip address 192.168.31.30 255.255.255.0
    ciscoasa(config)# no shut
    !
    ciscoasa(config)# int gi0/1
    ciscoasa(config)# nameif inside
    ciscoasa(config)# ip address 192.168.255.2 255.255.255.0
    ciscoasa(config)# no shut
    !
    ciscoasa(config)# telnet 0 0 inside
    ciscoasa(config)# username admin password cisco priv 15
    ciscoasa(config)# ena password cisco
    ciscoasa(config)# aaa authentication telnet console LOCAL
    !
    ciscoasa(config)# route outside 0 0 192.168.31.1
    !
    ciscoasa(config)# wr
    !

    • Per registrare un token nel cloud Smart-Account, è necessario fornire l'accesso a Internet per ASA, dettagli qui.

    In breve, ASA è necessario:

    • accesso tramite HTTPS a Internet;
    • sincronizzazione dell'ora (più correttamente, tramite NTP);
    • server DNS registrato;
      • Telenettiamo al nostro ASA e definiamo le impostazioni per attivare la licenza tramite Smart-Account.

    !
    ciscoasa(config)# clock set 19:21:00 Mar 18 2020
    ciscoasa(config)# clock timezone MSK 3
    ciscoasa(config)# ntp server 192.168.99.136
    !
    ciscoasa(config)# dns domain-lookup outside
    ciscoasa(config)# DNS server-group DefaultDNS
    ciscoasa(config-dns-server-group)# name-server 192.168.99.132 
    !
    ! Проверим работу DNS:
    !
    ciscoasa(config-dns-server-group)# ping ya.ru
    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 87.250.250.242, timeout is 2 seconds:
    !!!!!
    !
    ! Проверим синхронизацию NTP:
    !
    ciscoasa(config)# show ntp associations 
      address         ref clock     st  when  poll reach  delay  offset    disp
    *~192.168.99.136   91.189.94.4       3    63    64    1    36.7    1.85    17.5
    * master (synced), # master (unsynced), + selected, - candidate, ~ configured
    !
    ! Установим конфигурацию нашей ASAv для Smart-Licensing (в соответствии с Вашим профилем, в моем случае 100М для примера)
    !
    ciscoasa(config)# license smart
    ciscoasa(config-smart-lic)# feature tier standard
    ciscoasa(config-smart-lic)# throughput level 100M
    !
    ! В случае необходимости можно настроить доступ в Интернет через прокси используйте следующий блок команд:
    !call-home
    !  http-proxy ip_address port port
    !
    ! Далее мы вставляем скопированный из портала Smart-Account токен (<token>) и регистрируем лицензию
    !
    ciscoasa(config)# end
    ciscoasa# license smart register idtoken <token>

    • Verifichiamo che il dispositivo abbia registrato correttamente una licenza e che siano disponibili opzioni di crittografia:

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

  4. Imposta una VPN SSL di base su ciascun gateway

    • Successivamente, configura l'accesso tramite SSH e ASDM:

    ciscoasa(config)# ssh ver 2
    ciscoasa(config)# aaa authentication ssh console LOCAL
    ciscoasa(config)# aaa authentication http console LOCAL
    ciscoasa(config)# hostname vpn-demo-1
    vpn-demo-1(config)# domain-name ashes.cc
    vpn-demo-1(config)# cry key gen rsa general-keys modulus 4096 
    vpn-demo-1(config)# ssh 0 0 inside  
    vpn-demo-1(config)# http 0 0 inside
    !
    ! Поднимем сервер HTTPS для ASDM на порту 445 чтобы не пересекаться с SSL-VPN порталом
    !
    vpn-demo-1(config)# http server enable 445 
    !

    • Affinché ASDM funzioni, devi prima scaricarlo dal sito Web cisco.com, nel mio caso è il seguente file:

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    • Affinché il client AnyConnect funzioni, è necessario caricare un'immagine su ciascun ASA per ciascun sistema operativo desktop client utilizzato (previsto per l'utilizzo di Linux/Windows/MAC), sarà necessario un file con Pacchetto di distribuzione headend Nel titolo:

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    • I file scaricati possono essere caricati, ad esempio, su un server FTP e caricati su ogni singolo ASA:

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    • Configuriamo ASDM e certificato autofirmato per SSL-VPN (si consiglia di utilizzare un certificato attendibile in produzione). L'FQDN impostato dell'indirizzo del cluster virtuale (vpn-demo.ashes.cc), così come ogni FQDN associato all'indirizzo esterno di ciascun nodo del cluster, deve risolversi nella zona DNS esterna all'indirizzo IP dell'interfaccia OUTSIDE (o all'indirizzo mappato se viene utilizzato il port forwarding udp/443 (DTLS) e tcp/443(TLS)). Informazioni dettagliate sui requisiti per il certificato sono specificate nella sezione Verifica del certificato documentazione.

    !
    vpn-demo-1(config)# crypto ca trustpoint SELF
    vpn-demo-1(config-ca-trustpoint)# enrollment self
    vpn-demo-1(config-ca-trustpoint)# fqdn vpn-demo.ashes.cc
    vpn-demo-1(config-ca-trustpoint)# subject-name cn=*.ashes.cc, ou=ashes-lab, o=ashes, c=ru
    vpn-demo-1(config-ca-trustpoint)# serial-number             
    vpn-demo-1(config-ca-trustpoint)# crl configure
    vpn-demo-1(config-ca-crl)# cry ca enroll SELF
    % The fully-qualified domain name in the certificate will be: vpn-demo.ashes.cc
    Generate Self-Signed Certificate? [yes/no]: yes
    vpn-demo-1(config)# 
    !
    vpn-demo-1(config)# sh cry ca certificates 
    Certificate
    Status: Available
    Certificate Serial Number: 4d43725e
    Certificate Usage: General Purpose
    Public Key Type: RSA (4096 bits)
    Signature Algorithm: SHA256 with RSA Encryption
    Issuer Name: 
    serialNumber=9A439T02F95
    hostname=vpn-demo.ashes.cc
    cn=*.ashes.cc
    ou=ashes-lab
    o=ashes
    c=ru
    Subject Name:
    serialNumber=9A439T02F95
    hostname=vpn-demo.ashes.cc
    cn=*.ashes.cc
    ou=ashes-lab
    o=ashes
    c=ru
    Validity Date: 
    start date: 00:16:17 MSK Mar 19 2020
    end   date: 00:16:17 MSK Mar 17 2030
    Storage: config
    Associated Trustpoints: SELF 
    
    CA Certificate
    Status: Available
    Certificate Serial Number: 0509
    Certificate Usage: General Purpose
    Public Key Type: RSA (4096 bits)
    Signature Algorithm: SHA1 with RSA Encryption
    Issuer Name: 
    cn=QuoVadis Root CA 2
    o=QuoVadis Limited
    c=BM
    Subject Name: 
    cn=QuoVadis Root CA 2
    o=QuoVadis Limited
    c=BM
    Validity Date: 
    start date: 21:27:00 MSK Nov 24 2006
    end   date: 21:23:33 MSK Nov 24 2031
    Storage: config
    Associated Trustpoints: _SmartCallHome_ServerCA               

    • Non dimenticare di specificare la porta per verificare che ASDM funzioni, ad esempio:

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    • Eseguiamo le impostazioni di base del tunnel:
    • Rendiamo disponibile la rete aziendale attraverso il tunnel e lasciamo che Internet passi direttamente (non è il metodo più sicuro se non ci sono protezioni sull'host che si connette, è possibile penetrare attraverso un host infetto e visualizzare i dati aziendali, opzione tunnelall con policy split-tunnel consentirà a tutto il traffico host di entrare nel tunnel. Tuttavia tunnel diviso consente di scaricare il gateway VPN e non elaborare il traffico Internet dell'host)
    • Emettiamo gli indirizzi dalla sottorete 192.168.20.0/24 agli host nel tunnel (pool da 10 a 30 indirizzi (per il nodo n. 1)). Ogni nodo del cluster VPN deve avere il proprio pool.
    • Effettueremo l'autenticazione di base con un utente creato localmente sull'ASA (questo non è raccomandato, questo è il metodo più semplice), è meglio eseguire l'autenticazione tramite LDAP/RAGGIO, o meglio ancora, cravatta Autenticazione a più fattori (AMF), Ad esempio Cisco DUO.

    !
    vpn-demo-1(config)# ip local pool vpn-pool 192.168.20.10-192.168.20.30 mask 255.255.255.0
    !
    vpn-demo-1(config)# access-list split-tunnel standard permit 192.168.0.0 255.255.0.0
    !
    vpn-demo-1(config)# group-policy SSL-VPN-GROUP-POLICY internal
    vpn-demo-1(config)# group-policy SSL-VPN-GROUP-POLICY attributes
    vpn-demo-1(config-group-policy)# vpn-tunnel-protocol ssl-client 
    vpn-demo-1(config-group-policy)# split-tunnel-policy tunnelspecified
    vpn-demo-1(config-group-policy)# split-tunnel-network-list value split-tunnel
    vpn-demo-1(config-group-policy)# dns-server value 192.168.99.132
    vpn-demo-1(config-group-policy)# default-domain value ashes.cc
    vpn-demo-1(config)# tunnel-group DefaultWEBVPNGroup general-attributes
    vpn-demo-1(config-tunnel-general)#  default-group-policy SSL-VPN-GROUP-POLICY
    vpn-demo-1(config-tunnel-general)#  address-pool vpn-pool
    !
    vpn-demo-1(config)# username dkazakov password cisco
    vpn-demo-1(config)# username dkazakov attributes
    vpn-demo-1(config-username)# service-type remote-access
    !
    vpn-demo-1(config)# ssl trust-point SELF
    vpn-demo-1(config)# webvpn
    vpn-demo-1(config-webvpn)#  enable outside
    vpn-demo-1(config-webvpn)#  anyconnect image disk0:/anyconnect-win-4.8.03036-webdeploy-k9.pkg
    vpn-demo-1(config-webvpn)#  anyconnect enable
    !

    • (OPZIONALE): Nell'esempio precedente, abbiamo utilizzato un utente locale sull'ITU per autenticare gli utenti remoti, che ovviamente, tranne che in laboratorio, è scarsamente applicabile. Darò un esempio di come adattare rapidamente l'impostazione per l'autenticazione a RAGGIO server, usato come esempio Motore di servizi di identità Cisco:

    vpn-demo-1(config-aaa-server-group)# dynamic-authorization
    vpn-demo-1(config-aaa-server-group)# interim-accounting-update
    vpn-demo-1(config-aaa-server-group)# aaa-server RADIUS (outside) host 192.168.99.134
    vpn-demo-1(config-aaa-server-host)# key cisco
    vpn-demo-1(config-aaa-server-host)# exit
    vpn-demo-1(config)# tunnel-group DefaultWEBVPNGroup general-attributes
    vpn-demo-1(config-tunnel-general)# authentication-server-group  RADIUS 
    !

    Questa integrazione ha permesso non solo di integrare velocemente la procedura di autenticazione con il servizio directory AD, ma anche di distinguere se il computer connesso appartiene ad AD, di capire se tale dispositivo è aziendale o personale e di valutare lo stato del dispositivo connesso .

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    • Configuriamo Transparent NAT in modo che il traffico tra il client e le risorse della rete aziendale non venga scarabocchiato:

    vpn-demo-1(config-network-object)#  subnet 192.168.20.0 255.255.255.0
    !
    vpn-demo-1(config)# nat (inside,outside) source static any any destination static vpn-users vpn-users no-proxy-arp

    • (OPZIONALE): Per esporre i nostri clienti a Internet tramite l'ASA (quando si utilizza tunnelall opzioni) utilizzando PAT, oltre che uscire dalla stessa interfaccia OUTSIDE da cui sono collegati, è necessario effettuare le seguenti impostazioni

    vpn-demo-1(config-network-object)# nat (outside,outside) source dynamic vpn-users interface
    vpn-demo-1(config)# nat (inside,outside) source dynamic any interface
    vpn-demo-1(config)# same-security-traffic permit intra-interface 
    !

    • Quando si utilizza un cluster, è estremamente importante consentire alla rete interna di capire quale ASA instradare il traffico di ritorno agli utenti, per questo è necessario ridistribuire i percorsi / 32 indirizzi rilasciati ai client.
      Al momento non abbiamo ancora configurato il cluster, ma disponiamo già di gateway VPN funzionanti che possono essere collegati individualmente tramite FQDN o IP.

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    Vediamo il client connesso nella tabella di routing del primo ASA:

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    Affinché il nostro intero cluster VPN e l'intera rete aziendale conoscano il percorso verso il nostro client, ridistribuiremo il prefisso del client in un protocollo di routing dinamico, ad esempio OSPF:

    !
    vpn-demo-1(config)# route-map RMAP-VPN-REDISTRIBUTE permit 1
    vpn-demo-1(config-route-map)#  match ip address VPN-REDISTRIBUTE
    !
    vpn-demo-1(config)# router ospf 1
    vpn-demo-1(config-router)#  network 192.168.255.0 255.255.255.0 area 0
    vpn-demo-1(config-router)#  log-adj-changes
    vpn-demo-1(config-router)#  redistribute static metric 5000 subnets route-map RMAP-VPN-REDISTRIBUTE

    Ora abbiamo un instradamento verso il client dal secondo gateway ASA-2 e gli utenti connessi a diversi gateway VPN all'interno del cluster possono, ad esempio, comunicare direttamente tramite un softphone aziendale, così come il traffico di ritorno dalle risorse richieste dall'utente vieni al gateway VPN desiderato:

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

  5. Passiamo alla configurazione del cluster di bilanciamento del carico.

    L'indirizzo 192.168.31.40 verrà utilizzato come IP virtuale (VIP - tutti i client VPN si connetteranno inizialmente ad esso), da questo indirizzo il cluster master effettuerà un REDIRECT verso un nodo del cluster meno carico. Non dimenticare di scrivere record DNS avanti e indietro sia per ogni indirizzo esterno/FQDN di ogni nodo del cluster, sia per VIP.

    vpn-demo-1(config)# vpn load-balancing
    vpn-demo-1(config-load-balancing)# interface lbpublic outside
    vpn-demo-1(config-load-balancing)# interface lbprivate inside
    vpn-demo-1(config-load-balancing)# priority 10
    vpn-demo-1(config-load-balancing)# cluster ip address 192.168.31.40
    vpn-demo-1(config-load-balancing)# cluster port 4000
    vpn-demo-1(config-load-balancing)# redirect-fqdn enable
    vpn-demo-1(config-load-balancing)# cluster key cisco
    vpn-demo-1(config-load-balancing)# cluster encryption
    vpn-demo-1(config-load-balancing)# cluster port 9023
    vpn-demo-1(config-load-balancing)# participate
    vpn-demo-1(config-load-balancing)#

    • Verifichiamo il funzionamento del cluster con due client connessi:

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    • Rendiamo l'esperienza del cliente più comoda con il profilo AnyConnect caricato automaticamente tramite ASDM.

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    Diamo un nome al profilo in modo conveniente e vi associamo la nostra policy di gruppo:

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    Dopo la successiva connessione del client, questo profilo verrà automaticamente scaricato e installato nel client AnyConnect, quindi se hai bisogno di connetterti, devi solo selezionarlo dall'elenco:

    Distribuzione di un cluster di bilanciamento del carico VPN ASA

    Poiché abbiamo creato questo profilo su un solo ASA utilizzando ASDM, non dimenticare di ripetere i passaggi sugli altri ASA nel cluster.

Conclusione: Pertanto, abbiamo implementato rapidamente un cluster di diversi gateway VPN con bilanciamento del carico automatico. L'aggiunta di nuovi nodi al cluster è facile, con un semplice ridimensionamento orizzontale mediante la distribuzione di nuove macchine virtuali ASAv o l'utilizzo di ASA hardware. Il client AnyConnect ricco di funzionalità può migliorare notevolmente la connessione remota sicura utilizzando il Postura (stime statali), utilizzato in modo più efficace in combinazione con il sistema di controllo centralizzato e contabilità degli accessi Motore dei servizi di identità.

Fonte: habr.com

Aggiungi un commento