Dê uma chance ao openvpn. Você pode criar túneis sobre UDP ou TCP.
Existe uma maneira de criar algo semelhante a um IPIP ou túnel GRE somente sobre UDP ou TCP?
Eu tenho um túnel GRE entre dois servidores e notei que às vezes ele começa a perder pacotes. Ao mesmo tempo, se eu pingar entre servidores pela Internet, não tenho problemas.
Acredito que esse é um problema de formatação de tráfego do meu provedor (ele não leva em consideração o protocolo GRE). Eu também tentei um túnel IPIP com o mesmo resultado.
Não sei ao certo o que está causando seu problema específico, mas você deve observar que, em geral, é melhor que os túneis usem um fluxo de transporte não confiável (ou seja, UDP) que confiável.
A razão para isso é que, se acontecer de você perder pacotes, a camada TCP tunnelled deve ser a única que gerencia a retransmissão, e não a camada de transporte real.
Se ambas as camadas tiverem retransmissão incorporada a elas, elas poderão começar a entrar em uma guerra de retransmissão que, em última análise, mata a taxa de transferência.
Além disso, não esqueça que qualquer protocolo de tunelamento reduzirá o MTU efetivo (e consequentemente o TCP MSS). Se o MTU e o MSS não forem ajustados adequadamente, você verá fragmentação excessiva e / ou pacotes descartados.
Você sabe se está descartando pacotes GRE ou pacotes encapsulados no túnel GRE? Com qualquer tipo de túnel, não é incomum encontrar problemas de MTU com praticamente qualquer tipo de tunelamento. Problemas de MTU podem ser difíceis de diagnosticar porque pacotes menores (como pings padrão) passam pelo túnel muito bem. Você só verá problemas com pacotes maiores e geralmente somente se o aplicativo ou sistema estiver configurando o bit DF (Don't Fragment). Que infelizmente é bem comum.
Você pode testar de ponta a ponta qual é a menor MTU em todo o caminho da rede usando pings com um tamanho de pacote grande e o bit DF definido.
No Windows, você pode definir o bit DF com a opção -f e definir o tamanho do pacote com a opção -l assim:
ping -f -l 1450
No Linux, você define o bit DF com a opção "-M do" e define o tamanho do pacote com a opção -s, assim:
ping -M do -s 1450
Você não disse o que está usando para os endpoints da GRE. Se eles são roteadores da Cisco, este link é muito bom. Caso contrário, pesquise no Google por problemas com a GRE MTU e você encontrará muitas informações.
PPP sobre SSH talvez?
Este pequeno guia de tunelamento pode ajudá-lo a escolher o caminho certo.
Tags networking linux tunneling tcpip