1. Making the Web 1000x Bigger

    Bjarni Rúnar Einarsson • pageKite.net

  2. Motives
    Why make the web bigger?

  3. Look, it fits on one slide!



  4. No, seriously. Why?

    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. Can we...
    Host our own sites?

  6. Why not? A bit of history.

    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!   ... on 03.02.2011.

  7. Enabling (web)servers everywhere

    With a server on every computer, how would we make them all reachable without more IP addresses?

  8. Diagram: reverse proxied

  9. pagekite.py + pagekite.net

  10. Introducing pagekite.py

    pagekite.py implements a tunneled reverse proxy.

  11. Limitations

    There are some limitations to this approach...

    • HTTP
      HTTP/1.0 and 0.9 might not send Host: headers.
    • HTTPS
      Relies on SNI (variable browser support) or ...
      TLS cert at front-end (so not end-to-end)
    • SSH
      Relies on IP tracking hack (HTTP-before-SSH) or ...
      HTTP proxy support (openssh & putty both work well)

    Needing a front-end is a bit lame. But it surprisingly pretty well!

  12. 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 \
     --domain=raw,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
    
    
  13. Introducing pagekite.net

    pagekite.net is a front-end service provider, a "FOSS start-up"

  14. Using pageKite.net

    Another example, this time using the pageKite.net managed front-end service and enabling SSH and 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 \
     --backend=raw/22:bar.foo.net:localhost:22:s3cr37
    
    
  15. So simple!

    Why not put it in Diaspora?
    or Status.net?

  16. Use-cases I've seen...

    Some of the use-cases I have seen so far:

    Basically any time a router or firewall is in the way.

  17. Thank you!


    Questions?

    Links:

  18. Bonus FAQ slide!