{"id":708,"date":"2009-01-02T18:27:14","date_gmt":"2009-01-02T16:27:14","guid":{"rendered":"http:\/\/www.marblestation.com\/blog\/?p=708"},"modified":"2012-04-26T16:18:58","modified_gmt":"2012-04-26T14:18:58","slug":"redireccion-de-trafico-tcpudp-mediante-tuneles-ssh","status":"publish","type":"post","link":"https:\/\/www.marblestation.com\/?p=708","title":{"rendered":"Redirecci\u00f3n de tr\u00e1fico TCP\/UDP mediante t\u00faneles SSH"},"content":{"rendered":"<p>SSH nos permite crear t\u00faneles entre puertos TCP, por ejemplo:<\/p>\n<pre>\r\nssh -L 2500:127.0.0.1:25 usuario@servidor.com\r\n<\/pre>\n<p>El comando anterior abrir\u00e1 el puerto TCP 2500 en la m\u00e1quina cliente, redirigiendo todo el tr\u00e1fico mediante la conexi\u00f3n establecida con &#8216;servidor.com&#8217; hacia &#8216;127.0.0.1&#8217; (tambi\u00e9n podr\u00eda ser otra IP de la red a la que tiene acceso &#8216;servidor.com&#8217;). Tambi\u00e9n podemos hacerlo en sentido inverso:<\/p>\n<pre>\r\nssh -R 2500:127.0.0.1:25 usuario@servidor.com\r\n<\/pre>\n<p>En este caso, se abrir\u00e1 el puerto TCP 25000 en la m\u00e1quina <u>servidor<\/u>, y se redirigir\u00e1 el tr\u00e1fico al puerto TCP 25 del cliente.<\/p>\n<p>El problema aparece cuando queremos redirigir puertos UDP, para \u00e9stos tenemos 2 opciones: utilizar <a href=\"http:\/\/netcat.sourceforge.net\/\">netcat<\/a> o <a href=\"http:\/\/www.dest-unreach.org\/socat\/\">socat<\/a>.<br \/>\n<!--more--><\/p>\n<p>Imaginemos que queremos redirigir el puerto UDP 161(protocolo <a href=\"http:\/\/es.wikipedia.org\/wiki\/SNMP\">SNMP<\/a>) de &#8216;servidor.com&#8217; (donde \u00fanicamente esta escuchando por la IP 127.0.0.1). Si queremos utilizar <b>netcat<\/b> (apt-get install nc), en el servidor ejecutaremos:<\/p>\n<pre>\r\nmkfifo \/tmp\/fifo_virtual\r\nchmod 600 \/tmp\/fifo_virtuall\r\nnc -l -p 1610 -s 127.0.0.1 < \/tmp\/fifo_virtual | nc -u localhost 161 > \/tmp\/fifo_virtual\r\n<\/pre>\n<p>Netcat conectar\u00e1 el puerto UDP 161 con un nuevo puerto TCP 1610.<\/p>\n<p>En el cliente, primero realizaremos la conexi\u00f3n SSH que nos tunelizar\u00e1 el anterior puerto TCP 1610:<\/p>\n<pre>\r\nssh -L 1610:127.0.0.1:1610 usuario@servidor.com\r\n<\/pre>\n<p>Y a continuaci\u00f3n (en el cliente):<\/p>\n<pre>\r\nsudo mkfifo \/tmp\/fifo_virtual_gpl\r\nsudo chmod 600 \/tmp\/fifo_virtual_gpl\r\nsudo ifconfig lo:0 127.0.0.2 up\r\nsudo nc -l -u -p 161 -s 127.0.0.2 < \/tmp\/fifo_virtual_gpl | nc localhost 1610 > \/tmp\/fifo_virtual_gpl\r\n<\/pre>\n<p>En este caso, netcat conectar\u00e1 al puerto TCP 1610 creado por SSH y generar\u00e1 uno nuevo UDP 161. En este punto, tendremos conectado el puerto UDP 161 en la IP 127.0.0.2 del cliente con el puerto UDP 161 en la IP 127.0.0.1 del servidor, todo tunelizado y cifrado mediante SSH.<\/p>\n<p>Esto mismo podemos hacerlo mediante <b>socat<\/b> (apt-get install nc), en el servidor ejecutariamos:<\/p>\n<pre>\r\nsocat tcp4-listen:1610,bind=127.0.0.1,fork,reuseaddr UDP:localhost:161\r\n<\/pre>\n<p>Y en el cliente:<\/p>\n<pre>\r\nsudo ifconfig lo:0 127.0.0.2\r\nsudo socat udp4-listen:161,bind=127.0.0.2,fork,reuseaddr tcp:localhost:1610\r\n<\/pre>\n<p>El t\u00fanel con SSH ser\u00eda id\u00e9ntico. Las desventajas de cada uno de ellos:<\/p>\n<ul>\n<li>Netcat parece funcionar unicamente para la primera conexi\u00f3n UDP que se realiza, las siguientes hay que volver a re-ejecutar de nuevo los comandos.<\/li>\n<li>Socat crea procesos hijo por cada conexi\u00f3n (forks), por tanto permite varias conexiones pero se si se realizan muchas, inunda la m\u00e1quina de procesos.<\/li>\n<\/ul>\n<p>M\u00e1s detalles en: <a href=\"http:\/\/www.zarb.org\/~gc\/html\/udp-in-ssh-tunneling.html\">Performing UDP tunneling through an SSH connection<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SSH nos permite crear t\u00faneles entre puertos TCP, por ejemplo: ssh -L 2500:127.0.0.1:25 usuario@servidor.com El comando anterior abrir\u00e1 el puerto TCP 2500 en la m\u00e1quina cliente, redirigiendo todo el tr\u00e1fico mediante la conexi\u00f3n establecida con &#8216;servidor.com&#8217; hacia &#8216;127.0.0.1&#8217; (tambi\u00e9n podr\u00eda ser otra IP de la red a la que tiene acceso &#8216;servidor.com&#8217;). Tambi\u00e9n podemos hacerlo &hellip; <a href=\"https:\/\/www.marblestation.com\/?p=708\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Redirecci\u00f3n de tr\u00e1fico TCP\/UDP mediante t\u00faneles SSH<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,6],"tags":[],"class_list":["post-708","post","type-post","status-publish","format-standard","hentry","category-espanyol","category-tecnologia"],"_links":{"self":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=708"}],"version-history":[{"count":5,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/708\/revisions"}],"predecessor-version":[{"id":1229,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/708\/revisions\/1229"}],"wp:attachment":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}