部署 ASA VPN 負載平衡集群

在本文中,我想提供有關如何快速部署目前最具擴展性的方案的分步說明。 遠程訪問 VPN 基於訪問 AnyConnect 和思科 ASA - VPN 負載均衡集群.

介紹: 鑑於 COVID-19 的現狀,世界各地的許多公司都在努力將員工轉移到遠程工作。 由於向遠程工作的大規模過渡,公司現有 VPN 網關的負載正在急劇增加,因此需要非常快速地擴展它們的能力。 另一方面,許多公司被迫從頭開始倉促掌握遠程工作的概念。

為了幫助企業在盡可能短的時間內為員工實現方便、安全和可擴展的 VPN 訪問,思科授權 AnyConnect 功能豐富的 SSL-VPN 客戶端長達 13 週。 您還可以通過授權合作夥伴或聯繫與您合作的思科代表,對 ASAv 進行測試(用於 VMWare/Hyper-V/KVM 管理程序和 AWS/Azure 雲平台的虛擬 ASA).

此處描述了頒發 AnyConnect COVID-19 許可證的程序.

我已經準備了一個分步指南,用於簡單部署 VPN 負載平衡集群作為最具可擴展性的 VPN 技術。

下面的示例在使用的身份驗證和授權算法方面將非常簡單,但對於快速入門(目前對許多人來說還不夠)來說是一個不錯的選擇,並且可以在部署期間深入適應您的需求過程。

簡要信息: VPN Load Balancing Cluster 技術不是故障轉移,也不是其原生意義上的集群功能,該技術可以組合完全不同的 ASA 模型(有一定限制),以平衡遠程訪問 VPN 連接的負載。 這種集群的節點之間沒有會話和配置的同步,但是可以自動負載平衡VPN連接並確保VPN連接的容錯性,直到至少一個活動節點留在集群中。 集群中的負載根據 VPN 會話數的節點工作量自動平衡。

對於集群特定節點的故障轉移(如果需要),可以使用文件管理器,因此活動連接將由文件管理器的主節點處理。 文件轉移不是負載均衡集群內保證容錯的必要條件,集群本身在節點故障時會將用戶會話轉移到另一個活動節點,但不保存連接狀態,這恰恰是由申報人提供。 因此,如果需要,可以結合這兩種技術。

一個 VPN 負載平衡集群可以包含兩個以上的節點。

ASA 5512-X 及更高版本支持 VPN 負載平衡集群。

由於 VPN 負載平衡集群中的每個 ASA 在設置方面都是一個獨立的單元,因此我們在每個單獨的設備上單獨執行所有配置步驟。

技術細節在這裡

給定示例的邏輯拓撲:

部署 ASA VPN 負載平衡集群

主要部署:

  1. 我們從映像中部署所需模板的 ASAv 實例 (ASAv5/10/30/50)。

  2. 我們將 INSIDE / OUTSIDE 接口分配給相同的 VLAN(外部在其自己的 VLAN 中,INSIDE 在其自己的 VLAN 中,但通常在集群內,請參閱拓撲),重要的是相同類型的接口位於同一 L2 網段中。

  3. 許可證:

    • 目前,ASAv 安裝沒有任何許可證,並且將限制為 100kbps。
    • 要安裝許可證,您需要在您的智能賬戶中生成一個令牌: https://software.cisco.com/ -> 智能軟件許可
    • 在打開的窗口中,單擊按鈕 新代幣

    部署 ASA VPN 負載平衡集群

    • 確保在打開的窗口中有一個活動字段並且複選框被選中 允許出口控制功能…如果此字段未激活,您將無法使用強加密功能,因此也無法使用 VPN。 如果此字段未激活,請聯繫您的客戶團隊並提出激活請求。

    部署 ASA VPN 負載平衡集群

    • 點擊按鈕後 創建令牌,將創建一個令牌,我們將使用它來獲取 ASAv 的許可證,複製它:

    部署 ASA VPN 負載平衡集群

    • 對每個部署的 ASAv 重複步驟 C、D、E。
    • 為了更容易複製令牌,讓我們暫時允許 telnet。 讓我們配置每個 ASA(下面的示例說明了 ASA-1 上的設置)。 telnet 不適用於外部,如果您確實需要它,請將安全級別更改為 100 到外部,然後將其返回。

    !
    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
    !

    • 要在智能賬戶雲中註冊令牌,您必須為 ASA 提供互聯網訪問權限, 詳情在這裡.

    簡而言之,需要 ASA:

    • 通過 HTTPS 訪問互聯網;
    • 時間同步(更準確地說,通過 NTP);
    • 註冊的 DNS 服務器;
      • 我們遠程登錄到我們的 ASA 並進行設置以通過智能帳戶激活許可證。

    !
    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>

    • 我們檢查設備是否已成功註冊許可證並且加密選項可用:

    部署 ASA VPN 負載平衡集群

    部署 ASA VPN 負載平衡集群

  4. 在每個網關上設置一個基本的 SSL-VPN

    • 接下來,通過 SSH 和 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 
    !

    • 要使 ASDM 正常工作,您必須首先從 cisco.com 網站下載它,在我的例子中是以下文件:

    部署 ASA VPN 負載平衡集群

    • 要使 AnyConnect 客戶端正常工作,您需要為每個使用的桌面客戶端操作系統(計劃使用 Linux/Windows/MAC)向每個 ASA 上傳一個圖像,您需要一個文件 頭端部署包 在標題中:

    部署 ASA VPN 負載平衡集群

    • 下載的文件可以上傳到例如 FTP 服務器並上傳到每個單獨的 ASA:

    部署 ASA VPN 負載平衡集群

    • 我們為 SSL-VPN 配置 ASDM 和自簽名證書(建議在生產中使用受信任的證書)。 虛擬集群地址 (vpn-demo.ashes.cc) 的設置 FQDN,以及與每個集群節點的外部地址關聯的每個 FQDN,必須在外部 DNS 區域中解析為 OUTSIDE 接口(或如果使用端口轉發 udp/443 (DTLS) 和 tcp/443(TLS))到映射地址。 有關證書要求的詳細信息,請參閱本節 證書驗證 文檔。

    !
    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               

    • 不要忘記指定端口以檢查 ASDM 是否正常工作,例如:

    部署 ASA VPN 負載平衡集群

    • 下面我們來進行隧道的基本設置:
    • 讓我們通過隧道使公司網絡可用,讓 Internet 直接通過(如果連接主機沒有保護,這不是最安全的方法,有可能穿透受感染的主機並顯示公司數據,選項 拆分隧道策略 tunnelall 將使所有主機流量進入隧道。 儘管如此 分裂隧道 可以卸載 VPN 網關而不處理主機 Internet 流量)
    • 讓我們從 192.168.20.0/24 子網向隧道中的主機發布地址(從 10 到 30 個地址池(對於節點 #1))。 VPN 集群的每個節點都必須有自己的池。
    • 我們將在ASA上用本地創建的用戶進行基本認證(不推薦,這是最簡單的方法),最好通過 LDAP/半徑,或者更好的是,領帶 多重身份驗證(MFA)例子 思科 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
    !

    • (選修的): 在上面的例子中,我們在ITU上使用了一個本地用戶來對遠程用戶進行認證,當然除了在實驗室之外,應用性很差。 我將舉例說明如何快速調整身份驗證設置以適應 半徑 服務器,例如使用 思科身份服務引擎:

    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 
    !

    這種集成不僅可以快速將身份驗證程序與 AD 目錄服務集成,還可以區分連接的計算機是否屬於 AD,了解此設備是公司還是個人,並評估連接設備的狀態.

    部署 ASA VPN 負載平衡集群

    部署 ASA VPN 負載平衡集群

    • 讓我們配置透明 NAT,以便客戶端和公司網絡網絡資源之間的流量不被塗鴉:

    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

    • (選修的): 為了通過 ASA 將我們的客戶暴露在互聯網上(使用時 隧道 選項)使用 PAT,以及通過它們連接的相同 OUTSIDE 接口退出,您需要進行以下設置

    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 
    !

    • 使用集群時,讓內部網絡了解哪個 ASA 將返回流量路由給用戶是極其重要的,為此您需要重新分配發送給客戶端的路由/32 地址。
      目前,我們還沒有配置集群,但我們已經有了可以通過 FQDN 或 IP 單獨連接的可用 VPN 網關。

    部署 ASA VPN 負載平衡集群

    我們在第一個 ASA 的路由表中看到連接的客戶端:

    部署 ASA VPN 負載平衡集群

    為了讓我們整個 VPN 集群和整個企業網絡都知道到我們客戶端的路由,我們將客戶端前綴重新分配到一個動態路由協議中,例如 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

    現在我們有一條從第二個 ASA-2 網關到客戶端的路由,連接到集群內不同 VPN 網關的用戶可以,例如,直接通過公司軟電話進行通信,以及從用戶請求的資源返回流量來到所需的 VPN 網關:

    部署 ASA VPN 負載平衡集群

  5. 讓我們繼續配置負載平衡集群。

    地址 192.168.31.40 將用作虛擬 IP(VIP - 所有 VPN 客戶端最初都會連接到它),Master 集群將從該地址重定向到負載較小的集群節點。 別忘了寫 正向和反向 DNS 記錄 既針對集群每個節點的每個外部地址/FQDN,也針對 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)#

    • 我們用兩個連接的客戶端檢查集群的運行情況:

    部署 ASA VPN 負載平衡集群

    • 讓我們通過 ASDM 使用自動加載的 AnyConnect 配置文件讓客戶體驗更加方便。

    部署 ASA VPN 負載平衡集群

    我們以方便的方式命名配置文件並將我們的組策略與其相關聯:

    部署 ASA VPN 負載平衡集群

    客戶端下次連接後,該配置文件會自動下載並安裝到AnyConnect客戶端中,所以如果需要連接,只需從列表中選擇即可:

    部署 ASA VPN 負載平衡集群

    由於我們使用 ASDM 僅在一個 ASA 上創建了此配置文件,因此請不要忘記在集群中的其他 ASA 上重複這些步驟。

結論: 因此,我們很快部署了一個由多個具有自動負載平衡的 VPN 網關組成的集群。 向集群添加新節點很容易,通過部署新的 ASAv 虛擬機或使用硬件 ASA 進行簡單的水平擴展。 功能豐富的 AnyConnect 客戶端可以通過使用 姿勢(狀態估計), 最有效地與集中控制和訪問記帳系統結合使用 身份服務引擎.

來源: www.habr.com

添加評論