Título: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: WHK en 11 Diciembre 2016, 00:37 am Hola, actualmente tengo un centos 7 como host y una maquina virtual en kvm (virsh) también con centos 7, en la maquina virtual instalé un openvpn en modo tun por udp y quiero que sea accesible desde internet, por lo cual se me ocurrió que debo publicar el puerto udp:1194 usando el host principal.
He intentado con iptables y he hecho esto: Citar iptables -t nat -A PREROUTING -p udp --dport 1194 -j DNAT --to "192.168.122.2:1194" iptables -I FORWARD -d "192.168.122.2/32" -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT Hasta acá todo bien, hice correr el openvpn, el puerto se abre sin problemas, he testeado desde el host principal con: Citar $ nc -v -u 192.168.122.2 1194 Y abre correctamente, ahora he probado el ruteo: Citar $ nc -v -u 127.0.0.1 1194 y también conecta correctamente, el problema viene ahora, que quiero conectarme desde el exterior y no puedo, desde mi pc ejecuto: Citar $ nc -v -u sitio.com 1194 Y no me conecta, por lo cual supuse que iptables me estaba restringiendo y he habilitado la apertura del puerto: Citar $ iptables -A INPUT -i eth0 -p udp --destination-port 1194 -j ACCEPT Pero aun sigo sin poder acceder y no se que pueda estar sucediendo :( ¿Qué hice mal? Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: MinusFour en 11 Diciembre 2016, 01:08 am ¿Lo estäs probando desde tu misma red? Si lo estás probando desde tu misma red, usa algun servicio para revisar si el puerto está abierto.
http://www.canyouseeme.org/ Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: WHK en 11 Diciembre 2016, 01:22 am No, el servidor host es un servidor dedicado en usa, yo estoy en chile xD
Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: MinusFour en 11 Diciembre 2016, 01:55 am No, el servidor host es un servidor dedicado en usa, yo estoy en chile xD ¿Y estás probando hacer la conexión desde fuera del servidor verdad? ¿No desde una session SSH en tu servidor o algo así? ¿Estás seguro que la interfaz es eth0? Si vas a usar IP forwarding vas a necesitar activarlo también (no se si en centos sea igual). Código
o Código
Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: WHK en 11 Diciembre 2016, 02:53 am Asi es:
Código: [root@machine ~]# cat /etc/sysctl.conf He intentado conectarme desde el exterior y nada. Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: MinusFour en 11 Diciembre 2016, 04:08 am Pon la lista completa de iptables:
Código
Y la lista de interfaces: Código
Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: WHK en 11 Diciembre 2016, 04:42 am En el host principal:
Código: [code][root@machine ~]# iptables -vnL He ocultado la ip pública real por 200.200.200.200 y la dirección mac de todas las interfaces por xx:xx:xx:xx:xx:xx. Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: MinusFour en 11 Diciembre 2016, 05:13 am Código: 2525 106K REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable ¿Será el orden aquí? Dice ahi que rechaza todos los paquetes a la interfaz virbr0 (que me imagino es la interfaz virtual con la que te comunicas con el guest) y no esta pasando a la siguiente regla. Tambien necesitas hacer MASQUERADE porque los paquetes que van saliendo de la interfaz virbr0 salen con la ip privada. Si no lo haces, los paquetes que lleguen a tu equipo van a llegar con el SRC de la ip privada. Código
Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: WHK en 11 Diciembre 2016, 16:55 pm He eliminado todas las reglas de foward y le he añadido la regla de redirección:
Código: [root@machine ~]# iptables -vnL He agregado: Código: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE Pero nada :-/ , si me conecto desde el host principal (el dedicado) a localhost me conecta bien, quiere decir que la redirección está bien hecha pero solo funciona dentro del servidor como si la redirección hubiese sido hecha a localhost porque desde el exterior no puedo acceder. Por otro lado si puedo acceder a otros puertos del servidor sin problemas. Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: WHK en 11 Diciembre 2016, 17:20 pm Mi tabla NAT
Código: [root@machine ~]# iptables -t nat -vnL He reemplazado la ip original de la maquina virtual y del rango de ip por 192.168.1.122 ya que mi rango es distinto, pero no influye en el problema ya que no entra en conflicto con ningún otro rango. Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: MinusFour en 11 Diciembre 2016, 17:34 pm Tienes demasiadas cosas en tu tabla de NAT creo. Yo diría que eliminaras todo de la tabla NAT y agregaras las reglas que necesitas... Tus reglas en la otra tabla realmente no hacen nada. Las políticas de cada una de las cadenas está en ACCEPT y todas tus reglas son ACCEPT, entonces tu servidor está aceptando todo, no solo aceptando las reglas que están ahí.
Si la redirección está bien, entonces no se que pudiera estar pasando. Es otra cosa de tu servidor. La regla de masquerade creo que solo debería aplicarse cuando sale de la interfaz virbr0: Código
Creo también que puede ser un problema de SELinux (porque tu usas CentOS) Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: WHK en 11 Diciembre 2016, 17:46 pm Pues veamos, intentaré deshabilitar temporalmente selinux aver si ese es el problema, no me gusta tenerlo deshabilitado, pero veamos aver como va y te cuento.
Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: WHK en 11 Diciembre 2016, 18:02 pm Tampoco es selinux xD en fin, ya veré que puedo seguir probando, por ahora no puedo seguir haciendo las demás instalaciones en el servidor porque la mayoría dependen del acceso por vpn.
Gracias de todas maneras. Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: WHK en 12 Diciembre 2016, 03:15 am Finalmente lo he logrado!
Primero he deshabilitado selinux en la maquina virtual, luego de eso seguí tu consejo y eliminé todas las reglas de la maquina virtual y del host principal y las hice todo denuevo, despues reinicié ambas maquinas y ahora si funciona :) Gracias por la paciencia, al parecer si era problema de selinux pero del lado de la maquina virtual. Saludos. Título: Re: Como redireccionar puertos entre una maquina virtual y el host principal? Publicado por: WHK en 12 Diciembre 2016, 03:49 am Encontré la diferencia entre mis reglas antiguas y las nuevas y he encontrado el problema de raiz que me impidia conectar desde el exterior a demás de selinux:
Código: hain FORWARD (policy ACCEPT 0 packets, 0 bytes) Eso era lo que tenía antes y está claro, jamás le dije que podía aceptar conexiones nuevas por lo cual no podía aceptar conexiones nuevas del puerto abierto xD pero ahora le he agregado el estado NEW y ahora conecta de lujo: Código: hain FORWARD (policy ACCEPT 0 packets, 0 bytes) El comando fue este: Código: -A FORWARD -d 192.168.122.2 -o virbr0 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT |