How to Watch Hulu From Canada (or Anywhere Else)

May 24, 2009

I live in Canada. We don't have guns. But, we do have health care.

Okay, so there are a few other things we don't have — one of them being hulu. Yeah, there's always But, it's slow, full of annoying flash ads, and the quality of the shows is spotty.

A while back, I tried to beat hulu's geofencing (fuck geofencing) by creating an SSH tunnel. That was a miserable failure. Then, recently, I saw somebody tweet about using OpenVPN. So, I gave it a shot, and it worked!

How To Do this Yourself

Now, I could tell you to go and read the official tutorial on setting up OpenVPN. But, I've got something better.

I put together a chef[1] recipe for installing OpenVPN on a virtual machine. The whole process is automated. So, you don't really need to know anything about OpenVPN to get up and running.

Here's the guide:

  1. Get a linode (or equivalent virtual machine, located in the US).
  2. Setup your vm with Ubuntu.
  3. Install ruby & rubygems on the vm:
    sudo apt-get install ruby rubygems
  4. On your local machine, clone the cookbook repository:
    git clone git://
    Or, if you don't have git installed, grab a tarball from github. Then, unarchive it:
    tar zxvf giraffesoft-openvpn-recipes-xyz.tar.gz
  5. You'll also need capistrano (on your local machine).
    sudo gem install capistrano
  6. Now, cd in to the dir you cloned or extracted. Then, edit config/deploy.rb to match your settings.

    You'll want to set :host to your server's domain name or ip address. You'll also want to set user to the name of the user you're going to get ssh'd in as. Finally, set the country, province, city, etc variables. Those are for generating the signing authority.

    You'll want to setup an ssh keypair on your server, too, to make this easier.

  7. Now that everything is all configured, run chef, by typing this command at the root of the openvpn recipes project:
    cap run_chef
    OpenVPN is now installed and configured!
  8. Now, create a client package by typing:
    cap generate_client_package
  9. There should now be a file at build/client.tar.gz. Unarchive this file to wherever you want to keep your OpenVPN configuration. Then, start OpenVPN on your local machine. That's it!

    Note: if you're using a mac, you'll want to use Tunnelblick to manage your vpn connection. Just unarchive the client package to ~/Library/openvpn and Tunnelblick will take care of the rest.

You should now have a working VPN. Enjoy hulu!

Also, if you're interested, checkout the code at github.

[1] Incidentally, if you do absolutely any work with servers or systems configuration and you haven't had a look at chef yet, you're doing yourself a disservice. Chef allows you to keep all of your servers' configuration in a git (or other scm) repository, edit it locally and deploy it out to your server (or cluster thereof). It also does a lot of other awesome stuff. Check it out!