Una tasca fàcil, però ben complicada

Hom pensa que una cosa fàcil de comprendre és senzilla d’implementar. En el cas que vos porte hui és una excepció. Una cosa senzilla, fàcil d’entendre i que, si saps prèmer les tecles adequades, és ben fàcil d’implementar. En canvi, si no saps com fer-ho, et pot dur dos dies trencant-te el cap, com m’ha passat a mi. Menys mal que estem confinats a casa i no podem eixir…

Bé, no m’enrotlle més, vull que el meu alumnat em deixe en casa els exercicis (què còmode soc). No vull emprar cap servei del núvol i no puc emprar les plataformes Aules. JA ESTÀ! Amb un servei DynDNS apunte a la IP dinàmica de casa i l’alumnat es podrà connectar. MEEEEC! Tens una xarxa darrere del router amb NAT (dóna-li les gràcies al teu ISP).

Val, d’acord, no tinc una IP pública assignada al router. Però xe, jo vull connectar-me a la Raspberry Pi que tinc muntada al menjador!! Ostres… Ja està, he escoltat que podria fer-ho amb ssh port forwarding (reenviament de ports). Menys mal que tinc un VPS que no li trac massa profit (té IP pública).

Vos pose en context. Tenim una Raspberry Pi al menjador, com sabeu té IP privada (192.168.1.41). Una IP privada és aquella que no es pot accedir des d’Internet, no és pública. La RasPi té uns quants serveis web en distints ports (per defecte, el protocol http treballa sobre el port 80 i el https sobre el 443). Doncs en esta màquina hi ha un servei web escoltant en el port 3000 i puc accedir-hi des de casa amb http://192.168.1.41:3000, però no puc accedir-hi des de Xina (qui volguera estar allí ara ;P). Doncs suposem que tenim una màquina amb IP pública (un VPS, Virtual Private Server) amb IP 200.200.200.200. Per tant, l’esquema de connexió seria aquest:

Client Web (firefox) -> 200.200.200.200:3000 -> 192.168.1.41:3000
Un client web es connecta a la IP 200.200.200.200 amb port 3000 i esta connexió es reenvia a 192.168.1.41 al port 3000. I, com ho fem? Amb ssh. En concret hem d’executar aquesta orde en la RasPi:

ssh -N -R 3000:localhost:3000 chverma@200.200.200.200

Vos explique: l’opció -N serveix per a no executar cap commandament, és a dir, no em “trasllada” al terminal de la máquina destí. L’opció -R especifica que les connexions remotes seran reenviades als ports locals. En concret, les connexions que arriben al port 3000 de la màquina amb IP pública (200.200.200.200) seran reenviades al localhost (la RasPi) al port 3000. Al final de l’ordre hem d’indicar el nom d’usuari, seguit del @ i la IP del nostre VPS.

A més, hem d’afegir una línia al fitxer “/etc/ssh/sshd_config”:

GatewayPorts yes

Després de reiniciar el servei ssh amb:

sudo systemctl restart sshd

Gràcies a la línia que hem afegit, els ports són accesibles des de l’exterior del VPS (no cal iniciar sessió amb el terminal). Finalment, ja tenim configurada la nostra ordre.

He dit finalment… Encara no… Les connexions ssh no són permanents… poden caure i, per tant, desconnectar-se… Així, per a que es mantiga la connexió establerta “indefinidament” (quan es desconnecte, torna a connectar-se) emprarem la ferramenta autossh. Sols cal afegir el paràmetre -f (foreground, en segon pla) i ja tenim la màgia feta.

autossh -f -N -R 3000:localhost:3000 chverma@200.200.200.200

Si teniu cap pregunta ja sabeu, feu-la sense por. Suggeriments, correcció d’errades… També m’agradaria saber si he sigut molt tècnic i/o si s’ha entés. Ja hem digueu. Ànim amb el Covid!

Feu un comentari

"edutictac.es