For the past couple of days, I have noticed that the download rate for my BitTorrents would suddenly become really slow during the night. However, when doing a bandwidth test on DSLReports.com, everything was just fine. Being very suspicious I started to do some research on my issue, and I’ve found that my ISP has been identified as a bad ISP and started limiting torrent bandwidth during certain times of day, as known as traffic shaping or bandwidth throttling.
To avoid traffic shaping I found 2 solutions: encrypt my BitTorrent traffic or tunneling my BitTorrent traffic over SSH.
Encrypting BitTorrent Traffic
Encrypting the BitTorrent traffic is the easier solution to implement. There are 2 types of encryption Plain which obfuscates only the header of the stream, and RC4 which obfuscates the entire stream. RC4 is more CPU instensive, however it’s harder for the ISP to detect the BitTorrent traffic.
To enable encryption on Azureus:
- Go to Tools -> Options -> Connection -> Transport Encryption.
- Check the “Require encrypted transport” checkbox.
- Choose the encryption method “Plain” or “RC4″ to use in the “Minimum encryption level” dropdown.
- If the “Allow non-encrypted outgoing connections if encrypted connection attempt fails” checkbox is checked it will ensure compatibility with clients that are not using encryption, but makes it easier for your ISP to detect BitTorrent traffic.
- Check the “Allow non-encrypted incoming connections” checkbox.
Note: For my ISP I found the optimum settings to use the “Plain” encryption setting with the “Allow non-encrypted outgoing connections if encrypted connection attempt fails” checked, and “Allow non-encrypted incoming connections” unchecked
To enable encryption on µTorrent
- Go to Options -> Preferences -> BitTorrent
- Under the “Protocol Encryption” section, in the “Outgoing:” dropdown , there are two options “Enabled” and “Forced”, where “Forced” will offer more protection against traffic shaping.
- Checking the “Allow legacy incoming connections” will improve compatibility between clients not using encryption but you will be more vulnerable to traffic shapping.
Note: For my ISP I found the optimum settings to use to enable outgoing encryption, and having “Allow non-encrypted incoming connections” checked.
Tunneling BitTorrent over SSH
SSH Server
First you need to get a SSH account from a shell provider. The shell provider needs to have a large amount of bandwidth and powerful processors to handle the load on the servers. A popular shell provider is http://silenceisdefeat.org, but I haven’t tried it out yet.
Installing/Configuring PuTTY
To open a SSH tunnel, you need to install PuTTY. Open the application after installation is completed.
- Expand “SSH” under “Connection”, and then go to “Tunnels”.
- Under “Add new forwarded port:” enter a port number beside “Source port” e.g. 7443
- Click on the “dynamic” radio button.
To improve traffic click on “SSH” under “Connection”, check the box “Enable Compression”
Click on “Session” and under the “Host Name (or IP address)” enter the public IP address or a fully qualified domain name of the SSH server PC. Enter a unique name in the “Saved Sessions” window and click on “Save”.
Click on “Open” and login to the SSH server with the appropriate user and password information, and leave the window open.
Configuring the BitTorrent Client (µTorrent)
The final step is to configure your BitTorrent client to go through a proxy server. For µTorrent Go to Options -> Preferences -> Connection and do the following under the “Proxy Server” section.
- In the “Type:” drop down menu select “Socks4″ or “Socks5″
- In the “Proxy:” text box enter “localhost”
- In the “Port:” text box enter the port which you previously defined in the Putty client e.g. 7443
Since configuring Azuerus will be similar, I will not provide the instructions here.
After you are done, restart your BitTorrent client.
Doing a Quick Test
To verify the solutions work, I did a quick test. I begun downloading a healthy torrent file at a rate of 150kb/s. When the peak hour arrived, the traffic shaping started and my rate immediately dropped to 25kb/s. I begun implementing the encryption method with Azureus and µTorrent, I was able to get my rate back up to 100kb/s and 70kb/s respectively. When implementing the SSH tunneling solution I used my friend’s SSH server which was not on the same network as my ISP. Unfortunately, because of bandwidth limitation from his server, I was only able to reach 45kb/s.
In conclusion, I am now using µTorrent as my BitTorrent client with encryption enable to download my BitTorrents.





