Eu tenho uma máquina Ubuntu 20.04 com 2 interfaces ethernet com 2 endereços IP cada. É uma instância AWS EC2 e cada um dos 4 endereços IP tem um EIP anexado a ele via NAT. Ambas as interfaces se conectam à mesma sub-rede interna. A configuração fica assim:
Máquina EC2:
- eni1:
- private-IP1 -> public-IP1
- IP2 privado -> IP2 público
- eni2:
- IP3 privado -> IP3 público
- IP4 privado -> IP4 público
Todos os 4 endereços são alcançáveis do lado de fora, então parece estar tudo bem. No entanto, para o tráfego de saída atualmente, sempre o IP1 privado (e, portanto, o IP1 público) é usado. Eu quero especificar que usuários SSH individuais usem endereços IP específicos, para que eles venham do IP público correspondente ao conversar com serviços na Internet, ou seja
usuário1 -> privado-IP1
usuário2 -> IP2 privado
usuário3 -> IP3 privado
user4 -> private-IP4
Qual a melhor forma de alcançar este resultado?
A melhor maneira de conseguir isso seria clonar a instância do EC2 em quatro instâncias, atribuir a cada clone um endereço IP e permitir que cada usuário use apenas a máquina com o endereço IP que ele deve usar.
Eu finalmente resolvi isso sozinho depois de passar muitas horas nisso. No final, consegui trabalhar adicionando uma regra de ip assim:
e, em seguida, adicionando regras de pós-roteamento do iptables como esta:
com if1 e if2 sendo minhas tabelas de rotas personalizadas contendo as rotas padrão correspondentes. Funciona bem! Talvez isso possa ser útil para alguém no futuro :)