How to: Run Transmission using OpenVPN in Docker on a Synology NAS (DSM 6.0)

I have previously written about how to use your Synology NAS to download torrents over a VPN connection using Synology Download Station and OpenVPN, this post shows you how to use your Torrent client of choice with OpenVPN inside a docker container. The benefit of doing it this way is primarily isolating the torrent client inside a container which utilises the VPN, while the remaining Synology services connect directly to the internet without the VPN connection.

Lets get started.

Step 1. Download and Install Docker from the Synology Package Center

Step 2. Open Docker and click on the Registry. Search for haugene/transmission-openvpn, click Download

Step 3. Create the DNS config file ‘resolv.conf’, open a text editor and type the name server of your choosing. I’m using the name servers provided by Private Internet Access:

nameserver 209.222.18.222
nameserver 209.222.18.218

Make sure the file doesn’t have a .txt file extension. Open Synology File Station and create a new folder:

/docker/transmission-openvpn

Upload the ‘resolv.conf’ to the ‘transmission-openvpn’ folder

While your here, create your new downloads directory:

/Downloads

If you want to create a separate watch directory do so now.

Step 4. Create a VPN adapter script called ‘TUN.sh’, open a text editor and copy the following code:

#!/bin/sh

# Create the necessary file structure for /dev/net/tun
if ( [ ! -c /dev/net/tun ] ); then
	if ( [ ! -d /dev/net ] ); then
		mkdir -m 755 /dev/net
	fi
	mknod /dev/net/tun c 10 200
fi

# Load the tun module if not already loaded
if ( !(lsmod | grep -q "^tun\s") ); then
	insmod /lib/modules/tun.ko

fi

As with the previous step, ensure the file doesn’t have the .txt extension. Upload to the same folder as before.

Upload ‘TUN.sh’ to the folder

Step 4. Schedule the TUN.sh script to run when the Synology boots. Open the Synology Diskstation management interface.

  • Control Panel > Task Scheduler
  • Create > Triggered Task > User Defined Script
  • General > Task > Enter the following settings
Task : TUN.sh
User: root
Event: Boot-up
  • Task Settings > Run-command > User Defined Script:
bash /volume1/docker/transmission-openvpn/TUN.sh

Click Okay and Run the task.

Step 5. Back to Docker, click Images, select the haugene/transmission-openvpn image and click Launch

Step 6. Configure the container with the following settings:

  • General Settings > ‘Execute container using high privilege’
  • Advanced Settings > ‘Enable auto-restart’
  • Advanced Settings > Volume > Add Folder > Specify a mount path for /data/completed to /Downloads
  • Advanced Settings > Volume > Add File > Specify the mount path for /etc/resolv.conf, as created in step 3.
  • Advanced Settings > Port Settings > Specify which ports you want to connect to the container through
<localport>:<containerport>/<type>
9091:9091/TCP
16881:16881/TCP
6881:6881/UDP
  • Advanced Settings > Environment > Specify your VPN credentials by setting the following variables:
OPENVPN_USERNAME: vpn_username
OPENVPN_PASSWORD: vpn_password
OPENVPN_PROVIDER: vpn_provider e.g. PIA
OPENVPN_CONFIG: vpn_server e.g Sweden

Advanced Settings > Environment > Specify the user and group identifiers (this permits the container to use the same credentials as the user, to avoid any permissions issues which can arise when specifying a user created share outside the docker folder as the download location)

PUID: USER_ID e.g. 1000
PGID: GROUP_ID e.g. 1000
TZ: Time Zone e.g. Europe/London

To determine your PUID and GPID open a terminal window and type the following command:

id user

If you want to specify a block list set the following variables:

blocklist-enabled: true
blocklist-url : blocklist_URL

If you want to enable seeding then the server needs to have port forwarding enabled, check with your VPN provider which servers use port forwarding.

Apply the settings.

Step 7. Run the container. Check the port number for user interface

  • Details > Overview > Port Settings

Step 8. Open the management interface via:

<ip_address>:<port>/transmission/web/

Check the VPN connection is working, follow the instructions here.

You should now be able to start adding torrents, which will download over the VPN and when finished by moved to the downloads folder you specified. There are a couple of plug-ins available for Firefox and Chrome which allow you to manage magnet links and also monitor the download status in the browser toolbar without opening the management UI.

My personal preference is Transmitter for Transmission in Firefox and Remote Transmission ++ in Chrome.

If you want to use another Torrent client, there are other Docker images available.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s