
Tengo 2 VM, una con dirección IP privada (detrás de NAT) y otra con pública. Hice un túnel SSH con NAT. El objetivo es conectar la VM pública a la red detrás de NAT y reenviar algo de tráfico a través de ella. El objetivo es falsificar una aplicación que se ejecuta en esta red con otra similar en un servidor público (con fines de prueba).
Entonces hice algo como esto:
Habilitar túnel
sudo ssh [email protected] -w 0:0
Direccionamiento
ifconfig tun0 10.253.253.1/30 pointopoint 10.253.253.2 - Local
ifconfig tun0 10.253.253.2/30 pointopoint 10.253.253.1 - Remote
Agregar ruta a la red interna
ip route add 10.0.3.0/24 via 10.253.253.1
Para comunicación bidireccional (en realidad no estoy seguro de esta)
sudo arp -sD 10.253.253.1 ens18 pub
Reenvío de puertos en local
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -I FORWARD 1 -s 10.253.253.1 -j ACCEPT
sudo iptables -I FORWARD 1 -d 10.253.253.1 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.253.253.1 -j MASQUERADE
Y, de hecho, esto casi funciona: cuando desactivo el servicio de la aplicación en el host local, reenvía el tráfico al remoto. Pero hay un problema principal: este servidor local envía solicitudes en el puerto 4660 y otras (aplicaciones internas) responden en el puerto 4661. Parece que necesito una regla adicional para reenviar todo el tráfico entrante en el puerto 4661 a la interfaz del túnel al puerto 4660. ¿Cómo? para manejar esto? No estoy muy familiarizado con iptables, pero probé algo así pero no funciona:
iptables -A PREROUTING -t nat -i eth0 -p udp --dport 4661 -j DNAT --to 10.253.253.1:4660
iptables -A FORWARD -p udp -d 10.253.253.1 --dport 4660 -j ACCEPT
Respuesta1
Ok, lo hice funcionar:
iptables -A PREROUTING -t nat -i eth0 -p udp --dport 4661 -j DNAT --to 10.253.253.2:4661(remote tun address)