Cómo operar un servidor de páginas para exponer su Raspberry Pi

La última vez le mostré cómo exponer un servicio web en una Raspberry Pi (o, de hecho, en cualquier dispositivo) usando un proxy inverso de Pagekite. En su Pi, solo necesita una secuencia de comandos de Python simple. Sin embargo, también depende del servidor de Pagekite, que no siempre es conveniente. Hay límites para el servicio gratuito y usted no controla todo. La buena noticia es doble: el mismo script de Python que usa para configurar el lado del cliente también puede configurar un servidor. La otra buena noticia es que todo es de código abierto.

En términos prácticos, entonces, si tiene una computadora siempre encendida y tiene una dirección IP que se encuentra en la Internet pública, puede ejecutar su propio servidor Pagekite (lo llaman prefijo) y servir sus propios backends.

Configuracion inicial

Como mencioné, necesitará una computadora visible en Internet. Bueno, es decir, una computadora técnica visible para todos los clientes que espera utilizar, incluido el fondo. Necesita algunas herramientas, incluido Python, pero nada exótico. También necesitará controlar su DNS; exactamente cómo lo hará dependerá de cómo esté configurado su servidor. En mi caso, tengo un servidor en un bastidor en un centro de datos, por lo que tengo mi propio servidor DNS (llamado) ejecutándose en él.

El sitio web de Pagekite tiene paquetes de instalación para paquetes RPM y deb. Le sugiero que comience a instalar esto en su servidor, utilizando el método compatible con su sistema de empaquetado. Esto colocará un nuevo directorio llamado /etc/pagekite.d y también instalará un script de inicio (/etc/init.d/pagekite).

Sin embargo, la configuración predeterminada es salir y no iniciar algo. Además, los archivos de muestra se configuran como si la computadora quisiera comunicarse con el Pagekite predeterminado (pagekite.me). Si desea ejecutar el suyo propio, deberá realizar algunos cambios.

Partido llamado

Si tiene un servidor en Internet, hay alguna forma de ingresar nombres (como la-tecnologia.com) en el sistema DNS para indicar una dirección IP específica. En mi caso, soy el propietario del nombre de dominio hotsolder.com, así que decidí hacer que dyn.hotsolder.com fuera el código de mi página. También quería poder crear subdominios como 3dprinter.dyn.hotsolder.com.

Para hacer esto, necesitaba algunos cambios de configuración en mi DNS:

dyn           IN        A 173.201.49.198 
*.dyn         IN        A 173.201.49.198

Obviamente, mi dirección IP es la que se muestra. Todos los nombres se refieren a hotsolder.com, por lo que no es necesario especificarlo en esas dos líneas. Si su empresa de alojamiento gestiona su DNS, deberá determinar cómo realizar cambios similares. O puede decirles que necesita dos discos “A” insertados y ellos necesitan saber lo que eso significa. El resultado es que su nombre de host (dyn.hotsolder.com o cualquier cosa.dyn.hotsolder.com) va a su servidor (el servidor de Pagekite en el diagrama a continuación).

Configuración de alojamiento

El paquete Pagekite dejará dos archivos importantes en /etc/pagekite.d: 10_account.rc y 20_frontends.rc. El primer archivo es por qué no se iniciará el servicio. La realidad es que para usar el script como interfaz, no necesita este archivo en absoluto. De todos modos, comenté todas las líneas, pero es mejor que te deshagas de él. La línea que le impide arrancar es la que dice:

abort_not_configured

Las otras líneas configuran su conexión a los servidores de pagekite.me. No haremos eso, por lo que puede eliminar esas líneas o todo el archivo.

Se supone que el archivo 20_frontends.rc se conecta a la interfaz remota. En este caso, queremos ser el final anterior, así que esto es lo que puse allí:

isfrontend
ports=8080,80,443,2222
rawports=virtual
protos=http,https,raw
domain=http,https,http-8080,raw-2222:*.dyn.hotsolder.com:$$$SECRET$$$
domain=http,https,http-8080,raw-2222:dyn.hotsolder.com:$$$SECRET$$$

También puede establecer un archivo de certificado y especificarlo aquí, pero si desea hacerlo, puede leer la documentación (busque las opciones –tl_default y –tls_endpoint junto con –fe_certname y –ca_certs). De hecho, esa misma documentación es donde puede aprender sobre todas las opciones como isfrontend y ports.

Configuración del cliente

De forma predeterminada, el script de Pagekite busca configuraciones en ~ / .pagekite.rc. Si planea usar el servidor de Pagekite, es mejor que deje este archivo y cree una nueva configuración. Puede instalar el mismo paquete en la computadora Pi o en otro cliente; recuerde que se usa el mismo script en la parte frontal (la computadora con acceso a Internet) y en la parte posterior (la computadora que ejecuta el servidor).

Si desea ejecutar desde la línea de comandos, considere usar:

pagekite --clean --optfile=/home/YOURUSERID/.pagekite.CUSTOM.rc

Obviamente, debe reemplazar YOURUSERID y CUSTOM para ajustarse a sus objetivos. Si está utilizando un paquete y hace que Pagekite se inicie automáticamente, debe consultar /etc/pagekite.d. El 20_frontends.rc es donde puede configurar cada servidor frontend con el que desea hablar.

Aquí está parte de mi archivo:

webpath = dyn.hotsolder.com/8080:/:default:/tmp/httpd
webpath = dyn.hotsolder.com/80:/:default:/home/alw/Photos
frontend=dyn.hotsolder.com:443
service_on=http:dyn.hotsolder.com:localhost:builtin:@kitesecret
service_cfg=dyn.hotsolder.com/80:indexes:True
service_on=raw-2222:dyn.hotsolder.com:localhost:22:@kitesecret

El @kitesecret se refiere a una línea arriba (o en el archivo 10_accounts):

kitesecret=$$$SECRET$$$

Esto debe coincidir con lo que está configurado en la fachada, por supuesto.

Negocio divertido

Para las solicitudes http, todo funciona como es de esperar. Las líneas service_on y service_cfg configuran el servidor web integrado (no es necesario que lo uses) y la documentación dice que se pueden cambiar. De lo contrario, es bastante sencillo configurar las cosas.

El problema surge cuando desea hacer un puerto sin formato. En mi caso, quiero exponer el servidor ssh en el puerto 22 al mundo exterior. Por supuesto, mi computadora pública ya tiene un servidor ssh en ese puerto. Eso no es un problema. Pagekite puede convertir el tráfico entrante en el puerto 2222 al puerto 22 en el backend. Tómalo.

Los puertos sin procesar realmente vienen a través de un puerto http. Para que ssh funcione (por ejemplo), debe reemplazar el puerto 443 con netcat. Los detalles están en la documentación, pero la versión corta es que necesita la siguiente configuración en ~ / .ssh / config:

Host dyn.hotsolder.com
   CheckHostIP no
   ProxyCommand /bin/nc -X connect -x %h:443 %h %p

Internet de Pi

Si domina todas las redes a las que se conecta, probablemente esto no sea tan interesante. Si no le importa configurar una VPN en ambos lados, tampoco necesita tal cosa. Sin embargo, si necesita implementar soluciones detrás de firewalls o incluso con direcciones IP dinámicas, puede encontrar que el enfoque de proxy inverso es exactamente lo que necesita.

Siempre hay otras formas de resolver el problema, por supuesto. Puede utilizar un proveedor de IP dinámica para manejar IP dinámicas, por ejemplo. Sin embargo, hacer un túnel a través de cortafuegos desconocidos es un poco más difícil.

  • geocrasher dice:

    Y si necesita un servidor económico para hacer eso, OVH tiene servidores que cuestan solo $ 3,49 / dinero para un VPS Linux con una dirección IP. No afiliado, solo un cliente feliz. https://www.ovh.com/us/vps/vps-ssd.xml

  • Juan Campos dice:

    ¡Gracias por compartir este increíble script! Acabo de hacer un túnel como estos para mis dispositivos 🙂 ahora lo estoy configurando, noté que tiene un error tipográfico en el archivo 20_frontends.rc que necesitaba 30 minutos para buscar lo que hice mal

    dominio = http, https, http-8080, raw-2222: *. dyn.hotsolder.com; $$$ SECRETO $$$ el error tipográfico es; antes de $$$ SECRET $$$ debe ser dominio = http, https, http-8080, raw-2222: *. dyn.hotsolder.com:$$$SECRET$$$

    De todos modos, realmente gracias por estos.

    • Al Williams dice:

      UPS. Sí, debería haber dos puntos.

  • chris0x00 dice:

    Los túneles ssh también se pueden utilizar para esto. Mucha gente sabe que puede utilizar el conmutador -L para proporcionar servicio remoto en un puerto local, pero también puede utilizar el conmutador -R para proporcionar servicio local en un puerto remoto en un VPS remoto o servidor bajo su control. No es necesario tener un programa especial. Sin embargo, es posible que sea necesario cambiar la configuración de sshd para habilitar el reenvío remoto:
    Clientes GatewayPorts especificados

    La sintaxis es algo como esto:

    ssh -T -i su clave aquí -R remoteip: remoteport: localip: localport user @ remotehost

    • Dara Adib dice:

      Se requiere GatewayPorts para permitir que cualquier host se conecte al puerto de reenvío, pero si tiene acceso SSH al VPS, puede usarlo como proxy mientras mantiene el cifrado de extremo a extremo en su Raspberry Pi. ProxyCommand sería algo como:
      ssh -W localhost: puerto remoto remotehost

      Ejecuto mi túnel SSH con una puerta lateral, un pequeño paquete para Debian / Raspbian / Ubuntu, si funciona para usted, avíseme:
      https://github.com/daradib/sidedoor

  • Abiharan dice:

    Oye, me encanta este nuevo pozo, ¿tienes otros trucos para nokia n900? Estoy diciendo que estás pirateando un proxy, ¿no?

  • problema dice:

    Oye, ¿no hubo muchos más comentarios aquí que parecen haber desaparecido? Estoy bastante seguro de que publiqué sobre IPv6 en túneles OpenVPN ...

  • Fernando Torres dice:

    Oh, gran sitio que tienes ahora
    Fernando Torres http://hochzeit.h2322584.stratoserver.net/index.php?action=profile;u=372276

  • Abruzzi dice:

    Hola,

    Gracias por sus publicaciones tan informativas.

    Implementé un servidor web usando NGinx y mi Pi 3, alojando un sitio web de registro de temperatura en él. Ahora quiero publicar este programa web. Tengo mi propio nombre público alojado en otro servidor web. ¿Conseguiré esto con la guía de Pagekite que publicaste aquí? No lo entiendo del todo, pero no me importa leerlo. Una respuesta que me indique la dirección correcta sería muy apreciada.

Miguel Vidal
Miguel Vidal

Deja una respuesta

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