Duas linhas de internet podem tornar uma VPN mais disponível, e podem torná-la mais rápida para algumas cargas de trabalho, mas o mecanismo decide qual das duas coisas acontece. Um router com duas rotas padrão não está agregado, e um túnel que transporta milhares de ligações internas continua a ser um único fluxo externo. Nomear a promessa primeiro é a diferença entre um projeto e uma desilusão cara. A tabela abaixo separa as opções segundo o que cada uma exige no extremo remoto e o que uma perda de ligação faz a uma transferência.

Três promessas, e só uma precisa de um parceiro

O failover mantém um caminho disponível quando a ligação preferida desaparece. O balanceamento por hash de fluxos reparte fluxos independentes pelos dois uplinks. A agregação de um único fluxo permite que uma transferência use as duas ligações ao mesmo tempo. São produtos diferentes com requisitos diferentes, e só o último precisa da cooperação de algo além do seu router.

MechanismFar-end requirementEffect on one transferWhat breaks under a link loss
Packet-spraying overlayA cooperating endpoint that reassembles the streamPackets can spread across both linksReordering and buffering on the surviving path; its own recovery logic decides what continues
MPTCP subflowsA peer or proxy that accepts subflowsSubflows can share one connectionSurviving subflows continue if the peer keeps them alive
Flow-hash balancingNothing new; the existing tunnel endpoint is enoughOne outer flow still follows one linkFlows hashed onto the dead link move; established sessions break
Link failoverNothing newOne path at a time; the second link sits idleThe session stalls or restarts on the other link

Nada nessa tabela é motivo para comprar uma segunda linha. O que ela faz é impedir que um projeto de failover seja avaliado como se fosse agregação.

Porque é que um túnel parece um único fluxo ao router

Um router que balanceia carga faz hash dos endereços de origem e destino juntamente com as portas e depois envia o fluxo inteiro para onde o hash aponta. Um túnel VPN é um desses fluxos do ponto de vista do router, seja o que for que corra lá dentro. As ligações internas nunca chegam à decisão do hash, porque o cabeçalho exterior já decidiu o caminho. É por isso que um segundo uplink pode duplicar a capacidade total para muitos utilizadores e não mudar nada na grande transferência de um só utilizador.

Dois túneis separados podem dar-lhe dois candidatos, mas continuam a precisar de uma política deliberada que atribua tráfego e mantenha as respostas no caminho que levou o pedido. O encaminhamento assimétrico é o resultado habitual de saltar esse passo. O mínimo é uma política que nomeie o fluxo, a ligação preferida e a ligação de reserva.

A agregação Ethernet não atravessa fornecedores não relacionados, porque o extremo remoto tem de participar no protocolo de agregação. Uma agregação entre dois fornecedores de internet é um projeto de investigação a menos que exista um ponto final cooperante.

O que o TCP multipath exige nas duas pontas

A documentação do Linux sobre Multipath TCP descreve vários subfluxos que pertencem a uma ligação. O suporte do kernel numa ponta não muda nada por si só, já que o par também tem de aceitar esses subfluxos. Um proxy do lado remoto é a outra disposição comum, e torna-se um componente com a sua própria capacidade e disponibilidade a planear. A mesma lógica exclui uma resposta fácil para o WireGuard, cujo transporte é UDP: o MPTCP faz crescer subfluxos TCP e não pode agregar esse túnel sem outra coisa no projeto.

Verifique se a funcionalidade do kernel está ativa antes de projetar à volta dela, porque muitas distribuições entregam-na desligada. Estes três comandos respondem a isso num minuto.

sysctl net.mptcp.enabled
ss -M | head
ip mptcp limits show

Escolha pela carga de trabalho, não pelo folheto

Se a carga de trabalho são muitas sessões independentes, o balanceamento por hash de fluxos pode acrescentar capacidade sem cooperação no extremo remoto. Se é uma transferência grande, só um projeto de agregação ajudará, e esse projeto precisa de um par cooperante. Se o requisito é que o trabalho continue quando uma ligação morre, a resposta é o failover e o débito de uma só transferência é irrelevante.

Escreva o requisito numa frase com um verbo dentro: uma cópia de segurança termina duas vezes mais depressa, ou uma ligação caída não termina uma sessão. Objetivos vagos produzem projetos que ninguém pode aceitar ou rejeitar. Depois decida o que o extremo remoto pode ser, porque a opção mais barata é muitas vezes a que não exige nada de novo lá. Essa restrição elimina a maioria das afirmações do folheto antes da primeira reunião.

Mantenha as três promessas separadas no documento de requisitos. Um projeto que reivindica as três costuma entregar uma e assumir em silêncio as outras. A secção seguinte testa qual é realmente entregue.

Teste uma transferência e muitas, e depois tire uma ligação

Compare uma transferência sustentada com várias transferências paralelas para o mesmo destino, e registe perda, atraso e utilização por ligação de cada uma. Um ganho só com sessões paralelas aponta para a distribuição de fluxos, não para a agregação de um único fluxo. Teste a perda de um uplink em separado, porque a capacidade enquanto as duas ligações funcionam não diz nada sobre failover para uma sessão estabelecida. Registe a rota, o socket e os contadores de retransmissão antes e depois de cada teste.

ip route show default
ip route get 10.80.0.5
mtr -n -c 20 -r 10.80.0.5

Quando a transferência única continua a usar um uplink, o projeto está a fazer exatamente o que um hash de fluxo implica. Quando as transferências paralelas se repartem pelos dois, o balanceamento funciona e a agregação não. Registe qual das três promessas o projeto cumpre de facto, e a próxima conversa sobre capacidade começa com provas em vez de uma afirmação do fornecedor.

Artigos relacionados