Giuseppe Parrello

 

Come installare un server BitTorrent su un router


In questa pagina descriverò come installare un server BitTorrent su un router (Asus RT-AC56U) - useremo alcuni pacchetti Entware, pertanto fare riferimento a questa pagina su come installare Entware su un router.
Useremo il server (daemon) "Transmission", uno dei più usati server BitTorrent degli ambienti Linux. Per installare questo server, abbiamo bisogno di installare diversi pacchetti Entware (transmission-web, transmission-daemon-openssl, transmission-remote-openssl) tramite la seguente istruzione:

opkg install transmission-web transmission-daemon-openssl transmission-remote-openssl

Installing transmission-web (2.93-4) to root...
Downloading http://bin.entware.net/armv7sf-k2.6/transmission-web_2.93-4_armv7-2.6.ipk
Installing transmission-daemon-openssl (2.93-4) to root...
Downloading http://bin.entware.net/armv7sf-k2.6/transmission-daemon-openssl_2.93-4_armv7-2.6.ipk
Installing libcurl (7.58.0-1) to root...
Downloading http://bin.entware.net/armv7sf-k2.6/libcurl_7.58.0-1_armv7-2.6.ipk
Installing libevent2 (2.0.22-1) to root...
Downloading http://bin.entware.net/armv7sf-k2.6/libevent2_2.0.22-1_armv7-2.6.ipk
Installing libminiupnpc (2.0.20170509-1) to root...
Downloading http://bin.entware.net/armv7sf-k2.6/libminiupnpc_2.0.20170509-1_armv7-2.6.ipk
Installing transmission-remote-openssl (2.93-4) to root...
Downloading http://bin.entware.net/armv7sf-k2.6/transmission-remote-openssl_2.93-4_armv7-2.6.ipk
Configuring libcurl.
Configuring libevent2.
Configuring libminiupnpc.
Configuring transmission-remote-openssl.
Configuring transmission-daemon-openssl.
Configuring transmission-web.

Il pacchetto "transmission-web" contiene le risorse dell'interfaccia web del Transmission, il pacchetto "transmission-daemon-openssl" contiene il daemon, mentre il pacchetto "transmission-remote-openssl" è l'interfaccia remota CLI ("Command Line Interface", ovvero "Interfaccia a linea di comando") del Transmission. Diamo uno sguardo al pacchetto "transmission-daemon-openssl", esso contiene i seguenti file:

opkg files transmission-daemon-openssl | sort

/opt/bin/transmission-daemon
/opt/etc/init.d/S88transmission
/opt/etc/sysctl.d/20-transmission.conf
/opt/etc/transmission/settings.json

Il file "/opt/bin/transmission-daemon" è il daemon, il file "/opt/etc/init.d/S88transmission" contiene lo script per avviare e fermare il daemon Transmission, il file "/opt/etc/sysctl.d/20-transmission.conf" è riservato al Transmission, mentre il file "/opt/etc/transmission/settings.json" contiene il file di configurazione del Transmission.
Abbiamo bisogno di impostare il file di configurazione del Transmission (vedere la prossima sezione su questa pagina), in seguito possiamo avviare il daemon del Transmission usando il file script con il parametro "start", questa è una lista di parametri che possiamo passare allo script del Transmission:

/opt/etc/init.d/S88transmission start
Starting transmission-daemon... done.

/opt/etc/init.d/S88transmission check
Checking transmission-daemon... alive.

/opt/etc/init.d/S88transmission stop
Checking transmission-daemon... alive.
Shutting down transmission-daemon... done.

/opt/etc/init.d/S88transmission check
Checking transmission-daemon... dead.

Il parametro "start" viene usato per avviare il daemon, il parametro "check" viene usato per controllare se il daemon è in esecuzione o meno, mentre il parametro "stop" viene usato per fermare il daemon.
Dopo aver avviato il daemon Transmission, è possibile accedere all'interfaccia utente via web. Per ulteriori dettagli, leggere la sezione alla fine di questa pagina.
Note : poiché il daemon Transmission richiede un'enorme quantità di memoria di sistema, suggerisco di attivare un file swap sul router, come descritto nella pagina web "Come attivare un file swap su un router".


Come impostare il file di configurazione del Transmission

In questa sezione, spiegheremo brevemente il file "/opt/etc/transmission/settings.json" contenente il file di configurazione del Transmission. Questo file contiene tutte le impostazioni usate dal daemon Transmission, pertanto è importante capire come modificarlo prima di usare il daemon Transmission. Da notare che questo file di configurazione non può essere modificato quando il daemon del Transmission è in esecuzione, quindi il daemon del Transmission deve essere fermato prima di modificare questo file di configurazione.
Innanzitutto diamo uno sguardo al contenuto di un file di configurazione di esempio :

{
    "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://list.iblocklist.com/?list=bt_level1",
    "cache-size-mb": 2,
    "dht-enabled": true,
    "download-dir": "/opt/downloads/torrent",
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 0,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/opt/downloads/torrent/incomplete",
    "incomplete-dir-enabled": false,
    "lpd-enabled": true,
    "message-level": 1,
    "peer-congestion-algorithm": "",
    "peer-id-ttl-hours": 6,
    "peer-limit-global": 40,
    "peer-limit-per-torrent": 8,
    "peer-port": 51413,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": "lowcost",
    "pex-enabled": true,
    "port-forwarding-enabled": false,
    "preallocation": 1,
    "prefetch-enabled": false,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 2,
    "ratio-limit-enabled": false,
    "rename-partial-files": true,
    "rpc-authentication-required": false,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-host-whitelist": "",
    "rpc-host-whitelist-enabled": true,
    "rpc-password": "{b0b6e62c1e81950c884b369a771d4977ceb191c5dEkYqx3E",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "root",
    "rpc-whitelist": "127.0.0.1",
    "rpc-whitelist-enabled": false,
    "scrape-paused-torrents-enabled": true,
    "script-torrent-added-enabled": false,
    "script-torrent-added-filename": "",
    "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": true,
    "umask": 18,
    "upload-slots-per-torrent": 14,
    "utp-enabled": true,
    "watch-dir": "/opt/etc/transmission/watchdir",
    "watch-dir-enabled": true
}

La seguente tabella spiega brevemente il valore di ogni parametro all'interno del file di configurazione  - maggiore dettagli sono disponibili a questo indirizzo web :

Stringa Tipo di valore Descrizione
alt-speed-down Numero Velocità massima globale di download (KBps)
alt-speed-enabled Booleano True significa usare le velocità alternative
alt-speed-time-begin Numero Quando attivare le velocità alternative (unità: minuti dopo mezzanotte)
alt-speed-time-day Numero In quale/i giorno/i attivare le velocità alternative
alt-speed-time-enabled Booleano True significa usare gli orari di pianificazione acceso/spento
alt-speed-time-end Numero Quando disattivare le velocità alternative (unità: stesse)
alt-speed-up Numero Velocità massima globale di upload (KBps)
bind-address-ipv4 Stringa Dove "ascoltare" connessioni peer
bind-address-ipv6 Stringa Dove "ascoltare" connessioni peer
blocklist-enabled Booleano True significa attivato
blocklist-url Stringa Locazione della blocklist da usare per "blocklist-update"
blocklist-size Numero Numero di regole nella blocklist
cache-size-mb Numero Dimensione massima della cache del disco (MB)
dht-enabled Booleano True significa permette il DHT nei torrent pubblici
download-dir Stringa Percorso predefinito per scaricare i torrent
download-queue-enabled Booleano Se true, limita quanti torrent possono essere scaricati assieme
download-queue-size Numero Massimo numero di torrent da scaricare assieme (vedere download-queue-enabled)
encryption Stringa 0 = Preferire connessioni non cifrate, 1 = Preferire connessioni cifrate, 2 = Richiedere connessioni cifrate
idle-seeding-limit Numero Torrent in fase di seeding saranno fermati se essi sono inattivi da un certo tempo
idle-seeding-limit-enabled Booleano True se il limite di inattività del seeding viene rispettato
incomplete-dir Stringa Percorso per i torrent incompleti, se attivato
incomplete-dir-enabled Booleano True significa mantenere i torrent nella cartella incomplete-dir fino al completamento
lazy-bitfield-enabled Booleano Può aiutare a raggirare un filtraggio da parte di un ISP
lpd-enabled Booleano True significa permettere il "Local Peer Discovery" nei torrent pubblici
message-level Numero Imposta il livello di verbosità dei messaggi del transmission (0 = Nessuno, 1 = Errore, 2 = Info, 3 = Debug)
peer-congestion-algorithm Stringa Normalmente è vuoto (usare "lp" per usare TCP-LP)
peer-id-ttl-hours Numero Ricicla l'ID del peer usato per i torrent pubblici dopo N ore di uso
peer-limit-global Numero Massimo numero globale di peer
peer-limit-per-torrent Numero Massimo numero globale di peer per torrent
peer-port Numero Numero di porta dei peer
peer-port-random-high Numero Massimo numero di porta dei peer
peer-port-random-low Numero Minimo numero di porta dei peer
peer-port-random-on-start Booleano True significa prendere a caso un numero di porta dei peer durante l'avvio
peer-socket-tos Stringa Imposta il parametro Type-Of-Service (TOS) per i pacchetti TCP in uscita. Possibili valori sono "default", "lowcost", "throughput", "lowdelay" e "reliability". Il valore "lowcost" è raccomandato se si usa un router di tipo smart
pex-enabled Booleano True significa permettere il PEX (Peer exchange Peer Exchange) nei torrent pubblici
port-forwarding-enabled Booleano Se true, attiva UPnP o NAT-PMP
preallocation Numero 0 = Off, 1 = Veloce, 2 = Completa (più lento ma riduce la frammentazione del disco) - predefinito è 1
prefetch-enabled Booleano Se attivato, il Transmission suggerirà al sistema operativo quali dati saranno letti dal disco allo scopo di soddisfare le richieste dai peer
queue-stalled-enabled Booleano Se considerare o no i torrent inattivi come in stallo
queue-stalled-minutes Numero Torrent che sono inattivi per N minuti non vanno conteggiati tra seed-queue-size o download-queue-size
ratio-limit Numero "ratio limit" (rapporto) di un Torrent
ratio-limit-enabled Booleano True significa impostare un "ratio limit" (rapporto)
rename-partial-files Booleano True significa aggiungere ".part" ai file incompleti
rpc-authentication-required Booleano Se true, userid/password sono richiesti per accedere all'interfaccia web
rpc-bind-address Stringa Dove "ascoltare" per le connessioni RPC
rpc-enabled Booleano Se true, attiva l'interfaccia web
rpc-host-whitelist Stringa Lista delimitata da virgole dei nomi di dominio. I caratteri jolly sono consentiti se si usa '*'. Esempio: "*.foo.org,example.com"
rpc-host-whitelist-enabled Booleano Se true, attiva l'opzione "rpc-host-whitelist"
rpc-password Stringa Password richiesta per accedere all'interfaccia web (se "rpc-authentication-required" è true). Il testo in chiaro verrà automaticamente cifrato dal daemon
rpc-port Numero Porta usata per accedere all'interfaccia web
rpc-url Stringa Percorso aggiuntivo dell'interfaccia web
rpc-username Stringa Nome utente richiesto per accedere all'interfaccia web (se "rpc-authentication-required" è true)
rpc-whitelist Stringa Lista delimitata da virgole degli indirizzi IP. I caratteri jolly sono consentiti se si usa '*'. Esempio: "127.0.0.*,192.168.*.*"
rpc-whitelist-enabled Booleano Se true, attiva l'opzione "rpc-whitelist"
scrape-paused-torrents-enabled Booleano Se true, attiva lo "scraping" dei torrent in pausa
script-torrent-added-enabled Booleano Se true, esegue uno script ogni qualvolta un torrent viene aggiunto
script-torrent-added-filename Stringa Nome del file dello script da eseguire ogni qualvolta un torrent viene aggiunto
script-torrent-done-enabled Booleano Se true, esegue uno script ogni qualvolta un torrent viene completato
script-torrent-done-filename Stringa Nome del file dello script da eseguire ogni qualvolta un torrent viene completato
seed-queue-enabled Booleano Se true, limita quanti torrent possono essere caricati contemporaneamente
seed-queue-size Numero Massimo numero di torrent da caricare contemporaneamente (vedere seed-queue-enabled)
seedRatioLimit Double Rapporto predefinito di "seed" da usare per i torrent
seedRatioLimited Booleano True se seedRatioLimit viene rispettato in maniera predefinita
speed-limit-down Numero Massima velocità globale di download (KBps)
speed-limit-down-enabled Booleano True significa attivato
speed-limit-up Numero Massima velocità globale di upload (KBps)
speed-limit-up-enabled Booleano True significa attivato
start-added-torrents Booleano True significa che i torrent appena aggiunti saranno avviati immediatamente
trash-original-torrent-files Booleano True significa che il file .torrent dei torrent appena aggiunti verrà eliminato
umask Numero Imposta la maschera di creazione dei file del  transmission (base 10). Se gli utenti vogliono che i torrent salvati siano scrivibili da chiunque, allora devono impostare questo valore a 0
upload-slots-per-torrent Numero Massimo numero di slot di upload per torrent
utp-enabled Booleano True significa permettere il UTP
watch-dir Stringa Cartella di osservazione dei file .torrent
watch-dir-enabled Booleano Se true, tiene d'occhio una cartella, se vengono aggiunti i file torrent (file .torrent) e li aggiunge automaticamente nel transmission

 

Come usare l'interfaccia web del Transmission

E' possibile accedere al daemon Transmission attraverso l'interfaccia web integrata. L'indirizzo web è "http://[indirizzo router]:[rpc port]", dove [indirizzo router] è l'indirizzo web del router, mentre [rpc port] è la porta specificata nel file di configurazione al parametro "rpc-port".
L'interfaccia web può anche modificare alcune impostazioni del Transmission in tempo reale senza dover fermare e poi riavviare il daemon Transmission daemon - da notare che solo poche impostazioni possono essere modificate, la maggior parte delle impostazioni devono essere modificate tramite il file di configurazione.


Come accedere da remoto al daemon del Transmission

E' possibile anche accedere al daemon Transmission attraverso un eseguibile a linea di comando denominato "transmission-remote" incluso in uno dei pacchetti usati per installare il Transmission. Io sconsiglio di usare la linea di comando, ci sono tanti programmi compatibili con il Transmission per tutte le piattaforme disponibili, adatti per accedere al Transmission da remoto, i quali usano una semplice interfaccia grafica per effettuare le stesse operazioni. Questi programmi inoltre permettono di modificare alcune impostazioni del Transmission in tempo reale senza fermare e riavviare il daemon del Transmission. Prendere nota dei parametri "rpc address" e "rpc port" inclusi nelle impostazioni del Transmission, poiché tutti questi programmi richiedono questi due valori allo scopo di connettersi al daemon del Transmission da remoto.
Comunque fornisco il risultato dell'eseguibile a linea di comando "transmission-remote" giusto per avere un resoconto dei suoi parametri e delle sue opzioni :

transmission-remote --help

transmission-remote 2.93 (3c5870d4f5)
A fast and easy BitTorrent client
https://transmissionbt.com/

Usage: transmission-remote [host] [options]
       transmission-remote [port] [options]
       transmission-remote [host:port] [options]
       transmission-remote [http(s?)://host:port/transmission/] [options]

See the man page for detailed explanations and many examples.

Options:
-h    --help                         Display this help page and exit
-a    --add                          Add torrent files by filename or URL
-as   --alt-speed                    Use the alternate Limits
-AS   --no-alt-speed                 Don't use the alternate Limits
-asd  --alt-speed-downlimit <speed>  max alternate download speed (in kB/s)
-asu  --alt-speed-uplimit   <speed>  max alternate upload speed (in kB/s)
-asc  --alt-speed-scheduler          Use the scheduled on/off times
-ASC  --no-alt-speed-scheduler       Don't use the scheduled on/off times
      --alt-speed-time-begin <time>  Time to start using the alt speed limits (in hhmm)
      --alt-speed-time-end   <time>  Time to stop using the alt speed limits (in hhmm)
      --alt-speed-days       <days>  Numbers for any/all days of the week - eg. "1-7"
      --blocklist-update             Blocklist update
-c    --incomplete-dir       <dir>   Where to store new torrents until they're complete
-C    --no-incomplete-dir            Don't store incomplete torrents in a 
                                     different location
-b    --debug                        Print debugging information
-d    --downlimit           <speed>  Set the max download speed in kB/s for the current 
                                     torrent(s) or globally
-D    --no-downlimit                 Disable max download speed for the current 
                                     torrent(s) or globally
-e    --cache               <size>   Set the maximum size of the session's memory 
                                     cache (in MiB)
-er   --encryption-required          Encrypt all peer connections
-ep   --encryption-preferred         Prefer encrypted peer connections
-et   --encryption-tolerated         Prefer unencrypted peer connections
      --exit                         Tell the transmission session to shut down
-f    --files                        List the current torrent(s)' files
-g    --get                 <files>  Mark files for download
-G    --no-get              <files>  Mark files for not downloading
-i    --info                         Show the current torrent(s)' details
-if   --info-files                   List the current torrent(s)' files
-ip   --info-peers                   List the current torrent(s)' peers
-ic   --info-pieces                  List the current torrent(s)' pieces
-it   --info-trackers                List the current torrent(s)'trackers
-si   --session-info                 Show the session's details
-st   --session-stats                Show the session's statistics
-l    --list                         List all torrents
      --move                <path>   Move current torrent's data to a new folder
      --find                <path>   Tell Transmission where to find a torrent's data
-m    --portmap                      Enable portmapping via NAT-PMP or UPnP
-M    --no-portmap                   Disable portmapping
-n    --auth              <user:pw>  Set username and password
-ne   --authenv                      Set authentication info from the TR_AUTH 
                                     environment variable (user:pw)
-N    --netrc               <file>   Set authentication info from a .netrc file
      --ssl                          Use SSL when talking to daemon
-o    --dht                          Enable distributed hash tables (DHT)
-O    --no-dht                       Disable distributed hash tables (DHT)
-p    --port                <port>   Port for incoming peers (Default: 51413)
-pt   --port-test                    Port testing
-P    --random-port                  Random port for incoming peers
-ph   --priority-high       <files>  Try to download these file(s) first
-pn   --priority-normal     <files>  Try to download these file(s) normally
-pl   --priority-low        <files>  Try to download these file(s) last
-Bh   --bandwidth-high               Give this torrent first chance at
                                     available bandwidth
-Bn   --bandwidth-normal             Give this torrent bandwidth left over
                                     by high priority torrents
-Bl   --bandwidth-low                Give this torrent bandwidth left over
                                     by high and normal priority torrents
      --reannounce                   Reannounce the current torrent(s)
-r    --remove                       Remove the current torrent(s)
-pr   --peers               <max>    Set the maximum number of peers for
                                     the current torrent(s) or globally
-rad  --remove-and-delete            Remove the current torrent(s) and
                                     delete local data
      --torrent-done-script <file>   Specify a script to run when a
                                     torrent finishes
      --no-torrent-done-script       Don't run a script when torrents finish
-sr   --seedratio ratio              Let the current torrent(s) seed until
                                     a specific ratio
-srd  --seedratio-default            Let the current torrent(s) use the
                                     global seedratio settings
-SR   --no-seedratio                 Let the current torrent(s) seed
                                     regardless of ratio
-gsr  --global-seedratio     ratio   All torrents, unless overridden by a
                                     per-torrent setting, should seed
                                     until a specific ratio
-GSR  --no-global-seedratio          All torrents, unless overridden by a
                                     per-torrent setting, should seed
                                     regardless of ratio
-td   --tracker-add     <tracker>    Add a tracker to a torrent
-tr   --tracker-remove  <trackerId>  Remove a tracker from a torrent
-s    --start                        Start the current torrent(s)
-S    --stop                         Stop the current torrent(s)
-t    --torrent         <torrent>    Set the current torrent(s)
      --start-paused                 Start added torrents paused
      --no-start-paused              Start added torrents unpaused
      --trash-torrent                Delete torrents after adding
      --no-trash-torrent             Do not delete torrents after adding
-hl   --honor-session                Make the current torrent(s) honor the
                                     session limits
-HL   --no-honor-session             Make the current torrent(s) not honor
                                     the session limits
-u    --uplimit          <speed>     Set the max upload speed in kB/s for
                                     the current torrent(s) or globally
-U    --no-uplimit                   Disable max upload speed for the
                                     current torrent(s) or globally
      --utp                          Enable uTP for peer connections
      --no-utp                       Disable uTP for peer connections
-v    --verify                       Verify the current torrent(s)
-V    --version                      Show version number and exit
-w    --download-dir     <path>      When used in conjunction with --add,
                                     set the new torrent's download folder.
                                     Otherwise, set the default download folder
-x    --pex                          Enable peer exchange (PEX)
-X    --no-pex                       Disable peer exchange (PEX)
-y    --lpd                          Enable local peer discovery (LPD)
-Y    --no-lpd                       Disable local peer discovery (LPD)
-pi   --peer-info                    List the current torrent(s)' peers

 

Come inviare una email quando un file Torrent viene aggiunto/completato

Transmission può inviare una email tramite uno script ogni qualvolta un file Torrent viene aggiunto o completato usando i parametri del file di configurazione i cui nomi iniziano con "script-torrent" - bisogna ricordarsi di modificare le impostazioni del Transmission se si vuole inviare una email usando uno script ogni qualvolta un file Torrent viene aggiunto e/o completato.
Per inviare una email, useremo il pacchetto Entware "msmtp", fare riferimento alla pagina "Come inviare una email tramite il router" per maggiori dettagli su questo pacchetto - noi useremo le stesse impostazioni del server SMTP per inviare una email con il Transmission.
All'interno del corpo del messaggio email, possiamo usare alcune variabili interne del Transmission.
E' possibile trovare maggiori dettagli circa gli script del Transmission su questa pagina web.
Ciò che segue è un semplice script il quale invia una email ogni qualvolta il Transmission finisce di scaricare un file Torrent :

#!/bin/sh

msmtp -v -t << EOF
From: [myemail]@hotmail.com
Subject: Router - torrent completed
To: to_address@domain.xxx

Transmission finished downloading :

Torrent Name : "$TR_TORRENT_NAME" .
Local Time : "$TR_TIME_LOCALTIME" .
Torrent Dir : "$TR_TORRENT_DIR" .
Torrent Hash : "$TR_TORRENT_HASH" .
Torrent ID : "$TR_TORRENT_ID" .
App Version : "$TR_APP_VERSION" .

EOF

exit 0