
En Linux, ¿es posible que todas las solicitudes realizadas a una IP específica se enruten a través de una interfaz virtual, de modo que en el otro extremo aparezcan con una dirección IP diferente a la principal del host? Supongamos que eth0
tiene la dirección IP 1.1.1.1 mientras que eth0:1
tiene la dirección 1.1.1.2. ¿Cómo puedo hacer que todas las solicitudes a 1.2.3.4 aparezcan como provenientes de eth0:1
? Estoy intentando lo siguiente pero no parece funcionar:
route add 1.2.3.4 dev eth0:1
Respuesta1
Sí.
Una forma de hacerlo sería utilizar IPTABLES para reescribir los paquetes que salen de la máquina con múltiples direcciones IP para decir que provienen de la interfaz virtual. Intentar
/sbin/iptables -t nat -I POSTROUTING -d DEST.IP -j SNAT --to VIRTUAL.IP
(Por supuesto, debe tener la IP virtual configurada como lo había previsto, es decir, debe existir eth0:1 o equivalente para que el tráfico pueda encontrar su camino de regreso a la máquina)
Respuesta2
Puede que sea necesario utilizar el comando
ip route add 1.2.3.4 dev eth0:1 src 1.1.1.2
o ruta con opción similar. Si eso no funciona como se esperaba, es posible que necesite enrutamiento avanzado: cree una tabla de enrutamiento adicional para este destino en /etc/iproute2/rt_tables, coloque la entrada anterior como la única en esta tabla y active esta tabla:
ip rule add to 1.2.3.4 priority 100 table to__1_2_3_4
ip route flush cache
La solución desesperada de último recurso sería netfilter: podría usar SNAT con iptables en la cadena POSTROUTING para reescribir la dirección de origen de los paquetes a este destino.