2010-09-20

Final Fantasy XII ¡¡¡¡APESTA!!!!

No quisiera tener que decir esto de un Final Fantasy pero Final Fantasy XII ¡¡¡¡APESTA MUCHO!!!!

Se suponía que el sistema del juego estaba pensado para dar al jugador la sensación de estar jugando un MMORPG pero ¡HUY NO! ¡LA CAGARON! La cámara es absurdamente errática, la enfoco hacia mi objetivo, me muevo y la cámara se mueve para donde le da la gana y no me deja ver al enemigo o a los NPCs.

Aparte te dan la oportunidad de moverte durante los combates lo cual no sirve de nada por que igual los bichos te siguen pegando, no puedes atacar cuando tu quieres sino que debes esperar a que se llene la barra de acción ¿para que quiero correr durante el combate si no puedo atacar cuando quiero y a pesar de correr no puedo evitar los ataques del enemigo? Y como si todo eso fuera poco cuando me muevo la HDP cámara se mueve más y más cada vez en ángulos más complicados en los que puedo ver menos que antes,

Nunca jugué Final Fantasy XI, que si es un verdadero MMORPG pero si se parece en algo al Final Fantasy XII entonces debe apestar también.

2010-06-22

Samsung Corby - Primeras Impresiones

Bueno, después de casi un mes de estar usando mi Samsung Corby ya puedo escribir un poco sobre como me ha parecido el dispositivo, sus defectos y virtudes.

Lo mejor

Sin lugar a dudas la Batería, la batería es excepcionalmente buena, tiene una duración increíble, aún usando el teléfono como reproductor de música portátil la batería tarda entre 4 y 7 días en reducir su carga al 50%, igual yo no recibo muchas llamadas pero el hecho de no tener que estar cargando el celular me parece estupendo. No sé como le hicieron los de Samsung pero crearon un aparato con un consumo de energía muy eficiente eso me parece super.

Las funciones del equipo


Comparado con mi anterior Sony Ericcon no tiene muchas más cosas, básicamente son las mismas funcionalidades, cámara de 2 mega píxeles, reproductor de música, radio FM, alarma, cronómetro, calculadora, juegos y aplicaciones Java y navegador web. Tiene adicionalmente un montón de accesos para las redes sociales, facebook, twetter, flicker, etc aunque la verdad yo no uso ninguna de ellas.

En cuanto al almacenamiento externo es mucho mejor que el Sony Ericcon por que las tarjetas Micro SD son la mitad de costosas que las tarjetas M2 que utiliza el Sony Ericcon así que de una vez me decidí por comprarle una Micro SD de 4 GB (Suficiente para llevar mi música favorita a todas partes)

El manos libres es más bien deficiente, yo no sé por que al presionar el botón del micrófono la llamada no se contesta, en varias ocasiones he tenido que sacar el teléfono del bolsillo por que la llamada no se activa con el manos libres.

Tiene un diccionario Inglés-Español, Español-Inglés de Collins muy bueno. Es una lástima que no se puedan instalar más idiomas.

La calidad de la señal es muy buena yo no he tenido problemas de interrupción de llamadas o de mala calidad del audio aún en el elevador de mi edificio aún no he probado el sótano pero tampoco nunca he visto que pierda llamadas por que el teléfono se ha quedado sin señal.

Lo malo

Lo malo de este equipo, bueno, algunas interfaces no están bien planeadas y eso hace que la experiencia de uso sea más bien frustrante, por ejemplo, si uno quiere eliminar una canción de la lista de reproducción tiene que colocarle una marca de verificación a esa canción y cuando la lista es muy larga esa simple tarea puede ser tediosa además que a veces uno no se da cuenta y otra canción por ahí quedó marcada y uno no se da cuenta y se eliminan las dos.

La pantalla táctil tiene un grabe problema al desplazar las interfaces en pantalla, por ejemplo para hacer scroll en los contactos, por que los contactos suben o bajan cuando uno pasa el dedo suavemente sobre la pantalla pero por ejemplo si uno tiene los dedos húmedos es muy difícil deslizar la lista, lo mismo pasa con el menú o los escritorios del Widget.

El teléfono vibra muy suavemente aún en el nivel de intensidad más alto por eso cuando el teléfono está en silencio uno puede pasar por alto llamadas por que simplemente nunca se da cuenta de que están entrando.

2010-06-13

Conectarse a un Servidor de Lineage II a través de un Túnel SSH (Cont.)

Bueno, ya habíamos visto en la entrada anterior sobre este tema como conectarse a un servidor de Lineage II a través de un túnel SSH burlando un Firewall. En esta entrada concluiré ese tema explicando como realizar la conexión cuando el servidor modifica el cliente en lugar de modificar el archivo de hosts.

En realidad esta entrada también explica una manera de redireccionar cualquier conexión que vaya a una determinada IP a una IP diferente usando un túnel SSH. Esta facultad es especialmente útil por ejemplo cuando queremos saltar Firewalls o cuando tenemos programas viejos que ya no tienen mantenimiento y tienen una IP quemada en el código que no podemos cambiar y necesitamos que se conecten a una IP diferente, entre otras posibilidades.

De que trata esta entrada

Esta entrada explica la manera de usar un túnel SSH para desviar conexiones que van a determinada IP de modo que vayan a una IP diferente de nuestra elección. Para explicar dicho tema haré uso de un ejemplo, una conexión a través de un Firewall usando un túnel SSH para conectarse a un servidor de Lineage II que modifica el cliente.

En este ejemplo en particular realizaremos una conexión al servidor Ludmila, un servidor que al momento de escribir esta entrada era un servidor low rate (7x) que corría con Lineage II - CT1 Hellbound

Para mas información sobre el tema que se está tratando en esta entrada por favor lean las entradas anteriores del blog sobre el mismo tema.

Antes de empezar

Antes de poder hacer uso de esta técnica se necesita alguna información, en particular necesitamos las direcciones IP y los puertos a los que el cliente necesita conectarse para poder realizar el redireccionamiento IP. Esta información la puedes conseguir muy seguramente en la página del servidor en el que juegas o tal vez preguntando en el foro de este mismo, no obstante, enseñaré aquí una ténica para obtener esta información por nuestra propia cuenta monitoreando las conexiones activas del PC.

Antes de intentar lo que describiré a continuación trata de minimizar lo más posible las conexiones que tu PC tiene con la red, cierra los programas que usan internet como Messenger, Skype, Outlook, etc. Lo ideal si puedes es que no haya ninguna conexión activa.

Seguidamente abre una consola y ejecuta:

netstat -n -p tcp

Verás en la consola algo como esto:

Bueno, ahora vuelve a escribir el comando en la consola pero NO presiones Entrar, esto es, la consola debe estar lista para ejecutar el comando. Luego abre el cliente de Lineage II y escribe tus datos de inicio de sesión, luego da clic en Login o presiona Entrar y rápidamente presiona ALT+TAB para cambiar a la consola y presiona Entrar para que se ejecute el comando que estaba preparado en la consola.

Inmediatamente verás aparecer la nueva conexión con su IP y puerto. Bien, ya tenemos la información del servidor de autenticación. Seguidamente selecciona el servidor en la lista de servidores y dale a Connect, cuando veas la lista de personajes ejecuta nuevamente el comando y verás aparecer la IP y el puerto del servidor del juego, algo como esto:

Ok, ya tenemos las IPs y puertos que necesitaremos para establecer la conexión, estos son:

  • 190.224.162.71:666
  • 190.224.162.71:7777
  • 190.224.162.74:2106

No importa si en tu caso el cliente se conecta a más o menos destinos lo importante es que anotes las IPs y los puertos que necesitarás redireccionar.

Preparar la tarjeta de red

Lo siguiente que haremos será preparar la tarjeta de red para desviar las conexiones que normalmente irían a través de la puerta de enlace de vuelta a nuestro equipo. Ya expliqué como hacerlo en la entrada anterior, aquí solo mostraré un screenshot de como se ve la página de configuración avanzada de IPv4:

Nótese que he agregado las dos direcciones IP del servidor del juego que hemos detecto (190.224.162.71 y 190.224.162.74) además de la IP de conexión de la red local (192.168.0.174) dejando la tarjeta de red con un total de tres direcciones IP.

Crear el Túnel SSH

Lo siguiente que haremos será crear el Túnel SSH. Para hacerlo volveré a utilizar el Putty ya que es lo más fácil. Los pasos base para establecer la conexión ya los he explicado en las entradas anteriores así que aquí solo mostraré un screenshot de como se ve la configuración de los túneles:

Listo, una vez configurados los túneles le damos al botón Open y establecemos la conexión con el equipo relevador. Una vez establecida la conexión Putty estará escuchando en los puertos 666, 7777 y 2106 listo para hacer el redireccionamiento IP al servidor real del juego.

Abrimos el juego y nos conectamos como si nada. Felicitaciones!

Algunos comentarios finales

Así concluye este pequeño tutorial sobre SSH Tunneling para saltar Firewalls. A pesar de que esto puede parecer un conjunto de tutoriales escritos con cierto desdén por las reglas y con la intención de permitirle a quien los lea violar políticas de una empresa o una institución educativa en realidad no es así.

Este material se escribió con el propósito de poner a disposición de otros un conocimiento que no está muy a la luz. Y a pesar de que lo que aquí se explica podría usarse con fines ilegales y maléficos también tiene muchas aplicaciones beneficiosas, puede sacar de un aprieto a un profesional de IT en algún caso.

También muestra las debilidades que algunos sistemas tienen y demuestra que cerrar puertos en un Firewall no es garantía de que se evitarán conexiones no deseadas.

Yo siempre estoy abierto a comentarios y los recibo con mucho gusto. Por favor si tienen comentarios, dudas, preguntas, o lo que sea no duden en dejar un comentario en la entrada o enviarme un correo electrónico.

2010-06-11

The Core (El Núcleo)

Bueno, esta película realmente es mi tipo de película, mucha acción y emoción y mucha tecnología (incluida tecnología informática, que es mi favorita) Plausible desde el punto de vista de la ciencia ficción, de hecho algunos científicos piensan que el campo magnético de la tierra está haciéndose mas débil y que con el tiempo lo perderemos por completo como le sucedió a marte, incluso se ha dicho que estamos cerca a una inversión del campo magnético.

Creo que hubo más muertes de las necesarias y muy estúpidas, en especial la primera de ellas, de este comandante, del que no recuerdo el nombre, se murió por estar de sapo ahí afuera, además, debieron haberse metido todos de nuevo en la nave cuando vieron que la lava empezaba a entrar a la geoda, la lava se habría encargado de destruir los cristales, incluyendo el que tenía atascada a la nave.

Me molestó un poco del final ese escape todo ficticio del profesor y la comandante, hubiera sido mejor que los dejaran morir una muerte honorable, como la de los astronautas de Impacto Profundo.

Me quedó la duda de la forma en la que refuerzan la última explosión, el tipo simplemente pone el núcleo del reactor al lado de la bomba y ya ¿eso si es posible? es decir, ¿colocar más plutonio al lado de una bomba atómica si incrementa el poder de la explosión aunque ese plutonio este protegido por capas de metal y además aislado del núcleo explosivo de la bomba nuclear?

Bueno, la película me entretuvo y además tenía buenas gráficas, solo creo que se pasaron un poco con la ficción.

2010-06-08

Conectarse a un Servidor Lineage II a través de un Túnel SSH

Bueno, antes que nada muchas gracias a Manuel Gulias por leer las entradas anteriores e interesarse en el asunto y también por tomarse el tiempo para escribirme y despertar de nuevo mi interés en este cuento del tunneling.

Como ya saben estos temas ya los había tratado en el blog en estas dos entradas:

Por eso mismo no voy a explicar aquí los detalles de configuración del servidor SSH y etc. solo me voy a concentrar en hablar de el tema que quedó pendiente que es la conexión al game server.

De que trata esta entrada

Esta entrada es un tutorial que pretende de la forma más gráfica posible ilustrar una manera de conectarse a un servidor de Lineage II y poder jugar cuando se está detrás de un Firewall que no permite la conexión directa a los puertos en los que funciona el juego haciendo uso de un túnel SSH.

Para poder hacer uso de esta técnica hay que tener un equipo relevador por fuera del firewall que esté configurado para servir el protocolo SSH por un puerto que sea accesible para el equipo que está dentro del firewall. Para mayor información sobre este tema leer la entrada: Saltar Firewalls usando OpenSSH

Un comentario más, esta técnica solo funciona con los servidores que no modifican el cliente sino que alteran el archivo de hosts para lograr la conexión. Es posible que funcione con un servidor que altere el cliente pero eso no está cubierto en esta guía

Preliminares

Bueno antes que nada, para usar la técnica que explicaré a continuación el equipo que está dentro del firewall debe tener una dirección IP estática, por lo que si el equipo está recibiendo una dirección por DHCP habrá que tomar nota de las direcciones que el DHCP entrega y luego fijar estos parámetros en la configuración, a continuación veremos como hacerlo:

Vamos por Inicio → Panel de Control.

Allí, bajo la categoría "Redes e Internet" damos clic en el vínculo "Ver el estado y las tareas de red"

y en la ventana que se abre en el panel de la izquierda seleccionamos "Administrar conexiones de Red"

Ahora veremos una ventana con las conexiones de red con las que cuenta nuestro equipo, vamos a dar clic con el botón secundario del ratón en la conexión que usamos y a seleccionar "Estado" en el menú que se despliega:

En la venta que se abre seleccionamos "Detalles"

Aquí deberemos tomar nota de los siguientes datos: IPv4 Dirección IP, IPv4 Mascara de subred, IPv4 Puerta de enlace predetermina, IPv4 Servidores DNS. Estos datos los necesitaremos más adelante así que los anotaremos por allí en algún lugar y luego cerramos todas las ventanas que abrimos.

Información del servidor

Bien, también vamos a necesitar del servidor al que nos vamos a conectar la siguiente información:

  • Dirección IP del servidor de autenticación
  • Dirección IP del servidor del juego
  • Puerto del servidor de autenticación (normalmente 2106)
  • Puerto del servidor del juego (normalmente 7778)

Esta información se puede sacar normalmente del archivo de hosts que la mayoría de servidores alteran. El archivo de hosts está en C:\windows\system32\drivers\etc

Para este ejemplo nos vamos a conectar al servidor L2TheGame, la información de dicho servidor es:

  • Servidor de autenticación: 78.46.17.80
  • Servidor del juego (Phoenix [500x]): 78.46.17.80
  • Puerto del servidor de autenticación: 2106
  • Puerto del servidor del juego: 7778

Tip:

Lo mejor para realizar esta ténica de tunneling es jugar el Lineage II abriendo directamente l2.exe (que está en la carpeta system) para así evitar pasar por el servidor del nProtect y el l2patcher. Es lo que yo recomiendo y es así como llevaré esta guía.

Modificación del archivo de hosts

Lo primero que haremos será modificar el archivo de hosts. El archivo de hosts está en C:\windows\system32\drivers\etc, como se trata de un archivo de sistema para poder modificarlo tendrás que ejecutar el bloc de notas con privilegios de administrador (Clic derecho → Ejecutar como administrador) y abrir el archivo.
En el archivo verás tres líneas parecidas a estas:

# The patch edited this three lines...
78.46.17.80 l2authd.lineage2.com
84.246.123.71 l2patcher.lineage2.com
216.107.250.194 nProtect.lineage2.com

Solo modificaremos la primera línea, agregaremos un # al inicio y luego agregaremos otra línea debajo de ella, el archivo debe verse entonces así:

# The patch edited this three lines...
# 78.46.17.80 l2authd.lineage2.com
127.0.0.1 l2authd.lineage2.com
84.246.123.71 l2patcher.lineage2.com
216.107.250.194 nProtect.lineage2.com

Ahora probaremos que la resolución de DNS para el servidor l2authd.lineage2.com haya sido cambiada al localhost (127.0.0.1), para ello abrimos una ventana de consola y ejecutamos:

ping l2authd.lineage2.com

A lo que el sistema debe responder:

Haciendo ping a l2authd.lineage2.com [127.0.0.1] con 32 bytes de datos:

Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128

Estadísticas de ping para 127.0.0.1:
    Paquetes: enviados = 4, recibidos = 4, perdidos = 0
    (0% perdidos),
Tiempos aproximados de ida y vuelta en milisegundos:
    Mínimo = 0ms, Máximo = 0ms, Media = 0ms

Configurar la tarjeta de red

Bueno, aquí es donde viene todo el secreto de esta entrada y en lo que se diferencia de las anteriores. Vamos a configurar una doble dirección IP en nuestra tarjeta de red, para ello vamos de nuevo a Inicio → Panel de Control

Nuevamente seleccionamos "Ver el estado y las tareas de red" bajo la categoría "Redes e internet"

y nuevamente en el vínculo "Administrar conexiones de red"

nuevamente clic con el botón secundario del ratón sobre la conexión y esta vez seleccionamos "Propiedades" en el menú que se despliega:

Buscamos y seleccioamos en la lista el "Protoclo de Internet versión 4 (TCP/IPv4)" y damos clic en el botón "Propiedades"

Seleccionamos "Usar la siguiente dirección IP" y damos clic en el botón "Opciones avanzadas..."

Arriba donde dice "Direcciones IP" damos clic en "Agregar"

Primero agregaremos la dirección IP normal del equipo (la que anotamos en la sección "Preliminares" más arriba), también introduciremos la máscara de subred y damos clic en Aceptar. Luego volvemos a dar clic en el botón "Agregar" y agregamos otra IP. En este caso agregaremos la dirección IP del servidor del juego, en el caso del ejemplo 78.46.17.80 y para acompañarla la máscara de subred 255.255.255.0

Ok, ahora en donde dice "Puertas de enlace predeterminadas" damos clic en el botón agregar y agregamos la puerta de enlace predeterminada de nuestra conexión (que anotamos en la sección "Preliminares") dejamos que windows se encargue de la métrica por lo que dejamos la casilla seleccionada

Ahora damos clic en la pestaña DNS

luego, donde dice "Direcciones de servidor DNS por orden de uso" damos clic en "Agregar" y agregamos los servidores DNS de nuestra conexión:

Damos clic en "Aceptar" en todas las ventanas abiertas hasta que lleguemos nuevamente a la ventana donde aparecen las conexiones de red. Antes de continuar debemos probar que aún podamos acceder a Internet, para hacerlo abrimos el navegador y buscamos cualquier página de Internet, si podemos verla, estamos listos para seguir adelante.

También sería bueno verificar que la tarjeta de Red quedó con ambas direcciones IP. Para ello abrimos una consola y ejecutamos:

ipconfig

Y verificamos que la conexión tenga ambas direcciones IP:

Adaptador LAN inalámbrico Conexión de red inalámbrica:

   Sufijo DNS específico para la conexión. . :
   Vínculo: dirección IPv6 local. . . : fe80::389d:74c8:67ee:f52c%11
   Dirección IPv4. . . . . . . . . . . . . . : 78.46.17.80
   Máscara de subred . . . . . . . . . . . . : 255.255.255.0
   Dirección IPv4. . . . . . . . . . . . . . : 192.168.0.174
   Máscara de subred . . . . . . . . . . . . : 255.255.255.0
   Puerta de enlace predeterminada . . . . . : 192.168.0.1

Crear el túnel

Bueno, ahora llegó el momento de crear el túnel SSH que nos hará saltar el firewall. Para este ejemplo utilizaremos el Putty por que tiene interfaz gráfica pero igual serviría el SSH normal por consola.

Abrimos el Putty:

Donde dice "Host Name (or IP Address)" escribimos la dirección IP del equipo relevador (el equipo que está por fuera del firewall). Si el equipo relevador está sirviendo por un puerto diferente al 22 (por ejemplo el 80 como lo discutimos en las entradas anteriores) habrá que especificar ese puerto en la casilla de al lado.

Luego en el árbol de la izquierda vamos a Connection → SSH → Tunnels

Primro nos aseguramos que la casilla de verificación "Local ports accepts connections from other hosts" esté marcada y luego debajo de donde dice Add new forwarded port vamos a escribir los siguientes datos:

Source port: 2106
Destination: 78.46.17.80:2106

Nos fijamos que "Local" y "Auto" estén seleccionados y damos clic en "Add"
En este paso acabamos hacer el túnel para el servidor de autenticación, por lo que deberás remplazar 78.46.17.80 por la dirección IP del servidor de autenticación del server donde juegas.

Seguidamente agregaremos el forwarding para el servidor del juego:

Source port: 7778
Destination: 78.46.17.80:7778

Nos fijamos que "Local" y "Auto" estén seleccionados y damos clic en "Add"

Al terminar la ventana del Putty debe verse más o menos así.

Aclaración:

En el caso del servidor Phoenix de L2 TheGame tanto el servidor de autenticación como el servidor del juego están en la misma máquina (tienen la misma IP), sin embargo para muchos servidores de Lineage II esto no es así. Fíjate que hayas hecho el forwarding a las direcciones correctas o la conexión fallará.

Bueno, ahora te recomiendo que guardes la sesión del Putty para usarla cada vez que quieras jugar y también por si algo fallara para que puedas corregir los errores sin tener que volver a escribirlo todo. En el árbol de la izquierda selecciona el primer Item (Session) y donde dice "Saved sessions" escribe un nombre para la sesión, por ejemplo "L2" y luego haz clic en "Save".
La siguiente vez que abras el Putty podrás hacer clic en la entrada de la lista y luego en "Load" y Putty cargará nuevamente todos los parámetros (incluidos los túneles).

Conectar y probar

Ok. Al parecer ya todo está listo para conectar y divertirse. Haz clic en el botón "Open" del Putty para establecer la conexión, logea con un nombre de usuario y una constraseña válidas.

Antes de iniciar Lineage fíjate que Putty esté preparado para hacer el Port Forwarding. Para ello abre una consola y ejecuta:

ipconfig -n -a -p tcp

Deben aparecer dos puertos abiertos en escucha, el 2106 y el 7778:

  TCP  0.0.0.0:2106    0.0.0.0:0    LISTENING
  TCP  0.0.0.0:7778    0.0.0.0:0    LISTENING

Si todo va bien hasta aquí solo restará abrir el cliente de Lineage II y conectarse y ya debes poder jugar normal. Felicidades!

Detalles técnicos

Ahora explicaré un poco por que funciona lo anterior. Como habran notado usamos la característica que tiene Windows de permitir más de una dirección IP en la misma tarjeta de red (aunque también se podría haber hecho con dos NICs si esa característica no estuviera disponible).

Lo que hicimos fue colocar la dirección IP del servidor del juego en la tarjeta de red con una máscara de subred de 255.255.255.0 y es allí donde radica el secreto de este asunto

Cuando una sistema va a establecer una conexión con otro sistema lo primero que hace es hacer un AND binario entre su propia dirección IP y su máscara de subred, en nuestro caso:

078.046.017.80
255.255.255.0
---------------
78.46.17.0

Luego toma la dirección la que se va a conectar y hace un AND binario con su máscara de subred, en nuestro caso:

078.046.017.80
255.255.255.0
---------------
78.46.17.0

Si las dos direcciones resultantes de las operaciones anteriores son diferentes el sistema sabe que debe tratar de enviar la solicitud de conexión a través de la puerta de enlace por que la dirección de destino está en otra red, más, si son iguales (lo que sucede en este ejemplo) el sistema sabe que la dirección de destino está dentro de su propia red así que no trata de enviar la solicitud a través de la puerta de enlace sino a través de la red local.

Como establecimos que nuestra dirección IP es 78.46.17.80 cuando la solicitud es enviada a través de la red local quien la recibe es nuevamente nuestra propia tarjeta de red.

Así pues, lo que hemos hecho aquí es engañar de cierta forma al sistema para que envíe una petición que normalmente enviaría a través de la puerta de enlace de vuelta a nuestro sistema y hemos hecho que Putty escuche conexiones entrantes en el puerto 7778 (como si hubiera un servidor de Lineage II corriendo en la máquina local)

Lo que sucede en resumen es:

  1. Abrimos el cliente de Lineage y escribimos nuestros datos de acceso
  2. Lineage resuelve la dirección l2authd.lineage2.com, como hemos agregado una entrada al archivo de hosts que dice que esa dirección es la 127.0.0.1 Lineage II envía una petición de acceso al localhost en el puerto 2106
  3. Putty está escuchando en el puerto 2106 cuando llegá la petición Putty la reenvía con ayuda del equipo relevador al servidor real de autenticación de Lineage II (el cliente no nota la diferencia)
  4. La autenticación sucede y Lineage II muestra la lista de servidores que el servidor de autenticación envió de vuelta.
  5. Seleccionamos un servidor para conectarnos
  6. En este caso Lineage II no trata de resolver ninguna dirección sino de establecer una conexión directa con el servidor. Pone una petición en la red que va a la dirección IP del servidor del juego (en el caso del ejemplo 78.46.17.80)
  7. Windows hace la operación binaria que mencionamos anteriormente y concluye que esa dirección está dentro de la red local. Pone la petición y esta regresa de vuelta a la tarjeta de red.
  8. Putty está escuchando en el puerto 7778 de modo que recibe la petición y la reenvía con ayuda del equipo relevador al servidor del juego real. Se establece la conexión y Lineage II muestra los personajes que hay en nuestra cuenta.

Mientras que juguemos Putty, y el servidor SSH que corre en el equipo relevador mantendrán establecida la conexión permanentemente. El cliente de Lineage II no notará la diferencia y el Firewall pensará que la conexión va a un puerto admitido.

Ten en cuenta que puede haber lag extra:

Recuerda que las conexiones SSH van encriptadas, por lo que tu equipo debe encriptar los datos antes de enviarlos al equipo relavador y luego este a su vez debe desencriptarlos para enviarlos al servidor del juego, adicionalmente estás agregando un nodo más a la conexión. Todo lo anterior puede causar lag extra por lo que la experiencia nunca será igual a la que tendrías con una conexión directa.

2010-05-22

Crear una emisora web con Icecast 2 e Ices 2 en Ubuntu

Bueno, en este pequeño tutorial enseñaré como crear una emisora Web en Ubuntu usando icecast2 como servidor de emisión e ices2 como fuente para el servidor. Aunque esto se puede hacer en cualquier distribución de linux yo recomiendo un ubuntu. Yo lo hice con kubuntu 9.10 (karmik).

Instalar los paquetes

Bueno, lo primero es instalar los paquetes que se van a necesitar para la emisora. Si prefieres usar un administrador de paquetes gráfico como synaptic o adept no hay problema, de todos modos dejo aquí el código de la consola para lograrlo. Los paquetes que necesitaras son icecast2 e ices2

$ sudo apt-get install icecast2 ices2

Configurar la emisora

Preparar Icecast

Primero prepararemos icecast. Icecast utiliza un archivo de configuración xml donde están todos los parámetros de la emisora además de unos archivos para la interfaz web, unos archivos predeterminados se instalan con los paquetes, hay que hacer una copia de ellos en el directorio del usuario por que no se debe ejecutar icecast como root.
 

Primero crearemos una estructura de directorios para albergar los archivos de configuración y de registro de icecast, estando en nuestro home ejecutamos:

$ mkdir icecast
$ cd icecast
$ mkdir conf
$ mkdir logs

Ahora copiamos el archivo de configuración predeterminado del icecast a la carpeta que hemos creado. en kubuntu dicho archivo es /etc/icecast2/icecast.xml Si el archivo no esta allí entonces puedes usar el comando find para encontrarlo así:

$ find / -name "icecast.xml"

Nota: en algunas distribuciones de linux las carpetas del sistema están protegidas, los usuarios no pueden acceder a ellas (ni siquiera para leerlas) si este es tu caso deberás usar sudo cuando el sistema te diga que no puedes leer los archivos

$ cd conf
$ cp /etc/icecast2/icecast.xml icecast.xml
$ sudo chown user:group icecast.xml

Dado que el archivo pertenecía al root hemos usado chown para hacer que ahora nos pertenezca a nosotros. ¡Ojo aquí! donde he colocado user y group debes colocar tu nombre de usuario y de grupo respectivamente, en ubuntu normalmente el nombre del grupo es igual al nombre de usuario, en mi caso por ejemplo tanto mi usuario como mi grupo se llaman sergio así que el comando quedaría: sudo chown sergio:sergio icecast.xml
 

Por ahora no modificaremos el archivo de configuración, antes de eso copiaremos las carpetas que el icecast utiliza para la interfaz web. Estas carpetas normalmente están ubicadas en /usr/share/icecast2 pero si no están allí recuerda que puedes usar el comando find para localizarlas.

$ cd ..
$ cp -r -L /usr/share/icecast2/web web
$ cp -r -L /usr/share/icecast2/admin admin
$ sudo chown -R user:group admin
$ sudo chown -R user:group web

Recuerda remplazar user y group por tu nombre de usuario y de grupo respectivamente.
 

Ok, ahora si configuraremos el icecast para ello modificaremos el archivo de configuración que hemos copiado:

$ cd conf
$ kate icecast.xml

Si no tienes kate puedes usar gedit u otro editor pero trata en lo posible de usar un editor que te resalte el código para que se te haga más sencillo ubicar las líneas.
 

Bueno, vamos a ir editando las líneas en el orden en el que aparecen en el archivo, así que estate atento.

<clients>10</clients>

Esta línea fija la cantidad máxima de clientes (reproductores) que se pueden conectar a tu emisora. Normalmente esto se ajusta de acuerdo con la cantidad de ancho de banda del que dispones para emitir. Un valor razonable es 50. Si esperas más de 50 clientes quizás este tutorial no es para ti.

<source-password>hackme</source-password>

En esta línea colocaras la contraseña que las fuentes (en nuestro caso el ices2) utilizará para logearse en el servidor y enviar la música. Es recomendable que cambies la contraseña predeterminada para evitar que alguien más pueda emitir con tu servidor.

<relay-password>hackme</relay-password>

En nuestro caso no usaremos relays pero debes cambiar esta contraseña por seguridad.

<admin-user>admin</admin-user>
<admin-password>hackme</admin-password>

Este es el nombre de usuario y la contraseña que utilizaras para logearte en el módulo de administración web de Icecast. Te recomiendo que cambies tanto el nombre de usuario como la contraseña por seguridad.

<hostname>localhost</hostname>

Si tu emisora está montada en un servidor al que accedes con un dominio que has adquirido aquí colocaras el nombre del dominio, por ejemplo miradio.org. Si estás montando un servidor de pruebas te bastara con dejar localhost.

<port>8000</port>

Este es el puerto por el que emitirás. Normalmente no hay que cambiar el puerto a menos que tengas restricciones de firewall o algo parecido.

<logdir>/home/user/icecast/logs</logdir>
<webroot>/home/user/icecast/web</webroot>
<adminroot>/home/user/icecast/admin</adminroot>

Estas tres líneas le dicen al icecast donde guardar sus registros, donde están los archivos del panel de interfaz web y donde están los archivos del panel de administración de la interfaz web. Aca he colocado las rutas que deberías usar tu también si has seguido el tutorial, recuerda cambiar user por tu nombre de usuario.
 

Ok, en teoría ya está todo listo para que Icecast funcione. Ahora a probarlo.

Ejecutar Icecast

Bueno, ahora probaremos que todo esté funcionando, ejecutamos este comando:

$ icecast2 -c icecast.xml

Si la consola no arroja ningun error entonces Icecast ya está corriendo, ahora verificaremos los logs y la interfaz web para ver que todo esté andando bien.
 

Nota importante: La consola quedará bloqueada con el Icecast NO vayas a cerrar la consola o harás caer el servidor, dejala allí abierta, abre otra ventana o pestaña de consola para hacer los pasos que siguen.

Estando en nuestro home ejecutamos:

$ cd icecast
$ cd logs
$ cat error.log

Debes ver algo como esto:

[2010-05-22 13:08:33] INFO main/main Icecast 2.3.2 server started
[2010-05-22 13:08:33] INFO yp/yp_update_thread YP update thread started
[2010-05-22 13:08:33] INFO connection/get_ssl_certificate No SSL capability

No importa si el log es un tanto diferente, en realidad lo que importa es que no haya errores y que aparezca la línea que dice server started
 

Ahora veremos el estado del servidor a través de la interface web. Para ello en un navegador vamos a la dirección http://localhost:8000/ esto nos debe presentar una página de estado del servidor. Recuerda que para entrar a la sección de administración deberas introducir el nombre de usuario y la contraseña que has especificado en <admin-user></admin-user> y <admin-password></admin-password>

Preparar Ices

Bueno ya tienes el servidor corriendo y preparado para aceptar conexiones, no obstante aún no puedes escuchar música, básicamente por que no le has dicho a Icecast que música tocar. En realidad es un poco más complicado, verás:
 

Icecast es el servidor de emisión, el se encarga de aceptar las peticiones entratentes y distribuir el medio a los escuchas que se conecten pero no sabe nada de música ni de listas de reproducción, de ello se encarga el programa al que se denomina fuente (source). Existen varias sources diferentes para el Icecast entre ellas la más básica que es el Ices desarrollado por las mismas personas que desarrollaron el Icecast pero también puedes usar otras fuentes diferentes si lo prefieres, por ejemplo el VLC Player puede actuar como fuente para el Icecast.
 

Para este tutorial usaremos el Ices como fuente para el Icecast ya que es facil y rápido de configurar. Al igual que con el Icecast crearemos una estructura de directorios en el home para organizar los archivos. Esando en el home ejecutamos:

$ mkdir ices
$ cd ices
$ mkdir conf
$ mkdir playlists
$ mkdir logs

Ahora copiaremos el archivo de configuración predeterminado del Ices para usarlo con listas de reproducción. Recuerda que si no encuentras el archivo puedes hacer uso del comando find para localizarlo.

$ cd conf
$ cp /usr/share/doc/ices2/examples/ices-playlist.xml ices.xml
$ kate ices.xml

Ahora editaremos el archivo de configuración del Ices. Recuerda que lo haremos en el orden en que las líneas aparecen en el archivo así que pon mucha atención para no perderte.

<logpath>/home/user/ices/logs</logpath>

Esta línea le dice a Ices donde guardar los archivos de registro. Recuerda remplazar user con tu nombre de usuario.

<name>Example stream name</name>
<genre>Example genre</genre>
<descriptione>A short description of your stream</description>

Estas tres líneas contienen la metadata de la emisora. Sería una buena idea que las llenaras con los datos correctos según el nombre de tu emisora, el genero y la descripción.

<param name="file">/home/user/ices/playlists/playlist.txt</param>

Esta línea le dice al Ices donde encontrar el archivo de lista de reproducción. Más adelante te diré como crear la lista de reproducción. Recuerda remplazar user con tu nombre de usuario

<param name="random">0</param>

Esta línea le dice al Ices si tocar la lista de reproducción secuencialmente o aleatoriamente. Depende de ti establecerlo en el valor que quieras. Si la pones en 1 Ices tocará las entradas aleatoriamente

<param name="once">0</param>

Esta parámetro le dice al Ices si debe tocar la lista de reproducción solo una vez o debe tocarla infinitas veces. Si dejas el valor en 1 Ices tocará la lista de reproducción una vez y cuando termine cerrará la conexión con el servidor y finalizará haciendo que la emisora ya no se pueda escuchar más. Si piensas dejar la emisora corriendo todo el día para que la gente se conecte cuando quiera deberás establecer el valor en 0 para que Ices cicle indefinidamente la lista de reproducción.

<hostname>localhost</hostname>
<port>8000</port>
<password>hackme</password>
<mount>/example1.ogg</mount>

Esta es la información del servidor. Aquí colocamos la información del servidor Icecast a través del cual vamos a emitir. Esta información debe coincidir con la información que ya habíamos configurado en el icecast.xml. en <password></password> colocamos el password que habíamos puesto en la etiqueta <source-password></source-password> de icecast.xml
 

En <mount></mount> debemos escojer el mount point que queramos para emitir. El mount point será la parte final de la URL que usaremos para escuchar la emisora así que no conviene que sea exmaple1.ogg podrías poner en su lugar listen.ogg o tal vez algo más descriptivo pero no debe contener espacios y DEBE terminar en .ogg ya que es el codec que Icecast e Ices usan para emitir si no poner el .ogg algunos players se quedarán colgados sin hacer nada cuando trates de escuchar la estación.

<nominal-bitrate>64000</nominal-bitrate>

Esta el la última configuración pero una muy importante. Define la velocidad de bits con la que emitirá tu emisora. Cuanto mayor la velocidad de bits mejor la calidad del audio pero más ancho de banda necesitas para mantener a todos los oyentes conectados. Si colocas más velocidad de bits de la que puede soportar tu canal para la cantidad de oyentes que esperas los oyentes empezaran a experimentar cortes en la música o peor aún desconexiones espontaneas.
 

Si no estás muy seguro de que bitrate usar deja el bitrate predeterminado que es de 64kbps es una buena calidad para el .ogg al menos para la mayoría de aplicaciones. Si quieres saber más sobre como calcular el ancho de banda que necesitarás lee el recuadro siguiente, sino saltalo.

Cómo calcular el ancho de banda
 

Si no estás muy seguro de como saber cuantos oyentes puede soportar tu canal o cual es el máximo bitrate que puedes usar sin que tus oyentes experimenten problemas esta sección te dará alguna luz sobre ese asunto:
 

Ancho de banda Concurrente
 

El ancho de banda concurrente es la amplitud del canal que necesitas para emitir. Se calcula de la siguiente manera:
 

cb = b*n
 

Dónde cb es el ancho de banda concurrente (en kbps), b es el bitrate al que emites (en kbps) y n la cantidad de oyentes que esperas que se conecten simultaneamente. Así, por ejemplo, si vas a emitir a 128kbps y esperas 50 oyentes simultaneos: cw = 128kbps * 50 = 6400 kbps. Así pues necesitas un canal de 6.4 mbps para soportar 50 simultaneos oyentes si emites a 128kbps
 

Límite de Tráfico
 

Algunos servidores imponen un límite mensual de tráfico y cuando lo sobrepasas o bien empiezan a cobrarte más o bien no te permiten emitir más por el resto del mes. Para saber si tu límite mensual es suficiente para soportar la emisora puedes calcularlo así:
 

tb = b*n*at*30
 

Dónde tb es el ancho de banda total del mes (en kbits), b es el bitrate al que emitirás (en kbps), n es la cantidad de oyentes promedio que esperas por día y at es la cantidad promedio de tiempo que un oyente estará conectado al día (en segundos).
 

Así pues si emitirás a 128kbps, esperas 50 oyentes diarios y cada uno estará conectado en promedio 5 horas diarias escuchando la emisora tendrás:

tb = 128*50*18000*30 = 402.33 GB
 

Necesitarás un límite de tráfico mensual de al menos 400 GB

Ok, ya estas listo con el Ices configurado, ahora a crear la lista de reproducción.

Crear la lista de reproducción

La lista de reproducción es simplemente un archivo en el que cada línea tiene la ruta de acceso a un archivo .ogg, por ejemplo:

/home/user/music/anime/yui - rolling star.ogg
/home/user/music/anime/boa - every heart.ogg
/home/user/music/anime/gumi - catch you catch me.ogg
/home/user/music/anime/porno graffiti - melissa.ogg

Puede resultar un poco engorroso crear la lista a mano así que puedes usar el comando find para agilizar el trabajo, por ejemplo:

$ find /home/user/ -name "*.ogg" > playlist.txt

Este comando escribira en un archivo llamado playlist.txt todos los archivos .ogg que encuentre en la carpeta /home/user/, recuerda nuevamente remplazar user con tu nombre de usuario.

Ejecutar el Ices

En cuanto tengas preparada tu lista de reproducción (que debes haber guardado en /home/user/ices/playlists/playlist.txt) podrás poner en marcha el ices. Para ello haces lo siguiente estando en tu home:

$ cd ices
$ cd conf
$ ices2 ices.xml

Ok, si todo va bien la consola no debe mostrar mensajes de error, si es así el ices ya está corriendo y enviando información de medios al Icecast. Nuevamente la consola quedará bloqueada NO cierres la consola o bajaras al Ices abre otra ventana o pestaña de consola para los pasos siguientes.
 

Vamos a verificar el estado del Ices, para ello, desde nuestro home:

$ cd ices
$ cd logs
$ cat ices.log

Debes ver algo parecido a esto:

[2010-05-22 18:20:55] INFO ices-core/main IceS 2.0.1 started...
[2010-05-22 18:20:55] INFO signals/signal_usr1_handler Metadata update requested
[2010-05-22 18:20:55] INFO playlist-basic/playlist_basic_get_next_filename Loading playlist from file "/home/sergio/ices/playlists/playlist.txt"
[2010-05-22 18:20:55] DBUG playlist-basic/shuffle Playlist has been shuffled
[2010-05-22 18:20:55] INFO playlist-builtin/playlist_read Currently playing "/home/sergio/Música/J-Music/YUI/From Me To You/11.ogg"
[2010-05-22 18:20:55] INFO stream/ices_instance_stream Connected to server: localhost:8000/yui.ogg
[2010-05-22 18:20:55] DBUG reencode/reencode_page Reinitialising reencoder for new logical stream
[2010-05-22 18:20:55] INFO encode/encode_initialise Encoder initialising in VBR mode: 2 channels, 44100 Hz, nominal 128000

Básicamente lo que debes buscar es una línea como [2010-05-22 18:20:55] INFO playlist-builtin/playlist_read Currently playing "/home/sergio/Música/J-Music/YUI/From Me To You/11.ogg" que te indica que Ices leyó y empezó a emitir uno de los archivos que pusiste en la lista de reproducción.
 

También puedes verificar el estado del servidor desde la interfaz web entrando a http://localhost:8000 allí debe aparecer el mount point que has configurado con la metadata que colocaste en el archivo.

Escuchar la emisora

Ok, por fin el momento que has estado esperando. Escuchar la música que emite la emisora. Ya puedes hacerlo, por ejemplo con el VLC Player:
 

En el menú Medio selecciona Abrir volcado de red, en el cuadro que aparece escribe en el campo de dirección: http://localhost:8000/mount.ogg (remplaza mount.ogg por el mount point que has colocado en <mount></mount> en el archivo ices.xml) y luego haz clic en el botón Reproducir.
 

Si todo va bien escucharás la música que tu emisora emite. ¡Felicitacione!

Detener la emisión

Ok. Ahora te diré como detener la emisión. Recuerdas que dejamos abiertas las consolas del Ices y del Icecast pues bien, para detener la emisión simplemente debes presionar CTRL+C en la consola para detener los programas. Lo más recomendable, claro está, es que detengas primero Ices y luego Icecast por que si lo haces al revés Ices perderá inesperadamente la conexión con el servidor lo cual no es muy recomendable.

Como no bloquear la consola

Es posible ejecutar Icecast e Ices sin que la consola quede bloqueada. Para ello debes ejecutar los comandos agregando un ampersand (&) al final, así:

$ icecast2 -c icecast.xml &
$ ices2 ices.xml &

Al hacerlo de esta manera el sistema responderá con algo parecido a esto:

[1] 2923

Ese número es el pid (id de proceso) del Icecast esté número identifica al proceso en el sistema y es el que necesitas para detener la emisión luego. Si pierdes el número o la emisora ha estado emitiendo por mucho tiempo y ya no lo recuerdas puedes recuperarlo usando el comando:

$ ps ax | grep icecast2

A lo que el sistema responderá con algo como esto:

2329 pts/1 Rl 0:03 icecast2 -c icecast.xml

El primer número que aparece es el pid del Icecast.
 

Para detener la emisión debes enviar al proceso la señal de salida (TERM) lo haces con este comando:

$ kill -15 2923

Aunque kill puede parece algo drástico en realidad ese comando simplemente envía una señal de terminación al proceso, no lo mata forzadamente. Cuando lo hagas verás que el sistema responde con algo como esto:

[1]+ Hecho icecast2 -c icecast.xml

Así sabrás que el proceso ha terminado.

Algunas herramientas utiles

Mp3 a ogg

Cuando se configura una estación de radio con Icecast e Ices una de las preguntas que primero surge es: ¿Cómo convierto un Mp3 a ogg? La respuesta es muy sencilla para nuestro consuelo, para convertir un Mp3 a ogg en linux basta un comando de consola pero antes asegúrate de tener instalados estos paquetes si aún no los tienes:

$ sudo apt-get install mpg321 vorbis-tools

Ahora para convertir un mp3 a ogg:

$ mpg321 music.mp3 -w - | oggenc -o music.ogg -

Creo que eso es por ahora. Si tienen alguna duda o encuentran algún error en el post por favor no duden en dejar un comentario y yo les aclararé cualquier duda que tengan o corregiré lo que sea que esté mal.
 

Más adelante revisaré el post y veré que me falta por aclarar o cambiar. Espero que les haya gustado el tutorial y sobre todo que les haya servido

2010-03-01

Abajo los transportadores

¡Que caos tan terrible el que hicieron los transportadores hoy en Bogotá! Por culpa de ese estúpido paro Transmilenio colapso completamente, por supuesto ese sistema de transporte no puede absorber la cantidad tan enorme de personas que se movilizan por la ciudad:


Por culpa del enredo que ellos armaron no pude ir a mi clase de Astronomía. Malditos sean, Bogotá tiene el peor servicio buses urbanos, son desaseados, inseguros, hacen lo que les da la gana, paran donde les da la gana y aún así se quejan. Y aparte de todo hacen paros estúpidos que alteran todo el orden normal de la ciudad.

Pues nada, ojala que no cedan a sus demandas y antes les pongan más impuestos para que paguen por lo que hicieron hoy, el caos de que hubo hoy en la ciudad no tiene ninguna excusa. Aprendan a prestar un buen servicio y luego si quéjense.