Hola de nuevo gente, voy a montar un servidor android o servidor web android, servidor ftp android y un servidor dns android en un smartphone android con el que podremos configurar varias páginas y varios dominios propios. Podemos pensar de que nos valdría hacer esto si tenemos nuestro pc con el que podriamos hacerlo más facilmente, sin embargo la respuesta es bastante sencilla, el consumo. Para tener nuestro propio servidor web como es normal queremos que este funcionando el mayor tiempo posible, un pc de sobremesa sencillo con un procesador pongamos por ejemplo que consume una media de 1oo W/h es muy poco, pero pensemos que podemos apagar el monitor entre otras cosas para ahorrar energia. El precio actual es mas o menos 0,14 € kW/h . Pasamos W/h a kW/h y multiplicamos:  0.1 x 0.14= 0.014 €/h . ¡Eso no es nada! podemos pensar. multimplicamos por 24 horas de un día 0.014×24= 0.336 € al día tener un pc encendido por 30 días 10.08 € al més. Si miramos los precios de los servidor por un servicio normal con multimples dominios rondan los 5 y los 8 € al mes sin meternos en ofertas de pagos anuales que podría salir más económico y por supuesto sin ningún tipo de mantenimiento por nuestra parte, la empresa se encarga de mantener el servicio en linea. Un portatil consume menos más o menos la mitad de esos 100 W/h asi que estaríamos en 5€ al mes. Sin embargo no queremos montar una web para tenerla un mes en linea, así que veamos los precios anuales. Sobremesa unos 120€ al año, portatil 60 y un movil? JAJA vamos a verlo. Un movil cargando consume unos 2,24 W/h hacemos la misma operacion de antes, pasamos a kW/h y multiplicamos por el precio actual 0,00224 x 0.14= 0.0003136 €/h así que 0.0003136 x 24 = 0.0075264 para un día y 0.0075264 x 30 =  0.225792 y por 0.225792 x 12 = 2.71 para un año. Si, un movil conectado todo el año nos consumira una media de 2.71 € al año. Por muy poco que consuma un portatil no llegaremos a estas cifras, la diferencia con un pc de sobremesa seria de 117 € año.

Por otro lado en mi caso ha llegado a mis manos un sony xperia z2 con el panel tactil estropeado que como sabeis mediante un cable otg a todo android se le puede enchufar un raton y/o teclado por usb y funciona sin problemas pero para utilizarlo de forma normal no sería muy comodo tener que sacar un raton para responder una llamada. Es un buen teléfono y más que suficiente para soportar un tráfico decente para un grupo de webs, es un movil con 3gb de memoria ram y un procesador de cuatro núcleos Qualcomm Snapdragon 801 a 2,3 Ghz, un penino de servidor en realidad.

En este caso no voy a utilizar servicios de dominios dns gratuitos como no-ip sino que voy a utilizar mi propio dominio alojado en godaddy y vamos a actualizar el dns mediante eso si, otro servicio de actualización de dns gratuito, recordemos que este servicio en no-ip no es gratis, busque y busque y encontré dynu.com funciona muy bien y tiene una api que nos permite actualizar la ip fácilmente mediante wget, lleva bastante tiempo online así que en principio no deberíamos dudar del servicio. Si conocéis algún otro gratis o económico es bueno para todos que lo compartáis en en los comentarios.

Bien, otra cosa que debemos tener en cuenta es desde donde accedemos al servidor / nuestras webs. Es importante este punto porque dependiendo desde donde entraremos necesitaremos un teléfono rooteado o no para el servidor, vamos a verlo.

Cuando el servidor está en funcionamiento si queremos entrar desde fuera de la red se accede mediante la ip pública, si queremos entrar desde dentro de la red, se accede con la ip local. Lo que pasa con los cms como wordpress por ejemplo es que la url del sitio web está en la base de datos y al acceder a una web desde dentro de la misma red nos redirecciona al dominio que está en la base de datos, que va a ser directa o indirectamente nuestra ip pública por lo que nos redireccionará muy posiblemente a la alguna página de configuración del router, lo que aparece cuando ponemos nuestra ip pública en el navegador. Por lo general esto se soluciona facilmente añadiendo una linea en el archivo hosts de windows por cada dominio que tengamos apuntando a nuestro servidor y en cada dispositivo desde el cual queramos entrar desde dentro de la red. Sin embargo ¿que pasa si estamos en el sofá y queremos entrar desde nuestro android personal a nuestra página para responder un comentario por ejemplo? Para modificar el archivo hosts en android es necesio ser root porque forma parte del sistema de archivos de sistema, así que entre rootear mi teléfono personal y/o perder la garantía en mi caso he decido rootear el teléfono que voy a usar como servidor android. El motivo es que necesitamos montar un servidor dns para hacer lo que haríamos desde el archivo hosts, el problema está en que podemos cambiar fácilmente las dns a las que se conectan los dispositivos sin ser root, pero no podemos especificar el puerto del servidor dns, por lo que debemos utilizar el puerto normalizado, el 53 para nuestro servidor dns, y claro, android no nos permite hacer uso de el si no somos root.

Otra cosa es que si queremos montar montar hosts virtuales para alojar varias webs y queremos entrar desde dentro de la red, como sería lo normal, necesitamos montar el servidor en el puerto 80. El motivo es que en el archivo hosts de windows no podemos especificar puertos y asi que para evitar problemas si vuestra intencion es montar host virtuales para evitaron quebraderos de cabeza es mejor rootear.

Si solo vais a montar una web y no necesitáis o no queréis entrar desde otros dispositivos y solo os interesa entrar desde vuestro pc no necesitáis el root o acceso administrador para montar vuestro servidor en android. Esta guia la voy a hacer utilizando los puerto por defecto con acceso root / administrador.

Otra cosa importante es el programa que usaremos para montar el servidor y es que aunque gran parte del programa es gratuito no ahora mismo si necesitamos comprar la version pro, esto lo actualizaré cuando haga un video completo de la instalacion, de todas formas el coste del programa es de algo menos de 4 euros si no recuerdo mal. Se llama Servers Ultimate o Servers Ultimate Pro (el de pago) y para mi es la mejor aplicación de servidor android con diferencia. Con este programa montaremos nuestro servidor web con lighttp, un servidor dns, un servidor ftp y un actualizador de ip para dynu.com, es decir todo. Tambien podemos crear un servidor android con nginx entre otros cientos de servidores. Decir que el programa de android de dynu.com es de pago también y solo permite actualizar sus propios hostnames, no vuestro propios dominios. Quizás la única pega que le veo que actualmente algunos componentes como mysql no están en la ultima versión. He usado la versión de prueba de KSweb y en este caso si esta todo actualizado es solo es para servidor web, así que finalmente me decante por Servers Ultimate.

No me voy a liar poniendo imágenes de cada paso, creo que todo estará lo bastante aunque alguien tenga que realizar alguna búsqueda de algo en concreto, de todas formas tengo pensado hacer un video completo en los próximos días que agregaré al artículo.

No me enrollo más y vamos al lio.

Apuntar nuestro dominio a nuestro servidor web android

Vamos a apuntar nuestro dominio a nuestro pc, como deciamos antes vamos a utilizar el servicio gratuito de https://www.dynu.com/ nos registramos y una vez logueados nos vamos a nuestro panel de control y ddns services, luego damos en add y añadimos nuestro dominio en la opcion 2. Al agregarlo podremos acceder a la configuracion de este dominio por ejemplo la ip a la que debe de estar apuntando y abajo de todo vemos Configuration y debajo notes, al darle a Configuration nos aparecen las dns a las que debe de apuntar nuestro dominio. Nos vamos a nuestro proveedor de dominios y apuntamos nuestro dominio a esas dns de dynu.com ejemplo NS1.DYNU.COM, NS2.DYNU.COM…..

Como sabemos nuestra ip publica cambia automaticamente cada cierto tiemplo, así que vamos a necesitar actualizarla tb en dyno.com, para hacer esta tarea vamos a utilizar Server Ultimate así que nos vamos a nuestro movil servidor android y lo instalamos desde la play store.

crear servidor android

Damos en servers y damos en el signo más para añadir un servidor nuevo. De la lista que nos parece buscamos Dynamic DNS Updater.

En server name le ponemos un nombre para identificarlo, da igual cual escojamos, en mi caso he puesto dns updater, luego nos vamos a la pestaña Specific y podemos seleccionar nuestro servicio de actualización de ip, sin embargo dynu.com no esta entre ellos así que debemos indicar manualmente la url para actualizar la ip. Si nos vamos a la api de nynu.com vemos que para actualizar la ip la actualizarmos de este modo:

http://api.dynu.com/nic/update?username=jamesd&myip=198.144.117.32&myipv6=2604:4400:a:8a::f4&password=098f6bcd4621d373cade4e832627b4f6

y si damos en la pestaña specific vemos las opciones que tenemos para añadir los diferentes elementos.

actualizar dns

Así que en Select dynamic dns url añadimos:

http://api.dynu.com/nic/update?username=%username%&myip=%ip%&password=%password%

En update every (minutes) podemos poner 1

Luego en hostname nada porque no lo vamos a usar en este caso.

Ahora en username, ponemos el nombre de usuario de nuestra cuenta de dynu.com

En password ponemos nuestra contraseña de acceso a nuestra cuenta de dynu.com

Por último podemos damos en el icono de diskete arriba a la derecha para guardar la configuracion y  ir y configurar en la cuenta de dynu.com una ip diferente para nuestro dominio por ejemplo 0.0.0.0 y darle en la app a test now en la pestaña specific abajo de todo para comprobar que se actualiza correctamente.

No marqueis la casilla de send update evenif did not change, sino es muy posible que se acabe saturando el servidor de dynu.com si se realizan demasiadas solicitudes de actualizacion, si no la marcais solo se enviara la nueva ip cuando haya cambiado y no cada minuto, tambien ahorramos en tráfico de datos.

Crear servidor web en android y configurar hosts virtuales

Ahora vamos a crear nuestro servidor web así que vamos a Servers Ultimate y vamos a añadir otro servidor, pero esta vez seleccionamos Lighttpd + php + Mysql Server, de igual modo que antes creamos un nombre para identificar nuestro servidor, por ejemplo «web server lighttpd». El puerto por defecto lo podemos dejar por defecto pero debemos saberlo para redireccionar el puerto del router mas adelante. Si somos root mas abajo tenemos la opcion ROOT: Use root internal port forwarding. Esto nos permitirá utilizar el puerto 80.

En la pestaña de LIGHTTPD podemos seleccionar entre otras opciones la ruta de los archivos para el servidor ( DOCUMENT ROOT ), debemos seleccionar una la carpeta en donde vallamos a meter los archivos de nuestras webs. En mi caso he creado una carpeta en la raiz de android con el nombre htdocs y ahí creo una carpeta para cada página web y otra para el archivo de configuracion de lighttpd que crearemos.

Más abajo tenemos la opcion de indicar una ruta para un archivo de configuración, esto lo usaremos entre otras cosas para añadir hosts virtuales y poder tener varias webs en nuestro servidor android. En CONFIG tenemos que marcar la casilla de «set custom location conig file Lighhtpd» y nos aparecerá la opción para indicar la ruta. En mi caso dentro de htdocs he creado la carpeta config.

Abajo de todo en esa misma pestaña tenemos la opción de PHP PACKAGES, aquí yo solo marco la opción para activar PHPMyAdmin, para crear facilmente bases de datos, usuarios, ect. Pero también podemos crear un administrador de archivos, en mi caso voy a crear otro servidor para esta funcion y poder usar con filezilla desde el pc asi que no lo marco.

Y ya está, le damos a guardar y tenemos nuestro servidor android.

¿Como podemos ver si funciona?

Necesitamos un crear un archivo index.php y lo añadimos a la carpeta que hemos seleccionado en docuement root:

Podemos usar algo así por ejemplo:

<html>
<head>
<title>Hola mundo</title>
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8">
</head>
<body>
<h2>Mi Web 1</h2>
</body>
</html>

Una vez hecho esto damos a start en el simbolo de play a nuestro servidor web.

Una vez hecho esto vamos a nuestro navegador y añadimos la ip local de nuestro servidor, ejemplo 192.168.0.170 . Si no hemos marcado la casilla para configurar el puerto 80 que recordemos que es necesario ser root para ello, después de la ip tenemos que añadir el puerto después de dos puntos, por ejemplo 192.168.0.170:8082  siendo 8082 el puerto de escucha de nuestro servidor web, si habéis seleccionado otro pues ponéis el que habéis seleccionado.

Os tiene que salir la página web de vuestro index.php.

Para añadir hosts virtuales necesitamos tener dominios o subdominios, o para hacer pruebas podemos editar el archivo hosts de windows he inventarnos unos y hacer la redirección dns a la ip local del servidor, sin embargo no podemos especificar puerto así que si queremos usar esta opción tenemos que usar el puerto 80, o al entrar indicar en la url el puerto como antes.

Para entrar a MysqlMyAdmin tendremos que poner el dominio mas dos puntos más el puerto en el que esta configurado, por lo general el 3306.

midominio:3306

Comentar que el usuario por defecto es root sin contraseña.

Vamos a añadir host virtuales en servidor android

La forma de añadir host virtuales es la normal de Lighttpd, nos vamos a la ruta que hemos seleccionado en Lighttpd config location y tendremos un archivo con el nombre lighthttpdconfig.conf, esto recomiendo hacerlo despues de crear el servidor ftp para poder manejar el archivo desde el pc. Tenemos que abrirlo y editarlo, un block de notas nos sirve, y al final de todo agregar para cada nuevo dominio:

Para el dominio principal recomiendo añadir esto:

$HTTP["host"] =~ "(^|www\.)midominio\.com$" {
server.document-root = "/storage/emulated/0/htdocs/pagina1/"
}

El motivo es que se interpreta diferente si entramos con que sin www, por lo que si no añadimos (^|www\.) se redirecciona a la ruta por defecto en vez de a la carpeta de esa web. pagina1 es la carpeta que añadi para el dominio principal.

Si queremos añadir subdominios debemos añadir:

$HTTP["host"] =~ "(^|\.)test\.midominio\.com$" {
server.document-root = "/storage/emulated/0/htdocs/pagina2/"
}

Al solo poner (^|\.) estamos indicando que todo lo que valla antes de test lleve a la ruta de la pagina2, en este caso entren o no con www siempre sera llevado a la carpeta de pagina2.

La diferencia entre (^|\.) o (^|www\.) está en que si ponemos (^|\.)  en el dominio principal al agregar sudominios serán llevados a la carpeta del dominio principal, recodemos que (^|\.) equivale a cualquier cosa antes de un punto.

Si agregarmos otro dominio pues lo mismo un ejemplo completo sería asi:

$HTTP["host"] =~ "(^|www\.)midominio\.com$" {
server.document-root = "/storage/emulated/0/htdocs/pagina1/"
}
$HTTP["host"] =~ "(^|\.)test\.midominio\.com$" {
server.document-root = "/storage/emulated/0/htdocs/pagina2/"
}
$HTTP["host"] =~ "(^|www\.)midominio2\.com$" {
server.document-root = "/storage/emulated/0/htdocs/pagina3/"
}

Y ya está, tenemos hosts virtuales y un servidor web para alojar varias páginas con dominios o subdominios diferentes.

Podeis ver en la documentación de lighttpd como configurar los hosts virtuales.

 

Configurar router para servidor web

Vamos a configurar el router, por un lado debemos buscar la opción en la que podamos indicar mediante el número de mac de nuestro dispositivo que siempre le asigne la misma ip interna. Podemos ver el numero de mac en ajustes/ información del teléfono/ Estado/ Dirección MAC de Wi-Fi. Sino tambien podemos verlo en el router desconectando y conectando el dispositivo y comprobando el número mac nuevo al realizar la conexión.

En mi router vodafone selecciono el modo experto, luego voy a configuración/lan y abajo de todo en la opción: DHCP estático – Red Local. le doy en el signo + y añado en dirección mac el mac del movil servidor y en ip una ip cualquiera,  por ejemplo 192.168.0.170. Debemos fijarnos que tiene que estar dentro del rango de ips que asigna el router por defecto, en mi caso está justo encima en Configuración del Servidor DHCP red local.

Configurar router

Ahora vamos a redireccionar el puerto 80 que es el puerto por defecto en el que se generan las solicitudes web para que cuando alguien entre a alguna web sea redirigido al servidor por el puerto en el que servidor está configurado.

En caso del router de vodafone vamos a la pestaña de redirección de puertos y damos en añadir nueva redirección.

Ahora En nombre ponemos lo que queramos.

Luego en dispositivo seleccionamos nuestro servidor android, sino en LAN IP indicamos la ip local que hemos configurado para que siempre sea la misma en este caso 192.168.0.170 en protocolo TCP o udp/tcp.

En tipo seleccionamos puerto, en puerto publico siempre será el 80 y en puerto LAN debemos indicar el puerto en el que tenemos configurado nuestro servidor, si usamos el puerto 80 con root ponemos 80 si no somos root indicamos el puerto que corresponda por ejemplo 8082.

Ya tenemos nuestro router configurado.

Si entramos desde un dispositivo desde fuera de la red poniendo nuestra ip publica veremos el index.php de la raiz del servidor android, o tambien podemos entrar poniendo nuestro dominio, tener en cuenta que si probais con vuestro dominio tienen que propagarse las dns si acabais de hacer el cambio de dns en vuestro proveedor de dominios y esto puede tardar hasta 2 días.

Entrar a servidor local

Y llegamos a uno de los puntos clave, la forma en la que entramos a nuestras webs desde dentro de la web.

Si entramos a nuestro dominio desde fuera de la red todo será coser y cantar pero al entrar desde dentro no carga o nos redirecciona a la pagina del router, ¿cual es el problema? Al entrar desde dentro de la red tenemos que indicar la ip local del servidor, sin embargo al instalar wordpress por ejemplo tenemos que indicar la url del sitio. Esa url se guarda en la base de datos y cada vez que alguien entre a ese wordpress sera redirigido a la url que se ha indicado, podemos verlo por ejemplo si entramos a un wordpress agregando www. delante del dominio, al instante seremos redirigidos a la web sin www. mismo problema con las imagenes por ejemplo, supongamos que creamos un artículo y en el agregamos la url de una imagen alojado en el servidor android para verla en el articulo tendríamos que indicar la ip local en el texto y los que estan fuera no la verían y si ponemos el dominio que sería lo logico nosotros no la veríamos.

Esto en windows lo solucionamos facilmente editando el archivo host pero solo lo podemos modificar como administrador, buscamos la aplicación block de notas desde la barra de tareas por ejemplo, damos click derecho y ejecutamos como administrador.

Luego vamos a archivo, abrir y en la barra de direcciones ponemos:

C:\Windows\System32\drivers\etc

Luego abajo a la dereche en el desplegable seleccionamos todos los documentos y ya podremos ver el archivo hosts. Lo seleccionamos y damos en abrir.

Para solucionar el este problema simplemente tenemos que poner IP local del servidor + espacio + nuestro dominio. Ejemplo.

192.168.0.170 midominio.com

cada vez que entremos a midominio.com automaticamente y de forma totalmente invisible se mostrará el contenido de 192.168.0.170. Esto siempre y cuando el servidor android este en el puerto 80. Sino en la barra de direcciones debemos indicar el dominio:puerto. Si es con www debemos agregar otra linea con www.

192.168.0.170 midominio.com
192.168.0.170 www.midominio.com

Esto debemos hacerlo cada dominio que tengamos en el servidor android. Los hosts virtuales tambien funcionan, a todos los efectos es como si estuvieramos entrando desde fuera del servidor android.

Crear servidor dns en android

El problema viene cuando queremos entrar como he dicho al principio del artículo desde un dispositivo android que no esta rooteado. Editar el archivos hosts en android solo es posible si somos root asi que ¿como hacemos?

El servidor dns es el encargado de decirle a nuestro navegador que cuando entremos a un direccion url, en realidad entre a determinada ip. Esto se hace asi porque por lo general es más facil recordar un dominio en formato texto que una serie de números. Además de que las ips cambian al cambiar de hosting por ejemplo y el dominio sigue siendo el mismo.

Por lo general los servidores dns están especificados en el router por nuestro proveedor de internet, pero se pueden cambiar desde windows o desde android sin ser root. Mucha gente utiliza por ejemplo los dns de google porque les funciona con un ping menor. La idea es crear nuestro propio servidor dns y configurar manualmente la «redirección» del dominio a la ip local de nuestro servidor android. Despues solo tenemos que ir a nuestros equipos y cambiar las dns para usar nuestro servidor android. Es más facil de lo que parece.

Nos vamos a Servers Ultimate y damos en crear un nuevo servidor y buscamos DNS Server. Ponemos un nombre para reconocerlo, y ahora es donde necesitamos si o si ser root porque necesitamos usar el puerto por defecto. Vamos abajo en general y donde pone ROOT , marcamos la casilla «Use root for internal port forwarding» y en puerto el 53. Esto es porque aunque podemos poner otras dns en los dispositivos no podemos indicar el puerto.

Despues en la pestaña SPECIFIC seleccionamos «Use a DNS Server for requests» y ponemos un dns por ejemplo el de google 8.8.8.8 y damos en guardar.

Ahora vamos a la pestaña RULES, aqui es donde hacemos la magia, le damos al signo + arriba a la derecha y en «HOST CONTAINS» indicamos el dominio y marcamos la casilla «Match on lowecase» y abajo donde dice «Reply with this IP» ponemos la ip local de nuestro servidor android, en mi caso 192.168.0.170. Y damos en guardar. Comentar que cada vez que el servidor dns lo ponemos online/start si queremos hacer algún cambio tenemos aunque le demos a stop, tendremos que reiniciar el servidor android, sino no se guardan los cambios porque dice que el puerto esta en uso, y nos manda seleccionar otro puerto. Tenemos que reiniciar el movil y hacer los cambios antes de darle a start al servidor dns.

Ahora en nuestro pc cambiamos las dns y ponemos la ip local del servidor android como primera dns y como segunda la ip de google.

DNS primaria: 192.168.0.170

DNS secundaria: 8.8.8.8

En el movil hacemos los mismo, podemos descargar alguna aplicacion para hacer esto, por ejemplo yo he usao DNS Changer y funciona muy bien.

Ahora cuando queramos entrar desde nuestro movil a nuestra web activamos las dns manuales y al entrar al dominio apareceran las webs.

Crear servidor ftp en android

El servidor ftp se puede crear en el momento más conveniente, en este caso lo he puesto al final pero podemos crearlo en cualquier momento para editar los archivos del servidor android.

Para el servidor FTP lo mismo, nuevo servidor y buscamos FTP Server, Le ponemos un nombre, el puerto nos da igual porque en este caso las aplicaciones como filezilla nos permite indicar el puerto de conexion, de todas formas si quereis podeis marcar la casilla de ROOT y especificar el 21 que es el standard. Para el servidor ftp en mi caso solo lo uso en local asi que entro directamente indicando la ip local servidor android en filezilla, si quereis entrar desde fuera en principio tendríais que hacer una redirección al del puerto seleccionado al servidor, lo mismo de antes pero esta vez al puerto 21 o el que corresponda.

Luego vamos a la pestaña de USERS y damos en signo + para añadir un nuevo usuario, completamos username y password y en DOCUMENT ROOT tenemos que especificar la ruta de archivos de nuestro servidor android o la carpeta a la que le damos acceso a ese usuario, damos en guardar y ya está.

Vamos a Filezilla en ip ponemos 192.168.0.170 en user y pass lo que acabamos de poner y en puerto el 21 si hemos seleccionado la pestaña root o el que corresponda en caso contrario y ya tendremos acceso a los archivos para trabajar con ellos como en cualquier otro servidor.

Esto es todo. A disfrutar que llevo muchas horas escribiendo.

Videos de como crear tu servidor android.

Parte 1: Actualizar DNS

Parte 2: Crear servidor FPP y configuración del router

Parte 3: Crear servidor web y configuración archivo hosts en windows

Parte 4: Crear servidor DNS y configuración de phpmyadmin

por korud

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *