Estoy intentando enrutar de forma transparente el tráfico de una máquina virtual Xen a través de otra, así:
------- 192.168.250.4 192.168.250.3 ---------
| VM1 | <-----------------bridged----------------> | VM2 | <-----> Internet
------- | with |
| squid |
| proxy |
---------
No preguntes por qué, solo experimenta con iptables. Puedo enrutar con éxito el tráfico HTTP a través del proxy Squid de VM2 (modo transparente) con
iptables -t nat -A PREROUTING -p tcp --dport 80 –s ! 192.168.250.3 -j REDIRECT --to-port 3128
pero ¿cómo puedo simplemente atravesar el resto del tráfico? Ya probé esta configuración pero me da errores de "Conexión rechazada" cuando intento acceder a Internet desde VM1 ( 192.168.250.4
):
vm2:~# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
# route outgoing udp traffic
DNAT udp -- !192.168.250.3 0.0.0.0/0 udp dpt:!80 to:192.168.250.3
# route outgoing tcp traffic
DNAT tcp -- !192.168.250.3 0.0.0.0/0 tcp dpt:!80 to:192.168.250.3
# this is the working squid rule
REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 3128
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
# route incoming traffic
SNAT all -- 0.0.0.0/0 192.168.250.3 to:192.168.250.4
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
¿Que esta mal aquí? Ya leí muchos tutoriales pero la mayoría no funciona correctamente... (Por cierto: /proc/sys/net/ipv4/ip_forward
es 1)
Respuesta1
En lugar de utilizar REDIRECT, pruebe DNAT y SNAT. Prueba esto:
iptables -t nat -I PREROUTING -d 192.168.250.3 -j DNAT --to-destino 192.168.250.4 iptables -t nat -I POSTROUTING -s 192.168.250.4 -j SNAT --to-source 192.168.250.3
Respuesta2
Finalmente encontré la forma correcta de hacerlo:
Las conexiones salientes NAT (VM1 --> Internet/intranet) funcionan con reescritura de fuente (SNAT):
iptables -t nat -A POSTROUTING -s 192.168.250.4 -j SNAT --to-source 192.168.2.125
¿Dónde 192.168.2.125
está la IP externa actual de VM2 (debenoser la dirección interna). Como en mi caso esa IP la asigna DHCP, se debe cambiar la regla para hacer SNAT en la IP dinámica. Esto se hace mediante el comando MASQUERADE:
iptables -t nat -A POSTROUTING -s 192.168.250.4 -j MASQUERADE
La configuración final de iptables ahora se ve así (otras tablas/cadenas están vacías):
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.250.4 0.0.0.0/0