IPFS (Web Distribuida)

Publicado en 'GNU/Linux' por gnox, 29 Set 2017.





  1. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    2,137
    Likes:
    844
    Temas:
    72




    IPFS es una combinación de bittorrent, git y blockchain, la información como se consume actualmente es centralizada accedes a recursos en un servidor web puntualmente, si se cae ese servidor o nos aplican restricciones perdemos acceso a la información, con IPFS se puede compartir información en forma publica distribuida, en vez de localizar contenido por ubicación "IP" te permite ubicarlo por "Hash"* de contenido, al estar basado en bittorrent el contenido o partes de el pueden estar distribuidos en distintos puntos (servidores, laptops, desktops) generando redundancia a fallas (caidas de un servidor), bloqueo de IP, y mejorar la velocidad de acceso a la información al tenerlos distribuidos en forma local LAN - WAN (regional).

    * Hash : representación encriptada irreversible del contenido de un archivo, si el contenido varia el hash varia.

    IPFS apunta a reemplazar al protocolo HTTP.

    En Perusalem o redes regionales puede ser de utilidad ya que casi todo el contenido que consumimos pasa por una salida internacional, que como hemos experimentado a lo largo de los años decae por X problemas, bloqueos o restricciones de los ISP's, si usaramos un cache distribuido entre los propios usuarios podriamos maximizar el uso del ancho de banda y latencia local.

    - Instalación (basada en Arch)
    Código:
    $pacman -S go-ipfs
    
    - Iniciamos repositorio local, por defecto esta puesto a 10GB (se puede modificar en .ipfs/config)
    Código:
    $ipfs init
    initializing IPFS node at /home/<user>/.ipfs
    generating 2048-bit RSA keypair...done
    peer identity: QmSud58vuuhrkKAKg86EJRbDQE38kAmz7TVhZ1NGoyQAE8
    to get started, enter:
    
       ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/readme
    
    
    - Levantamos servicio
    Código:
    $ipfs daemon
    Initializing daemon...
    Swarm listening on /ip4/10.0.0.2/tcp/4001
    Swarm listening on /ip4/127.0.0.1/tcp/4001
    Swarm listening on /ip4/192.168.1.100/tcp/4001
    Swarm listening on /ip4/<ip publica>/tcp/4001
    Swarm listening on /ip6/::1/tcp/4001
    API server listening on /ip4/127.0.0.1/tcp/5001
    Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
    Daemon is ready
    
    Puertos de comunicación :
    * El principal es el 4001 el que permite conectarse a otros nodos ipfs, si estan en "NAT2" le pueden hacer port-mapping para que tengan conexión directa.
    * 5001 puerto API
    * 8080 puerto gateway, si quieren acceder a contenido ipfs via http, pueden usarlo en forma local asi como tenerlo en un servidor publico (VPS) como gateway.


    - Ver conexiones a otros nodos
    Código:
    $ipfs swarm peers
    /ip4/1.171.54.113/tcp/4001/ipfs/QmPWCn6mmzoFT6NK7YxDR8UqfzoqjJWEj3rqPyrQmzmg5n
    /ip4/104.131.10.96/tcp/4001/ipfs/QmQQVXUUTrNxWv2bbCvV7R34H3qwKuj6Hyv8U8TDzq3ZZb
    /ip4/104.223.59.174/tcp/4001/ipfs/QmeWdgoZezpdHz1PX8Ly8AeDQahFkBNtHn6qKeNtWP1jB6
    /ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx
    /ip4/104.236.176.59/tcp/4001/ipfs/QmQ8MYL1ANybPTM5uamhzTnPwDwCFgfrdpYo9cwiEmVsge
    ...etc
    
    - Creamos un archivo y lo agregamos a ipfs
    Código:
    $echo "Prueba" > abc.txt
    $ipfs add abc.txt
    added QmYDnRSgqbaLxnrRcGBB2SGSXqEkFDCavKjH16A6pZCegL abc.txt
    
    Vemos que nos genero el hash del contenido de abc.txt

    - En otro equipo con "ipfs daemon" en ejecución, visualizamos el contenido de abc.txt según hash.
    Código:
    $ipfs cat QmYDnRSgqbaLxnrRcGBB2SGSXqEkFDCavKjH16A6pZCegL
    Prueba
    
    En este momento 2 nodos tienen el contenido del archivo abc.txt, el equipo donde agregamos inicialmente el archivo el contenido queda almacenado "pinned" en el repositorio, el segundo equipo que hizo "cat" busco el contenido entre los peers lo encontro y lo agrego temporalmente (60 Minutos) a su repositorio pasado el tiempo es removido si no es usado. Si queremos que se mantenga en el repositorio del equipo usamos "ipfs pin add QmYDnRSgqbaLxnrRcGBB2SGSXqEkFDCavKjH16A6pZCegL"

    - Si queremos mantener los nombres de archivo es preferible usar directorios, en equipo 1 :
    Código:
    $mkdir test
    $echo "Prueba2" > test/abc2.txt
    $ipfs add -r test
    added QmQuAG4N95wZbQZBNfVvRa1FEQ4eQF44ni5Qj6GspVJp3U test/abc2.txt
    added QmSz4GQi9hACuUjAdwEyLELqujHBRV487bR76YsHJbjAdL test
    
    - En Equipo2 podemos ver el contenido del directorio test :
    Código:
    $ipfs ls QmSz4GQi9hACuUjAdwEyLELqujHBRV487bR76YsHJbjAdL
    QmQuAG4N95wZbQZBNfVvRa1FEQ4eQF44ni5Qj6GspVJp3U 16 abc2.txt
    
    - En equipo2 podemos ver el contenido de abc2.txt en directorio test :
    Código:
    $ipfs cat QmSz4GQi9hACuUjAdwEyLELqujHBRV487bR76YsHJbjAdL/abc2.txt
    Prueba2
    
    Y la WEB Distribuida ??

    - Creamos un sitio web estatico.
    Código:
    $mkdir -p misitio/css misitio/js misitio/images
    $touch misitio/index.html
    <html>
    <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
       <title>Mi Sitio</title>
    </head>
    <body>
    <p>
    Prueba
    </p>
    </body>
    </html>
    
    - Lo agregamos a IPFS
    Código:
    $ipfs add -r misitio
    added QmbEr8bERBq7fGgUpRhke7n43yVQnj2bkGpannihW3a8C9 misitio/index.html
    added QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn misitio/css
    added QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn misitio/images
    added QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn misitio/js
    added QmT56Zj2DNQ96YaxbtGz7b5ZX1zfGw1JfhvmXK3AkTuEWq misitio
    
    - Se puede visualizar el sitio usando el gateway local :
    Código:
    http://localhost:8080/ipfs/QmT56Zj2DNQ96YaxbtGz7b5ZX1zfGw1JfhvmXK3AkTuEWq
    
    [​IMG]

    - Asi como tambien en gateways publicos como por ejemplo :
    Código:
    https://ipfs.io/ipfs/QmT56Zj2DNQ96YaxbtGz7b5ZX1zfGw1JfhvmXK3AkTuEWq
    
    [​IMG]

    - Al modificarse un archivo se debe volver a agregar al repositorio :
    Código:
    $vim misitio/index.html
    Prueba -> Prueba2
    $ipfs add -r misitio
    added QmcLhLSS7PN4jVWUUEFkxDuAFQehJjcon9YsdJrDEoE8ac misitio/index.html
    added QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn misitio/css
    added QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn misitio/images
    added QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn misitio/js
    added QmZjCsBtrhtHWw8wzsGf4mD3prhgAjBfAiXg6zrjFnAHm6 misitio
    
    El hash cambio tanto de archivo como de directorio porque obviamente el contenido varió, por lo cual las urls de acceso via ipfs tambien cambian. Si se quiere mantener un id(hash) unico de acceso se puede usar IPNS (parte de IPFS) :

    - Generamos llave unica de contenido
    Código:
    $ipfs key gen misitio --type ed25519
    QmU9awxDhbr4YwcAroaSyiNc7rLS7YKfYCFoqJ26Xkqz4j
    
    - Agregamos el mapeo del hash de misitio al key generado de ipns
    Código:
    $ipfs name publish --key=misitio QmZjCsBtrhtHWw8wzsGf4mD3prhgAjBfAiXg6zrjFnAHm6
    Published to QmU9awxDhbr4YwcAroaSyiNc7rLS7YKfYCFoqJ26Xkqz4j: /ipfs/QmZjCsBtrhtHWw8wzsGf4mD3prhgAjBfAiXg6zrjFnAHm6
    
    Y se podria acceder al contenido con :
    Código:
    http://localhost:8080/ipns/QmU9awxDhbr4YwcAroaSyiNc7rLS7YKfYCFoqJ26Xkqz4j
    
    Con lo cual tenemos un sitio web / contenido / información publica que se puede acceder desde N nodos tanto local o por gateways publicos. Ya hay proyectos de bindings hacia distintos lenguajes de programación, asi como tambien uno en el que se puede crear un nodo en el browser lo cual permitira reducir el ancho de banda consumido de servidor web al traer contenido/recursos desde otros nodos en el browser como por ejemplo https://ipfs.io/ipfs/QmdBZhDLEsooVKkmgRgNzjo2JirSbddp8FvnccJ4c2orH2/.

    PD. tambien funciona en Windows.
     
    A seniorfox, San Diablo y Epikurolibre les gustó este mensaje.


  2. ed182

    ed182 Miembro de oro

    Registro:
    5 Jun 2009
    Mensajes:
    5,130
    Likes:
    1,127
    Temas:
    224
    interesante el tema , como puedo buscar mas info en la internet ..

    esto me supong aplica a nivel capa 7..
     
  3. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    2,137
    Likes:
    844
    Temas:
    72
    https://ipfs.io/

    4 y 5, lo que desarrollas encima es 7 .
     
  4. ed182

    ed182 Miembro de oro

    Registro:
    5 Jun 2009
    Mensajes:
    5,130
    Likes:
    1,127
    Temas:
    224
    interesante , le dare una leida a fondo en el metropolitano ..

    gnox ta bien .. deberias colgar la fuente :P
     
    A Aedo le gustó este mensaje.
  5. Epikurolibre

    Epikurolibre Miembro de plata

    Registro:
    3 Oct 2010
    Mensajes:
    4,638
    Likes:
    1,647
    Temas:
    159
    Ahora el siguiente paso es hacerlo un servicio tipo torrent para que se gestione solo.
     
  6. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    2,137
    Likes:
    844
    Temas:
    72
    Estas manitas y los ojos borrosos ...

    hu? .. usa torrent internamente lo que desarrolles para agregar encima puede ser cualquier cosa, openbazarr(tipo olx/ml) tiene integración con ipfs, ya hay chats distribuidos que usan su funcionalidad de pub/sub , ya hay un sitio similar a youtube que usa ipfs, uno de los ICO's FileCoin tambien esta basado en ipfs .. yo estoy haciendo una app para tener siempre mis PDF's disponibles x cel y en la cuadra tenemos una LAN entre casas donde compartimos archivos grandes via cjdns + ipfs..
     
  7. JairoQuispe03

    JairoQuispe03 Miembro frecuente

    Registro:
    10 Ene 2017
    Mensajes:
    151
    Likes:
    30
    Temas:
    2
    Creo que te refieres a DTube, lastima que aun le falta mucho para ser una plataforma robusta. Y lo que dijo el desarrollador que lo hara llegar hasta la version 1.0, luego de eso lo dejara (liberar el codigo) que lo mantenga la comunidad, no motiva a muchos a seguir usandola.

    Para los interesados aqui el link
    https://steemit.com/video/@heiminda...ntralized-video-platform-using-steem-and-ipfs

    Ganas dolares con los likes de tus videos y tus comentarios tambien pueden generar dinero. no hay publicidad y solo ganaras el 50% de lo que generes en los videos. 25% va a steem y el otro 25% va a dtube para que siga manteniendose
     
  8. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    2,137
    Likes:
    844
    Temas:
    72
    Al estar asociado con steemit tenia que meterle monetización, igual recien lleva 2 meses el dtube y el mismo autor lo dice solo ha implementado un 1% de lo que seria youtube.
     
  9. Epikurolibre

    Epikurolibre Miembro de plata

    Registro:
    3 Oct 2010
    Mensajes:
    4,638
    Likes:
    1,647
    Temas:
    159
    Interesante, de alguna forma creo que puedo aplicarlo al sistema de tramite documentario que desarrollamos en mi trabajo, pero como son algo reacios a gastar en TI, la veo verde.
    Interesante, ¿como así en tu cuadra decidieron hacer una lan?
     
  10. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    2,137
    Likes:
    844
    Temas:
    72
    Cuando venian los de timofonica a "arreglar" y le malograban a los que no tenian problema, conversando con los vecinos mientras puteabamos a los tecnicos colgados del poste y unos tenian cierto background tecnico - electronico - hobbystas, quedamos en compartir cierta cantidad de ancho de banda entre los que tenian y los que no, mientras durase el problema <=1Mbps para internet y acceso local a lo que den los AP/Wifi viejos que pusimos, empezo como una mini "darknet" con cjdns y ahora ultimo agregando ipfs, se comparte lo que bajamos y queramos compartir, una pequeña pagina donde se ponen los id's de lo bajado y ahi esta a velocidad de red local el acceso a los iso's videos pdf's etc.
     
    A Epikurolibre le gustó este mensaje.
  11. JairoQuispe03

    JairoQuispe03 Miembro frecuente

    Registro:
    10 Ene 2017
    Mensajes:
    151
    Likes:
    30
    Temas:
    2
    Vaya, eso si se ve bien, el compartir cada uno archivos que descarguen en una lan entre vecinos. Si alguno de ustedes hiciera correr Streama, que es un netflix local, todos se beneficiarian.

    https://github.com/dularion/streama

    A este proyecto tambien se le podria aplicar ipfs, no ?
     
  12. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    2,137
    Likes:
    844
    Temas:
    72
    Lo veo similar a Plex o Emby 1 solo un punto de origen del video, en cambio con ipfs un nodo puede leer de N nodos las partes del video, se podria cambiar el player a usar la url de gateway local de ipfs.
     
  13. oscarholden

    oscarholden Suspendido

    Registro:
    1 Set 2014
    Mensajes:
    814
    Likes:
    223
    Temas:
    71
    interesante
     
  14. CesarChris710

    CesarChris710 Miembro maestro

    Registro:
    6 Nov 2010
    Mensajes:
    872
    Likes:
    474
    Temas:
    20
    Entendí más o menos, pero dijiste algo de web de bittorrent, mi duda es cómo sería con el tema de la velocidad de subida, cuando descargo un archivo de torrent tengo que compartirlo también ese archivo y para tener buen ratio es bueno compartirlo también pero eso consume la poca velocidad de subida lo que produce que todo me vaya lento y sea imposible jugar por lo que lo hago cuando estoy fuera de la pc o durmiendo, como sería en esto? cuando este jugando no me dará lag porque le estoy compartiendo justo en ese momento y pierda mi partida por lag? esa es mi duda, muchas gracias por la info.
     
  15. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    2,137
    Likes:
    844
    Temas:
    72
    Para eso puedes aplicar QoS o prioridad de ancho de banda al puerto 4001, normalmente si se manejan torrents el incremento de latencia se puede aligerar manejando solo un porcentaje del total de tu ancho de banda a un 90-95% y aplicando politicas de prioridad eso si tu modem tienes las opciones QoS/AQM/SQM o a nivel de sistema operativo Linux tiene tc, Windows cualquier programa que controle tipo netlimiter. Ahora ipfs no siempre esta transfiriendo usando todo el ancho de banda, solo cuando un peer pregunta a los otros quien tiene tal hash el peer o peers que lo tenga lo transfiere por completo o partes entre todos, termina la transferencia el trafico de comunicación entre peers se reduce a menos de 100-250Kbps.
     
    A CesarChris710 le gustó este mensaje.
  16. gnox

    gnox Miembro de bronce

    Registro:
    3 Ene 2013
    Mensajes:
    2,137
    Likes:
    844
    Temas:
    72