Demone di trasmissione su OpenVPN


20

Di recente ho acquistato un BeagleBone Black, sul quale ho installato Ubuntu con questo metodo . Finora ha funzionato tutto. Voglio usare il mio BeagleBone come un torrent box, ma non voglio farlo direttamente tramite la mia connessione Internet (non credo che piacerà al mio ISP) - quindi ho acquistato un abbonamento VPN da un server europeo . Ho collegato manualmente il mio laptop a questa VPN prima e ho eseguito la trasmissione. So che la connessione VPN funziona in Ubuntu e l'host fornisce informazioni sulla configurazione di OpenVPN. Stranamente, la natura dinamica dell'indirizzo IP assegnato significa che cambierebbe frequentemente, quindi quando ho usato il mio laptop con la VPN avrei impostato manualmente l'indirizzo di ascolto in Trasmissione sul valore richiesto.

Idealmente mi piacerebbe la seguente configurazione:

  • La trasmissione viene eseguita solo tramite VPN ed è vietato eseguire torrent tramite la normale connessione WAN
  • Solo il traffico diretto alla trasmissione sarà accettato o inviato attraverso la VPN, tutto il traffico non richiesto verrà eliminato
  • La trasmissione utilizza la porta appropriata per l'ascolto, in base all'indirizzo IP assegnato
  • OpenVPN si avvia automaticamente all'avvio, che successivamente avvia la trasmissione
  • È possibile accedere alla GUI Web della trasmissione sulla LAN e, eventualmente, su Internet dalla mia connessione WAN (ovvero non tramite la VPN)

3
Le risposte a se stesse non sono male. Non scusarti per loro. Inoltre non devi spiegare che è quello che stai facendo ... È un comportamento incoraggiato
RobotHumans,

Concordato con @hbdgaf. Non c'è bisogno di scusarsi. Ottimo lavoro su tutti i fronti.
Jake:

Risposte:


23

Nota: (22-02-2016) Mi sono reso conto che questa configurazione perde le query DNS ai tracker torrent attraverso la normale WAN, invece di inviarlo tramite la VPN. Sto studiando come risolvere questo problema. Continuerò a eseguire la mia configurazione, poiché la connessione stessa utilizza correttamente la VPN.


Aggiornamento: ho notato che quando ho impostato Trasmissione per il download durante la notte sul Beaglebone, l'utilizzo della CPU dopo un po 'passa al 100%. Non sembra succedere dopo lo stesso lasso di tempo, a volte va bene per tutta la notte, altre volte fatica dopo 10 minuti. Può anche recuperare mettendo in pausa tutti i torrent e aspettando che il carico della CPU torni alla normalità, quindi ricominciando. Sto ancora indagando. Una soluzione alternativa potrebbe essere quella di mettere in pausa e riprendere periodicamente i torrent, sebbene non sia un'ottima soluzione. Nota che questo problema si applica solo al Beaglebone e probabilmente ad altri dispositivi ARM. Non ho mai avuto questo problema su una CPU x86.


introduzione

Ho sviluppato e testato questa soluzione per Ubuntu 14.04, in esecuzione su un BeagleBone Black. Il provider VPN che sto usando si chiama ibVPN . Dovrebbe funzionare con qualsiasi hardware supportato (ovvero su un computer x86 "normale"), con qualsiasi provider VPN compatibile OpenVPN - e probabilmente dovrebbe funzionare per 14.10 o versioni successive. Ad un certo punto credo che Ubuntu utilizzerà SystemD per l'avvio, il che significa che gli script Upstart utilizzati qui dovranno essere migrati. Aggiornamento: Jonas Kalderstam ha una risposta qui sotto per l'utilizzo di SystemD. Suppongo anche che ufw sia usato come firewall, se stai usando qualcosa di diverso, i comandi ufw qui dovranno essere cambiati.

Presumo che tutto il lavoro è fatto tramite una connessione SSH al sistema, anche se sarebbe funzionare altrettanto bene se digitato fuori in un terminale fisico.

Questo è un tutorial piuttosto lungo, leggi prima tutto e assicurati di essere a tuo agio con quello che farai.

Ho anche notato che la trasmissione non si lega correttamente a un indirizzo IP per l'invio di dati UPnP / NAT-PMP - vale a dire che i dati torrent passano correttamente attraverso la VPN, ma se il port forwarding UPnP è abilitato, la trasmissione richiederà il port forwarding dal router locale , non tramite la VPN dal server VPN. Quindi ho fatto in modo che lo script Upstart disabilitasse il port forwarding, poiché potrebbe apparire come se avesse funzionato, ma non è così. Dovrebbe essere possibile utilizzare iptables e iproute per forzare tutto il traffico dell'utente di trasmissione debian attraverso la VPN, ma sto ancora esaminando questo. Dovrebbe funzionare anche se il percorso predefinito è stato modificato per inviare tutti i dati Internet tramite la VPN, ma non volevo farlo perché uso questo server anche per altre cose, e questo causerebbe anche il passaggio di tutti gli aggiornamenti di sistema attraverso VPN.Questa domanda contiene ulteriori informazioni se si desidera davvero far funzionare UPnP sulla VPN . Aggiornamento: falk0069 ha un fantastico suggerimento qui sotto per aiutare a incoraggiare UPnP tramite VPN.

Installazione e configurazione di OpenVPN

Ti consiglierei di provare a far funzionare la tua connessione VPN usando Ubuntu prima di provare a farla funzionare qui, ad esempio da un desktop. Ciò confermerà la corretta configurazione e ridurrà il tempo dedicato al debug.

Innanzitutto, installa i pacchetti richiesti

sudo apt-get install openvpn

Quindi, crea una directory in cui archiviare i file di configurazione. Sto usando / opt / ibVPN, dato che è il provider che sto usando. Cambialo come preferisci.

sudo mkdir /opt/ibVPN

La prima cosa da fare in questa nuova directory è creare il file di configurazione per eseguire il client VPN. ibVPN fornisce un file di configurazione di base per gli utenti Linux, che ho appena copiato e incollato.

cd /opt/ibVPN
sudo vim config.ovpn

Copia e incolla la versione modificata in vim, utilizzando le impostazioni per il tuo provider VPN. (Cordiali saluti, incolla nel terminale Ubuntu è Ctrl+Shift+V) Dovresti essere in grado di ottenerlo dal tuo provider VPN.

remote 888.888.888.888 1194 udp      #This address will be different for you
client
dev tap1
resolv-retry infinite
script-security 3 system
explicit-exit-notify 3
persist-key
mute-replay-warnings
ca ibvpn.com.crt
comp-lzo
verb 3
mute 20
ns-cert-type server
fragment 1300
route-delay 2
reneg-sec 0
max-routes 5000
link-mtu 1578

auth-user-pass pass
auth-nocache
persist-tun
route-noexec
lport 1195
lladdr 00:FF:11:AA:BB:CC
route-up "/opt/home/openvpn/route-up.sh"
down "/opt/home/openvpn/down.sh"

Per chi non ha familiarità con vim, premere Insert per digitare o incollare il testo, quindi premere Escape e digitare :wq per salvare ed uscire. Ovviamente, non devi usare vim: qualsiasi editor di testo funzionerà.

Spiegherò rapidamente questo file di configurazione: le prime 18 righe specificano le impostazioni specifiche da utilizzare con il server, queste provengono da ibVPN - le tue probabilmente saranno leggermente diverse se hai un provider diverso. Le righe successive sono opzioni modificate che ho specificato.

  • Se il tuo file delle impostazioni aveva delle righe auth-user*, commentale. Perché questa configurazione funzioni automaticamente, dobbiamo avere un file con nome utente e password al suo interno, quindi assicurati che la password che hai scelto per il provider VPN sia forte, casuale e unica.

  • La auth-user-pass passdice OpenVPN per cercare un file chiamato passper leggere l'utente e la password.

  • auth-nocache rimuove la password dalla memoria, il che potrebbe aumentare leggermente la sicurezza se sei preoccupato.

  • persist-tun proverà a mantenere lo stesso indirizzo IP dal server se la connessione si interrompe, il che dovrebbe significare meno avvio e arresto del daemon di trasmissione.

  • route-noexecdice al client OpenVPN di non utilizzare automaticamente le rotte fornite dal server, il che porterebbe tutto il traffico di rete sulla VPN. Vogliamo solo inviare traffico torrent, quindi dovremo utilizzare diverse impostazioni di routing.

  • lport 1195 dice al client OpenVPN di usare la porta 1195 invece di 1194 - nel mio caso voglio anche eseguire un server OpenVPN sullo stesso dispositivo e il server dovrà usare la porta 1194. Anche se non si esegue un server OpenVPN, non fa male fare questo cambiamento.

  • Ho cambiato la linea dev tapin dev tap1, per forzare il dispositivo virtuale ad essere tap1 invece di essere assegnato da OpenVPN, sempre a causa dell'esecuzione di un server OpenVPN separato. Anche se non stai utilizzando un server VPN, questa modifica non dovrebbe avere importanza. Gli script del firewall sono stati scritti per l'uso tap1, quindi se si preferisce utilizzare un altro dispositivo, ricordarsi di modificarli laddove appropriato.

  • lladdr 00:FF:11:AA:BB:CC dice a OpenVPN di assegnare all'interfaccia di tocco questo indirizzo MAC, che può essere utile per le regole del firewall di iptables.

  • route-uped downeseguire gli script per avviare e arrestare il demone di trasmissione come richiesto: sono necessari qui perché vengono eseguiti con variabili di ambiente contenenti informazioni sulla connessione, necessarie per associare correttamente la trasmissione all'indirizzo IP e alla porta corretti.

Nel mio caso, avevo un certificato server dal provider VPN, che deve anche trovarsi nella stessa directory del file di configurazione.

sudo vim /opt/ibVPN/ibvpn.com.crt

Copia e incolla questo o spostalo tramite SCP o SSHFS.

-----BEGIN CERTIFICATE-----
MIIDeDCCAuGgAwIBAgIJAMVKgpjMPUfxMA0GCSqGSIb3DQEBBQUAMIGFMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCQ0ExFTATBgNVBAcTDFNhbkZyYW5jaXNjbzEVMBMG
A1UEChMMRm9ydC1GdW5zdG9uMRgwFgYDVQQDEw9Gb3J0LUZ1bnN0b24gQ0ExITAf
BgkqhkiG9w0BCQEWEm1lQG15aG9zdC5teWRvbWFpbjAeFw0xMDA3MjExOTU5MzVa
Fw0yMDA3MTgxOTU5MzVaMIGFMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFTAT
BgNVBAcTDFNhbkZyYW5jaXNjbzEVMBMGA1UEChMMRm9ydC1GdW5zdG9uMRgwFgYD
VQQDEw9Gb3J0LUZ1bnN0b24gQ0ExITAfBgkqhkiG9w0BCQEWEm1lQG15aG9zdC5t
eWRvbWFpbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz23m3BXY5Asiw8Dx
T4F6feqsp+pIx6ivftTniyUCbSAxI1J1s1x75DzxmUpIwPu5xavzgPXgZr8FT81X
JGqF9km4AE95iddJawKx0wNgdTo7GximQq9rw0dsQIB5hZZQ9TJwHC3VOnmEic5A
OawKOCybMcRs8saLakZOgh7Xc+UCAwEAAaOB7TCB6jAdBgNVHQ4EFgQUeRhE2N4l
XwL4H1dbjkZ4ou6fj3AwgboGA1UdIwSBsjCBr4AUeRhE2N4lXwL4H1dbjkZ4ou6f
j3ChgYukgYgwgYUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEVMBMGA1UEBxMM
U2FuRnJhbmNpc2NvMRUwEwYDVQQKEwxGb3J0LUZ1bnN0b24xGDAWBgNVBAMTD0Zv
cnQtRnVuc3RvbiBDQTEhMB8GCSqGSIb3DQEJARYSbWVAbXlob3N0Lm15ZG9tYWlu
ggkAxUqCmMw9R/EwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQASt0pl
WzVseQLTNM8Mlgw4ZnGAv/x2xnijmMqrkE+F7pnaOicGpxgCfMKzjZuJu0TNJqF2
fibE7GhMdomD4dLFgIu8Wb5E7iQ1CSBEOGumRhK8qCsDzjr7WXUdhqA6Xvo+ylU6
DMzy0Wn3NNvfGC+qxOgybYCJwDnVPi0CEDSbzQ==
-----END CERTIFICATE-----

Ovviamente se non si utilizza un account ibVPN, il certificato sarà diverso.

Ora facciamo il file della password:

sudo vim /opt/ibVPN/pass

La prima riga deve essere il nome utente completo, quindi la seconda riga deve essere la password. Questo deve essere l'unico contenuto di questo file.

you@address.com
myBIGstrongpassword1234567890

Dobbiamo anche proteggere le autorizzazioni su questo file, altrimenti OpenVPN non si avvierà.

sudo chmod 400 pass

Questo renderà il file di sola lettura e solo per il proprietario (ovvero nessun altro utente può leggerlo)

Questi comandi creeranno i file da eseguire all'avvio e li imposteranno come eseguibili solo da root.

sudo touch route-up.sh
sudo touch down.sh
sudo chmod 700 route-up.sh
sudo chmod 700 down.sh

A questo punto, è probabilmente una buona idea verificare se la connessione VPN funziona davvero. Inizia la connessione con:

sudo openvpn --cd /opt/ibVPN --config config.ovpn

Vedrai degli avvertimenti che i comandi esterni su e giù non possono essere eseguiti, ma non preoccuparti. Se funziona, vedrai Initialization Sequence Completedsul terminale. Premere Control+Cper terminare la connessione. Se non funziona, dovrai indagare sul perché no e risolverlo prima di continuare. Ho scoperto che a volte ci sono voluti alcuni tentativi per iniziare a lavorare. Assicurarsi che il file della password sia corretto. Ci sono molte grandi risorse su Internet su OpenVPN, quindi dai un'occhiata in giro.

A questo punto, è probabilmente più semplice passare alla messa in funzione della trasmissione. Una volta che sei sicuro che sia la VPN che la trasmissione possono essere eseguite separatamente, possono essere combinate.

Installazione e configurazione della trasmissione

Installa i pacchetti richiesti:

sudo apt-get install transmission-daemon

Per impostazione predefinita, la trasmissione verrà eseguita automaticamente all'avvio. Poiché alla fine utilizzeremo OpenVPN per avviare la trasmissione, vogliamo disabilitarlo. Per fare ciò, modifica il file di configurazione per Transmission-daemon

sudo vim /etc/default/transmission-daemon

E modificare la seguente riga per leggere:

ENABLE_DAEMON=0

Ora la trasmissione non si avvia all'avvio.

Ora creiamo una directory in cui risiedano le impostazioni di Trasmissione e in cui inserire i torrent scaricati. Ciò presuppone che tu abbia già impostato un disco di qualche tipo, ed è montato su / media / arm-disk /. Per motivi di sicurezza, il demone verrà eseguito dal proprio utente anziché come root o "ubuntu". Un nuovo utente viene creato dall'installer per trasmissione-demone, "debian-trasmissione". Questo utente deve possedere la cartella che creiamo e avere accesso in lettura e scrittura al percorso di archiviazione per i torrent scaricati.

sudo mkdir /opt/transmission
sudo chown debian-transmission:debian-transmission /opt/transmission
sudo mkdir /media/arm-disk/torrents-complete
sudo chown debian-transmission:debian-transmission /media/arm-disk/torrents-complete
sudo mkdir /media/arm-disk/torrents-incomplete
sudo chown debian-transmission:debian-transmission /media/arm-disk/torrents-incomplete

Ora dobbiamo iniziare la trasmissione, solo brevemente, in modo che crei il file delle impostazioni di cui abbiamo bisogno:

sudo -u debian-transmission -g debian-transmission /usr/bin/transmission-daemon --config-dir /opt/transmission --foreground

Questo comando avvia broadcast-daemon come utente debian-transmission, gli dice di usare la directory / opt / transmission per i file delle impostazioni e gli dice di continuare a funzionare in primo piano. Una volta che è stato eseguito per alcuni secondi, premere Control+Cper terminarlo. Ora possiamo modificare il file delle impostazioni.

sudo -u debian-transmission vim /opt/transmission/settings.json

Ora dobbiamo passare alle seguenti righe dai loro valori predefiniti per leggere:

"download-dir": "/media/arm-disk/torrents-complete",

"incomplete-dir": "/media/arm-disk/torrents-incomplete",

"incomplete-dir-enabled": true,

"rpc-whitelist": "127.0.0.1,192.168.1.*",

Salva ed esci (Esci, digita: wq e premi Invio)

Le due modifiche centrali consentiranno l'uso della directory "incompleta", separando i tuoi torrent finiti da quelli incompiuti. Questo non è del tutto necessario, ma personalmente lo trovo estremamente utile. L'ultima modifica consente l'accesso alla GUI Web da qualsiasi computer sulla LAN (supponendo che la sottorete LAN sia 192.168.1.0, modificarla se è diversa).

Ora è una buona idea eseguire nuovamente Transmission, per vedere se funziona e può effettivamente scaricare un torrent. Useremo una finestra del browser Web per accedere alla GUI e per aggiungere un torrent. Innanzitutto, consentiamo l'accesso alla GUI Web attraverso il firewall dalla LAN, quindi eseguiamo nuovamente il daemon di trasmissione.

sudo ufw allow in from 192.168.0.0/16 to any port 9091
sudo -u debian-transmission -g debian-transmission /usr/bin/transmission-daemon --config-dir /opt/transmission --foreground

Visita questo URL in Firefox (o in qualsiasi browser tu preferisca): http://XXX.XXX.XXX.XXX:9091 , dove XXX viene sostituito dall'indirizzo del tuo server sulla LAN (ovvero 192.168.1.10). Trova un torrent da scaricare, ad esempio Big Buck Bunny a 1080p60hz. Questo è un cortometraggio gratuito, legalmente disponibile per il download gratuito. Nella GUI di trasmissione, fai clic sul pulsante "Apri torrent" e incolla questo link (o qualsiasi altro torrent che ti piace) nella prima casella. Quindi premere "Carica". Se la trasmissione funziona correttamente, il torrent inizierà a scaricare. In caso contrario, dovrai capire perché prima di continuare. Ci sono molte risorse disponibili su Internet per usare il daemon di trasmissione. Potrebbe anche essere il torrent che hai scelto non funziona, provane alcuni altri prima.

Al termine del download, premere Control+Cnella finestra del terminale per interrompere il daemon di trasmissione.

Configurare la trasmissione vincolante all'interfaccia VPN

Ora creiamo uno script Upstart, che verrà utilizzato per avviare la trasmissione quando la VPN è pronta.

sudo mv /etc/init/transmission-daemon.conf /etc/init/transmission-daemon.conf.bak

Non preoccuparti se questo si lamenta, è solo per fare un backup del file Upstart, se ne esiste uno - potrebbe non esserlo. Apriamo vim per modificare quello nuovo:

sudo vim /etc/init/transmission-daemon.conf

Incollalo nell'editor:

description "transmission-daemon, attached to OpenVPN tunnel tap1"

start on transmission-daemon-start
stop on runlevel [!2345] or transmission-vpn-down

# This includes the information from OpenVPN into this environment

export LOCAL_IP
env PORT=51413

# give time to send info to trackers
kill timeout 30

# Run as unprivileged user
setuid debian-transmission
setgid debian-transmission

# Start transmission again if it stops for some reason
respawn
# If transmission stops 5 times in a minute, give up trying to respawn it
respawn limit 5 60

exec /usr/bin/nice -15 /usr/bin/transmission-daemon --config-dir /opt/transmission --bind-address-ipv4 $LOCAL_IP --peerport $PORT --no-portmap --foreground

Salva e chiudi vim. ( Escape, quindi digitare :wq). Ancora una volta, apri vim:

sudo vim /etc/init/transmission-up.conf

E incolla questo:

description "Script to create firewall and routing rules for transmission-daemon"

start on transmission-vpn-up

# This includes the information from OpenVPN into this environment
export VPN_GATEWAY
export LOCAL_IP
env PORT=51413

task

script
    # Set up IP route, firewall rules
    # It doesn't matter if they already exist, they will be skipped
    /sbin/ip route add default via $VPN_GATEWAY dev tap1 table 200
    /sbin/ip rule add from $LOCAL_IP table 200
    /sbin/ip route flush cache
    /usr/sbin/ufw insert 1 reject out on eth0 from any port $PORT
    /usr/sbin/ufw insert 1 reject in on eth0 to any port $PORT
    /usr/sbin/ufw insert 1 deny in on tap1 to any
    /usr/sbin/ufw insert 1 allow in on tap1 to any port $PORT proto udp

    # Start the actual transmission-daemon process, in a separate task so that unprivileged user/group can be set
    /sbin/initctl emit transmission-daemon-start LOCAL_IP=$LOCAL_IP

end script

Ancora una volta, salva e chiudi vim. ( Escape, quindi digitare :wq). Infine:

sudo vim /etc/init/transmission-down.conf

Incolla questo:

description "Script to remove firewall rules for transmission-daemon"

start on runlevel [!2345] or stopping openvpn-transmission
env PORT=51413

task

script
    # Take down IP route, firewall rules
    # It doesn't really matter if they don't get taken down, but this will be cleaner
    /usr/sbin/ufw delete reject out on eth0 from any port $PORT
    /usr/sbin/ufw delete reject in on eth0 to any port $PORT
    /usr/sbin/ufw delete deny in on tap1 to any
    /usr/sbin/ufw delete allow in on tap1 to any port $PORT proto udp

    /sbin/ip route flush cache

end script

Questi script dicono a Upstart di ascoltare il segnale "transmission-vpn-up". Lo script "transmission-up.conf" imposta quindi le regole di routing richieste per inviare il traffico dall'indirizzo VPN locale tramite l'interfaccia VPN e imposta il firewall per consentire il traffico dalla VPN alla porta di ascolto per la trasmissione. Il traffico diretto alla porta di ascolto della trasmissione dalla normale interfaccia LAN è bloccato. Lo script "transmission-daemon.conf" avvia quindi broadcast-daemon con le impostazioni necessarie per collegarlo all'indirizzo IP VPN. Nota che questo comando assicurerà anche che UPnP / NAT-PMP sia disabilitato - vedi la mia nota in alto sul port forwarding. Il "simpatico -15" imposta la trasmissione su una priorità più bassa, che ho trovato utile quando ho usato BeagleBone con specifiche inferiori: a volte la trasmissione può contenere risorse, che rallenta il sistema. Almeno con una priorità bassa, è ancora possibile eseguire attività di sistema più importanti. Lo script "transmission-down.conf" rimuoverà le regole del firewall quando la VPN viene arrestata. Vengono utilizzati tre diversi script in modo che il daemon di trasmissione possa essere eseguito come utente non privilegiato, ma le regole del firewall possono essere eseguite come root.

Ora torniamo alle impostazioni di OpenVPN e modificiamo gli script "route-up" e "down" per avviare e interrompere il nostro script di trasmissione.

sudo vim /opt/ibVPN/route-up.sh

Incollalo in vim:

#! /bin/bash

/sbin/initctl emit transmission-vpn-up VPN_GATEWAY=$route_vpn_gateway LOCAL_IP=$ifconfig_local

Tutto ciò che fa questo script è dire a Upstart che il daemon di trasmissione dovrebbe avviarsi e gli fornisce le informazioni necessarie per collegarsi alla connessione VPN.

sudo vim /opt/ibVPN/down.sh

Ancora una volta, più incollando:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

Questo script è ancora più semplice: segnala l'arresto del daemon di trasmissione.

A questo punto, è probabilmente una buona idea assicurarsi che il proprietario dell'intera cartella di configurazione VPN sia l'utente root - poiché questi script vengono eseguiti come root, chiunque possa modificarli può eseguire qualsiasi cosa desiderino come utente root.

sudo chown root:root -R /opt/ibVPN
sudo chmod 700 -R /opt/ibVPN
sudo chmod 400 /opt/ibVPN/pass

Questo ora significa che solo l'utente root può modificare o visualizzare le impostazioni della connessione VPN.

OK, abbiamo quasi finito! Testiamo se la nostra configurazione funziona finora:

sudo openvpn --cd /opt/ibVPN --config config.ovpn

Connettersi nuovamente alla GUI Web di trasmissione e riprendere il torrent esistente o aggiungerne uno nuovo. Dovrebbe essere in grado di scaricare, forse dopo alcuni minuti di attesa di colleghi. Un modo ingegnoso che ho scoperto di testare se funziona o meno è guardare iftop. Installa iftop ed esegui:

sudo apt-get install iftop
sudo iftop -i tap1

Questa schermata mostrerà tutte le connessioni in esecuzione attraverso la VPN. Se il tuo torrent sta scaricando e sta usando correttamente la VPN, qui ci saranno molti indirizzi IP e nomi host. Guarda anche iftop per la connessione LAN:

sudo iftop -i eth0

Qui dovresti vedere una grande quantità di traffico verso un singolo indirizzo IP, che è il server VPN, e quindi solo un traffico minimo verso altri dispositivi LAN, supponendo che non stai eseguendo altri servizi su BeagleBone.

Puoi confermare che la VPN funziona seguendo queste istruzioni .
Questo sito ti consente di scaricare un torrent per vedere l'indirizzo IP che altri peer usano per connettersi a te - se tutto funziona, sarà l'indirizzo IP VPN e non il tuo indirizzo IP WAN.

Se si verificano problemi, è possibile visualizzare il registro degli errori Upstart procedendo nel seguente modo:

sudo tail -f /var/log/upstart/transmission-daemon.log

In una finestra terminale / SSH separata, provare a eseguire il comando tail mentre si avvia la connessione VPN come sopra e cercare eventuali messaggi di errore. Spero che tu possa risolvere il problema vedendo i messaggi di errore, se non hai uno scavo su Internet, o pubblicare un commento.

Configura tutto per l'avvio automatico

Se sei soddisfatto di emettere manualmente il comando per avviare il tunnel OpenVPN, o vuoi farlo con il tuo script, allora hai finito. Ma volevo che fosse avviato all'avvio, quindi ho creato un altro script Upstart per avviare OpenVPN.

sudo vim /etc/init/openvpn-transmission.conf

Questa è l'ultima cosa che dobbiamo incollare!

description "OpenVPN client, with attached transmission-daemon"

start on started networking
stop on runlevel [!2345] or stopped networking

# Give time for Transmission to send info to trackers, wait for graceful close
kill timeout 45

# Start the OpenVPN tunnel again if it stops for some reason
respawn
# If it stops 5 times in a minute, give up trying to respawn it
respawn limit 5 60


exec openvpn --cd /opt/ibVPN --config config.ovpn

post-stop script
    # Pause for a few seconds, before exiting
    /bin/sleep 3s
end script

Tutto ciò che fa è attendere che il sistema segnali che la rete è pronta, quindi avvierà il tunnel OpenVPN - che a sua volta avvierà la trasmissione. Quando il sistema viene spento o se la rete viene chiusa per qualche motivo, Upstart rimuoverà le regole del firewall e chiuderà il demone di trasmissione. Semplice! Questo continuerà a funzionare anche dopo un riavvio, quindi ora sei pronto.

Per interagire con la trasmissione, utilizzare la GUI Web come abbiamo fatto durante la fase di installazione. È anche possibile rendere la GUI accessibile su Internet, impostando il port forwarding. Ci sono molti tutorial su come farlo, quindi non lo ripeterò qui.

Per quanto riguarda il download completo di BeagleBone, sto usando NFS. Posso ottenere una velocità di circa 8 MB / s copiando sulla LAN dal BeagleBone al mio computer desktop, il che è abbastanza buono per un dispositivo così a basso consumo. Ubuntu fornisce alcune informazioni utili per l'impostazione.


Wow! Quanto tempo hai trascorso alla ricerca di tutte queste cose?
Ismael Miguel,

Ah, un bel po '. L'avevo già fatto una volta su un router DD-WRT, poi quando lo stavo facendo di nuovo per BeagleBone pensavo di scriverlo, quindi non dimentico come farlo. : D
seanlano,

1
Dovresti anche leggere questo: unix.stackexchange.com/questions/88693/… (È un'ottima risposta.) Questo ti aiuterà, ne sono sicuro.
Ismael Miguel,

3
Ho appena realizzato, dopo aver impostato il mio server DNS per utilizzare OpenDNS e aver consultato le statistiche, che questa configurazione perde il DNS attraverso la normale connessione WAN . Esaminerò ulteriormente per vedere se posso risolvere questo problema. Continuerò comunque, poiché la connessione stessa avviene tramite VPN - ma non è l'ideale.
seanlano,

1
@seanlano Grazie per averlo segnalato alla nostra attenzione. Facci sapere se / quando trovi una soluzione.
Winterflags

7

Ho appena funzionato usando SystemD, quindi ho pensato di condividere. Ho inserito tutti i miei script, configurazioni e certificati nella stessa directory a cui farò riferimento/etc/openvpn/myprovider

Config OpenVPN

Questo dipende dalla tua VPN specifica, ma una differenza dalla configurazione di @seanlano è che uso solo uno route-upscript. Quindi le cose di cui hai bisogno oltre alla configurazione fornita dal tuo lavoro sono queste linee:

route-noexec
route-up "/etc/openvpn/myprovider/transmission-route-up.sh"

Dove collochi la transmission-route-up.shsceneggiatura dove vuoi. Nota l'assenza di uno downscript. (La mia VPN stava già utilizzando uno script down personalizzato, quindi sarebbe comunque in conflitto).

/etc/openvpn/myprovider/transmission-route-up.sh:

#!/bin/sh

# Print environment variables for transmission's benefit
printenv > /etc/openvpn/myprovider/vpn.env


# Set up VPN routes
ip route add default via $route_vpn_gateway dev $dev table 10

ip rule add from $ifconfig_local/32 table 10
ip rule add to $route_vpn_gateway/32 table 10

ip route flush cache


# Add firewall rules
iptables -A INPUT -i $dev -p udp --dport 24328 -j ACCEPT
iptables -A INPUT -i $dev -p tcp --dport 24328 -j ACCEPT

iptables -A OUTPUT -o $dev -p udp --sport 24328 -j ACCEPT
iptables -A OUTPUT -o $dev -p tcp --sport 24328 -j ACCEPT

La prima riga, la printenv, è importante. Posizionalo dove preferisci, verrà utilizzato in seguito nel servizio SystemD. Lo inserisco nella stessa directory della mia configurazione VPN.

Sostituisci 24328 con qualunque porta il tuo demone di trasmissione dovrebbe ascoltare. Uso iptables (usando Debian), quindi probabilmente puoi sostituire quelle righe con le linee ufw dalla configurazione di @seanlano.

Servizio VPN SystemD

Questo è il servizio che avvia automaticamente la VPN per noi. Verifica che il percorso di openvpn sia corretto sul tuo computer e che anche il percorso del file di configurazione sia corretto. È necessario specificare percorsi completi nei servizi SystemD.

/etc/systemd/system/my-vpn.service:

[Unit]
Description=VPN connection
After=network.target

[Service]
Type=forking
PIDFile=/var/run/openvpn/vpn.pid
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/myprovider --config /etc/openvpn/myprovider/myconfig.ovpn --daemon --writepid /var/run/openvpn/vpn.pid

[Install]
WantedBy=multi-user.target

Abilita il servizio VPN con:

systemctl enable my-vpn.service

E testalo con:

systemctl start my-vpn.service
systemctl status my-vpn.service

Se è avviato / in esecuzione, sei a posto.

SystemD transmission-daemon.service

Questo script richiede il servizio vpn, quindi se vpn scende, anche il daemon di trasmissione diminuisce. Ciò è utile se la VPN viene riavviata e si ottiene un nuovo indirizzo IP, poiché la trasmissione dovrà essere riavviata e ricollegata, che dovrebbe essere gestita automaticamente. Si noti che utilizziamo le variabili di ambiente stampate in route-upprecedenza nello script.

/etc/systemd/system/transmission-daemon.service:

[Unit]
Description=Transmission BitTorrent Daemon Under VPN
After=network.target my-vpn.service
Requires=my-vpn.service

[Service]
User=debian-transmission
Type=notify
EnvironmentFile=/etc/openvpn/vpn.env
ExecStart=/usr/bin/transmission-daemon -f --log-error --bind-address-ipv4 $ifconfig_local --rpc-bind-address 0.0.0.0 --no-portmap
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target

Abilitalo

systemctl enable transmission-daemon.service

E avviarlo

systemctl start transmission-daemon.service

Al riavvio, dovrebbe avviarsi automaticamente (nell'ordine!). Si noti che l'utilizzo Type=simplenel servizio VPN provoca alcuni problemi per i tempi di ordinamento degli script, quindi si consiglia di utilizzare forkinginvece.

È possibile specificare un indirizzo IP effettivo per rpc-bind-addressse si desidera essere più restrittivi (questo è l'indirizzo di ascolto della GUI Web, che non dovrebbe essere il proprio IP VPN). E se vuoi eseguire la trasmissione con nice, basta cambiare la ExecStartlinea e aggiungere /usr/bin/nice -n15all'inizio.

Gestione delle modifiche dell'indirizzo

Una cosa che ho notato nel tempo è che se la connessione VPN per qualche motivo ottiene un nuovo indirizzo IP, la trasmissione sarà comunque legata al vecchio indirizzo e smetterà di funzionare. E semplicemente fare systemctl restart transmission-daemon.servicenon lo taglia. Deve fermarsi completamente, quindi ricominciare da capo.

Non ho idea del perché, ma per questo motivo ho aggiunto le seguenti righe al mio crontab root ( sudo crontab -e):

# m h  dom mon dow   command
0 6 * * * /bin/systemctl stop my-vpn.service; /bin/systemctl start my-vpn.service
1 6 * * * /bin/systemctl stop transmission-daemon.service; /bin/systemctl start transmission-daemon.service

Solo per interesse, funziona anche su un BeagleBone? In tal caso, riscontri problemi di prestazioni con la trasmissione? Inoltre, ottima scrittura. :)
seanlano,

Ah no. Funziona sulla mia normale macchina desktop e non ho notato problemi.
Jonas Kalderstam,

Giusto. Funziona bene per me su una macchina Intel, speravo di poter realizzare una scatola torrent economica con un processore ARM - ma a quanto pare non lo è.
seanlano,

Dai un'occhiata a rtorrent. È molto performante
Jonas Kalderstam

Grazie lo farò. Altre cose funzionano bene sulla scatola ARM, quindi forse rtorrent funzionerà correttamente.
seanlano,

3

Ho notato che hai detto che la trasmissione non passa attraverso la VPN per UPnP / NAT-PMP. Ho notato anche questo e ho creato una patch per la trasmissione in modo da onorare l'impostazione bind-address-ipv4 per UPnP. NAT-PMP è un po 'più difficile da implementare poiché è necessario determinare il gateway predefinito. UPnP è il principale che viene utilizzato in questi giorni, tuttavia, quindi è probabilmente abbastanza buono. Ho registrato questo come bug sul sito trac.transmissionbt e ho fornito la patch. Spero che sarà incorporato in una versione futura. https://trac.transmissionbt.com/ticket/5990

Un'altra opzione per ora, se non si desidera ricompilare, è eseguire manualmente upnpc dal pacchetto miniupnpc. Per esempio

sudo apt-get install miniupnpc
upnpc -m 10.10.10.51 -a 10.10.10.51 51515 51515 TCP
upnpc -m 10.10.10.51 -a 10.10.10.51 51515 51515 UDP

Dove 10.10.10.51 è l'IP VPN e 51515 è la porta TCP / UDP richiesta.

Non sono sicuro di quanto duri l'inoltro. Inoltre potresti voler usare l'opzione '-d' per rimuovere la tua porta quando ti disconnetti. Ho scoperto che se non lo faccio, non riesco a ottenere di nuovo la stessa porta se accedo nuovamente alla VPN.

Saluti


Ho passato anni cercando di trovare una soluzione come questa, vorrei averlo trovato miniupnpc! E si spera che la patch venga unita e questo problema verrà risolto per sempre. Nel frattempo cercherò sicuramente di usare il tuo pratico consiglio.
seanlano,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.