部署 ASA VPN 负载平衡集群

在本文中,我想提供有关如何快速部署目前最具扩展性的方案的分步说明。 远程访问 VPN 基于访问 AnyConnect 和思科 ASAVPN 负载均衡集群.

介绍: 鉴于 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 客户端最初都会连接到它),主集群将从该地址重定向到负载较小的集群节点。 别忘了写 正向和反向 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 客户端可以通过使用 姿势(状态估计), 最有效地与集中控制和访问记帐系统结合使用 身份服务引擎.

来源: habr.com

添加评论