El problema es que usaba VMWare, que no es libre y que a mí por lo menos me ha dado siempre problemillas.
El caso es que un día VMWare me dejó de funcionar, así que encontré la excusa perfecta para pasarlo todo a software libre, concretamente con Qemu.
La idea es la misma y el script es muy parecido, los iptables son idénticos...pero había un problema y eran los "switchs" a donde las máquinas virtuales se "conectan". Con VMWare esto es trivial ya que tienes unos /dev/vmnetXX donde metes las máquinas de esa red. Pero no conocía nada parecido para Qemu.
Buscando buscando encontré vde_switch que resultó ser exactamente lo que buscaba. Gracias a eso y a las interfaces TUN/TAP pude montarlo todo con software libre, un resumen del script seria este:
#Levantamos ip pública del "router" ifconfig eth0:1 xxx.xxx.xxx.xxx/xx #Creamos el switch y creamos la interfaz local del "router" vde_switch -d -s red1.sock -t tap1 ifconfig tap1 yyy.yyy.yyy.yyy/yy #Si queremos, "abrimos" los puerto que queramos iptables -A PREROUTING -t nat -d xxx.xxx.xxx.xxx -p tcp --dport PP -j DNAT --to jjj.jjj.jjj.jjj #Marcamos los paquetes para saber luego redirigirlos #marcamos los que seran de entrada para que iproute2 pueda identificarlos iptables -A PREROUTING -t mangle -d xxx.xxx.xxx.xxx -i ! tap1 -j MARK --set-mark 1 #marcamos los que seran de salida para que iproute2 pueda identificarlos iptables -A PREROUTING -t mangle -d ! xxx.xxx.xxx.xxx -i tap1-j MARK --set-mark 1001 #marcamos los de salida para que luego el routing sepa que direccion de origen poner iptables -A PREROUTING -t nat -d ! xxx.xxx.xxx.xxx -i tap1 -j CONNMARK --set-mark 1001 #Creamos las tablas que luego usaremos... echo 201 ruta1 >> /etc/iproute2/rt_tables echo 401 salida1 >> /etc/iproute2/rt_tables #los paquetes con marca tal, que usen la tabla cual ip rule add fwmark 1 table ruta1 ip rule add fwmark 1001 table salida1 # la tabla tal es que sobreescribe la ruta y la envia por la interfaz correnpondiente (el replace es que si esta la machaca y sino esta la añade) #esta es para los paquetes que entran que los meta por la interfaz que corresponde ip route replace dev tap1 table ruta1 #esta es para los paquetes que salen, para que el siguiente salto sea la ip de salida ip route replace via xxx.xxx.xxx.xxx table salida1 #Y la linea magica que hace NAT, los paquetes con la marca de salida que pusimos al principio, hace NAT poniendo como direccion de origen la ip publica de la tienda iptables -t nat -A POSTROUTING -p all -m connmark --mark 1001 -o eth0 -j SNAT --to-source xxx.xxx.xxx.xxx
Y con esto y un bizcocho ya tenemos nuestras redes creadas, sólo falta lanzar Qemu y decirle que "conecte" la máquina virtual donde debe. Esto lo conseguimos con la siguiente llamada:
Recomiendo muy encarecidamente que a la interfaz «nic» le indiquéis la opción «macaddr» ya que sino Qemu asigna la misma MAC a todas las máquinas de la red con los problemas que supongo todos conocéis.vdeqemu -net nic -net vde,sock=red1.sock miimagenqemu
Espero os sirva de ayuda, personalmente he aprendido mucho haciendo esto y es divertido ;-D
No hay comentarios:
Publicar un comentario