
No Linux é possível fazer com que todas as requisições feitas para um IP específico sejam roteadas através de uma interface virtual, para que na outra ponta apareçam com um endereço IP diferente do principal do host? Suponha que eth0
tenha o endereço IP 1.1.1.1 enquanto eth0:1
tenha o endereço 1.1.1.2. Como posso fazer com que todas as solicitações para 1.2.3.4 apareçam como provenientes de eth0:1
? Estou tentando o seguinte, mas parece que não funciona:
route add 1.2.3.4 dev eth0:1
Responder1
Sim.
Uma maneira de fazer isso seria usar IPTABLES para reescrever os pacotes que saem da máquina com vários endereços IP para dizer que eles vêm da interface virtual. Tentar
/sbin/iptables -t nat -I POSTROUTING -d DEST.IP -j SNAT --to VIRTUAL.IP
(É claro que você precisa ter o IP virtual configurado conforme planejado, ou seja, eth0:1 ou equivalente precisa existir para que o tráfego possa encontrar o caminho de volta para a máquina)
Responder2
Pode ser necessário usar o comando
ip route add 1.2.3.4 dev eth0:1 src 1.1.1.2
ou rota com uma opção semelhante. Se isso não funcionar como esperado, você pode precisar de roteamento avançado: Crie uma tabela de roteamento adicional para este destino em /etc/iproute2/rt_tables, coloque a entrada acima como a única nesta tabela e ative esta tabela:
ip rule add to 1.2.3.4 priority 100 table to__1_2_3_4
ip route flush cache
A solução desesperada de último recurso seria o netfilter: você poderia usar SNAT com iptables na cadeia POSTROUTING para reescrever o endereço de origem dos pacotes para este destino.