Trasmissione daemon su OpenVPN

17

Recentemente ho acquisito un BeagleBone Black, sul quale ho installato Ubuntu utilizzando questo metodo . Ha funzionato tutto finora. Voglio usare il mio BeagleBone come un torrent box, ma non voglio farlo direttamente sulla 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 portatile a questa VPN prima e la trasmissione di esecuzione. So che la connessione VPN funziona su Ubuntu e l'host fornisce informazioni di configurazione per OpenVPN. Fastidiosamente, la natura dinamica dell'indirizzo IP assegnato significa che cambierebbe frequentemente, quindi quando usavo il mio portatile con la VPN avrei impostato manualmente l'indirizzo di ascolto nella Trasmissione al valore richiesto.

Idealmente mi piacerebbe la seguente configurazione:

  • La trasmissione viene eseguita solo attraverso la VPN ed è vietato eseguire i torrent sulla normale connessione WAN
  • Solo il traffico diretto alla trasmissione sarà accettato o inviato tramite la VPN, tutti gli altri 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 tramite LAN e, eventualmente, tramite Internet dalla connessione WAN (ad esempio, non tramite la VPN)
posta seanlano 10.02.2015 - 06:45

3 risposte

21

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

Aggiornamento: Ho notato che quando imposto Trasmissione per scaricare durante la notte sul Beaglebone, l'utilizzo della CPU arriva al 100% dopo un po '. Non sembra accadere dopo la stessa quantità di tempo, a volte va bene tutta la notte, altre volte fa fatica dopo 10 minuti. Può anche recuperare mettendo in pausa tutti i torrent e aspettando che il carico della CPU ritorni alla normalità, quindi ricomincia. Sto ancora indagando. Una soluzione alternativa potrebbe essere quella di mettere in pausa e riprendere i torrent periodicamente, sebbene non sia una buona soluzione. Nota questo problema si applica solo a 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 utilizzando si chiama ibVPN . Dovrebbe funzionare con qualsiasi hardware supportato (ad esempio su un computer "normale" x86), con qualsiasi provider VPN compatibile con OpenVPN - e probabilmente dovrebbe funzionare per 14.10 o versioni successive. Ad un certo punto credo che Ubuntu userà SystemD per l'avvio, il che significa che gli script Upstart usati qui dovranno essere migrati. Aggiornamento: Jonas Kalderstam ha una risposta sotto per l'utilizzo di SystemD. Suppongo anche che ufw venga usato come firewall, se stai usando qualcosa di diverso allora i comandi ufw qui dovranno essere cambiati.

Presumo che tutto il lavoro venga eseguito su una connessione SSH al sistema, sebbene funzionerebbe altrettanto bene se digitato in un terminale fisico.

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

Ho anche notato che Transmission non si collega in modo corretto a un indirizzo IP per l'invio di dati UPnP / NAT-PMP - cioè i dati del torrente passano correttamente attraverso la VPN, ma se il port forwarding UPnP è abilitato la trasmissione richiederà il porta avanti dal router locale, non attraverso la VPN dal server VPN. Quindi ho reso lo script Upstart disabilitare il port forwarding, dal momento che potrebbe apparire come se avesse funzionato, ma non è così. Dovrebbe essere possibile utilizzare iptables e iproute per forzare tutto il traffico dall'utente di trasmissione debian attraverso la VPN, ma sto ancora esaminando questo aspetto. Dovrebbe funzionare anche se la route predefinita è stata modificata per inviare tutti i dati Internet attraverso la VPN, ma non volevo farlo perché anch'io utilizzo questo server anche per altre cose, e questo porterebbe anche tutti gli aggiornamenti di sistema a passare attraverso VPN. L'effetto di questo è che Transmission probabilmente scaricherà i torrent più lentamente di quanto potrebbe fare se il port forwarding funzionasse, ma ho trovato che è possibile ottenere velocità ragionevoli per la maggior parte dei torrent senza port forwarding. Questa domanda ha ulteriori informazioni se vuoi davvero che UPnP funzioni la VPN . Aggiornamento: falk0069 ha un suggerimento fantastico di seguito per aiutando a incoraggiare UPnP tramite VPN.

Installazione e configurazione di OpenVPN

Ti consiglio di provare a far funzionare la tua connessione VPN usando Ubuntu prima di provare a farlo funzionare qui, ad esempio da un desktop. Questo confermerà che hai la configurazione corretta e riduci il tempo di debug.

Per prima cosa, installa i pacchetti richiesti

sudo apt-get install openvpn

Quindi, crea una directory in cui memorizzare i file di configurazione. Sto usando / opt / ibVPN, poiché è il provider che sto usando. Cambialo in qualsiasi cosa tu voglia.

sudo mkdir /opt/ibVPN

La prima cosa da fare in questa nuova directory è creare il file di configurazione per l'esecuzione del client VPN. ibVPN fornisce un file di configurazione di base per utenti Linux, che ho per lo più 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. (FYI, incolla il terminale di Ubuntu è Ctrl+Shift+V ) Dovresti essere in grado di ottenere questo 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, premi Insert per digitare o incollare testo, quindi premi Escape e digita :wq per salvare ed uscire. Naturalmente, 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 derivano da ibVPN - il tuo sarà probabilmente leggermente diverso se hai un provider diverso.Le righe successive sono opzioni modificate che ho specificato.

  • Se il tuo file delle impostazioni aveva linee con auth-user* , commentale. Affinché questa configurazione funzioni automaticamente, è necessario disporre di un file con nome utente e password, quindi assicurati che la password che hai scelto per il provider VPN sia forte, casuale e unica.

  • Il auth-user-pass pass dice a OpenVPN di cercare un file chiamato pass per leggere l'utente e la password da.

  • auth-nocache rimuove la password dalla memoria, che potrebbe aumentare leggermente la sicurezza se ti preoccupi.

  • persist-tun proverà a mantenere lo stesso indirizzo IP dal server se la connessione si interrompe, il che, si spera, significhi meno avvio e arresto di Transmission-demone.

  • route-noexec indica al client OpenVPN di non utilizzare automaticamente le rotte fornite dal server - il che farebbe perdere tutto il traffico di rete sulla VPN. Vogliamo solo inviare traffico torrent, quindi avremo bisogno di utilizzare diverse impostazioni di routing.

  • lport 1195 indica al client OpenVPN di utilizzare la porta 1195 anziché 1194 - nel mio caso, voglio anche eseguire un server OpenVPN sullo stesso dispositivo, e il server dovrà usare la porta 1194. Anche se tu non stanno facendo funzionare un server OpenVPN, non fa male per fare questo cambiamento.

  • Ho modificato la riga dev tap in dev tap1 , per forzare il dispositivo virtuale a essere tap1 invece di essere assegnato da OpenVPN, sempre per l'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 utilizzare tap1 , quindi se preferisci usare un altro dispositivo, ricorda di cambiare quegli script se appropriato.

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

  • route-up e down eseguono script per avviare e arrestare Transmission-daemon come richiesto: qui sono necessari perché vengono eseguiti con variabili di ambiente contenenti informazioni sulla connessione, necessarie per associare correttamente la trasmissione al giusto indirizzo IP e porta.

Nel mio caso, ho avuto un certificato server dal provider VPN, che deve anche essere 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 sta utilizzando un account ibVPN, il certificato sarà diverso.

Ora creiamo 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.

[email protected]
myBIGstrongpassword1234567890

Dobbiamo anche proteggere le autorizzazioni su questo file, o OpenVPN non verrà avviato.

sudo chmod 400 pass

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

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 funzioni effettivamente. Inizia la connessione con:

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

Verranno visualizzati avvisi che non è possibile eseguire i comandi esterni su e giù, ma non preoccuparti di ciò. Se funziona, vedrai Initialization Sequence Completed sul terminale. Premere Control+C per terminare la connessione. Se non funziona, dovrai investigare perché no e correggerlo prima di continuare. Ho scoperto che a volte ci sono voluti alcuni passaggi per iniziare a lavorare. Assicurati che il tuo file password sia corretto. Ci sono molte grandi risorse su Internet su OpenVPN, quindi dai un'occhiata in giro.

A questo punto, è probabilmente più facile passare alla messa in funzione della trasmissione. Una volta che si è sicuri che sia la VPN sia 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-demone

sudo vim /etc/default/transmission-daemon

E cambia la seguente riga da leggere:

ENABLE_DAEMON=0

Ora la trasmissione non inizierà all'avvio.

Ora creiamo una directory per le impostazioni di Trasmissione in cui risiedere, e per i torrenti scaricati in cui andare. Questo 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 come "ubuntu". Un nuovo utente viene creato dal programma di installazione per il daemon di trasmissione, "debian-transmission". 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 avviare 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 daemon di trasmissione come utente di trasmissione di debian, gli dice di usare la directory / opt / transmission per i file di impostazioni e dice di continuare a funzionare in primo piano. Una volta eseguito per alcuni secondi, premere Control+C per 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 di default 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 e esci (Esci, digita: wq e premi Invio)

Le due modifiche intermedie consentiranno l'uso della directory "incompleta", separando i tuoi torrent completati da quelli incompleti. Questo non è completamente necessario, ma personalmente lo trovo estremamente utile. L'ultima modifica consente di accedere alla GUI Web da qualsiasi computer sulla LAN (presupponendo che la subnet LAN sia 192.168.1.0, modificarla se è diversa).

Ora è una buona idea eseguire di nuovo Transmission, per vedere se funziona e può effettivamente scaricare un torrent. Utilizzeremo una finestra del browser Web per accedere alla GUI e aggiungere un torrent. Innanzitutto, consentiamo l'accesso alla GUI Web tramite 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 il browser che preferisci): link , dove XXX è sostituito dall'indirizzo di il tuo server sulla LAN (cioè 192.168.1.10). Trova un torrent da scaricare, ad esempio Big Buck Bunny in 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. Se così non fosse, allora dovrai capire perché, prima di continuare. Ci sono molte risorse disponibili su Internet per l'utilizzo del daemon di trasmissione. Potrebbe anche essere il torrent che hai scelto non funziona, prova prima alcuni altri.

Una volta terminato il download, premi Control+C nella finestra del terminale per interrompere il demone di trasmissione.

Configura trasmissione di binding all'interfaccia VPN

Ora facciamo 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 avere. Apriamo vim per modificare quello nuovo:

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

Incolla questo 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 digita :wq ). Di nuovo, 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, salva e chiudi vim. ( Escape , quindi digita :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 necessarie 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 daemon di trasmissione con le impostazioni richieste 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 "bello -15" imposta la Trasmissione per avere una priorità più bassa, che ho trovato utile quando si utilizza il BeagleBone dello spec'd più basso - a volte la Trasmissione può trarre vantaggio dalle risorse, il che rallenta il sistema. Almeno con una priorità bassa, possono ancora essere eseguite 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 attivare l'avvio e l'interruzione dello script di trasmissione.

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

Incolla questo in vim:

#! /bin/bash

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

Tutto questo script dice a Upstart che il daemon di trasmissione dovrebbe avviarsi e fornisce le informazioni necessarie per collegarsi alla connessione VPN.

sudo vim /opt/ibVPN/down.sh

Ancora, più incolla:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

Questo script è ancora più semplice - segnala l'interruzione 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 - dal momento che questi script vengono eseguiti come root, chiunque potrebbe cambiarli potrebbe eseguire qualsiasi cosa volesse utente root.

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

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

OK, abbiamo quasi finito!Proviamo a testare se la nostra configurazione funziona fino ad ora:

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

Connettiti nuovamente alla GUI Web di Transmission e riprendi il torrent esistente o aggiungine uno nuovo. Dovrebbe essere in grado di scaricare, magari dopo qualche minuto di attesa per i coetanei. Un modo elegante che ho trovato di verificare 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 che attraversano la VPN. Se il tuo torrent sta scaricando e sta usando correttamente la VPN, qui ci saranno molti indirizzi IP e nomi di host. Guarda anche iftop per la connessione LAN:

sudo iftop -i eth0

Qui si dovrebbe vedere una grande quantità di traffico verso un singolo indirizzo IP, essendo il server VPN, e quindi solo un traffico minimo verso altri dispositivi LAN - assumendo che non si stiano eseguendo altri servizi sul BeagleBone.

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

Se riscontri problemi, puoi visualizzare il log degli errori di Upstart eseguendo:

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

In una finestra terminale / SSH separata, prova a eseguire il comando tail mentre avvii la connessione VPN come sopra e cerca eventuali messaggi di errore. Si spera che tu possa risolvere il problema vedendo i messaggi di errore, se non hai una ricerca in Internet o post un commento.

Configura tutto per l'avvio automatico

Se sei soddisfatto di emettere manualmente il comando per avviare il tunnel di OpenVPN, o se vuoi farlo con il tuo script, allora hai finito. Ma volevo che iniziasse 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ò è attendere che il sistema segnali che la rete è pronta, quindi inizierà il tunnel OpenVPN, che a sua volta avvierà la trasmissione. Quando il sistema è spento, o se la rete viene arrestata per qualche motivo, Upstart rimuoverà le regole del firewall e chiuderà il daemon di trasmissione. Semplice! Questo continuerà a funzionare anche dopo un riavvio, quindi ora sei pronto.

Per interagire con Transmission, utilizza la GUI Web come abbiamo fatto durante la fase di configurazione. È anche possibile rendere accessibile la GUI 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 per copiare sulla LAN dal BeagleBone al mio computer desktop, il che è abbastanza buono per un dispositivo così poco potente. Ubuntu fornisce alcune informazioni utili per l'impostazione.

    
risposta data seanlano 10.02.2015 - 06:45
6

L'ho appena fatto utilizzando SystemD , così ho pensato di condividerlo. Ho inserito tutti i miei script, configurazioni e certificati nella stessa directory a cui mi riferirò come /etc/openvpn/myprovider

OpenVPN config

Questo dipende dalla tua VPN specifica, ma una differenza dalla configurazione di @ seanlano è che io uso solo uno script route-up . Quindi le cose che ti servono oltre alla configurazione di lavoro fornita , sono queste righe:

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

Dove posizioni lo script transmission-route-up.sh dove preferisci. Nota l'assenza di uno script down . (La mia VPN utilizzava già uno script personalizzato verso il basso, quindi sarebbe stato 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, printenv , è importante. Posizionalo dove preferisci, viene utilizzato successivamente nel servizio SystemD. Lo metto nella stessa directory della mia vpn config.

Sostituisci 24328 con qualunque porta debba essere ascoltata dal demone di trasmissione. Uso iptables (usando Debian), quindi puoi probabilmente sostituire quelle linee con le linee ufw dalla configurazione di @ seanlano.

Servizio VPN SystemD

Questo è il servizio che avvia automaticamente la VPN per noi. Verificare che il percorso di openvpn sia corretto sulla macchina e che anche il percorso del file di configurazione sia corretto. devi 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 bravo.

SystemD transmission-daemon.service

Questo script richiede il servizio vpn, quindi se il vpn va giù, anche il demone di trasmissione va giù. Questo è utile se la vpn viene riavviata e si ottiene un nuovo indirizzo IP, poiché la trasmissione dovrà riavviarsi e reindirizzare quindi, che dovrebbe essere gestita automaticamente. Nota che utilizziamo le variabili d'ambiente che abbiamo stampato nello script route-up in precedenza.

/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 avvialo

systemctl start transmission-daemon.service

Al riavvio, tutto dovrebbe avviarsi automaticamente (in ordine!). Nota che l'utilizzo di Type=simple nel servizio vpn causa alcuni problemi per la tempistica dell'ordinamento degli script, quindi ti consiglio di usare forking invece.

Puoi specificare un effettivo indirizzo IP per rpc-bind-address se vuoi essere più restrittivo (questo è l'indirizzo di ascolto della GUI Web, che non dovrebbe essere il tuo VPN-ip). E se vuoi eseguire la trasmissione con nice, modifica la riga ExecStart e aggiungi /usr/bin/nice -n15 all'inizio.

Gestione delle modifiche agli indirizzi

Una cosa che ho notato nel corso del 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.service non lo taglia. Deve fermarsi completamente e 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
    
risposta data Jonas Kalderstam 11.05.2015 - 02:15
2

Ho notato che hai menzionato che la trasmissione non passa attraverso la VPN per UPnP / NAT-PMP. Ho notato anche questo e ho creato una patch per Transmission in modo che onori 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, quindi è probabilmente abbastanza buono. L'ho registrato come bug sul sito trac.transmissionbt e fornito la patch. Spero che sarà incorporato in una versione futura. link

Un'altra opzione per adesso se non vuoi ricompilare è eseguire manualmente upnpc dal pacchetto miniupnpc. Per es.

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 è il tuo IP VPN e il 51515 è la tua porta TCP / UDP richiesta.

Non sono sicuro per quanto tempo è utile per l'inoltro. Potresti anche 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 mi collego alla VPN.

Saluti

    
risposta data falk0069 08.09.2015 - 03:59

Leggi altre domande sui tag