≡ Menu

Membangun Torrent Box Murah dengan Transmission dan OpenVPN

Kalau anda sering mengunduh file dari torrent, maka tentunya anda sudah familiar dengan berbagai layanan torrent leecher yang tersedia di internet. Yup, urusan unduh mengunduh torrent menjadi jauh lebih mudah dan cepat karena file yang anda inginkan akan diunduh oleh server torrent leecher tersebut yang notabene menggunakan jaringan internet server berkecepatan tinggi. Dan nantinya anda tinggal mengunduh file yang sudah tersimpan di server torrent leecher menggunakan file downloader favorit anda seperti Internet Download Manager.

Layanan torrent leecher tersebut ada yang gratis maupun yang berbayar. Masalahnya, kalau gratis biasanya servernya lambat karena digunakan oleh banyak orang dan ada batasan-batasan tertentu. Misalnya file yang kita unduh ukurannya tidak melebihi dari 1 GB, hanya tersimpan dalam kurun waktu 1 jam kemudian terhapus dengan sendirinya. Sedangkan yang berbayar tentunya lebih bebas, namun anda harus menyiapkan dana yang tidak sedikit setiap bulannya untuk berlangganan layanan tersebut.

Pada umumnya, orang-orang yang aktif sekali melakukan torrenting ini membeli atau menyewa server / torrent box. Selain punya akses penuh ke file torrent yang diunduh, mereka juga bisa melakukan aktifitas seeding. Kalau anda bergabung di salah satu grup private torrent misalnya, aktivitas seeding ini adalah hal wajib. Jika seed ratio anda rendah, maka siap-siap aja dicap sebagai torrent leecher atau istilah bagi orang yang maunya download tapi tidak mau berbagi dengan upload file yang sudah diunduh tadi. Yup, torrenting pada dasarnya adalah wadah untuk berbagi file bersama-sama.

Layanan torrent box umumnya harganya cukup tinggi bagi sebagian orang mengingat si penyedia juga mencari untung dari layanan ini. Psst, anda bisa mendapatkan harga yang sangat murah dengan menyewa server-server low-end di LowEndBox. Namun yang perlu diketahui, pada umumnya para penjual server ini tidak mengijinkan penggunaan server untuk traffic torrent atau kalaupun boleh maka file yang diunduh tidak boleh berkonten hak cipta. Di negara sana, masalah hak cipta adalah masalah serius. Kalaupun anda terpaksa mengunduh konten tersebut jangan lupa dihapus secara rutin setelah dinduh ke komputer anda. Nah, masalah traffic torrent ini kita bisa mengakalinya dengan OpenVPN sehingga IP server kita tidak terekspos ke publik sekaligus melindungi server utama kita.

Di tutorial ini saya menggunakan kombinasi torrent client Transmission dan OpenVPN. Mengapa Transmission? yang pasti torrent client yang satu ini sudah sangat umum digunakan bahkan sudah terinstall secara default di distro-distro Linux favorit kita. Dan juga konfigurasinya cukup mudah untuk disandingkan dengan penggunaan OpenVPN. Berikut informasi singkat layanan maupun tool yang saya gunakan di tutorial ini:

  1. Operating System: Debian 8;
  2. Torrent Client: Transmission;
  3. Layanan VPN: Windscribe, kebetulan saya dulu beli yang lifetime. Banyak penyedia layanan VPN yang support torrent atau P2P. Hanya saja pastikan VPN tersebut punya OpenVPN config;
  4. Beberapa shell script linux, bisa anda lihat disini.

Langkah Awal

Sebelum memulai proses instalasi, pastikan fitur TUN/TAP pada control panel VPS anda sudah aktif.

Update terlebih dahulu OS dan repositori Debian anda dengan mengetikkan perintah berikut:

apt-get update

Tool yang Diperlukan

Install screen:

apt-get install screen

Selanjutnya install editor nano:

apt-get install nano

Instalasi Nginx

Install webserver Nginx. Jika sebelumnya pernah install webserver Apache, pastikan sudah diuninstall. Mengenai cara uninstall Apache, silahkan googling tutorialnya. Contoh tutorialnya dalam bahasa inggris seperti ini.

apt-get install nginx

Jika sudah terinstall, maka ketika anda mengakses http://{IP-ANDA}, tampilannya akan seperti ini. Bisa saja berbeda tergantung versi Nginx yang anda install.

nginx-front-page

Buat direktori “downloads” di /var/www/html. Direktori ini fungsinya untuk menyimpan file-file hasil unduhan torrent anda yang bisa diakses di http://{IP-ANDA}/downloads.

mkdir /var/www/html/downloads

Berikan hak akses penuh untuk Nginx dan publik:

chown -R www-data:www-data /var/www/html/downloads

chmod -R 0777 /var/www/html/downloads

Melindungi Direktori Downloads Anda

Supaya tidak ada yang bisa mengakses file hasil unduhan anda maupun mencuri bandwith, direktori downloads bisa anda proteksi dengan teknik htpasswd sederhana. Untuk membuat file htpasswd tersebut, unduh scriptnya dan simpan di direktori /usr/local/bin dengan perintah:

cd /usr/local/bin

wget https://raw.githubusercontent.com/centminmod/centminmod/master/config/htpasswdgen/htpasswd.py

Jika muncul pesan error ERROR: The certificate of ‘raw.githubusercontent.com’ is not trusted, maka anda perlu menginstal ca-certificates terlebih dahulu dengan perintah berikut:

apt-get install ca-certificates

Setelah itu ulangi perintah wget diatas untuk mengunduh berkas htpasswd.py dan lanjutkan dengan perintah di bawah ini.

chmod +x htpasswd.py

Kemudian buat file htpasswd anda dan simpan dengan nama .htpasswd. Saya sendiri menyimpannya di direktori /home. Berikut perintahnya:

htpasswd.py -c -b /home/.htpasswd USERNAME PASSWORD

Ganti USERNAME dan PASSWORD dengan yang anda inginkan. File .htpasswd ini akan kita gunakan di konfigurasi Nginx.

Konfigurasi Nginx

Untuk menuju ke direktori konfigurasi Nginx, ketikkan perintah berikut:

cd /etc/nginx/sites-available

nano default

Akan muncul tampilan konfigurasi situs Nginx default seperti ini:

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
  listen 80 default_server;
  listen [::]:80 default_server;

  # SSL configuration
  #
  # listen 443 ssl default_server;
  # listen [::]:443 ssl default_server;
  #
  # Self signed certs generated by the ssl-cert package
  # Don't use them in a production server!
  #
  # include snippets/snakeoil.conf;

  root /var/www/html;

  # Add index.php to the list if you are using PHP
  index index.html index.htm index.nginx-debian.html;

  server_name _;

  location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
  }

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  #
  #location ~ \.php$ {
  # include snippets/fastcgi-php.conf;
  #
  # # With php5-cgi alone:
  # fastcgi_pass 127.0.0.1:9000;
  # # With php5-fpm:
  # fastcgi_pass unix:/var/run/php5-fpm.sock;
  #}

  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one
  #
  #location ~ /\.ht {
  # deny all;
  #}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#  listen 80;
#  listen [::]:80;
#
#  server_name example.com;
#
#  root /var/www/example.com;
#  index index.html;
#
#  location / {
#      try_files $uri $uri/ =404;
#  }
#}

Tepat di bawah kode:

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
  }

Tambahkan kode berikut:

location /downloads {
        autoindex on;
        auth_basic "Dilarang Masuk kecuali Admin!!!";
        auth_basic_user_file /home/.htpasswd;
    }

Kemudian reload Nginx anda dengan perintah berikut:

service nginx reload

Sekarang buka http://{IP-ANDA}/downloads. Pastinya anda akan diminta untuk memasukkan username dan password.

Instalasi Transmission

Sekarang kita akan menginstall torrent client, Transmission. Ketikkan perintah berikut:

apt-get install transmission-daemon

Edit konfigurasi Transmission menggunakan editor nano dengan perintah berikut:

nano /etc/transmission-daemon/settings.json

Maka akan muncul tampilan seperti berikut ini:

{
"alt-speed-down": 50,
"alt-speed-enabled": false,
"alt-speed-time-begin": 540,
"alt-speed-time-day": 127,
"alt-speed-time-enabled": false,
"alt-speed-time-end": 1020,
"alt-speed-up": 50,
"bind-address-ipv4": "0.0.0.0",
"bind-address-ipv6": "::",
"blocklist-enabled": false,
"blocklist-url": "http://www.example.com/blocklist",
"cache-size-mb": 4,
"dht-enabled": true,
"download-dir": "/var/lib/transmission-daemon/downloads",
"download-limit": 100,
"download-limit-enabled": 0,
"download-queue-enabled": true,
"download-queue-size": 5,
"encryption": 1,
"idle-seeding-limit": 30,
"idle-seeding-limit-enabled": false,
"incomplete-dir": "/var/lib/transmission-daemon/Downloads",
"incomplete-dir-enabled": false,
"lpd-enabled": false,
"max-peers-global": 200,
"message-level": 1,
"peer-congestion-algorithm": "",
"peer-id-ttl-hours": 6,
"peer-limit-global": 200,
"peer-limit-per-torrent": 50,
"peer-port": 51413,
"peer-port-random-high": 65535,
"peer-port-random-low": 49152,
"peer-port-random-on-start": false,
"peer-socket-tos": "default",
"pex-enabled": true,
"port-forwarding-enabled": false,
"preallocation": 1,
"prefetch-enabled": 1,
"queue-stalled-enabled": true,
"queue-stalled-minutes": 30,
"ratio-limit": 2,
"ratio-limit-enabled": false,
"rename-partial-files": true,
"rpc-authentication-required": true,
"rpc-bind-address": "0.0.0.0",
"rpc-enabled": true,
"rpc-password": "{ea78312d699ed8ef464182f6a3865dbab2387a93K8XZz1Z0",
"rpc-port": 9091,
"rpc-url": "/transmission/",
"rpc-username": "transmission",
"rpc-whitelist": "127.0.0.1",
"rpc-whitelist-enabled": true,
"scrape-paused-torrents-enabled": true,
"script-torrent-done-enabled": false,
"script-torrent-done-filename": "",
"seed-queue-enabled": false,
"seed-queue-size": 10,
"speed-limit-down": 100,
"speed-limit-down-enabled": false,
"speed-limit-up": 100,
"speed-limit-up-enabled": false,
"start-added-torrents": true,
"trash-original-torrent-files": false,
"umask": 18,
"upload-limit": 100,
"upload-limit-enabled": 0,
"upload-slots-per-torrent": 14,
"utp-enabled": true
}

Selanjutnya ganti baris berikut:

  • “download-dir”: “/var/www/html/downloads”,
  • “rpc-password”: “{PASSWORD-ANDA}”,
  • “rpc-url”: “/{NAMA-URL-TRANSMISSION WEBUI}/”,
  • “rpc-username”: “{USERNAME-LOGIN-WEBUI-TRANSMISSION}”,
  • “rpc-whitelist-enabled”: false,

Contoh punya saya:

  • “download-dir”: “/var/www/html/downloads”,
  • “rpc-password”: “12341234”,
  • “rpc-url”: “/sedot/”,
  • “rpc-username”: “tukangdonlot”,
  • “rpc-whitelist-enabled”: false,

SImpan konfigurasinya, kemudian ketikkan perintah berikut:

service transmission-daemon reload

Sekarang anda coba akses http://{IP-ANDA}:9091/sedot/, maka anda akan diminta memasukkan username dan password. Masukkan yang sudah anda buat tadi di konfigurasi. Halaman webui Transmission akan terlihat seperti ini:

transmission-webui

Sampai disini anda sudah berhasil menginstall torrent client, Transmission. Konfigurasi lebih lanjut bisa anda lakukan dengan mengedit file /etc/transmission-daemon/settings.json. Contohnya anda ingin mengurangi upload speed, mematikan fitur seeding setelah seed ratio tertentu dicapai. Saya tidak jelaskan disini karena saya asumsikan yang membaca artikel disini sudah paham masalah torrent dan linux atau mungkin akan saya tulis di tutorial yang akan datang. Oh ya, pengaturan ini juga bisa dilakukan lewat web-GUI Transmission anda.

Instalasi OpenVPN

OpenVPN disini fungsinya adalah untuk melindungi dan menyembunyikan IP asli dari server anda. Ibaratnya VPN ini pintu gerbang rumah anda sebelum keluar. Jadi yang dilihat orang adalah pintu gerbang anda tapi isinya di dalam seperti apa, orang tidak tahu. Ilustrasi gambarnya seperti ini:

Ilustrasi VPN

Untuk menginstall OpenVPN, ketikkan perintah berikut:

apt-get install openvpn

Sudah selesai? tentu saja belum. Apa yang terjadi kalau sekarang anda menghubungkan server anda dengan server VPN? Koneksi SSH anda saat ini dengan server akan terputus karena jaringan internet anda ke server akan dipindahkan lewat jalur VPN. Anda tidak bisa mengakses server anda lagi. Satu-satunya jalan anda harus masuk ke server lewat console yang tersedia di control panel VPS anda dan mematikan layanan OpenVPN. Oleh karena itu sangat tidak saya sarankan anda menghidupkan OpenVPN terlebih dahulu. Ikuti tutorial selanjutnya di bawah. Kita akan mengubah cara kerja OpenVPN ini. Jadi hanya Transmission yang menggunakan jaringan OpenVPN sementara lainnya tetap lewat jalur internet biasa sehingga koneksi yang lain tidak terganggu.

Konfigurasi OpenVPN untuk Transmission

Sebelum anda melakukan konfigurasi, pastikan anda berada di direktori root terlebih dahulu karena di tutorial ini, saya bekerja melalui direktori root. Anda bisa mengubahnya di tempat lain tapi mungkin akan ada pengaturan path/lokasi file lagi dan file permissionnya. Terserah anda.

Untuk kembali ke direktori root, ketikkan perintah berikut:

cd ~

Unduh file config dari penyedia layanan VPN anda. Disini saya menggunakan layanan Windscribe dan server yang saya gunakan lokasinya di Perancis. Maka file config yang saya dapatkan adalah Windscribe-France.ovpn. Perlu diketahui, file config VPN selalu berekstensi .ovpn. Contoh isi file confignya akan seperti ini:

client
dev tun
proto udp
remote fr.windscribe.com 443

nobind
auth-user-pass

resolv-retry infinite

auth SHA512
cipher AES-256-CBC
keysize 256
comp-lzo
verb 2
mute-replay-warnings
ns-cert-type server
persist-key
persist-tun

key-direction 1

-----BEGIN CERTIFICATE-----
bla bla bla ...
-----END CERTIFICATE-----

-----BEGIN OpenVPN Static key V1-----
bla bla bla ...
-----END OpenVPN Static key V1-----

Edit file config diatas menjadi seperti dibawah ini:

client
dev tun
proto udp
remote fr.windscribe.com 443

script-security 3
route-noexec
route-up /root/route_up.sh

nobind
auth-user-pass /root/auth.txt
reneg-sec 432000
resolv-retry infinite

auth SHA512
cipher AES-256-CBC
keysize 256
comp-lzo
verb 2
ns-cert-type server
persist-key
persist-tun

key-direction 1

-----BEGIN CERTIFICATE-----
bla bla bla ...
-----END CERTIFICATE-----

-----BEGIN OpenVPN Static key V1-----
bla bla bla ...
-----END OpenVPN Static key V1-----

Saya jelaskan sedikit kode shell script diatas. Kuncinya ada pada dua baris di bawah ini:

route-noexec

route-up /root/route_up.sh

Fungsi route-noexec ini agar ketika OpenVPN dihidupkan maka ia tidak serta merta mengubah jalur internet server anda lewat VPN secara keseluruhan. Melainkan OpenVPN akan mengikuti aturan jalur yang kita buat lewat file route_up.sh dimana OpenVPN hanya digunakan untuk Transmission.

Selanjutnya, buat file teks kosong kemudian isikan username dan password VPN anda per baris, contoh:

uservpnsaya
pass1234saya

Simpan file tersebut dengan nama auth.txt.

Buat file teks kosong dan simpan dengan nama ips.txt.

Konfigurasi Routing OpenVPN

Torrent client seperti Transmission sudah memiliki fitur bind IP. Anda tinggal mengetikkan perintah berikut untuk pengaturan routing table server anda:

echo "10 custom_table" >> /etc/iproute2/rt_tables

INGAT! perintah di atas hanya dijalankan cukup sekali saja, terlepas anda mau menjalankan OpenVPN berkali-kali.

Seperti yang sudah saya jelaskan sebelumnya, agar OpenVPN tidak mengubah jalur internet server anda maka kita harus menambahkan file route_up.sh untuk pengaturan routing OpenVPN hanya digunakan oleh Transmission. Berikut kode shell script-nya:

#!/bin/bash
echo "$dev : $ifconfig_local -> $ifconfig_remote gw: $route_vpn_gateway"

DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
if [ -f $DIR/ips.txt ]
then
IPgateway=$(sed -n '1p' $DIR/ips.txt)
IPinternal=$(sed -n '2p' $DIR/ips.txt)
/bin/ip route del default via $IPgateway dev tun0 table custom_table
/bin/ip rule del from $IPinternal/32 table custom_table
/bin/ip rule del to $IPgateway/32 table custom_table
/bin/ip route flush cache
rm $DIR/ips.txt
fi

/bin/ip route add default via $route_vpn_gateway dev tun0 table custom_table
/bin/ip rule add from $ifconfig_local/32 table custom_table
/bin/ip rule add to $route_vpn_gateway/32 table custom_table
/bin/ip route flush cache
echo $route_vpn_gateway >> $DIR/ips.txt
echo $ifconfig_local >> $DIR/ips.txt

/etc/init.d/transmission-daemon stop
sed -i '/ipv4/c\ "bind-address-ipv4": "'$ifconfig_local'",' /var/lib/transmission-daemon/info/settings.json
sed -i '/ipv6/c\ "bind-address-ipv6": "::1",' /var/lib/transmission-daemon/info/settings.json
sed -i '/blocklist-enabled/c\ "blocklist-enabled": true,' /var/lib/transmission-daemon/info/settings.json
sed -i '/blocklist-url/c\ "blocklist-url": "http://john.bitsurge.net/public/biglist.p2p.gz",' /var/lib/transmission-daemon/info/settings.json

/etc/init.d/transmission-daemon start

exit 0


Simpan file tersebut dengan nama route_up.sh.

Auto Restart OpenVPN jika Koneksi Terputus

Kode shell script di atas sudah termasuk mencegah Transmission tetap mengunduh file torrent ketika koneksi VPN anda terputus. Jika terputus apakah anda harus me-restart OpenVPN kembali? Tentunya anda tidak mau memantau di depan komputer secara terus menerus, bukan? Anda bisa menggunakan shell script di bawah ini:

#!/bin/bash
if ping -c 1 -I tun0 8.8.8.8 &> /dev/null;
then
exit
else
if /usr/bin/screen -list | /bin/grep "torrentvpn";
then
/usr/bin/screen -S torrentvpn -X quit
fi
/usr/bin/pkill -9 openvpn
/usr/bin/screen -AdmS torrentvpn
/usr/sbin/openvpn /etc/openvpn/Windscribe-France.ovpn
fi

Simpan dengan nama check_restart.sh.

Catatan:

  • tun0 adalah network adapter OpenVPN anda pada umumnya. Anda bisa mengeceknya dengan mengetikkan perintah ifconfig.
  • torrentvpn adalah nama Screen yang anda jalankan. Akan saya jelaskan lebih lanjut ketika kita mulai menjalankan OpenVPN. Kalau anda mengikuti tutorial ini step-by-step, nama Screen ini jangan diubah.

Memberikan Akses untuk Eksekusi File Shell Script

Agar seluruh shell script anda bisa dieksekusi tanpa error maka anda harus memberikan hak akses global ke file-file tersebut yang beekstensi .sh. Pastikan anda masih di direktori root, kemudian ketikkan perintah berikut:

chmod +x *.sh

Memulai Menjalankan OpenVPN

Saat yang ditunggu-tunggu sudah tiba. Sekarang kita akan menjalankan OpenVPN. Ketikkan perintah berikut:

screen -S torrentvpn

Perintah di atas untuk menjalankan sesi Screen dengan nama “torrentvpn”. Kemudian anda bisa menjalankan config OpenVPN dengan perintah berikut:

openvpn Windscribe-France.ovpn

Selanjutnya proses penyambungan VPN akan tampil. Jika masih gagal, perhatikan pesan errornya dan perbaiki kembali.

Kemudian anda keluar dari sesi Screen atau detach dengan Ctrl A+D. Anda bisa melihat daftar sesi screen yang sedang berjalan dengan perintah berikut:

screen -list

Perihal tutorial penggunaan Screen ini bisa anda googling. Yang jelas, sebagai orang yang sering berkutat di terminal Linux, Screen ini sangat membantu saya bekerja multi tasking tanpa harus membuka banyak terminal. Ibaratnya seperti punya multi monitor.

Mengecek IP Transmission dengan OpenVPN

Sekarang OpenVPN sudah jalan, tapi akan percuma kalau torrent client kita masih menggunakan IP server kita bukannya IP VPN. Untuk mengeceknya kita bisa menggunakan layanan gratis http://checkmytorrentip.upcoil.com.

Setelah saya melakukan pengecekan di https://www.ipburger.com, saya mendapatkan IP baru yang notabene IP server VPN Windscribe yang ada di Perancis seperti pada gambar di bawah berikut ini:

IP Torrent Baru

ipburger

Artinya, torrent client kita sukses terhubung dengan server VPN. Horee!!

Anda bisa melakukan tes download. Contohnya, dengan mengunduh file ISO Ubuntu Linux di https://www.ubuntu.com/download/alternative-downloads seperti gambar di bawah ini:

proses download torrent

Penjadwalan Script Auto Restart OpenVPN

Langkah terakhir adalah mengatur agar script auto restart OpenVPN dieksekusi setiap 15 menit untuk mengecek apakah koneksi VPN anda masih tersambung. Jika ternyata terputus, maka script ini secara otomatis akan merestart OpenVPN dan menyambungkannya kembali sehingga proses pengunduhan file Transmission anda bisa berlanjut. Untuk pengaturan jadwalnya kita bisa menggunakan cron. Ketikkan perintah berikut untuk instalasi:

apt-get install cron

Kemudian untuk menambahkan jadwal cron, ketikkan perintah berikut:

crontab -e

Pilih editor nano, kemudian tambahkan entri berikut di baris paling akhir:

*/15 * * * * /root/check_restart.sh >> /root/check_restart.log 2>&1

Artinya, script check_restart.sh akan dieksekusi setiap 15 menit sekali. Anda bisa merubah interval waktunya sesuka anda. Kalau anda tidak mau repot, anda bisa menggunakan layanan online cron generator.

Jika anda ingin mengecek status koneksi OpenVPN dan apakah script anda berhasil dieksekusi, anda bisa membuka file check_restart.log.

Yup, demikian tutorial yang cukup panjang saya buat. Semoga bermanfaat dan selamat mencoba!

{ 0 komentar… tambah }

Beri Komentar