1. Making the Web 1000x Bigger

    motives, means and some magic

    Bjarni Rúnar Einarsson • pageKite.net

  2. Introduction: Who am I?



    This is where I explain how to pronounce my name!
  3. Motives
    Why make the web bigger?

  4. Is the web too small? Seriously?

    When I imply that the web is too small, what I'm really getting at is that the vast majority of the devices connected to the Internet, participate in the WWW merely as consumers of data - publishing is centralized and generally takes place on 3rd party hardware.

    This has certain fundamental implications for how we can use the web, both technical (we have to upload everything before sharing), and social, in the form of Terms and Conditions and of course Privacy Policies - which are barely ever read by anyone.

    If anything, this trend is accelerating with the rise of SaaS, PaaS, "the cloud" and behomoths like Google and Facebook.

  5. Who do we trust?



  6. Who did we trust?



    Geocities: Huge chunk of the early web, gone

    Windows Live Spaces: Happening to today. What will happen to the URLs?

    Blogetry: What happens when law enforcement confiscates your hosts servers because of something some other user did?

    Facebook: Do we really trust these guys with our private information?

  7. Who did I trust?



  8. Means
    Can we all host our own sites?

  9. Why don't most people host their sites today?

    Once upon a time...

    1. Web-servers were "high tech"
    2. Servers were expensive and "high tech"
    3. Desktops were insecure.
    4. We ran out of IPs!

    Supporting my radical argument...

    HTTP servers are standard components today. They are built into routers, Apache ships with Mac OS X, there's an HTTP server class in the standard Python distribution. And so on. Personal devices already have HTTP servers built in, they just aren't very useful!

    Today's desktops are vastly more powerful than the servers of the 90s. In fact, many of us carry cell phones that can compute circles around those old hunks of iron. A similar argument can be made about bandwidth: as I write this Slashdot featured news of experimental 800Mbps DSL. In a decade even our phones will be online all the time, with connections faster than we use for browsing today.

    Regarding security: firewalls are standard, automatic updates and patching are rapidly becoming standard as well. In 2010, opening up a dedicated port for a carefully configured web-server is no worse on a desktop or mobile phone than it is on a cloud-hosted server.

    So what really remains, is the problem of public, routable IP-addresses. We don't have enough of them, and the situation is going to get worse before it gets better.

  10. Enabling web-servers everywhere

    With web-servers everywhere, how do we make them reachable without more IP addresses?

  11. Diagram: traditional web-hosting

  12. Diagram: reverse proxied

  13. pagekite.py

  14. Introducing pagekite.py

    pagekite.py implements a tunneled reverse web proxy.

  15. pagekite.py: the front-end

    pagekite.py implements a tunneled reverse web proxy.

  16. Front-end: Choosing an HTTP tunnel

    laptop $ nc -l localhost 8000
    GET / HTTP/1.1
    Host: localhost:8000
    User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.10 (maverick) Firefox/3.6.12
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-us,en;q=0.5
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 115
    Connection: keep-alive
    
    

    This information is usually in the first packet sent by the web-browser, allowing pagekite.py to choose the right back-end tunnel right away.

  17. Front-end: Choosing an HTTPS tunnel

    laptop $ nc -l localhost 8443 |hexdump -c
    0000000 026 003 001  \0 235 001  \0  \0 231 003 001   L   �   � 224   L
    0000010   ] 225   �   �   j   z   ) 035   �   , 033   �   a 036   4  \v
    0000020 206   � 024   !   �   �   �   �   � 224 022  \0  \0   H  \0   �
    0000030   �  \n   � 024  \0 210  \0 207  \0   8   � 017   � 005  \0 204
    0000040  \0   5  \0   9   �  \a   �  \t   � 021   � 023  \0   E  \0   D
    0000050  \0   3  \0   2   �  \f   � 016   � 002   � 004  \0 226  \0   A
    0000060  \0 004  \0 005  \0   /   �  \b   � 022  \0 026  \0 023   �  \r
    0000070   � 003   �   �  \0  \n 001  \0  \0   (  \0  \0  \0 016  \0  \f
    0000080  \0  \0  \t   l   o   c   a   l   h   o   s   t  \0  \n  \0  \b
    0000090  \0 006  \0 027  \0 030  \0 031  \0  \v  \0 002 001  \0  \0   #
    

    SNI (Server Name Indication) is a TLS extension that lets pagekite.py choose a back-end tunnel for HTTPS!

    The bad news: Windows XP doesn't do SNI, so most XP browsers fail.

  18. pagekite.py: the back-end

    pagekite.py implements a tunneled reverse web proxy.

  19. A trivial example

    This is one way to make a web-server on localhost (ports 8000 and 8443) visible as http://bar.foo.net/ ...

    foo.net $ sudo pagekite.py --runas=nobody \
     --isfrontend --ports=80,443 \
     --backend=http,https:*.foo.net:::s3cr37
    
    
    laptop $ pagekite.py \
     --frontend=foo.net:443 \
     --backend=http:bar.foo.net:localhost:8000:s3cr37 \
     --backend=https:bar.foo.net:localhost:8443:s3cr37
    
    
  20. pagekite.py wishlist

    New project, lots of things on the wishlist!

  21. pageKite.net

  22. pageKite.net

    A managed pageKite front-end service.

  23. Using pageKite.net

    Another example, this time using the pageKite.net managed front-end service and enabling the HTTP user interface ...

    laptop $ pagekite.py \
     --defaults \
     --httpd=localhost:9999 \
     --backend=http:bar.foo.net:localhost:8000:s3cr37 \
     --backend=https:bar.foo.net:localhost:8443:s3cr37
    
    
  24. Magic!

  25. A demo, I hope

    [ My home server | In my pocket | pageKite.net ] x
  26. Share files, without uploading

    >1TB online storage, cheap

  27. New markets for web developers

    unlimited server CPU
    unlimited storage
    user proximity
    desktop integration
    peripherals!

  28. Small businesses

    printer + webcam + chat = truly online shops!

  29. Gaming

    stream video: friends watch you play, live
    decentralized multiplayer games

  30. tel: 00 354 012 3456

    tel: myphone.bre.klaki.net

    OpenID server in your pocket?

  31. Decentralization, independence, privacy

  32. Thank you!


    Questions?

    Links: