A Virtualização de Redes utilizando Encapsulamento de Roteamento Genérico (NVGRE) é uma proposta de normatização submetida pela primeira vez ao IETF em setembro de 2011 pelas empresas Microsoft, Arista Networks, Intel, Dell, Hewlett-Packard, Broadcom e Emulex.
A virtualização de rede no protocolo NVGRE envolve a criação de topologias de rede virtuais de camada 2 e camada 3 sobre uma rede física arbitrária também de camadas 2 e 3. A conectividade nas redes virtuais é proporcionada através do tunelamento de quadros ethernet da rede virtual sobre o protocolo IP na rede física através do protocolo de encapsulamento de roteamento genérico, ou GRE (Generic Routing Encapsulation). Uma sub-rede virtual de camada 2 pode se extender por múltiplas redes físicas. A arquitetura proposta é mostrada de forma resumida na figura 16.
Os requisitos para comunicação unicast bidirecional nas redes virtuais são comunicação unicast IP bidirecional e conectividade multicast na rede física. Se o operador de rede também desejar suporta para broadcast e multicast na rede virtual, deverá também proporcionar conectividade IP multicast na rede física. Domínios de broadcast virtuais são proporcionados através de árvores de distribuição multicast IP, funcionando de forma análoga aos domínios de broadcast de VLANs (Virtual Local Area Networks).
Cada rede virtual de camada 2 é identificada através de um identificador de sub-rede virtual, ou VSID (Virtual Subnet Identifier), de 24 bits. Este identificador oferece suporta para aproximadamente 16 milhões de sub-redes virtuais distintas em um mesmo domínio de controle, o que proporciona um aumento significativo de possibilidades quando comparado com os aproximadamente 4000 domínios proporcionados por identificadores de rede local virtual, ou VLAN (Virtual Local Area Network). Cada VSID representa um domínio de broadcast de camada 2, e rotas podem ser configuradas entre sub-redes. O VSID pode ser criado de tal maneira que identifique unicamente uma rede específica de um inquilino (Tenant), e como este é carregado no cabeçalho externo, permite que esta identificação esteja disponível para os diversos componentes da rede física.
O GRE é um protocolo padrão especificado pelas RFC2784 e RFC2890. Ele proporciona uma forma de encapsular um protocolo arbitrário sobre IP. A proposta do NVGRE modifica a semântica do campo de chave do protocolo GRE para que este passe a conter a VSID. Esta identificação por sua vez pode ser usada para construção de ferramentas para monitoramento, gerenciamento, inspeção e análise de tráfego que sejam capazes de distinguir o tráfego pertencente a múltiplos inquilinos (multi-tenant-aware).
Figura 16: Arquitetura NVGRE.
As terminações NVGRE, ou NVEs (Network Virtualization Endpoints) são os pontos troca de tráfego entre as redes físicas e virtuais. Qualquer servidor físico ou equipamento de rede poderá atuar como terminação NVGRE. Uma implementação comum consiste na terminação NVGRE como parte do Hipervisor.
A função primária de uma NVE é o encapsulamento e decapsulamento de quadros Ethernet que chegam e saem pelo túnel GRE, mantendo a semântica de camada dois e aplicando as politicas de isolamento com base na VSID. Opcionalmente, a NVE poderá prover roteamento à topologia virtual, ou atuar como ponte de ligação entre a topologia virtual e uma rede externa.
Para encapsular um quadro Ethernet, a NVE precisa saber as informações de localização para o endereço de destino no quadro. Esta informação de destino pode ser provida por um plano de controle, ou obtida através de uma combinação de planos de controle distribuídos e/ou aprendizado através do plano de dados. A especificação do protocolo NVGRE assume que estas informações de localização estão disponíveis para NVE, inclusive a identificação de sub-rede virtual (VSID).
O formato do cabeçalho utilizado para comunicação entre terminações NVGRE é o do protocolo GRE (Generic Routing Encapsulation), especificado pelas RFC2784 e RFC2890 (Figura 16). No entanto, o protocolo NVGRE adaptou a extensão de chave existente para que essa carregasse o VSID (Virtual Subnet Identifier).
Figura 17: Cabeçalho GRE com a extensão de chave da RFC2890.
O cabeçalho de um quadro NVGRE pode ser dividido em partes externa e interna. A parte externa é composta de um cabeçalho ethernet externo (Figura 17), do cabeçalho IPv4 (Figura 18) ou IPv6 externo e do cabeçalho GRE (Figura 19). A parte interna é composta do cabeçalho ethernet interno (Figura 20) e do cabeçalho do protocolo de camada de rede interno, tipicamente IP (Internet Protocol) (Figura 21). Foram utilizados os diagramas de bloco para o protocolo IPv4 para fins ilustrativos.
Figura 18: Cabeçalho Ethernet externo.
Figura 19: Cabeçalho IP externo.
Figura 20: Cabeçalho GRE modificado como na proposta NVGRE.
Figura 21: Cabeçalho Ethernet interno.
Figura 22: Cabeçalho IP interno com corpo de dados (Payload).
Na parte do cabeçalho externo correspondente ao cabeçalho ethernet, o endereço MAC de origem é o da terminação NVGRE e o endereço MAC de destino é o correspondente ao próximo salto IP para a NVE de destino. Este destino pode ou não estar na mesma sub-rede do NVE de origem. Opcionalmente, pode ser utilizado um identificador de VLAN (Virtual Local Area Network) para facilitar a gerência do tráfego ao administrador da rede. Na parte do cabeçalho externo correspondente ao cabeçalho IP, endereço IP de destino é designado pelo protocolo como Endereço do Provedor, ou PA (Provider Address). O último cabeçalho que compõe a parte externa do cabeçalho na comunicação NVGRE é o do protocolo GRE. Para seu uso com no NVGRE os bits correspondentes à soma de verificação (Checksum) e à presença do número de sequência devem ser '0', e o bit correspondente à chave deve ser '1'.
O campo de 32 bits correspondente à chave no protocolo GRE teve sua semântica modificada paro o uso no protocolo GRE, de forma que seus primeiros 24bits carreguem a o identificador de sub-rede virtual (VSID) e os últimos 8 bits o identificador opcional de fluxo virtual (FlowID). A especificação do NVGRE prevê que roteadores e/ou comutadores na rede física possam utilizar os 32 bits correspondentes ao campo original de chave para propósitos ligados a múltiplos caminhos de mesmo custo, ou ECMP (Equal-Cost Multi-Path), desta forma o campo FlowID pode ser usado para adicionar entropia dentro de uma mesma VSID. Se uma FlowID não for gerada, deve ter todos seus bits como '0'.
Na parte interna do cabeçalho correspondente ao cabeçalho ethernet os endereços de origem e destino corresponde aos designados para as interfaces virtuais de rede pertencentes à sub-rede virtual. A especificação do NVGRE recomenda que o cabeçalho ethernet interno não deva conter um identificador de VLAN, estes devem ser removidos pelo NVE de origem antes de encaminhar o pacote ao NVE de destino. Se um NVE recebe um cabeçalho ethernet interno com um identificador de VLAN, o frame deve ser inteiramente descartado. O protocolo de rede interno não é determinado pela especificação do NVGRE, podendo ser utilizado qualquer um, desta forma, o endereço de rede de destino é designado como Endereço do Consumidor, ou CA (Customer Address).
A versão atual da proposta do NVGRE ainda não trata com detalhes a ocorrência de fragmentação IP nos quadros ethernet internos, no entanto são feitas algumas disposições preliminares. A RFC2003, seção 5.1, prevê mecanismos para lidar com a fragmentação IP para encapsulamento IP sobre IP, dentre estes mecanismos o NVGRE deverá selecionar aqueles que proporcionem a não fragmentação no quadro externo após o encapsulamento do quadro interno. Também deverá ser observada a descoberta de unidade de transferência máxima, ou MTU (Maximum Transfer Unit), por NVE de destino. O tratamento de fragmentação para protocolos encapsulados diferentes de IP também será tratada em uma futura versão da proposta.
O NVE (Terminação NVGRE) encapsula quadros de camada 2 em GRE utilizando para endereçamento externo os PAs correspondentes as NVEs de origem e destino, como descrito anteriormente. Pode haver mais de uma PA associada a um mesmo NVE, a decisão a respeito de qual será usada para comunicação depende de políticas especificadas pelo administrador da rede para cada NVE.
O pacote GRE deverá ser comutado e roteado normalmente pela rede física até o destino, sendo a única premissa a existência de comunicação IP bidirecional entre as NVEs de origem e destino. A comutação faz uso somente do endereço ethernet externo, e o roteamento do endereço IP externo. No NVE de destino os quadros originais são decapsulados e encaminhados aos CAs (Endereços de Consumidor) de destino. O tráfego no caminho reverso se comporta de forma similar.
Caso o administrador da rede deseje oferecer suporte a broadcast e multicast, a especificação do protocolo NVGRE prevê a associação de cada VSID com um endereço multicast de escopo administrativo. Desta forma, todo tráfego multicast e broadcast será encaminhado por uma rede multicast na qual estarão inscritos todos os NVEs que possuam CAs associadas à sub-rede correspondente. Se o administrador de rede desejar, poderão ser selecionados endereços multicast em redes adicionais para uma mesma VSID, de forma a associar um endereço multicast em uma sub-rede com um endereço multicast individual na rede a qual pertencem os NVEs.
A aquisição de endereços ethernet e IP não faz parte da especificação do protocolo NVGRE, e podem ser feitas da forma como o administrador de rede desejar. Os espaços de endereçamento IP das PAs podem ser pertencentes IPVv6 ou IPv4, e os das CAs qualquer um dos anteriores ou mesmo outro para protocolos de rede não sejam o IP. As políticas de isolamento devem ser configuradas explicitamente em cada NVE, porém a forma como se dá esta configuração está além do escopo da especificação do protocolo NVGRE.
A conectividade com a Internet para CAs pertencentes a uma sub-rede virtual deverá ser proporcionada pelo NVE através da implementação de NAT (Network Address Translation) ou outro mecanismo semelhante.
Uma aplicação da arquitetura proposta na especificação NVGRE é a provisão de um caminho escalável para empresas que busquem a expansão de suas capacidades de hospedagem de máquinas virtuais através de nuvens públicas. Estas empresas poderão trazer suas configurações de sub-rede e políticas de isolamento para nuvem, possibilitando uma transição de recursos para ou a partir da nuvem de forma transparente. Será possível mover apenas porções de uma sub-rede para nuvem, ao mesmo tempo em que poderão ser preservados os modelos de acesso e uso pré-existentes.
Para tal deverá ser configurado um Gateway de rede virtual privada (VPN, Virtual Private Network) de forma a estabelecer um túnel sobre a internet que interligue todas as instalações onde estão presentes NVEs e a nuvem. Na nuvem deverá haver um gateway distinto para cada inquilino (Tenant) que utilize seus serviços. O tráfego entre NVEs em diferentes instalações deverá ser roteado fazendo uso destes novos gateways estabelecidos. Estes gateways poderão ser implementados em máquinas virtuais.
Figura 22: Topologia exemplificando o uso de NVGRE sobre VPN.
A figura 22 apresenta um exemplo de topologia onde a extensão de uma subrede virtual de camada 2 sobre a internet atende a diferentes instalações, como descrito acima.
Um dos benefícios da utilização de NVGRE é a escalabilidade do endereçamento IP, acompanhada pela escalabilidade obtida para tabelas de endereçamento MAC. No protocolo NVGRE, um NVE poderá utilizar apenas um PA para representar múltiplos CAs, diminuindo consideravelmente o tamanho das tabelas de endereçamento MAC em comutadores de topo de rack. Isto é um grande benefício no cenário de administração de redes em centros de dados, onde a virtualização de máquinas trouxe maiores demandas à infraestrutura da rede.
A incorporação de uma terminação GRE no hipervisor também proporciona um significativo aumento na escalabilidade. A arquitetura proposta permite a configuração prévia das informações de localização, o que por sua vez permite a terminação NVGRE atuar como proxy local do broadcast de tráfego ARP (Address Resoluion Protocol). Esta abordagem é escalável para grandes sub-redes virtuais, mesmo que se extendam por diversas redes físicas de camada 3. Isto permite que a carga de trabalho se desloque sem que seja colocada uma carga demasiadamente grande no plano de controle da rede.
A eliminação da maior parte do tráfego broadcast, e a conversão da restante em multicast, permite um funcionamento mais eficiente de roteadores e comutadores na medida em que são construídas árvores eficientes de multicast. A utilização eficiente da capacidade de servidores e infraestrutura de rede permite a diminuição do custo de construção e gerenciamento de centros de dados.
Como a proposta do NVGRE extende uma sub-rede de camada 2 através do centro de dados, ou mesmo da Internet, ocorre um aumento da suscetibilidade a ataques que envolvam mascaramento de pacotes IP (IP Spoofing). Isto pode ser mitigado através do uso de mecanismos de autenticação e criptografia existentes, como IPSec (Internet Protocol Security) ou similares. É esperado que o plano de controle para distribuição das políticas seja tornado seguro através do uso de algum protocolo de segurança existente, além disso, este tráfego de controle pode ser isolado pelo uso de VLANs ou sub-rede física separada.