Posts Tagged: linux

Ubuntu 10.10 (Maverick Meerkat) In VMware Fusion

I decided to check out Ubuntu 10.10 RC today and I’m pleased to report that installation of the latest version in VMware Fusion (3.1.1) was trivial. I grabbed the install CD, told it to use “easy install” and away it went. Mouse ungrab, drag/drop file sharing, sound, et cetera were all available as soon as the GUI came up after the VMware tools install completed. HGFS was available as well under /mnt/hgfs. If you’re running an older version of VMware you may need to upgrade or grab the latest tools1 to have such a smooth experience.

  1. My version is 8.4.3

Bypass Hulu Regional Restrictions in Mac OS X

Hulu is a great site to find new shows and catch up on old, but due to various contracts no one outside the US can use it. This irritated some friends of mine from Canada, England, Germany, et cetera. So I decided to write up one (very reliable) way to circumvent the Hulu geolocation checks — using a VPN.1

Accessing Hulu Outside The US

In this case, we’ll be using a small VM and the open source VPN server pptpd. All the server side instructions below are applicable to both OS X and Windows, but the client setup is only specified for Mac OS X.

Server Setup

First, obtain a VM from a reputable (and fast) US vendor. The VM must be located in the US since that’s our required origin. I personally use Slicehost, but there are many others. Once you get your login be sure you change the root password.

Install pptpd. If you’re running on Ubuntu or Debian you can simply run

apt-get install pptpd

Once you have pptpd installed, we’ll need to add a user. The default pptpd configuration is fine, but we’ll need to edit /etc/ppp/chap-secrets. When you edit the file (using vi, nano, emacs, et cetera) you’ll see this:

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses

Client is your username, server is “pptpd”, secret is your password in plaintext, and IP addresses is a range of allowed IPs. If you’re unconcerned about who might attempt to access your VPN, you can simply use a wildcard (*). Once you’ve populated this file with data it will look something like this:

# Secrets for authentication using CHAP
# client	server	secret			IP addresses
testuser	pptpd	mypassword		*

We need to set up IPv4 forwarding, so edit /etc/sysctl.conf and uncomment the line below from the file (remove the #).

#net.ipv4.ip_forward=1

This will enable the behavior after a reboot, but you can enable it right now by running:

echo 1 > /proc/sys/net/ipv4/ip_forward

Now run these commands:

/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i ppp0 -o eth0 -j ACCEPT

Once you’ve run these you can save them so they execute every time your VM boots by following these quick instructions. This completes the server side setup.

Client Setup

Now it’s time to configure the Mac to utilize the VPN server. Bear in mind that all traffic to the internet will be routed through your VPN server when this is active, so you’ll only want to connect to your VPN when watching Hulu.2

Open System Preferences and go to Network.  Click the plus sign in the lower left and choose add to add a VPN PPTP interface.  Then set the server address (the IP of your VM) and account name (“testuser” from above).
network_screen

After filling out those fields, click authentication settings and type your password, then click Okay.

advanced

Finally, click advanced, then click DNS and click the plus sign.  Add 4.2.2.1 as a DNS server.3

dns_fix

Save these changes and then you can click connect to test it out. Your traffic should all be routed through the VPN and since the endpoint is located in the US Hulu should work just fine!

  1. There are many other ways, including just proxying Hulu traffic from the browser and Flash plugin, but I’m not going to cover those methods.
  2. This can be alleviated by using a split tunnel if you want to go to the trouble.
  3. Our PPTP server doesn’t announce its own DNS by default.

SSL VHosting On The Same IP (aka SNI)

Server Name Indication (SNI), an extension to TLS, allows browsers that support it to connect to SSL hosts that do not have dedicated IPs (much like standard http virtual hosting has worked for years). This extension, however, must be supported on both the server and client side. Microsoft has not yet chosen to support it (maybe IIS 8?), but the Apache project did with the 2.2.12 release. Recently, Ubuntu 9.10 Server became the first server distribution to ship with Apache and OpenSSL built with the appropriate flags, so if you’d like to follow along you can use a 9.10 VM.

In the ideal case everything is the same as a regular vhost, but you’ll first need to enable SSL. On Ubuntu this requires you to run a2enmod and type “ssl”. After that you’ll need to add

NameVirtualHost *:443

to the root conf, then make your VirtualHost much like a normal one. A very basic pair of vhosts is seen below.

<VirtualHost *:443>
	ServerAdmin webmaster@localhost
 
	DocumentRoot /my/doc/root
	ServerName mydomain.com
	SSLEngine On
	SSLCertificateFile /path/to/domain.crt 
	SSLCertificateKeyFile /path/to/domain.key
</VirtualHost>
<VirtualHost *:443>
	ServerAdmin webmaster@localhost
 
	DocumentRoot /my/doc/root
	ServerName mydomain2.com
	SSLEngine On
	SSLCertificateFile /path/to/domain2.crt 
	SSLCertificateKeyFile /path/to/domain2.key
</VirtualHost>

These vhosts should be placed in different includes ideally, but it isn’t required. If you just want to test with a self-signed certificate you can create one with

openssl req -new -nodes -keyout mykey.key -out mycert.cer -days 3650 -x509

You’ll need to specify the domain name you want in the “Common Name” section.

Once you’ve got all this done you can restart apache and test it out! If you test on a browser that doesn’t support SNI (IE on XP) you’ll get the SSL cert for the first vhost apache parses. To disable accessing it on non-SNI hosts you can add

SSLStrictSNIVHostCheck on

to the root conf. This will cause a 403 error for those browsers.

If you’d like to see an example implementation of SNI you can check out my IDN domains https://☢.ws/ and https://☣.ws/. These sites are hosted on the same IP with different SSL certificates. I have strict host checking turned on so visiting them with a non-SNI capable browser will result in a 403 error.1

  1. See the Wikipedia article about Server Name Indication for more information on supported browsers.

Upgrading Ubuntu Server to 9.10

A quick reminder for those who don’t know or have forgotten how to upgrade an Ubuntu server:

sudo apt-get install update-manager-core
sudo do-release-upgrade

Follow the instructions, reboot, and you’re done!

Ubuntu 9.10 Article Updated

I’ve just updated my Ubuntu 9.10 in VMware article with a better process. If you’re looking to install Karmic Koala when it’s released on 10/29 check it out!

Ubuntu 9.10 In VMware – Updated

Update 2: Preliminary 10.04 instructions are available here. No real obstacles for those running the latest Fusion/Workstation.

Update: If you’re using VMware Fusion 3.0 or any VMware Tools version 8.2.3-204229 or better you can follow a drastically simplified process. sudo apt-get install build-essential, choose install VMware Tools from the menu, copy tar to desktop, untar, sudo ./vmware-install.pl and follow the instructions. Simple!

With the release of the Ubuntu 9.10 RC it’s time to revisit installing Ubuntu into a VMware VM. I’m using VMware Fusion 2.0.x, but behavior should be largely the same for any recent VMware release.

First, create a new VM and point the installation disk at your Ubuntu 9.10 ISO. At this time I would not recommend using “easy install”, so uncheck that and continue. If you wish to use the graphical installer you’ll need to increase the RAM allocated to your VM from 512MB to 768MB.1

Now you can boot your VM and follow the graphical installer. Once complete your VM will hopefully reboot properly and ask you if you want to force the CD to disconnect (you do). If this doesn’t occur, force the guest to shut down, disconnect the ISO in the settings, then boot the VM again.

The official VMware Tools do not work properly due to the newer kernel (2.6.31), so we’ll need to build the open-vm-tools for this kernel. Follow the steps below to build them yourself or simply download the AMD64 deb package I have already built for the modules.2

  1. Obtain the build prerequisities3
    sudo apt-get install open-vm-tools build-essential open-vm-toolbox
  2. Run module assistant to build the modules
    sudo m-a
  3. Choose select and activate open-vm
    Select open-vm
  4. Click okay, then select build
    Screen shot 2009-10-25 at 12.41.35 PM
    Screen shot 2009-10-25 at 12.37.37 PM
  5. Once it completes it will ask if you want to install. Choose yes, then quit out of m-a and reboot.
  6. After a reboot check to see that the vm modules inserted into the kernel properly.
    vmware@vmware-desktop:~$ lsmod | grep vm
    vmsync                  5104  0 
    vmmemctl               10120  0 
    vmhgfs                 59080  0 
    vmci                   33952  0

If you see the 4 modules listed above then you should have functioning copy/paste, auto-resolution switching, and even shared folders. However, to enable shared folders you’ll need to follow these steps:

  1. Enable shared folders and add a folder in the VM settings4
  2. Run this command:5
    sudo mount -t vmhgfs -v -o ro .host:/sharedfoldername /path/to/mnt

Let me know in the comments if you have issues or have improvements to the process. Waiting for the official VMware Tools release is boring!

  1. It may not be necessary to increase it a full 256MB, but the 512MB default causes the install to fail as of the release candidate.
  2. If you choose to install the package, you’ll need to do step 1 and then skip to step 6.
  3. open-vm-toolbox is only required for desktops
  4. If you get a message about “Unable to update run-time folder sharing status: The command is not recognized by the Guest OS tools” you can ignore this error.
  5. You can change ro to rw if you want your shared folder to be read/write capable