Location-Anonymous Voice Communication, A Step-by-Step Guide
Historically, voice communications has required someone knowing where you’re physically located in the world. With landlines, that was the phone company via the physical address of the customer, with cell phones, the wireless provider via radio triangulation, and with most VoIP systems, the ISP via your IP address.
This tutorial is not about most VoIP systems.
Tor is an onion routing network. This means that it moves some of your internet traffic in a chain of nodes, each of which only know the previous and last node without knowing what the whole chain looks like. This means that the computer you’re connecting to doesn’t know your IP address, which otherwise would tip off a close-enough approximation of your physical location. Tor offers some protection for web-based things that use TCP/IP, but most voice systems on the internet (VoIP) systems use a combination of both TCP and UDP traffic, and UDP is not protected by Tor. Skype can sort of handle voice without UDP for folks behind particularly picky firewalls, but it’s sort of a mystery box of proprietary software with a track record of dickish [anti-]privacy policies and, well…
Mumble, on the other hand, is an open source project intended for gaming, but which can also siphon all voice traffic over TCP exclusively and also run well without much bandwidth (presumably to leave more bandwidth for WoW raids). The fact that it’s designed for low-bandwidth situations also makes it ideal for being bounced around in encrypted chunks across the global Tor network.
Mumble is set up as a client and a server, with the client being the thing you talk to on your computer and the server offering the connection between computers wanting to talk. There’s many servers on the public internet to connect to, but to verify that our setup is doing what we think it is, we’ll roll our own.
Step 1: Set up a Mumble Server
For simplicity’s sake, we’ll be using an Amazon EC2 instance. If you’re planning to chat with Julian Assange, I’d highly recommend using a dedicated server in Iceland or Bajor instead.
The process of creating an EC2 instance can easily be found by searching
Install the mumble server software:
$ sudo apt-get update
$ sudo apt-get install mumble-server
$ sudo dpkg-reconfigure mumble-server
For the prompts that ensue, say yes to autostart and high priority and set up an administrator password of your choice, but don’t pick a dumb password.
Possibly optional* but do it anyway: In your AWS console, configure your security group and add some custom TCP (but not UDP) rules to allow inbound traffic on the port Mumble is using (default is 64738). This will leave other ports and UDP traffic in general unallowed to reach the server. If you’re too cool for the AWS console, feel free to edit iptables rules manually at your leisure.
Step 2: Set up Tor
Tor is a program that can be installed on Windows PCs, Macs, Linux haxor machines and uber-leet haxor Nokia N900s. Download the Tor browser bundle for your system and follow the setup directions. Before starting tour, take a note of your actual IP address. Make sure the NSA isn’t looking over your shoulder.**
Use IP Chicken to check your public IP address. After you’ve made note of that, start up the Tor Browser, give it a minute or two to kick in and check IP Chicken inside the Tor browser again. Now your IP address in the Tor browser should be that of a random Tor exit node. Success!
Step 3: Set up Mumble Client
Like Tor, Mumble can probably also run on your computer unless you use a D-Wave quantum computer or Commodore 64. Download the Mumble client for your system and install it. The first time you run Mumble it will ask you to go through an audio tuning wizard, so do that and fine-tune your audio settings as much as you’d like.
In Mumble, go to Configure > Settings > Network and make sure “Advanced” is checked. Check “Force TCP mode.”
Under Proxy, choose “SOCKS5 proxy” and enter “Localhost” for the Hostname and 9050 for the port. While we’re still paranoid, also uncheck “Reconnect automatically,” check “Suppress certificate and password storage” and uncheck “Submit anonymous statistics.” Click OK.
Step 4: Call Your Friends!
Now that you have Mumble and Tor running, go to Server > Connect > Add New and add the IP address and port number of the Mumble server you set up in Step 1. Use whatever label you want to name the server with and whatever username you want to make up. If you have friends, invite them to do Steps 2 to 4 and talk about Pokemon/anarchism/whatever. A Mumble chatroom is basically a group voice chat, much like a conference call but without a phone system. Your chat will be encrypted using TLS with 256-bit AES-SHA for the control channel and 128-bit OCB-AES for voice. Combine that with the fact that fatty TCP packets are being thrown around Tor and the voice quality will sound a bit like Starfleet’s SOS message from Star Trek 4: The Voyage Home. Personally, I find that aesthetic appropriate; Subverting the NSA shouldn’t sound the same as calling Mom on Skype.
Step 5: Audit for Shenanigans
Since we have our own Mumble server, we can take a peek at the logs and see what sort of IP addresses have been recorded. Incoming connections are logged in /var/log/mumble-server/mumble-server.log. If you run “tail /var/log/mumble-server/mumble-server.log" as root, the latest incoming connection should look like this:
<W>2013-07-12 02:48:45.672 1 => <122:(-1)> New connection: [tor exit node ip address]:45367
<W>2013-07-12 02:48:47.042 1 => <122:(-1)> Client version 1.2.3 (X11: 1.2.3-2ubuntu4.1)
<W>2013-07-12 02:48:47.071 1 => Starting voice thread
<W>2013-07-12 02:48:47.092 1 => CELT codec switch ffffffff8000000b ffffffff80000010 (prefer ffffffff8000000b) (Opus 0)
<W>2013-07-12 02:48:47.112 1 => <122:JuggaloPrideIzBack(-1)> Authenticated
Generally, clients generate their own certificates, which usually end up looking something like this:
The lack of any real-world personal information is great for anonymity, but a lot of commercial Mumble servers will require a certificate issued by a certificate authority, which normally entails forking over personal details, and would thus defeat the purpose of this exercise and why Step 1 is particularly useful for anonymity.
* There might be a UDP “ping” sent to the server, but I haven’t been able to verify that claim yet, so block UDP to be on the safe side.
** According to this leaked document, they’ll be easy to spot since they apparently look like cartoon animals dressed in intensely 90s regalia.
Addendum: A few things have been brought up as important things to know about this setup:
- If someone could monitor the connections being made to the server and log which times of the day people were connecting at, they might be able to tell when you’re asleep and not talking and thus tip off what side of the hemisphere you’re on, assuming a non-night-owl sleep cycle.
- Assuming it can be detected after being filtered/optimized to a pulp, the hum of the mains frequency of the electrical grid might tip off which country you’re in based in. Some folks at HeatSync Labs discussed how this would work and how it might be thwarted.
- Voice communication in any form stops being anonymous the minute someone recognizes your voice. This setup is really only good for location anonymity; i.e. everyone knows it’s Carmen Sandiego talking, but no one knows where in the world she is.
- Mumble is a server-client system, it is not P2P and thus whoever runs the server you’re connected to can do whatevs with your voice communications, including record it all and make a mix tape for the NSA. Make sure you trust the person behind the server; Don’t trust any ol’ server, even if they give you candy!
Location-Anonymous Voice Communication, A Step-by-Step Guide by David Huerta is licensed under a Creative Commons Attribution 3.0 Unported License.