Isso deve ser relativamente trivial; para SSH algo assim deve ficar bem:
iptables -t nat -A PREROUTING -p tcp \
-i ppp0 --dport 22 \
-j DNAT \
--to-destination 10.10.10.10:22
Suposição: A interface externa de R é ppp0
. Essa é a interface de entrada à qual a regra deve se aplicar.
Suposição: O endereço IP de S é 10.10.10.10 - substitua o correto, é claro.
O que isto faz é "destino NAT"; basicamente exatamente o mesmo que "NAT normal", apenas substitui o endereço de destino com o servidor interno e o desfaz no caminho de volta. Para usar isso, tudo que você precisa fazer no X é executar ssh R
ao invés de ssh S
para ser conectado ao sshd em S (isso só funcionará se o X não estiver na internet mas na sua rede interna, você também precisaria executar o SNAT - NAT "normal" ou de origem - para obter as respostas de S a serem enviadas via R, e você precisaria alterar a regra de "-i ppp0" para "-d < endereço externo de R >", para torná-lo compatível quando os pacotes são recebidos de dentro, não apenas do lado de fora; como você pode ver, fica um pouco difícil) .
Observação: Isso pode ser feito também para qualquer outra porta, mas eu recomendaria muito que não exponhasse o Samba (compartilhamento do Windows) ou HTTP não criptografado. (a menos que seja conteúdo público, não autenticado, de qualquer forma). Ou qualquer outra coisa, na verdade. Eles não são triviais para proteger, onde tudo é possível, portanto, colocar carona no encaminhamento de porta do SSH vai lhe poupar muitas dores de cabeça.
Só que o encaminhamento do Samba é difícil, então é melhor tentar fazer isso completamente sem isso.