É perfeitamente possível mascarar ou SNAT um dispositivo cujo IP não é roteável para o mundo exterior. E estar em um namespace de rede ou não faz diferença.
Você convenientemente esqueceu de nos dizer exatamente o que tentou, mas tenha em mente que SNAT e MASQUERADE só funcionam na tabela POSTROUTING (enquanto o DNAT só funciona na tabela PREROUTING), um fato que está bem documentado e que você pode Evite mencionar explicitamente os comandos iptable
.
Isso significa que o SNAT acontecerá como o último passo antes do pacote deixar a interface, e o DNAT acontecerá como uma etapa muito inicial para os pacotes que entram na interface do lado de fora.
Assim, a configuração usual é que os IPs NAT de um roteador (host ou namespace) vêm de um lado para tudo do outro lado:
+---------------+
| |
masq'ed IP --<--| eth0 eth1 |--<-- original IP
10.0.0.99 | | 10.0.0.1
+---------------+
Host or Namespace
e você precisa de um DNAT correspondente para conexões de entrada, então:
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.1/32 -j SNAT --to 10.0.0.99
iptables -t nat -A PREROUTING -i eth0 -d 10.0.0.99/32 -j DNAT --to 10.0.0.1
Você não disse exatamente quais IPs deseja mascarar como IPs, mas se o namespace principal atua como um roteador e deseja mascarar "RouteableNS", que é 10.5.1.2
, para o mundo externo, então isso é factível usando o IF de saída do seu namespace principal.