Sua descrição deve estar incompleta. As regras em INPUT e FORWARD não farão os pacotes 77.88.55.66 passarem para 10.0.1.1. Isso é possível com a meta DNAT
na cadeia PREROUTING
da tabela nat
. Obviamente, existe tal regra.
Para um redirecionamento bem-sucedido, você não precisa de regras no INPUT, pois esses pacotes não devem ser recebidos pelo sistema de redirecionamento.
O problema com o DNAT sem SNAT (como no seu caso) é que um sistema geralmente não se importa com ele sobre qual interface ele foi atingido ao rotear a resposta. Seu VPS-A vê uma abertura de conexão de 45.248.82.171 e, se estiver disposto a se comunicar com esse cliente, envia uma resposta para - sim, 45.248.82.171. O cliente enviou um pacote SYN para 77.88.55.66 e recebe um SYN ACK de 66.55.44.33 e obviamente pensa apenas em WTF? Por que de 66.55.44.33? Porque a resposta não é enviada pelo túnel porque a configuração de roteamento do VPS-A diz para não enviar pacotes para este destino através do túnel. Se eles voltassem pelo túnel, o VPS-B reescreveria o endereço de origem e tudo ficaria bem.
Então você tem que usar o iptables para marcar as conexões que vêm pelo túnel (por que pelo tunel?), reescrever a marca de conexão para um pacote e usar o roteamento avançado com esta marca de pacote para ter esses pacotes enviados o tunel. Ou você faz os dois lados do NAT, faz o SNAT antes de enviá-lo do VPS-B pelo túnel e recupera-o do VPS-A da maneira mais fácil. Desvantagem: Os logs do servidor web mostram o endereço IP "errado" (sempre 10.0.2.1).
BTW: 10.0.2.1 e 10.0.1.1 são endereços finais estranhos da mesma VPN, não são?