Desplegad el backend en virtech en diez minutos
Escribid la IP de la máquina y el tipo de servidor: tenéis cada comando con los puertos ya calculados, un servicio que sobrevive a los reinicios y un setup.sh para descargar. Todo pasa en el navegador y no se envía nada.
virtech, la nube privada de la FIB
Un servicio de autoservicio de máquinas virtuales para las asignaturas que lo piden, en virtech.fib.upc.edu. Las cuentas os las dan los profesores.
- Máquinas Ubuntu con el usuario
alumne, que puede usarsudo. Sois responsables de todo lo que pase en ellas. - El número de máquinas y su tamaño los fija la cuota de la asignatura. No hay cortafuegos.
- No hay copias de seguridad y se borran al final del cuatrimestre. El código, en GitHub; la configuración, documentada.
- Si perdéis el acceso a una máquina, no se puede recuperar: se borra y se crea otra. Un motivo más para tener la instalación escrita en un script.
Solo red de la FIB
Accesible desde el campus o desde casa con la VPN de la UPC (UPClink). Pero la VPN es personal y solo admite una conexión: no podéis tener a la vez el ordenador y el móvil, ni dar la app a nadie de fuera.
Plantilla sin VPN
Tiene 10 puertos abiertos a Internet a través de nattech.fib.upc.edu, y SSH desde la UPC o con VPN. Cualquier móvil llega, también los de los stakeholders.
Crear la máquina y poner el servicio
- VMs → +, elegid la plantilla, ponedle un nombre y la contraseña del usuario, y Create. Esperad a que pase de DEPLOYING a RUNNING.
- Abrid la Consola (VNC) e iniciad sesión. El mensaje de bienvenida os dice la IP y los puertos. Podéis volver a verlo con
/etc/update-motd.d/99-info-nat. - A partir de aquí, mejor por SSH (desde la UPC o con VPN): los comandos, abajo.
- Arrancad el servicio escuchando en
0.0.0.0y en un puerto del 8080 al 8089. Si escucha enlocalhost, desde fuera no se llega. - Probadlo desde fuera con el puerto público:
http://nattech.fib.upc.edu:40330.
Vuestros comandos, ya calculados
Los datos se quedan en este navegador. Cambiad cualquier campo y los comandos se actualizan.
La que sale en virtech o en el mensaje de bienvenida.
El setup.sh hace la instalación, el servicio y el arranque. Copiadlo a la máquina con scp y ejecutad bash setup.sh.
Cómo se calculan los puertos
Todas las máquinas salen a Internet por la misma dirección, nattech.fib.upc.edu, y cada una tiene su rango de puertos según el último número de la IP (172.16.4.XXX):
- SSH: puerto
22000 + XXX. - Servicios: desde el puerto
40000 + XXX·10, diez puertos seguidos que van al 8080-8089 de la máquina.
¿Cómo compruebo que la conexión funciona, antes de tener ningún servicio?
En la máquina, nc -l -p 8080. En vuestro ordenador, nc nattech.fib.upc.edu 40330 (con vuestro puerto) y escribid cualquier cosa: tiene que aparecer en la máquina.
¿Por qué no me responde el ping?
Por cómo está montado el NAT, el ping no funciona desde fuera de la red de las máquinas, ni siquiera con VPN. Usad curl o nc.
¿Puedo entrar por SSH desde casa sin VPN?
No. Por seguridad, el SSH desde fuera de la UPC solo funciona con la VPN. Los 10 puertos de servicios sí están abiertos a todo el mundo.
He olvidado la contraseña de la máquina.
No se puede recuperar: borrad la máquina y cread una nueva. La contraseña de virtech (no la de la máquina) se cambia en el menú de usuario → Settings → Change password.
La app móvil y el HTTP sin cifrar
nattech sirve HTTP, no HTTPS. Android (desde la versión 9) e iOS bloquean este tráfico por defecto, y la llamada falla sin muchas pistas. Permitidlo solo para este dominio.
<!-- res/xml/network_security_config.xml (en Flutter: android/app/src/main/res/xml/) -->
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="false">nattech.fib.upc.edu</domain>
<domain includeSubdomains="false">10.0.2.2</domain>
</domain-config>
</network-security-config>
<!-- AndroidManifest.xml -->
<application
android:networkSecurityConfig="@xml/network_security_config"
... >
<!-- ios/Runner/Info.plist -->
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>nattech.fib.upc.edu</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
Las contraseñas viajan en claro por HTTP. Para PES basta con la excepción por dominio, pero no pongáis contraseñas reales y explicadlo en la documentación como limitación conocida.