elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Sistemas Operativos
| |-+  GNU/Linux (Moderador: MinusFour)
| | |-+  Como redireccionar puertos entre una maquina virtual y el host principal?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Como redireccionar puertos entre una maquina virtual y el host principal?  (Leído 8,457 veces)
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Como redireccionar puertos entre una maquina virtual y el host principal?
« 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?


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Como redireccionar puertos entre una maquina virtual y el host principal?
« Respuesta #1 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/


En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Como redireccionar puertos entre una maquina virtual y el host principal?
« Respuesta #2 en: 11 Diciembre 2016, 01:22 am »

No, el servidor host es un servidor dedicado en usa, yo estoy en chile xD
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Como redireccionar puertos entre una maquina virtual y el host principal?
« Respuesta #3 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
  1. sudo sysctl -w net.ipv4.ip_forward=1

o

Código
  1. echo 1 > /proc/sys/net/ipv4/ip_forward
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Como redireccionar puertos entre una maquina virtual y el host principal?
« Respuesta #4 en: 11 Diciembre 2016, 02:53 am »

Asi es:

Código:
[root@machine ~]# cat /etc/sysctl.conf
# System default settings live in /usr/lib/sysctl.d/00-system.conf.
# To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

# Disable IPv6 autoconf
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.eth0.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.eth0.accept_ra = 0
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv4.ip_forward = 1
[root@machine ~]# cat /proc/sys/net/ipv4/ip_forward
1

He intentado conectarme desde el exterior y nada.
« Última modificación: 11 Diciembre 2016, 02:55 am por WHK » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Como redireccionar puertos entre una maquina virtual y el host principal?
« Respuesta #5 en: 11 Diciembre 2016, 04:08 am »

Pon la lista completa de iptables:

Código
  1. sudo iptables -L

Y la lista de interfaces:

Código
  1. ip a
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Como redireccionar puertos entre una maquina virtual y el host principal?
« Respuesta #6 en: 11 Diciembre 2016, 04:42 am »

En el host principal:

Código:
[code][root@machine ~]# iptables -vnL
Chain INPUT (policy ACCEPT 156K packets, 398M bytes)
 pkts bytes target     prot opt in     out     source               destination         
 4491  280K ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
  128 41984 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
92369 8828K ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22 state NEW,ESTABLISHED
1779K  219M ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 state NEW,ESTABLISHED
56949 5700K ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 state NEW,ESTABLISHED
    0     0 ACCEPT     udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:1194 state NEW,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1194 state NEW,ESTABLISHED

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 165K 1434M ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
 113K 6269K ACCEPT     all  --  virbr0 *       192.168.123.0/24     0.0.0.0/0           
   24  7872 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
 2525  106K REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
  124  5143 ACCEPT     udp  --  *      *       0.0.0.0/0            192.168.122.2        state NEW udp dpt:1194

Chain OUTPUT (policy ACCEPT 476K packets, 465M bytes)
 pkts bytes target     prot opt in     out     source               destination         
  128 42874 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68

[root@machine ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 200.200.200.200/24 brd 200.200.200.255 scope global eth0
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
5: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 500
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
7: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN qlen 500
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
9: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN qlen 500
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
15: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN qlen 500
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
16: vnet3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN qlen 500
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
18: vnet4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN qlen 500
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
[/code]

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.
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Como redireccionar puertos entre una maquina virtual y el host principal?
« Respuesta #7 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
  124  5143 ACCEPT     udp  --  *      *       0.0.0.0/0            192.168.122.2        state NEW udp dpt:1194

¿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
  1. sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
« Última modificación: 11 Diciembre 2016, 05:23 am por MinusFour » En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Como redireccionar puertos entre una maquina virtual y el host principal?
« Respuesta #8 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
Chain INPUT (policy ACCEPT 103 packets, 72552 bytes)
 pkts bytes target     prot opt in     out     source               destination        
 7325  455K ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
  284 93152 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
 109K   11M ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22 state NEW,ESTABLISHED
2335K  291M ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 state NEW,ESTABLISHED
79028 7864K ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 state NEW,ESTABLISHED
    0     0 ACCEPT     udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:1194 state NEW,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1194 state NEW,ESTABLISHED

Chain FORWARD (policy ACCEPT 2 packets, 140 bytes)
 pkts bytes target     prot opt in     out     source               destination        
    2    84 ACCEPT     udp  --  *      *       0.0.0.0/0            192.168.122.2       state NEW udp dpt:1194

Chain OUTPUT (policy ACCEPT 234 packets, 103K bytes)
 pkts bytes target     prot opt in     out     source               destination        
  284 95163 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68

He agregado:

Código:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -p "${PROTO}" --dport "${HOST_PORT}" -j DNAT --to "${GUEST_IPADDR}:${GUEST_PORT}"
iptables -I FORWARD -d "${GUEST_IPADDR}/32" -p "${PROTO}" -m state --state NEW -m "${PROTO}" --dport "${GUEST_PORT}" -j ACCEPT
iptables -A INPUT -i eth0 -p "${PROTO}" --destination-port 1194 -j ACCEPT

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.
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Como redireccionar puertos entre una maquina virtual y el host principal?
« Respuesta #9 en: 11 Diciembre 2016, 17:20 pm »

Mi tabla NAT

Código:
[root@machine ~]# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 2 packets, 104 bytes)
num   pkts bytes target     prot opt in     out     source               destination        
1       20   827 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:1194 to:192.168.122.2:1194

Chain INPUT (policy ACCEPT 2 packets, 104 bytes)
num   pkts bytes target     prot opt in     out     source               destination        

Chain OUTPUT (policy ACCEPT 3 packets, 204 bytes)
num   pkts bytes target     prot opt in     out     source               destination        

Chain POSTROUTING (policy ACCEPT 2 packets, 132 bytes)
num   pkts bytes target      prot opt in     out     source               destination        
1        0     0 RETURN      all  --  *      *       192.168.122.0/24     224.0.0.0/24        
2        0     0 RETURN      all  --  *      *       192.168.122.0/24     255.255.255.255    
3       30  1800 MASQUERADE  tcp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
4       22  1672 MASQUERADE  udp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
5        0     0 MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24    
6     1066  242K MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0          

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.
« Última modificación: 11 Diciembre 2016, 17:32 pm por WHK » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines