Túneis IPsec com endpoints dinâmicos
Configuração de endpoints dinâmicos para túneis IPsec
Os túneis IPsec também podem ser estabelecidos usando gateways de segurança de peer dinâmicos , nos quais as extremidades remotas dos túneis não têm um endereço IP atribuído estaticamente. Como o endereço remoto não é conhecido e pode ser extraído de um pool de endereços cada vez que o host remoto é reinicializado, o estabelecimento do túnel depende do uso do modo IKE main com chaves globais pré-compartilhadas ou certificados digitais que aceitam qualquer valor de identificação remota. Há suporte para túneis baseados em políticas e do tipo link:
Os túneis baseados em políticas usavam o modo compartilhado.
Os túneis roteados ou do tipo enlace usam o modo dedicado. Cada túnel aloca uma interface de serviços a partir de um conjunto de interfaces configuradas para os peers dinâmicos. Os protocolos de roteamento podem ser configurados para serem executados nessas interfaces de serviços para aprender rotas pelo túnel IPsec que é usado como um link nesse cenário.
Esta seção inclui os seguintes tópicos:
- Processo de autenticação
- Regras dinâmicas implícitas
- Inserção de rota reversa
- Configurando um perfil de acesso IKE
- Referenciando o perfil de acesso IKE em um conjunto de serviços
- Configurando o identificador de interface
- Propostas padrão de IKE e IPsec
- Distribuição de túneis IPsec de endpoint entre interfaces de serviços
Processo de autenticação
O remoto (peer dinâmico) inicia as negociações com o roteador local (Juniper Networks). O roteador local usa as políticas padrão de IKE e IPsec para corresponder às propostas enviadas pelo peer remoto para negociar os valores da associação de segurança (SA). As propostas implícitas contêm uma lista de todas as transformações suportadas que o roteador local espera de todos os pares dinâmicos.
Se a autenticação de chave pré-compartilhada for usada, a chave pré-compartilhada será global para um conjunto de serviços. Ao buscar a chave pré-compartilhada para o peer, o roteador local compara o endereço de origem do peer com quaisquer chaves pré-compartilhadas configuradas explicitamente nesse conjunto de serviços. Se uma correspondência não for encontrada, o roteador local usará a chave global pré-compartilhada para autenticação.
A fase 2 da autenticação compara as identidades de proxy dos hosts e redes protegidos enviadas pelo peer com uma lista de identidades de proxy configuradas. A identidade de proxy aceita é usada para criar as regras dinâmicas para criptografar o tráfego. Você pode configurar identidades de proxy incluindo a allowed-proxy-pair declaração no perfil de acesso IKE. Se nenhuma entrada corresponder, a negociação será rejeitada.
Se você não configurar a allowed-proxy-pair declaração, o valor ANY(0.0.0.0/0)-ANY padrão será aplicado e o roteador local aceitará todas as identidades de proxy enviadas pelo peer. Ambos os endereços IPv4 e IPv6 são aceitos, mas você deve configurar todos os endereços IPv6 manualmente.
Quando a negociação da fase 2 é concluída com sucesso, o roteador cria as regras dinâmicas e insere a rota reversa na tabela de roteamento usando a identidade de proxy aceita.
Regras dinâmicas implícitas
Após a negociação bem-sucedida com o peer dinâmico, o processo de gerenciamento de chaves (kmd) cria uma regra dinâmica para o proxy de fase 2 aceito e a aplica no AS local ou no PIC multisserviços. Os endereços de origem e destino são especificados pelo proxy aceito. Essa regra é usada para criptografar o tráfego direcionado a um dos hosts finais na identidade de proxy da fase 2.
A regra dinâmica inclui um ipsec-inside-interface valor, que é o nome da interface atribuído ao túnel dinâmico. Os source-address valores e destination-address são aceitos a partir do ID do proxy. O match-direction valor é input para conjuntos de serviços no estilo next-hop.
Você não configura essa regra; Ele é criado pelo Processo de Gerenciamento de Chaves (KMD).
A pesquisa de regras para túneis estáticos não é afetada pela presença de uma regra dinâmica; É executado na ordem configurada. Quando um pacote é recebido para um conjunto de serviços, as regras estáticas são sempre correspondidas primeiro.
As regras dinâmicas são correspondidas após a falha da correspondência de regra para regras estáticas.
A resposta às mensagens de saudação de detecção de peer inativo (DPD) ocorre da mesma maneira com peers dinâmicos e com peers estáticos. Não há suporte para iniciar mensagens de saudação DPD de pares dinâmicos.
Inserção de rota reversa
As rotas estáticas são inseridas automaticamente na tabela de rotas para essas redes e hosts protegidos por um endpoint de túnel remoto. Esses hosts e redes protegidos são conhecidos como identidades proxy remotas.
Cada rota é criada com base na rede proxy remota e na máscara enviada pelo peer e é inserida na tabela de rotas relevante após negociações bem-sucedidas da fase 1 e da fase 2.
A preferência de rota para cada rota reversa estática é 1. Esse valor é necessário para evitar conflitos com rotas semelhantes que podem ser adicionadas pelo processo de protocolo de roteamento (rpd).
Nenhuma rota será adicionada se o endereço de proxy remoto aceito for o padrão (0.0.0.0/0). Nesse caso, você pode executar protocolos de roteamento no túnel IPsec para aprender rotas e adicionar rotas estáticas para o tráfego que deseja proteger nesse túnel.
Para conjuntos de serviços no estilo next-hop, as rotas reversas incluem próximos hops apontando para os locais especificados pela inside-service-interface instrução.
A tabela de rotas na qual inserir essas rotas depende de onde o inside-service-interface local está listado. Se essas interfaces estiverem presentes em uma instância de roteamento e encaminhamento (VRF) de VPN, as rotas serão adicionadas à tabela VRF correspondente; caso contrário, as rotas serão adicionadas ao inet.0.
A inserção de rota reversa ocorre apenas para túneis para pares dinâmicos. Essas rotas são adicionadas apenas para conjuntos de serviços no estilo next-hop.
Configurando um perfil de acesso IKE
Você pode configurar apenas um perfil de túnel por conjunto de serviços para todos os pares dinâmicos. A chave pré-compartilhada configurada no perfil é usada para autenticação de IKE de todos os pares dinâmicos que terminam nesse conjunto de serviços. Como alternativa, você pode incluir a ike-policy instrução para fazer referência a uma política de IKE definida com valores de identificação específicos ou um curinga (a any-remote-id opção). Você configura a política de IKE no nível de [edit services ipsec-vpn ike] hierarquia.
O perfil de túnel IKE especifica todas as informações necessárias para concluir a negociação de IKE. Cada protocolo tem sua própria hierarquia de instrução dentro da instrução do cliente para configurar pares de valores de atributo específicos do protocolo, mas apenas uma configuração de cliente é permitida para cada perfil. A seguir está a configuração no nível de [edit access] hierarquia; para obter mais informações sobre perfis de acesso, consulte a Biblioteca de Administração do Junos OS para Dispositivos de Roteamento.
[edit access]
profile profile-name {
client * {
ike {
allowed-proxy-pair {
remote remote-proxy-address local local-proxy-address;
}
pre-shared-key (ascii-text key-string | hexadecimal key-string);
ike-policy policy-name;
interface-id <string-value>;
ipsec-policy ipsec-policy;
}
}
}
Para peers dinâmicos, o Junos OS oferece suporte ao modo principal IKE com o método de chave pré-compartilhada de autenticação ou um perfil de acesso IKE que usa um certificado digital local.
No modo de chave pré-compartilhada, o endereço IP é usado para identificar um par de túnel para obter as informações de chave pré-compartilhada. O
clientvalor*(curinga) significa que a configuração dentro desse perfil é válida para todos os pares dinâmicos que terminam dentro do conjunto de serviços que acessam esse perfil.No modo de certificado digital, a política de IKE define quais valores de identificação remota são permitidos.
As seguintes instruções compõem o perfil IKE:
allowed-proxy-pair— Durante a negociação do IKE da fase 2, o peer remoto fornece seu endereço de rede (remote) e o endereço de rede de seu peer (local). Como vários túneis dinâmicos são autenticados por meio do mesmo mecanismo, essa instrução deve incluir a lista de combinações possíveis. Se o peer dinâmico não apresentar uma combinação válida, a negociação do IKE da fase 2 falhará.Por padrão,
remote 0.0.0.0/0 local 0.0.0.0/0é usado se nenhum valor estiver configurado. Os formatos de endereço IPv4 e IPv6 são suportados nessa configuração, mas não há endereços IPv6 padrão. Você deve especificar até mesmo0::0/0.pre-shared-key— Chave usada para autenticar o peer dinâmico durante a negociação da fase 1 do IKE. Essa chave é conhecida por ambas as extremidades por meio de um mecanismo seguro fora de banda. Você pode configurar o valor emhexadecimalouascii-textformatar. É um valor obrigatório.ike-policy— Política que define os valores de identificação remota correspondentes aos pares dinâmicos permitidos; Pode conter um valorany-remote-idcuringa para uso somente em configurações de endpoint dinâmico.interface-id— Identificador de interface, um atributo obrigatório usado para derivar as informações da interface de serviços lógicos para a sessão.ipsec-policy— Nome da política IPsec que define as informações da política IPsec para a sessão. Você define a diretiva IPsec no nível da[edit services ipsec-vpn ipsec policy policy-name]hierarquia. Se nenhuma política for definida, qualquer política proposta pelo peer dinâmico será aceita.
Referenciando o perfil de acesso IKE em um conjunto de serviços
Para concluir a configuração, você precisa fazer referência ao perfil de acesso IKE configurado no nível da [edit access] hierarquia. Para fazer isso, inclua a ike-access-profile instrução no nível da [edit services service-set name ipsec-vpn-options] hierarquia:
[edit services service-set name] ipsec-vpn-options { local-gateway address; ike-access-profile profile-name; } next-hop-service { inside-service-interface interface-name; outside-service-interface interface-name; }
A ike-access-profile declaração deve fazer referência ao mesmo nome que a profile declaração que você configurou para acesso ao IKE no nível de [edit access] hierarquia. Você pode fazer referência a apenas um perfil de acesso em cada conjunto de serviços. Esse perfil é usado para negociar associações de segurança IKE e IPsec apenas com pares dinâmicos.
Todas as interfaces referenciadas pela instrução dentro de inside-service-interface um conjunto de serviços devem pertencer à mesma instância VRF.
Configurando o identificador de interface
Você pode configurar um identificador de interface para um grupo de peers dinâmicos, que especifica quais interfaces lógicas de serviços adaptativos participam da negociação de IPsec dinâmico. Ao atribuir o mesmo identificador de interface a várias interfaces lógicas, você pode criar um pool de interfaces para essa finalidade. Para configurar um identificador de interface, inclua a declaração e a ipsec-interface-id dedicated instrução or shared no nível da [edit interfaces interface-name unit logical-unit-number dial-options] hierarquia:
[edit interfaces interface-name unit logical-unit-number dial-options] ipsec-interface-id identifier; (dedicated | shared);
Especificar o identificador de interface na dial-options instrução torna essa interface lógica parte do pool identificado pela ipsec-interface-id instrução.
Apenas um identificador de interface pode ser especificado por vez. Você pode incluir a ipsec-interface-id declaração ou a l2tp-interface-id declaração, mas não ambas.
Se você configurar shared o modo, ele permitirá que uma interface lógica seja compartilhada em vários túneis. A dedicated declaração especifica que a interface lógica é usada em um modo dedicado, o que é necessário quando você está configurando um túnel do tipo enlace IPsec. Você deve incluir a dedicated instrução ao especificar um ipsec-interface-id valor.
Propostas padrão de IKE e IPsec
O software inclui propostas implícitas de IKE e IPsec padrão para corresponder às propostas enviadas pelos pares dinâmicos. Os valores são mostrados na Tabela 1; Se mais de um valor for mostrado, o primeiro valor será o padrão.
Os certificados RSA não são compatíveis com a configuração dinâmica do endpoint.
Nome da declaração |
Valores |
|---|---|
| Proposta de IKE implícita | |
|
|
|
|
|
|
|
|
|
|
| Proposta de IPsec implícito | |
|
|
|
|
|
|
|
|
Distribuição de túneis IPsec de endpoint entre interfaces de serviços
A partir do Junos OS Release 16.2R1, você pode distribuir túneis IPsec com endpoints dinâmicos entre vários MS-MICs ou entre vários PICs de serviço de um MS-MPC. Você configura a distribuição de túnel configurando um conjunto de serviços IPsec de próximo salto para a interface de multisserviços (ms-) de cada PIC de serviço. A partir do Junos OS Release 17.1R1, você também pode distribuir túneis IPsec com endpoints dinâmicos entre interfaces agregadas de multisserviços (AMS) de MS-MICs ou MS-MPCs configurando um conjunto de serviços IPsec next-hop para cada interface AMS.
Posteriormente, você pode adicionar hardware PIC de serviço ao roteador da Série MX e incluir o PIC de serviço na distribuição de túnel simplesmente adicionando outro conjunto de serviços, sem a necessidade de mudar a configuração dos pares IPsec.
Para configurar a distribuição de túneis, execute as seguintes etapas ao configurar túneis IPsec de endpoint dinâmico:
Configure um conjunto de serviços IPsec next-hop para cada interface de serviços ou interface AMS usada pelo túnel IPsec do endpoint dinâmico (consulte Referenciando o Perfil de Acesso IKE em um Conjunto de Serviços). Todos os conjuntos de serviços devem:
Use o mesmo tipo de interface de serviços — interfaces multisserviços (ms-) ou interfaces AMS (ams-).
Tenha uma interface na
outside-serviceinstrução que esteja na mesma instância de roteamento e encaminhamento de VPN (VRF) que as interfaces nos outros conjuntos de serviços.Ter o mesmo
local-gatewayendereço IP.Ter o mesmo
ike-access-profilenome.
Ao configurar o identificador de interface (consulte Configurando o identificador de interface), o
ipsec-interface-id identifierdeve ser configurado:Somente em interfaces que aparecem nas
inside-service-setinstruções dos conjuntos de serviços.Com
dedicatedpara todas as interfaces ou comsharedpara todas as interfaces.Em não mais do que uma unidade compartilhada de uma interface.
Somente em interfaces configuradas com
service-domain inside.Somente em interfaces que estão no mesmo VRF.
Exemplo: configuração de túneis com base em políticas atribuídos dinamicamente
Este exemplo mostra como configurar túneis baseados em políticas atribuídos dinamicamente e contém as seções a seguir.
Requerimentos
Este exemplo usa os seguintes componentes de hardware e software:
-
Três roteadores da Série M, Série MX ou Série T.
-
Junos OS versão 9.4 ou posterior.
Visão geral e topologia
Uma política de IPsec para pontos de extremidade dinâmicos define uma combinação de parâmetros de segurança (propostas de IPsec) usados durante a negociação de IPsec entre gateways de segurança de peer dinâmico, nos quais as extremidades remotas dos túneis não têm um endereço IP atribuído estaticamente.
Uma VPN baseada em política é uma configuração com um túnel VPN específico referenciado em uma política que atua como um túnel. Você usará uma VPN baseada em políticas se o dispositivo VPN remoto for um dispositivo que não é da Juniper e se você precisar acessar apenas uma sub-rede ou uma rede no local remoto, em toda a VPN.
Este exemplo explica a topologia de tunelamento de endpoint dinâmico IPsec, conforme mostrado na Figura 1.
Antes de configurar túneis atribuídos dinamicamente, certifique-se de ter:
-
Uma rede local N-1 conectada a um gateway de segurança SG-1. Os pontos de saída devem ter um roteador da Juniper Networks para encerrar os endpoints de peer estáticos e dinâmicos. O endereço de terminação do túnel no SG-1 é 10.1.1.1 e o endereço de rede local é 172.16.1.0/24.
-
Dois roteadores peer remotos que obtêm endereços de um pool de ISP e executam um IKE compatível com RFC. A rede remota N-2 tem o endereço 172.16.2.0/24 e está conectada ao gateway de segurança SG-2 com o endereço de terminação do túnel 10.2.2.2. A rede remota N-3 tem o endereço 172.16.3.0/24 e está conectada ao gateway de segurança SG-3 com o endereço de terminação de túnel 10.3.3.3.
Topologia
Configuração
Para configurar túneis com base em políticas atribuídos dinamicamente, execute estas tarefas:
Os tipos de interface mostrados neste exemplo são apenas para fins indicativos. Por exemplo, você pode usar so- interfaces em vez de ge- e sp- em vez de ms-.
Configuração rápida da CLI
Para configurar rapidamente este exemplo, copie os seguintes comandos, cole-os em um arquivo de texto, remova quaisquer quebras de linha, altere todos os detalhes necessários para corresponder à sua configuração de rede e, em seguida, copie e cole os comandos na CLI, no nível de [edit] hierarquia, do roteador SG1.
Configuração de interfaces
set interfaces ms-0/0/0 unit 0 family inet set interfaces ms-0/0/0 unit 1 family inet set interfaces ms-0/0/0 unit 1 service-domain inside set interfaces ms-0/0/0 unit 1 dial-options ipsec-interface-id demo-ipsec-interface-id set interfaces ms-0/0/0 unit 1 dial-options shared set interfaces ms-0/0/0 unit 2 family inet set interfaces ms-0/0/0 unit 2 service-domain outside
Configurando o perfil de acesso
set access profile demo-access-profile client * ike allowed-proxy-pair remote 172.16.2.0/24 local 172.16.1.0/24 set access profile demo-access-profile client * ike allowed-proxy-pair remote 172.16.3.0/24 local 172.16.1.0/24 set access profile demo-access-profile client * ike ascii-text keyfordynamicpeers set access profile demo-access-profile client * ike interface-id demo-ipsec-interface-id
Configurando o conjunto de serviços
set services service-set demo-service-set next-hop-service inside-service-interface ms-0/0/0.1 set services service-set demo-service-set next-hop-service outside-service-interface ms-0/0/0.2
Configurando propriedades de IPsec
set services ipsec-vpn ipsec proposal ipsec_proposal_demo1 protocol esp set services ipsec-vpn ipsec proposal ipsec_proposal_demo1 authentication-algorithm hmac-sha1-96 set services ipsec-vpn ipsec proposal ipsec_proposal_demo1 encryption-algorithm 3des-cbc set services ipsec-vpn ipsec policy demo2 perfect-forward-secrecy keys group2 set services ipsec-vpn ipsec policy demo2 proposals ipsec_proposal_demo1 set services ipsec-vpn ike proposal ike_proposal_demo1 authentication-method pre-shared-keys set services ipsec-vpn ike proposal ike_proposal_demo1 dh-group group2 set services ipsec-vpn ike policy ike_policy_demo1 version 2 set services ipsec-vpn ike policy ike_policy_demo1 proposals ike_proposal_demo1 set services ipsec-vpn ike policy ike_policy_demo1 pre-shared-key ascii-text keyfordemo1
Configuração de instâncias de roteamento
set routing-instances demo-vrf instance-type vrf set routing-instances demo-vrf ms-0/0/0.1 set routing-instances demo-vrf ms-0/0/0.2
Configuração de um conjunto de serviços SG1 next-hop
Procedimento passo a passo
Procedimento passo a passo
O exemplo a seguir requer que você navegue por vários níveis na hierarquia de configuração.
-
Configure as interfaces.
[edit interfaces] user@router1# set interfaces ms-0/0/0 unit 0 family inet user@router1# set interfaces ms-0/0/0 unit 1 family inet user@router1# set interfaces ms-0/0/0 unit 1 service-domain inside user@router1# set interfaces ms-0/0/0 unit 1 dial-options ipsec-interface-id demo-ipsec-interface-id user@router1# set interfaces ms-0/0/0 unit 1 dial-options mode shared user@router1# set interfaces ms-0/0/0 unit 2 family inet user@router1# set interfaces ms-0/0/0 unit 2 service-domain outside
-
Configure o perfil de acesso.
[edit access] user@router1# set profile demo-access-profile client * ike allowed-proxy-pair remote 172.16.2.0/24 local 172.16.1.0/24 user@router1# set profile demo-access-profile client * ike ascii-text keyfordynamicpeers user@router1# set profile demo-access-profile client * ike interface-id demo-ipsec-interface-id
-
Configure o conjunto de serviços.
[edit services] user@router1# set service-set demo-service-set next-hop-service inside-service-interface ms-0/0/0.1 user@router1# set service-set demo-service-set next-hop-service outside-service-interface ms-0/0/0.2
-
Configure as propriedades IPsec.
[edit services ipsec-vpn] user@router1#set ipsec proposal ipsec_proposal_demo1 protocol esp user@router1#set ipsec proposal ipsec_proposal_demo1 authentication-algorithm hmac-sha1-96 user@router1#set ipsec proposal ipsec_proposal_demo1 encryption-algorithm 3des-cbc user@router1#set ipsec policy demo2 perfect-forward-secrecy keys group2 user@router1#set ipsec policy demo2 proposals ipsec_proposal_demo1 user@router1#set ike proposal ike_proposal_demo1 authentication-method pre-shared-keys user@router1#set ike proposal ike_proposal_demo1 dh-group group2 user@router1#set ike policy ike_policy_demo1 version 2 user@router1#set ike policy ike_policy_demo1 proposals ike_proposal_demo1 user@router1#set ike policy ike_policy_demo1 pre-shared-key ascii-text keyfordemo1
-
Configure as instâncias de roteamento.
[edit routing-instances] user@router1# set demo-vrf instance-type vrf user@router1# set demo-vrf ms-0/0/0.1 user@router1# set demo-vrf ms-0/0/0.2
Resultados
No modo de configuração do Roteador 1, confirme sua configuração digitando os show interfacescomandos , show accesse show services . Se a saída não exibir a configuração pretendida, repita as instruções neste exemplo para corrigir a configuração.
interfaces {
ms-0/0/0 {
unit 0 {
family inet;
}
unit 1 {
family inet;
service-domain inside;
dial-options {
ipsec-interface-id demo-ipsec-interface-id;
mode shared;
}
}
unit 2 {
family inet;
service-domain outside;
}
}
}
access {
profile demo-access-profile client * {
ike {
allowed-proxy-pair {
remote 172.16.2.0/24 local 172.16.1.0/24; #Set for Network 2 connected to Network 1
remote 172.16.3.0/24 local 172.16.1.0/24; #Set for Network 3 connected to Network 1
}
pre-shared-key {
ascii-text keyfordynamicpeers;
}
interface-id demo-ipsec-interface-id;
}
}
}
services {
service-set demo-service-set {
next-hop-service {
inside-service-interface ms-0/0/0.1;
outside-service-interface ms-0/0/0.2;
}
ipsec-vpn-options {
local-gateway 10.1.1.1;
ike-access-profile demo-access-profile;
}
}
ipsec-vpn {
ipsec {
proposal ipsec_proposal_demo1 {
protocol esp;
authentication-algorithm hmac-sha1-96;
encryption-algorithm 3des-cbc;
}
policy demo2 {
perfect-forward-secrecy {
keys group2;
}
proposals ipsec_proposal_demo1;
}
}
ike {
proposal ike_proposal_demo1 {
authentication-method pre-shared-keys;
dh-group group2;
}
policy ike_policy_demo1 {
version 2;
proposals ike_proposal_demo1;
pre-shared-key ascii-text "$ABC123"; ## SECRET-DATA
}
}
}
}
routing-instances {
demo-vrf {
instance-type vrf;
interface ms-0/0/0.1;
interface ms-0/0/0.2;
}
}
Verificação
Verificando se o conjunto de serviços SG1 next-hop com túneis baseados em políticas foi criado
Finalidade
Verifique se o conjunto de serviços SG1 next-hop com túneis baseados em políticas foi criado.
Ação
Do modo operacional, insira o show route comando.
user@router1> show route demo-vrf.inet.0: .... # Routing instance 172.11.0.0/24 *[Static/1].. > via ms-0/0/0.1 172.12.0.0/24 *[Static/1].. > via ms-0/0/0.1
Do modo operacional, entre no show services ipsec-vpn ipsec security-associations detail
user@router1>show services ipsec-vpn ipsec security-associations detail rule: junos-dynamic-rule-0 term: term-0 local-gateway-address : 10.1.1.1 #Tunnel termination address on SG-1 remote-gateway-address: 10.2.2.2 #Tunnel termination address on SG-2 source-address : 0.0.0.0/0 destination-address : 0.0.0.0/0 ipsec-inside-interface: ms-0/0/0.1 term: term-1 local-gateway-address : 10.1.1.1 #Tunnel termination address on SG-1 remote-gateway-address: 10.3.3.3 #Tunnel termination address on SG-3 source-address : 0.0.0.0/0 destination-address : 0.0.0.0/0 IPsec Properties ipsec-inside-interface: ms-0/0/0.1 match-direction: input
Significado
A show services ipsec-vpn ipsec security-associations detail saída do comando mostra as propriedades que você configurou.
Tabela de histórico de alterações
A compatibilidade com recursos é determinada pela plataforma e versão utilizada. Use o Explorador de recursos para determinar se um recurso é compatível com sua plataforma.