web-dev-qa-db-fra.com

Démon de transmission sur OpenVPN

J'ai récemment acquis un BeagleBone Black sur lequel j'ai installé Ubuntu avec cette méthode . Tout a fonctionné jusqu'à présent. Je souhaite utiliser mon BeagleBone comme une boîte torrent, mais je ne souhaite pas le faire directement via ma connexion Internet (je ne pense pas que mon fournisseur de services Internet l'appréciera) - j'ai donc acheté un abonnement VPN auprès d'un serveur européen. . J'ai connecté manuellement mon ordinateur portable à ce VPN avant la transmission. Je sais que la connexion VPN fonctionne sous Ubuntu et que l'hôte fournit des informations de configuration pour OpenVPN. Chose embarrassante, la nature dynamique de l’adresse IP attribuée signifie qu’elle changerait fréquemment. Ainsi, lorsque j’utilisais mon ordinateur portable avec le VPN, je définissais manuellement l’adresse d’écoute dans Transmission à la valeur requise.

Idéalement, j'aimerais avoir la configuration suivante:

  • La transmission ne fonctionne que sur le VPN et il est interdit d’exécuter des torrents sur la connexion normale WAN
  • Seul le trafic dirigé vers Transmission sera accepté ou envoyé via le VPN, tout autre trafic non sollicité sera abandonné.
  • La transmission utilise le port approprié pour écouter, en fonction de l'adresse IP attribuée
  • OpenVPN démarre automatiquement au démarrage, puis la transmission est ensuite lancée.
  • L’interface graphique Web de Transmission est accessible via le réseau local et éventuellement via Internet à partir de ma connexion WAN (c’est-à-dire pas via le VPN).
19
seanlano

Remarque: (2016-02-22) J'ai compris que cette configuration fuyait les requêtes DNS vers les suiveurs de torrent par le biais de la normale WAN, au lieu de l'envoyer via le VPN. Je cherche comment résoudre ce problème. Je vais cependant continuer à utiliser ma configuration, car la connexion elle-même utilise correctement le VPN.


Mise à jour: J'ai remarqué que, lorsque je transmettais le téléchargement à Transmission de nuit, l'utilisation du processeur passait à 100% après. quelque temps. Cela ne semble pas se produire après le même laps de temps, parfois tout va bien toute la nuit, d'autres fois, cela peine après 10 minutes. Il peut également récupérer en mettant en pause tous les torrents et en attendant que la charge du processeur revienne à la normale, puis en redémarrant. J'enquête toujours. Une solution de contournement pourrait consister à faire une pause et à reprendre des torrents périodiquement, bien que ce ne soit pas une très bonne solution de contournement. Remarque Ce problème ne concerne que le Beaglebone et probablement d'autres appareils ARM. Je n'ai jamais eu ce problème sur un processeur x 86.


Introduction

J'ai développé et testé cette solution pour Ubuntu 14.04, fonctionnant sur un BeagleBone Black. Le fournisseur de réseau privé virtuel que j'utilise s'appelle ibVPN . Cependant, il devrait fonctionner avec tout matériel pris en charge (c’est-à-dire sur un ordinateur x86 "normal"), avec n’importe quel fournisseur de VPN compatible OpenVPN - et devrait probablement fonctionner à partir de 14.10. À un moment donné, je pense qu'Ubuntu utilisera SystemD pour le démarrage, ce qui signifie que les scripts Upstart utilisés ici devront être migrés. Mise à jour: Jonas Kalderstam a une réponse ci-dessous pour utiliser SystemD. Je suppose également que ufw est utilisé comme pare-feu; si vous utilisez quelque chose de différent, les commandes ufw ici devront être modifiées.

Je suppose que tout le travail est effectué via une connexion SSH au système, , bien que cela fonctionnerait aussi bien s'il était saisi dans un terminal physique.

Ceci est un long tutoriel, veuillez tout d'abord le lire en entier et assurez-vous que vous êtes à l'aise avec ce que vous allez faire.

J'ai également remarqué que la transmission ne se liait pas correctement à une adresse IP pour l'envoi de données UPnP/NAT-PMP - c'est-à-dire que des données torrent traversent correctement le VPN, mais si la redirection de port UPnP est activée, la transmission demandera le transfert de port à partir du routeur local, et non via le VPN à partir du serveur VPN. Par conséquent, j’ai fait en sorte que le script Upstart désactive la redirection de port, car il peut sembler que cela a fonctionné, mais cela ne s’est pas produit. Il devrait être possible d'utiliser iptables et iproute pour forcer tout le trafic de l'utilisateur debian-transmission via le VPN, mais je suis toujours à la recherche de cela. Cela devrait également fonctionner si la route par défaut était modifiée pour envoyer toutes les données Internet via le VPN, mais je ne voulais pas le faire car j'utilise ce serveur pour d'autres tâches également, ce qui entraînerait également toutes les mises à jour du système par le biais du serveur. VPN. En conséquence, Transmission téléchargera probablement des torrents plus lentement que si le transfert de port fonctionnait, mais j'ai constaté que des vitesses raisonnables pouvaient être atteintes pour la plupart des torrents sans transfert de port. Cette question contient des informations supplémentaires si vous voulez vraiment faire fonctionner UPnP sur le VPN . Mise à jour: falk0069 a une astuce fantastique ci-dessous pour aider à encourager l'UPnP sur le VPN.

Installer et configurer OpenVPN

Je vous recommande d’essayer de faire fonctionner votre connexion VPN avec Ubuntu avant d’essayer de la faire fonctionner ici, c’est-à-dire depuis un ordinateur de bureau. Cela confirmera que vous avez la configuration correcte et réduira le temps passé au débogage.

Tout d'abord, installez les paquets requis

Sudo apt-get install openvpn

Créez ensuite un répertoire dans lequel stocker les fichiers de configuration. J'utilise/opt/ibVPN, car c’est le fournisseur que j’utilise. Changez-le comme vous voulez.

Sudo mkdir /opt/ibVPN

La première chose à faire dans ce nouveau répertoire est de créer le fichier de configuration pour exécuter le client VPN. ibVPN fournit un fichier de configuration de base pour les utilisateurs de Linux, que je viens surtout de copier et coller.

cd /opt/ibVPN
Sudo vim config.ovpn

Copiez et collez votre version modifiée dans vim, en utilisant les paramètres de votre fournisseur de réseau privé virtuel. (Pour info, coller dans le terminal Ubuntu est Ctrl+Shift+V). Vous devriez pouvoir l'obtenir auprès de votre fournisseur 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"

Pour ceux qui ne connaissent pas vim, appuyez sur Insert pour taper ou coller du texte, puis sur Escape et tapez :wq pour enregistrer et quitter. Bien sûr, vous n’avez pas besoin d’utiliser vim - n’importe quel éditeur de texte fonctionnera.

Je vais expliquer rapidement ce fichier de configuration: Les 18 premières lignes spécifient les paramètres spécifiques à utiliser avec le serveur, ceux-ci proviennent d’ibVPN - le vôtre sera probablement légèrement différent si vous avez un fournisseur différent. Les lignes suivantes sont des options modifiées que j'ai spécifiées.

  • Si votre fichier de paramètres contient des lignes avec auth-user*, commentez-les. Pour que cette configuration fonctionne automatiquement, nous devons avoir un fichier contenant le nom d'utilisateur et le mot de passe. Assurez-vous donc que le mot de passe que vous avez choisi pour le fournisseur de réseau privé virtuel est fort, aléatoire et unique.

  • auth-user-pass pass indique à OpenVPN de rechercher un fichier nommé passdans lequel l'utilisateur et le mot de passe doivent être lus.

  • auth-nocache supprime le mot de passe de la mémoire, ce qui peut augmenter légèrement la sécurité si vous vous en inquiétez.

  • persist-tun essayera de garder la même adresse IP du serveur si votre connexion est interrompue, ce qui devrait, espérons-le, signifier moins de démarrages et d'arrêts du démon Transmission.

  • route-noexec indique au client OpenVPN de ne pas utiliser automatiquement les itinéraires fournis par le serveur, ce qui entraînerait tout le trafic réseau sur le VPN. Nous voulons simplement envoyer du trafic torrent, nous devrons donc utiliser différents paramètres de routage.

  • lport 1195 indique au client OpenVPN d'utiliser le port 1195 au lieu de 1194 - dans mon cas, je souhaite également exécuter un serveur OpenVPN sur le même périphérique. Le serveur devra utiliser le port 1194. Même si vous n'exécutez pas de serveur OpenVPN, ça ne fait pas mal de faire ce changement.

  • J'ai changé la ligne dev tap en dev tap1, pour forcer le périphérique virtuel à être tap1 au lieu d'être attribué par OpenVPN, à nouveau parce que le serveur OpenVPN était en cours d'exécution. Même si vous n'exécutez pas de serveur VPN, cette modification ne devrait pas avoir d'importance. Les scripts de pare-feu ont été écrits pour utiliser tap1. Par conséquent, si vous préférez utiliser un autre périphérique, n'oubliez pas de modifier ces scripts le cas échéant.

  • lladdr 00:FF:11:AA:BB:CC indique à OpenVPN d'attribuer à cette adresse une adresse MAC, ce qui peut être utile pour les règles de pare-feu iptables.

  • route-up et downexécutent des scripts pour démarrer et arrêter Transmission-daemon selon les besoins. Ils sont nécessaires ici, car ils s'exécutent avec des variables d'environnement contenant des informations sur la connexion, nécessaires pour lier correctement Transmission à l'adresse IP et au port corrects.

Dans mon cas, j'avais un certificat de serveur du fournisseur de réseau privé virtuel - qui doit également se trouver dans le même répertoire que le fichier de configuration.

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

Copiez-le et collez-le ou déplacez-le via SCP ou 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-----

Évidemment, si vous n'utilisez pas de compte ibVPN, votre certificat sera différent.

Faisons maintenant le fichier de mot de passe:

Sudo vim /opt/ibVPN/pass

La première ligne doit être le nom d'utilisateur complet, puis la deuxième ligne doit être le mot de passe. Ce doit être le seul contenu de ce fichier.

[email protected]
myBIGstrongpassword1234567890

Nous devons également sécuriser les autorisations sur ce fichier, sinon OpenVPN ne démarrera pas.

Sudo chmod 400 pass

Cela rendra le fichier en lecture seule, et uniquement pour le propriétaire (c'est-à-dire qu'aucun autre utilisateur ne peut le lire du tout)

Ces commandes créeront les fichiers à exécuter au démarrage et les définiront pour être exécutables uniquement par root.

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

À ce stade, il est probablement utile de vérifier si la connexion VPN fonctionne réellement. Commencez la connexion avec:

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

Vous verrez des avertissements que les commandes externes montantes et descendantes ne peuvent pas être exécutées, mais ne vous inquiétez pas pour cela. Si cela fonctionne, vous verrez Initialization Sequence Completed sur le terminal. Appuyez sur Control+C pour mettre fin à la connexion. Si cela ne fonctionne pas, vous devrez rechercher pourquoi et ne pas le réparer avant de continuer. J'ai trouvé qu'il fallait parfois quelques minutes pour commencer à travailler. Assurez-vous que votre fichier de mot de passe est correct. Il existe de nombreuses ressources intéressantes sur Internet à propos d'OpenVPN, alors jetez un coup d'œil.

À ce stade, il est probablement plus facile de passer à la transmission. Une fois que vous êtes certain que le VPN et la transmission peuvent fonctionner séparément, vous pouvez les combiner.

Installation et configuration de la transmission

Installez les packages requis:

Sudo apt-get install transmission-daemon

Par défaut, Transmission s'exécutera automatiquement au démarrage. Étant donné que nous utiliserons éventuellement OpenVPN pour démarrer la transmission, nous voulons le désactiver. Pour ce faire, éditez le fichier de configuration pour le démon Transmission.

Sudo vim /etc/default/transmission-daemon

Et changez la ligne suivante pour lire:

ENABLE_DAEMON=0

Maintenant, la transmission ne démarrera pas au démarrage.

Créons maintenant un répertoire dans lequel les paramètres de transmission se trouveront et dans lequel les torrents téléchargés iront. Cela suppose que vous avez déjà configuré un disque et qu'il est monté sur/media/arm-disk /. Pour des raisons de sécurité, le démon sera exécuté par son propre utilisateur plutôt que par root ou par "ubuntu". Le programme d'installation crée un nouvel utilisateur pour le démon de transmission, "transmission-debian". Cet utilisateur doit posséder le dossier que nous créons et disposer d'un accès en lecture et en écriture à l'emplacement de stockage des torrents téléchargés.

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

Maintenant, nous devons commencer la transmission, très brièvement, afin de créer le fichier de paramètres dont nous avons besoin:

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

Cette commande lance transmission-daemon en tant qu'utilisateur debian-transmission, lui dit d'utiliser le répertoire/opt/transmission pour les fichiers de paramètres et lui indique de continuer à s'exécuter au premier plan. Une fois qu'il a duré quelques secondes, appuyez sur Control+C pour le terminer. Nous pouvons maintenant éditer le fichier de paramètres.

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

Nous devons maintenant modifier les lignes suivantes à partir de leurs valeurs par défaut:

"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.*",

Enregistrer et quitter (Escape, tapez: wq et appuyez sur Entrée)

Les deux modifications du milieu permettront l'utilisation du répertoire "incomplet", en séparant les torrents finis des non finis. Ce n'est pas tout à fait nécessaire, mais je trouve personnellement cela extrêmement utile. La dernière édition permet à l’ordinateur Web d’être accessible à n’importe quel ordinateur du réseau local (en supposant que votre sous-réseau local est 192.168.1.0, modifiez-le s’il est différent).

C'est maintenant une bonne idée de lancer à nouveau Transmission pour voir si cela fonctionne et si vous pouvez réellement télécharger un torrent. Nous allons utiliser une fenêtre de navigateur Web pour accéder à l'interface graphique et ajouter un torrent. Tout d'abord, autorisons l'accès à l'interface graphique Web via le pare-feu depuis le réseau local, puis exécutons à nouveau le processus de transmission-daemon.

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

Visitez cette URL dans Firefox (ou le navigateur de votre choix): http://XXX.XXX.XXX.XXX:9091 , où XXX est remplacé par l'adresse de votre serveur sur le réseau local (c'est-à-dire 192.168 .1.10). Trouvez un torrent à télécharger, par exemple Big Buck Bunny en 1080p60hz. Ceci est un court métrage gratuit, légalement disponible en téléchargement gratuit. Dans l'interface graphique de transmission, cliquez sur le bouton "Ouvrir le torrent" et collez ce lien (ou sur tout autre torrent de votre choix) dans la première zone. Puis appuyez sur "Upload". Si la transmission fonctionne correctement, le téléchargement du torrent va commencer. Si ce n'est pas le cas, vous devrez alors comprendre pourquoi avant de continuer. Il existe de nombreuses ressources disponibles sur Internet pour utiliser le démon de transmission. Il se peut également que le torrent que vous avez choisi ne fonctionne pas, essayez d’abord quelques autres.

Une fois le téléchargement terminé, appuyez sur Control+C dans la fenêtre du terminal pour arrêter le démon de transmission.

Configurer la transmission de liaison vers l'interface VPN

Créons maintenant un script Upstart, qui sera utilisé pour démarrer la transmission lorsque le VPN est prêt.

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

Ne vous inquiétez pas si cela se plaint, c'est juste pour faire une sauvegarde du fichier Upstart, s'il en existait un - il se peut qu'il ne l'ait pas fait. Ouvrons vim pour éditer le nouveau:

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

Collez ceci dans l'éditeur:

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

Enregistrez et fermez vim. (Escapename__, puis tapez :wq). Encore une fois, ouvrez vim:

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

Et collez ceci:

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

Encore une fois, enregistrez et fermez vim. (Escapename__, puis tapez :wq). Finalement:

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

Coller ceci:

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

Ces scripts demandent à Upstart d'écouter le signal "transmission-vpn-up". Le script "transmission-up.conf" définit ensuite les règles de routage requises pour envoyer le trafic à partir de l'adresse VPN locale via l'interface VPN, et configure le pare-feu pour autoriser le trafic entrant du VPN vers le port d'écoute de Transmission. Le trafic dirigé vers le port d'écoute de la transmission à partir de l'interface LAN normale est bloqué. Le script "transmission-daemon.conf" démarre alors transmission-daemon avec les paramètres requis pour le lier à l'adresse IP du VPN. Notez que cette commande s'assurera également que UPnP/NAT-PMP est désactivé - voir ma note en haut à propos du transfert de port. Le "Nice -15" attribue à la transmission une priorité plus faible, ce que j’ai trouvé utile lors de l’utilisation du BeagleBone à spécification inférieure - la transmission peut parfois détourner des ressources, ce qui ralentit le système. Au moins avec une priorité basse, des tâches système plus importantes peuvent toujours être exécutées. Le script "transmission-down.conf" supprimera les règles du pare-feu lorsque le VPN est arrêté. Trois scripts différents sont utilisés pour que le démon de transmission puisse être exécuté en tant qu'utilisateur sans privilège, mais les règles de pare-feu peuvent être exécutées en tant que root.

Revenons maintenant aux paramètres OpenVPN et modifions les scripts "route-up" et "down" pour déclencher le démarrage et l'arrêt de notre script Transmission.

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

Collez ceci dans vim:

#! /bin/bash

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

Tout ce script fait dire à Upstart que le démon transmission doit démarrer et lui donne les informations nécessaires pour se connecter à la connexion VPN.

Sudo vim /opt/ibVPN/down.sh

Encore une fois, plus de collage:

#! /bin/bash

/sbin/initctl emit transmission-vpn-down

Ce script est encore plus simple: il signale l'arrêt du démon de transmission.

À ce stade, il est probablement judicieux de s’assurer que le propriétaire de l’ensemble du dossier de configuration du VPN est bien l’utilisateur root. Étant donné que ces scripts sont exécutés en tant que root, tous ceux qui peuvent les modifier peuvent exécuter tout ce qu’ils souhaitent en tant qu’utilisateur root.

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

Cela signifie maintenant que seul l'utilisateur root peut modifier ou afficher les paramètres de connexion VPN.

OK, nous avons presque fini! Testons si notre configuration fonctionne jusqu'ici:

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

Connectez-vous à nouveau à l'interface graphique Web de transmission et reprenez le torrent existant ou ajoutez-en un nouveau. Il devrait être en mesure de télécharger, peut-être après quelques minutes d'attente pour les pairs. Une façon astucieuse de tester si cela fonctionne ou non est de regarder iftop. Installez iftop et exécutez:

Sudo apt-get install iftop
Sudo iftop -i tap1

Cet écran montrera toutes les connexions passant par le VPN. Si votre torrent est en cours de téléchargement et utilise correctement le VPN, il y aura beaucoup d'adresses IP et de noms d'hôtes ici. Regardez également iftop pour la connexion LAN:

Sudo iftop -i eth0

Ici, vous devriez voir une grande quantité de trafic sur une seule adresse IP, le serveur VPN, et un trafic minimal sur d'autres périphériques LAN, en supposant que vous n'exécutiez pas d'autres services sur votre BeagleBone.

Vous pouvez confirmer que le VPN fonctionne par en suivant ces instructions .
Ce site vous permet de télécharger un torrent pour voir l’adresse IP utilisée par d’autres pairs pour se connecter. Si tout fonctionne bien, il s’agit de l’adresse IP du VPN et non de votre propre adresse IP WAN.

Si vous rencontrez des problèmes, vous pouvez voir le journal des erreurs Upstart en procédant comme suit:

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

Dans une fenêtre de terminal/SSH séparée, essayez d’exécuter la commande tail tout en démarrant la connexion VPN comme indiqué ci-dessus et recherchez les éventuels messages d’erreur. J'espère que vous pourrez résoudre le problème en voyant les messages d'erreur, si vous n'avez pas un Dig Dig sur Internet, ou poster un commentaire.

Configurez tout pour démarrer automatiquement

Si vous êtes prêt à lancer manuellement la commande pour démarrer le tunnel OpenVPN ou si vous souhaitez le faire avec votre propre script, vous avez terminé. Mais je voulais que ça démarre au démarrage, alors j'ai créé un autre script Upstart pour lancer OpenVPN.

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

C'est la dernière chose que nous devons coller!

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

Il ne reste plus qu'à attendre que le système signale que le réseau est prêt, puis le tunnel OpenVPN démarrera, ce qui démarrera alors Transmission. Lorsque le système est désactivé ou si la mise en réseau est arrêtée pour une raison quelconque, Upstart supprimera les règles de pare-feu et fermera le démon de transmission. Simple! Cela continuera à fonctionner après un redémarrage, alors tout est prêt.

Pour interagir avec Transmission, utilisez l’interface graphique Web comme nous l’avions fait pendant la phase d’installation. Il est également possible de rendre l'interface graphique accessible sur Internet en configurant le transfert de port. Il y a beaucoup de tutoriels sur la façon de faire cela, donc je ne vais pas le répéter ici.

Pour ce qui est d’obtenir les téléchargements terminés du BeagleBone, j’utilise NFS. Je peux obtenir des vitesses d’environ 8 Mo/s en copiant sur le réseau local du BeagleBone vers mon ordinateur de bureau - ce qui est plutôt bon pour un appareil aussi faible. buntu fournit des informations utiles pour le configurer.

22
seanlano

Je viens de travailler avec SystemD alors je pensais partager. J'ai placé tous mes scripts, configs et certificats dans le même répertoire que je nommerai /etc/openvpn/myprovider

OpenVPN config

Cela dépend de votre VPN spécifique, mais une différence avec la configuration de @ seanlano est que je n'utilise qu'un script route-up. Ainsi, les éléments dont vous avez besoin en plus de votre configuration fournie , sont les suivants:

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

Où vous placez le script transmission-route-up.sh où vous voulez. Notez l'absence de script down. (Mon VPN utilisait déjà un script personnalisé afin qu'il y ait un conflit de toute façon).

/ 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 première ligne, le printenv, est importante. Placez-le où vous le souhaitez, il sera utilisé ultérieurement dans le service SystemD. Je le place dans le même répertoire que ma config vpn.

Remplacez 24328 avec le port que votre démon de transmission devrait écouter. J'utilise iptables (avec Debian), vous pouvez donc probablement remplacer ces lignes par les lignes ufw de la config de @ seanlano.

Service SystemD VPN

C'est le service qui démarre automatiquement le VPN pour nous. Vérifiez que le chemin d'accès à openvpn est correct sur votre ordinateur et que le chemin d'accès au fichier de configuration est également correct. Vous devez spécifier complet chemins dans les services 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

Activer le service VPN avec:

systemctl enable my-vpn.service

Et testez-le avec:

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

Si ça démarre/marche, ça va.

SystemD transmission-daemon.service

Ce script nécessite le service vpn. Par conséquent, si le vpn tombe en panne, le démon de transmission tombe également en panne. C'est pratique si le vpn est redémarré et que vous obtenez une nouvelle adresse IP, car la transmission devra alors être relancée et reliée, ce qui devrait être traité automatiquement. Notez que nous utilisons les variables d’environnement que nous avons imprimées précédemment dans le script route-up.

/ 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

L'activer

systemctl enable transmission-daemon.service

Et commence le

systemctl start transmission-daemon.service

Lorsque vous redémarrez, tout devrait démarrer automatiquement (dans l’ordre!). Notez que l'utilisation de Type=simple dans le service vpn pose certains problèmes pour le minutage de l'ordre des scripts, c'est pourquoi je vous recommande d'utiliser forking à la place.

Vous pouvez spécifier une adresse IP réelle pour le rpc-bind-address si vous souhaitez être plus restrictif (il s'agit de l'adresse d'écoute de l'interface graphique Web, qui ne doit pas être votre adresse VPN). Et si vous souhaitez exécuter la transmission avec Nice, il suffit de modifier la ligne ExecStart et d’ajouter /usr/bin/Nice -n15 au début.

Gestion des changements d'adresse

Une chose que j'ai notée au fil du temps est que si, pour une raison quelconque, la connexion VPN reçoit une nouvelle adresse IP, la transmission sera toujours liée à l'ancienne adresse et cessera de fonctionner. Et simplement, faire systemctl restart transmission-daemon.service ne coupe pas tout. Il doit s’arrêter complètement, puis recommencer à zéro.

Aucune idée pourquoi, mais pour cette raison, j'ai ajouté les lignes suivantes à ma racine crontab (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
7
Jonas Kalderstam

J'ai remarqué que vous avez mentionné que la transmission ne passe pas par le VPN pour UPnP/NAT-PMP. Je l’ai également remarqué et créé un patch pour la transmission afin qu’il respecte le paramètre bind-address-ipv4 pour UPnP. NAT-PMP est un peu plus difficile à implémenter car vous devez déterminer la passerelle par défaut. L'UPnP est le principal utilisé de nos jours, cependant, il est probablement suffisant. Je l'ai consigné en tant que bogue sur le site trac.transmissionbt et fourni le correctif. Espérons que cela sera intégré dans une prochaine version. https://trac.transmissionbt.com/ticket/599

Une autre option pour le moment si vous ne voulez pas recompiler est d’exécuter manuellement upnpc à partir du paquet miniupnpc. Par exemple.

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

Où 10.10.10.51 est votre IP VPN et 51515 est votre port TCP/UDP demandé.

Je ne sais pas combien de temps le transfert est bon. Vous pouvez également utiliser l'option '-d' pour supprimer votre port lors de la déconnexion. J'ai constaté que si je ne le fais pas, je ne pourrai plus utiliser le même port si je me reconnecte dans le VPN.

À votre santé

2
falk0069