在本文中,我想提供有关如何快速部署目前最具扩展性的方案的分步说明。 远程访问 VPN 基于访问 AnyConnect 和思科 ASA – VPN 负载均衡集群.
介绍: 鉴于 COVID-19 的现状,世界各地的许多公司都在努力将员工转移到远程工作。 由于向远程工作的大规模过渡,公司现有 VPN 网关的负载正在急剧增加,因此需要非常快速地扩展它们的能力。 另一方面,许多公司被迫从头开始仓促掌握远程工作的概念。
为了帮助企业在尽可能短的时间内为员工实现方便、安全和可扩展的 VPN 访问,思科授权 AnyConnect 功能丰富的 SSL-VPN 客户端长达 13 周。
我已经准备了一个分步指南,用于简单部署 VPN 负载平衡集群作为最具可扩展性的 VPN 技术。
下面的示例在使用的身份验证和授权算法方面将非常简单,但对于快速入门(目前对许多人来说还不够)来说是一个不错的选择,并且可以在部署期间深入适应您的需求过程。
简要信息: VPN Load Balancing Cluster 技术不是故障转移,也不是其原生意义上的集群功能,该技术可以组合完全不同的 ASA 模型(有一定限制),以平衡远程访问 VPN 连接的负载。 这种集群的节点之间没有会话和配置的同步,但是可以自动负载平衡VPN连接并确保VPN连接的容错性,直到至少有一个活动节点留在集群中。 集群中的负载根据 VPN 会话数的节点工作量自动平衡。
对于集群特定节点的故障转移(如果需要),可以使用文件管理器,因此活动连接将由文件管理器的主节点处理。 文件转移不是负载均衡集群内保证容错的必要条件,集群本身在节点故障时会将用户会话转移到另一个活动节点,但不保存连接状态,这恰恰是由申报人提供。 因此,如果需要,可以结合这两种技术。
一个 VPN 负载平衡集群可以包含两个以上的节点。
ASA 5512-X 及更高版本支持 VPN 负载平衡集群。
由于 VPN 负载平衡集群中的每个 ASA 在设置方面都是一个独立的单元,因此我们在每个单独的设备上单独执行所有配置步骤。
给定示例的逻辑拓扑:
主要部署:
-
我们从映像中部署所需模板的 ASAv 实例 (ASAv5/10/30/50)。
-
我们将 INSIDE / OUTSIDE 接口分配给相同的 VLAN(外部在其自己的 VLAN 中,INSIDE 在其自己的 VLAN 中,但通常在集群内,请参见拓扑),重要的是相同类型的接口位于同一 L2 网段中。
-
许可证:
- 目前,ASAv 安装没有任何许可证,并且将限制为 100kbps。
- 要安装许可证,您需要在您的智能账户中生成一个令牌:
https://software.cisco.com/ -> 智能软件许可 - 在打开的窗口中,单击按钮 新币
- 确保在打开的窗口中有一个活动字段并且选中了复选标记 允许出口控制功能…如果此字段未激活,您将无法使用强加密功能,因此也无法使用 VPN。 如果此字段未激活,请联系您的客户团队并提出激活请求。
- 按下按钮后 创建令牌,将创建一个令牌,我们将使用它来获取 ASAv 的许可证,复制它:
- 对每个部署的 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>
- 我们检查设备是否已成功注册许可证并且加密选项可用:
-
在每个网关上设置一个基本的 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 网站下载它,在我的例子中是以下文件:
- 为了使 AnyConnect 客户端正常工作,您需要为每个使用的客户端桌面操作系统(计划使用 Linux/Windows/MAC)向每个 ASA 上传一个图像,您需要一个文件 头端部署包 在标题中:
- 下载的文件可以上传到例如 FTP 服务器并上传到每个单独的 ASA:
- 我们为 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 是否正常工作,例如:
- 下面我们来进行隧道的基本设置:
- 让我们通过隧道使公司网络可用,让 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,了解此设备是公司还是个人,并评估连接设备的状态.
- 让我们配置透明 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 集群和整个企业网络都知道到我们客户端的路由,我们将客户端前缀重新分配到一个动态路由协议中,例如 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 网关:
-
让我们继续配置负载平衡集群。
地址 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)#
- 我们用两个连接的客户端检查集群的运行情况:
- 让我们通过 ASDM 使用自动加载的 AnyConnect 配置文件让客户体验更加方便。
我们以方便的方式命名配置文件并将我们的组策略与其相关联:
客户端下次连接后,此配置文件将自动下载并安装在 AnyConnect 客户端中,因此如果您需要连接,只需从列表中选择它即可:
由于我们使用 ASDM 仅在一个 ASA 上创建了此配置文件,因此请不要忘记在集群中的其他 ASA 上重复这些步骤。
结论: 因此,我们很快部署了一个由多个具有自动负载平衡的 VPN 网关组成的集群。 向集群添加新节点很容易,通过部署新的 ASAv 虚拟机或使用硬件 ASA 进行简单的水平扩展。 功能丰富的 AnyConnect 客户端可以通过使用 姿势(状态估计), 最有效地与集中控制和访问记帐系统结合使用 身份服务引擎.
来源: habr.com