• Serveurs
  • [Discussion] Faire passer le trafic bitTorrent dans un tunnel VPN

C'est bon, je me suis galéré un moment avec le partage NFS, mais j'ai terminé. Et j'ai créé des liens symboliques vers le partage NFS à la place de "watch" et "torrents".

Concernant le test TorGuard (adresses IP très légèrement modifiées, mais donne l'idée générale) :
- 81.149.113.82 : adresse IP retournée par le torrent TorGuard ;
- 81.149.112.72 : adresse IP renvoyée quand je fais un PING vers le nom de mon host VPN chez IPVanish ;
- 83.200.40.180 : mon adresse IP publique.

Même si l'adresse IP n'est pas strictement identique entre le host VPN et l'adresse retournée par TorGuard, elle doit correspondre à un de leur serveur.

Et pour les logs d'OpenVPN, ça ne m'a pas l'air mal non plus :
Jun  7 17:17:55 machine-perso ovpn-ipvanish-host-VPN[797]: OpenVPN 2.3.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Dec  1 2014
Jun  7 17:17:56 machine-perso ovpn-ipvanish-host-VPN[806]: VERIFY OK: depth=1, /C=US/ST=FL/L=Winter_Park/O=IPVanish/OU=IPVanish_VPN/CN=IPVanish_CA/emailAddress=support@ipvanish.com
Jun  7 17:17:56 machine-perso ovpn-ipvanish-host-VPN[806]: VERIFY X509NAME OK: /C=US/ST=FL/L=Winter_Park/O=IPVanish/OU=IPVanish_VPN/CN=host-VPN.ipvanish.com/emailAddress=support@ipvanish.com
Jun  7 17:17:56 machine-perso ovpn-ipvanish-host-VPN[806]: VERIFY OK: depth=0, /C=US/ST=FL/L=Winter_Park/O=IPVanish/OU=IPVanish_VPN/CN=host-VPN.ipvanish.com/emailAddress=support@ipvanish.com
Même si je ne trouve pas ça très verbeux.

[Edit] Je ne comprends pas tout ton up.sh :
ip rule add from $4/32 table VPN
D'où sors-tu cette variable "4" ? Elle n'est pas définie dans ton up.sh.
Et quand tu redémarres openvpn, rien n'apparait pour "script-security" up.sh ...pour ton problème de lancement rtorrent ??? regarde dans syslog aussi..
Effectivement, je me rends compte ici que j'ai pas mal de choses à corriger :
Jun  7 18:01:48 machine-perso ovpn-ipvanish-host-VPN[806]: event_wait : Interrupted system call (code=4)
Jun  7 18:01:48 machine-perso ovpn-ipvanish-host-VPN[806]: SIGTERM received, sending exit notification to peer
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[806]: Closing TUN/TAP interface
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[806]: /sbin/ip addr del dev tun0 172.20.xxx.xxx/22
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[806]: /etc/openvpn/down.sh tun0 1500 1570 172.20.xxx.xxx 255.255.252.0 init
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[806]: WARNING: Failed running command (--up/--down): external program exited with error status: 1
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[806]: Exiting due to fatal error
Jun  7 18:01:53 machine-perso systemd[1]: openvpn@ipvanish-host-VPN.service: main process exited, code=exited, status=1/FAILURE
Jun  7 18:01:53 machine-perso systemd[1]: Unit openvpn@ipvanish-host-VPN.service entered failed state.
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1419]: DEPRECATED OPTION: --tls-remote, please update your configuration
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1419]: OpenVPN 2.3.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Dec  1 2014
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1419]: library versions: OpenSSL 1.0.1k 8 Jan 2015, LZO 2.08
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1419]: NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1419]: Deprecated TLS cipher name 'DHE-RSA-AES256-SHA', please use IANA name 'TLS-DHE-RSA-WITH-AES-256-CBC-SHA'
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1419]: Deprecated TLS cipher name 'DHE-DSS-AES256-SHA', please use IANA name 'TLS-DHE-DSS-WITH-AES-256-CBC-SHA'
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1419]: Deprecated TLS cipher name 'AES256-SHA', please use IANA name 'TLS-RSA-WITH-AES-256-CBC-SHA'
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1419]: Socket Buffers: R=[212992->131072] S=[212992->131072]
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: UDPv4 link local: [undef]
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: UDPv4 link remote: [AF_INET]81.149.112.72:443
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: TLS: Initial packet from [AF_INET]81.149.112.72:443, sid=beefdaaf 5257e34b
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: VERIFY OK: depth=1, /C=US/ST=FL/L=Winter_Park/O=IPVanish/OU=IPVanish_VPN/CN=IPVanish_CA/emailAddress=support@ipvanish.com
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: VERIFY X509NAME OK: /C=US/ST=FL/L=Winter_Park/O=IPVanish/OU=IPVanish_VPN/CN=host-VPN.ipvanish.com/emailAddress=support@ipvanish.com
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: VERIFY OK: depth=0, /C=US/ST=FL/L=Winter_Park/O=IPVanish/OU=IPVanish_VPN/CN=host-VPN.ipvanish.com/emailAddress=support@ipvanish.com
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: Data Channel Encrypt: Cipher 'AES-256-CBC' initialized with 256 bit key
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: Data Channel Encrypt: Using 256 bit message hash 'SHA256' for HMAC authentication
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: Data Channel Decrypt: Cipher 'AES-256-CBC' initialized with 256 bit key
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: Data Channel Decrypt: Using 256 bit message hash 'SHA256' for HMAC authentication
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA
Jun  7 18:01:53 machine-perso ovpn-ipvanish-host-VPN[1422]: [host-VPN.ipvanish.com] Peer Connection Initiated with [AF_INET]81.149.112.72:443
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: SENT CONTROL [host-VPN.ipvanish.com]: 'PUSH_REQUEST' (status=1)
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 193.xxx.xxx.xxx,dhcp-option DNS 193.xxx.xxx.xxx,rcvbuf 262144,explicit-exit-notify 5,route-gateway 172.20.xxx.xxx,topology subnet,ping 20,ping-restart 40,ifconfig 172.20.xxx.xxx 255.255.252.0'
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: Options error: option 'redirect-gateway' cannot be used in this context ([PUSH-OPTIONS])
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: Options error: option 'dhcp-option' cannot be used in this context ([PUSH-OPTIONS])
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: Options error: option 'dhcp-option' cannot be used in this context ([PUSH-OPTIONS])
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: OPTIONS IMPORT: timers and/or timeouts modified
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: OPTIONS IMPORT: explicit notify parm(s) modified
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: OPTIONS IMPORT: --sndbuf/--rcvbuf options modified
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: Socket Buffers: R=[131072->425984] S=[131072->131072]
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: OPTIONS IMPORT: --ifconfig/up options modified
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: OPTIONS IMPORT: route-related options modified
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: TUN/TAP device tun0 opened
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: TUN/TAP TX queue length set to 100
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: /sbin/ip link set dev tun0 up mtu 1500
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: /sbin/ip addr add dev tun0 172.20.xxx.xxx/22 broadcast 172.20.35.255
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: /etc/openvpn/up.sh tun0 1500 1570 172.20.xxx.xxx 255.255.252.0 init
Jun  7 18:01:55 machine-perso ovpn-ipvanish-host-VPN[1422]: Initialization Sequence Completed
[Edit] Je ne comprends pas tout ton up.sh :
ip rule add from $4/32 table VPN
D'où sors-tu cette variable "4" ? Elle n'est pas définie dans ton up.sh.
$4 ce doit être l'ip qui t'es attribuée par ton serveur vpn, elle est définie à l'exécution de ta conf openvpn et transmise à up.sh.
Pour t'en rendre compte, en haut de ton script up.sh, tu rajoutes :

echo $1 >/tmp/log1
echo $2 >/tmp/log2
echo $3 >/tmp/log3
echo $4 >/tmp/log4

comme ça tu identifieras tous les variables transmises par openvpn en allant voir ces fichiers.
D'accord, merci. Bonne idée.
Effectivement, je confirme, c'est bien l'adresse IP attribuée par le serveur VPN pour la variable 4.

On pourrait même remplacer tun0 par $1 puisque l'interface créée par OpenVPN est renvoyée en variable 1.

J'ai un petit peu de temps cet après-midi, je m'y recolle un peu.

D'ailleurs, avant de me replonger dedans, j'ai jeté un coup d’œil au syslog et j'ai constaté que le VPN a été relancé à :
- Jun 11 08:20:29 ;
- Jun 11 08:30:50 ;
- Jun 11 09:27:16 ;
- Jun 11 10:27:17 ;
- Jun 11 11:27:16.

Aussi loin que je puisse remonter dans l'historique.
Hormis pour l'entrée la plus ancienne, ça fait exactement toutes les heures... Bizarre.

Autre chose, dans ton script up.sh, tu as :
#!/bin/bash
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/etc/openvpn/stoptorrent &
killall checkvpn
sleep 2
loip="192.168.0.1"
vpnport="443"
tcpopenport="23951,21829,20796,28112,28308,28628"
udpopenport="23951,21829,20796,28116"
iptables -N SERVICES
ip route add default dev tun0 table VPN
ip rule add from $loip/32 table VPN
ip rule add from $4/32 table VPN
iptables -A PREROUTING -t nat -i tun0 -p tcp --dport $vpnport -j DNAT --to $loip
iptables -A PREROUTING -t nat -i tun0 -p udp --dport $vpnport -j DNAT --to $loip
iptables -A POSTROUTING -t nat -o tun0 -j MASQUERADE
iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A SERVICES -p tcp -m multiport --dports $tcpopenport -j ACCEPT
iptables -A SERVICES -p udp -m multiport --dports $udpopenport -j ACCEPT
iptables -A FORWARD -s $loip/32 -o eth0 -j DROP
/etc/openvpn/starttorrent &
exit
Peux-tu également m'expliquer :
- "starttorrent" et "stoptorrent" ? Le "&" est aussi nécessaire après "stoptorrent" ? Pourquoi "exit" à la fin ?
- tu utilises des ports différents, à quel endroit correspond tout ce que tu fais passer en HTTPS ?
D'ailleurs, dans la configuration fournie par mon fournisseur VPN, je dois préciser :
remote xxxxx.ipvanish.com 443
Je dois peut-être apporter les mêmes modifications que toi du coup ?

Sinon je fais la fourmi, j'essaie de comprendre, et je corrige petit à petit les erreurs renvoyées par le syslog pour ma connexion VPN. En espérant arriver à une configuration la plus propre possible au final. ^^

Là je me bats avec les option DEPRECATED. 😛

Un autre point que je ne comprends pas. OpenVPN revoie un masque en /22 pour l'adresse IP renvoyée en variable 4, celle attribuée par le serveur VPN. La règle associée que l'on ajoute dans la table "VPN" ne devrait-elle pas être en /22 également ? Plutôt qu'en /32 ?


Merci.
Bon, ça avance, ça avance ! ^^

Je posterai tous mes fichiers quand je n'aurai plus d'erreurs, mais j'en suis proche (à priori ^^).

Il y a aussi quelques petites erreurs dans le tuto je pense, avec des valeurs différentes de celles du tuto de tech.kanka.ch.

Là je pense que je dois juste ajouter directement ces données dans mon fichier de configuration OpenVPN.

syslog :
Jun 11 14:26:53 xxxxx: PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 193.xxx.xxx.xxx,dhcp-option DNS 193.xxx.xxx.xxx,rcvbuf 262144,explicit-exit-notify 5,route-gateway 172.20.xxx.xxx,topology subnet,ping 20,ping-restart 40,ifconfig 172.20.xxx.xxx 255.255.252.0'
Jun 11 14:26:53 xxxxx: Options error: option 'redirect-gateway' cannot be used in this context ([PUSH-OPTIONS])
Jun 11 14:26:53 xxxxx: Options error: option 'dhcp-option' cannot be used in this context ([PUSH-OPTIONS])
Jun 11 14:26:53 xxxxx: Options error: option 'dhcp-option' cannot be used in this context ([PUSH-OPTIONS])
Jun 11 14:26:53 xxxxx: OPTIONS IMPORT: timers and/or timeouts modified
Jun 11 14:26:53 xxxxx: OPTIONS IMPORT: explicit notify parm(s) modified
Jun 11 14:26:53 xxxxx: OPTIONS IMPORT: --sndbuf/--rcvbuf options modified
Jun 11 14:26:53 xxxxx: OPTIONS IMPORT: --ifconfig/up options modified
Jun 11 14:26:53 xxxxx: OPTIONS IMPORT: route-related options modified
Pour :
redirect-gateway def1 bypass-dhcp
route-gateway 172.20.xxx.xxx
dhcp-option DNS 193.xxx.xxx.xxx
dhcp-option DNS 193.xxx.xxx.xxx
topology subnet
Enfin bon, faut que je planche là-dessus, je vais voir la doc OpenVPN.

[Edit] Ah oui, j'avais oublié, rTorrent démarre bien avec le script maintenant, plus besoin de le lancer automatiquement.
Peux-tu également m'expliquer :
- "starttorrent" et "stoptorrent" ? Le "&" est aussi nécessaire après "stoptorrent" ? Pourquoi "exit" à la fin ?
- tu utilises des ports différents, à quel endroit correspond tout ce que tu fais passer en HTTPS ?
Salut;

Starttorrent est un script qui démarre une par une toutes les sessions rtorrent en place (de chaque utilisateur) + mldonkey-server que j'utilisais à l'époque mais abandonné depuis.

stoptorrent ferme ces mêmes applications

le & c'est pour passer à la ligne suivante tout de suite (sans attendre que starttorrent soit terminé)...mais pas nécessaire..

Les ports différents correspondent a tous les ports utilisés par les différentes sessions rtorrent + mldonkey-server (tout ce que je voulais faire transiter par vpn).
D'accord, j'étais surpris de ne pas voir de checkvpn à la fin de ton up.sh. Mais il doit se trouver dans ton starttorrent.
Je crois que j'ai une piste concernant mes erreurs.

J'ai regardé le fichier /etc/openvpn/update-resolv-conf et voici son contenu :
#!/bin/bash
#
# Parses DHCP options from openvpn to update resolv.conf
# To use set as 'up' and 'down' script in your openvpn *.conf:
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
#
# Used snippets of resolvconf script by Thomas Hood and Chris Hanson.
# Licensed under the GNU GPL.  See /usr/share/common-licenses/GPL.
#
# Example envs set from openvpn:
#
#     foreign_option_1='dhcp-option DNS 193.43.27.132'
#     foreign_option_2='dhcp-option DNS 193.43.27.133'
#     foreign_option_3='dhcp-option DOMAIN be.bnc.ch'
#

[ -x /sbin/resolvconf ] || exit 0
[ "$script_type" ] || exit 0
[ "$dev" ] || exit 0

split_into_parts()
{
        part1="$1"
        part2="$2"
        part3="$3"
}

case "$script_type" in
  up)
        NMSRVRS=""
        SRCHS=""
        for optionvarname in ${!foreign_option_*} ; do
                option="${!optionvarname}"
                echo "$option"
                split_into_parts $option
                if [ "$part1" = "dhcp-option" ] ; then
                        if [ "$part2" = "DNS" ] ; then
                                NMSRVRS="${NMSRVRS:+$NMSRVRS }$part3"
                        elif [ "$part2" = "DOMAIN" ] ; then
                                SRCHS="${SRCHS:+$SRCHS }$part3"
                        fi
                fi
        done
        R=""
        [ "$SRCHS" ] && R="search $SRCHS
"
        for NS in $NMSRVRS ; do
                R="${R}nameserver $NS
"
        done
        echo -n "$R" | /sbin/resolvconf -a "${dev}.openvpn"
        ;;
  down)
        /sbin/resolvconf -d "${dev}.openvpn"
        ;;
esac
Il faudrait donc que j'ajoute :
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
à ces lignes :
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
Mais étant loin d'être un expert en scripts, j'aimerai bien un coup de main !

Comment faut-il que je fasse ?

Ça ?
up /etc/openvpn/up.sh
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/down.sh
down /etc/openvpn/update-resolv-conf
Ou ça ?
up /etc/openvpn/up.sh /etc/openvpn/update-resolv-conf
down /etc/openvpn/down.sh /etc/openvpn/update-resolv-conf
Ou avec "&&" ?

Sinon, au pire, j'ajoute le contenu de ce script dans mon up et dans mon down, au moins je serai certain que ça fonctionnera. ^^

Merci de votre aide.

[Edit] Apparemment je n'ai pas d'autres choix que d'insérer ce script dans les autres.

[Edit 2] Non, marche pas. Tant pis, je mets directement les options dans le fichier de conf. Je ne suis pas sûr que ça passe quand même, d'après certains, c'est un dommage collatéral du route-nopull. ^^

[Edit 3] Bon, faut que je trouve un autre moyen, le blocage vient bien de route-nopull :
--route-nopull
When used with --client or --pull, accept options pushed by server EXCEPT for routes and dhcp options like DNS servers.
When used on the client, this option effectively bars the server from adding routes to the client's routing table, however note that this option still allows the server to set the TCP/IP properties of the client's TUN/TAP interface.
[Edit 4] Je crois que je me prends la tête pour rien. On ne veut pas que le trafic autre que torrent passe par le VPN, donc c'est certainement normal que l'on n'autorise pas le serveur VPN à pousser ses serveurs DNS ou passerelle.
En tout cas tout a l'air de fonctionner.
Si un jour un expert (comme Jean-Luc, merci à toi ou autre) passe par ici et me confirme avoir les mêmes erreurs et que c'est normal, ça me rassurerait. ^^ Ou l'inverse. 😛
Ton install, c'est sur un serveur dédié, ou sur un NAS à la maison ?
C'est sur un serveur dédié à la maison. ^^

Un mini PC chinois format Mac mini avec deux ports réseau, et une Debian 8 installée dessus.
C'est la version de l'année dernière de ce PC :
Intel Celeron C1037U aluminum fanless Mini PC

Et j'ai monté le répertoire de téléchargement de mon NAS (Synology DS1812+) dans le /mnt.
Pacnam wrote:C'est sur un serveur dédié à la maison. ^^

Un mini PC chinois format Mac mini avec deux ports réseau, et une Debian 8 installée dessus.
C'est la version de l'année dernière de ce PC :
Intel Celeron C1037U aluminum fanless Mini PC

Et j'ai monté le répertoire de téléchargement de mon NAS (Synology DS1812+) dans le /mnt.
Bref..c'est comme un NAS...

Je pense mieux comprendre ...

J'ai déjà eu ce type de problèmes, sur une cubieboard me servant de NAS... ;"update-resolv-conf" te modifie ton fichier "/etc/resolv.conf" dès le lancement d'openvpn; et j'avais beau utiliser bind en nameserver ou opendns "update-resolv-conf" me modifiait mes nameservers avec les dns de mon FAI (FREE) qui se refusait de résoudre quand ma cubieboard avait pris l'ip du vpn et n'avait plus celle de free....

Solution :

Remplir correctement "/etc/resolv.conf" avec les nameservers adéquats en fonction ou non de l'utilisation de bind9 ou utiliser les nameservers de google ou d'opendns et empêcher toute modification de ce fichier par un "chattr +i "/etc/resolv.conf"

J'ai bien dit..je pense ....à confirmer...
Comme l'ensemble est fonctionnel, je poste mes fichiers de configuration, ça peut toujours dépanner quelqu'un.

Rien d'extraordinaire par rapport au tuto de ZobraK (un grand merci à toi ! ), mais parfois un détail peut éviter de longues heures de recherche ! ^^

Je précise à nouveau ma configuration, c'est un serveur hébergé chez moi, avec :
- WAN : connexion fibre optique 50 Mbits/s en UP et 200 Mbits/s en DL ;
- VPN : abonnement IPVanish ;
- LAN : réseau gigabit cuivre, le serveur a deux ports réseau physiques (eth0 et eth1), tous deux connectés sur le même switch ;
- serveur : mini PC chinois avec processeur Celeron basse consommation, le tout entièrement passif. C''est la version de l'année dernière de ce PC :
Intel Celeron C1037U aluminum fanless Mini PC
- NAS : Synology DS1812+, les fichiers sont stockés dessus.

Pour le tuto, je remplace mes adresses IP par celles-ci :
- serveur, eth0 : 192.168.1.20
- serveur, eth1 : 192.168.0.1
- NAS : 192.168.1.10

J'ai commencé par suivre ce tuto (encore un grand merci à l'auteur et aux participants !) :
[Tuto] Installer ruTorrent sur Debian 8 {nginx & php-fpm}

J'ai laissé les répertoires par défaut dans .rtorrent.rc, mais j'ai créé des liens symboliques à la place des répertoires d'origine.

Point de montage :
J'ai fait un montage NFS, donc j'ai commencé par installer le paquet nfs-common sur le serveur, puis j'ai modifié /etc/fstab :
# Montage de download du NAS en NFS
192.168.1.10:/volume1/download /mnt/NAS/download  nfs     defaults,user,noatime 0 0
On peut également utiliser l'option noauto (user,noauto) pour interdire le montage automatique si l'on veut lancer le montage depuis un script.


Si certains galèrent pour la configuration du partage NFS côté NAS (j'ai galéré ^^ et pas mal avec les droits aussi 😛 ), voici ce que j'ai dû faire :
---------------------------------------------
Sur le NAS, via la webUI :

Panneau de configuration / Services de fichiers / Service NFS / COCHER "Activer NFS"

Panneau de configuration / Dossier partagé / SELECTIONNER dossier à partager / Modifier
Autorisations NFS / Créer :
- adresse IP client NFS (ici serveur sous Debian, adresse IP du LAN, eth0, 192.168.1.20)
- Lecture/écriture
- Mappage de tous les utilisateurs sur admin
- sys (AUTH_SYS)
- Activer le mode asynchrone
Sur le NAS, en SSH, pour sécuriser les accès :

/etc/hosts.allow
portmap: 192.168.1.20
lockd: 192.168.1.20
mountd: 192.168.1.20
rquotad: 192.168.1.20
statd: 192.168.1.20
/etc/hosts.deny
portmap: ALL
nfsd: ALL
mountd: ALL
---------------------------------------------

Modifier les droits sur le répertoire de téléchargement visé:
chmod -R 770 /mnt/NAS/download/<répertoire_visé>/
Création de liens symboliques.

Rappel :
/watch = y mettre un .torrent pour l’ajouter à rutorrent sans se connecter au site.
/torrents = dossier des torrents terminés.
/.session = dossier enregistrant les sessions rtorrent.

Se placer dans le bon dossier, normalement :
cd /home/<rtorrent_user>/

Commencer par supprimer les dossiers à remplacer par un lien symbolique, dans mon cas uniquement watch et torrents. Ça ne me dérange pas que .session reste sur le serveur. Puis :
pour watch :
ln -s /mnt/NAS/download/<répertoire_visé>/watch/ watch

pour torrents :
ln -s /mnt/NAS/download/<répertoire_visé>/ torrents

Et ça devrait être bon pour le téléchargement directement sur le NAS.

Ensuite, pour la partie qui nous intéresse plus ici, le but par rapport à ce tuto est d'utiliser l'interface eth1 à la place de l'interface virtuelle lo:1.

Je passe sur les explications qui ont déjà été données, voici mes fichiers.

/etc/openvpn/ipvanish.conf :
client
dev tun
proto udp
nobind

; pas de modification de la table de routage depuis le serveur
route-nopull

; scripts locaux pour les routes et le client torrent
script-security 2
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh

; host
remote <xxxxx>.ipvanish.com 443        # <xxxxx> a remplacer par le serveur choisi
resolv-retry infinite

; authentification
persist-key
persist-tun
persist-remote-ip
ca /etc/openvpn/ca.ipvanish.com.crt        # j ai place le certificat d IPVanish dans le meme repertoire
verify-x509-name <xxxxx>.ipvanish.com name        # <xxxxx> a remplacer par le serveur choisi
auth-user-pass /etc/openvpn/pass        # votre fichier avec login-password IPVanish
comp-lzo
verb 3
auth SHA256
cipher AES-256-CBC
keysize 256
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-DSS-WITH-AES-256-CBC-SHA:TLS-RSA-WITH-AES-256-CBC-SHA

; Maintien de la connexion. PING envoye toutes les 10s, restart si pas de reponse pendant 60s.
keepalive 10 60
Juste après ça, ne pas oublier de modifier le fichier /etc/default/openvpn. Vous verrez 3 lignes #AUTOSTART=".....".
décommentez la dernière (il faut virer le "#") et remplacez la partie entre " " par ipvanish (ne pas mettre le ".conf", OpenVPN l'ajoute automatiquement).

/etc/openvpn/pass :
<login_IPVanish>
<password_IPVanish>
et bien sûr, en root, mettre les droits 700 sur le fichier, pour sécuriser l'accès :
chmod 700 /etc/openvpn/pass

/etc/openvpn/up.sh :
#!/bin/sh
killall checkVPN
sleep 2

eth1_ip="192.168.0.1"        # remplacer si necessaire
vpn_port="443"        # remplacer si necessaire
tcp_port="45000:65000"        # remplacer si necessaire
udp_port="57832"        # remplacer si necessaire
# Variables recuperees par OpenVPN : $1=tun0, $4=172.20.xxx.xxx

iptables -N SERVICES
ip route add default dev $1 table VPN
ip rule add from $eth1_ip/32 table VPN
ip rule add from $4/32 table VPN
iptables -A PREROUTING -t nat -i $1 -p tcp --dport $vpn_port -j DNAT --to $eth1_ip
iptables -A PREROUTING -t nat -i $1 -p udp --dport $vpn_port -j DNAT --to $eth1_ip
iptables -A POSTROUTING -t nat -o $1 -j MASQUERADE
iptables -A INPUT -i $1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A SERVICES -p tcp --dport $tcp_port -j ACCEPT
iptables -A SERVICES -p udp --dport $udp_port -j ACCEPT
iptables -A FORWARD -s $eth1_ip/32 -o eth0 -j DROP

/etc/init.d/<rtorrent_user>-rtorrent restart        # a modifier
/usr/bin/checkVPN &
/etc/openvpn/down.sh :
#!/bin/sh
killall checkVPN
sleep 2
/etc/init.d/<rtorrent_user>-rtorrent stop        # a modifier

eth1_ip="192.168.0.1"        # remplacer si necessaire
vpn_port="443"        # remplacer si necessaire
tcp_port="45000:65000"        # remplacer si necessaire
udp_port="57832"        # remplacer si necessaire
# Variables recuperees par OpenVPN : $1=tun0, $4=172.20.xxx.xxx

iptables -D FORWARD -s $eth1_ip/32 -o eth0 -j DROP
iptables -D SERVICES -p udp --dport $udp_port -j ACCEPT
iptables -D SERVICES -p tcp --dport $tcp_port -j ACCEPT
iptables -D INPUT -i $1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -D POSTROUTING -t nat -o $1 -j MASQUERADE
iptables -D PREROUTING -t nat -i $1 -p udp --dport $vpn_port -j DNAT --to $eth1_ip
iptables -D PREROUTING -t nat -i $1 -p tcp --dport $vpn_port -j DNAT --to $eth1_ip
ip rule del from  $4/32 table VPN
ip rule del from $eth1_ip/32 table VPN
ip route del default dev $1 table VPN
/usr/bin/checkVPN :
#!/bin/bash

# PING vers www.google.com toutes les 5 min.
# Si aucun paquet n est recu on relance le VPN.

while [ 1 > 0 ]; do
        sleep 300
	T=`ping -I 192.168.0.1 -c 1 www.google.com |grep "packets transmitted"`
	if [[ ${T:23:1} != "1" ]]
	then 
		/etc/init.d/openvpn restart
	fi
done
Je ne crois pas avoir oublié quelque chose d'important, sinon je modifierai mon post.

Bonne journée !!!
jean-luc wrote:Bref..c'est comme un NAS...

Je pense mieux comprendre ...

J'ai déjà eu ce type de problèmes, sur une cubieboard me servant de NAS... ;"update-resolv-conf" te modifie ton fichier "/etc/resolv.conf" dès le lancement d'openvpn; et j'avais beau utiliser bind en nameserver ou opendns "update-resolv-conf" me modifiait mes nameservers avec les dns de mon FAI (FREE) qui se refusait de résoudre quand ma cubieboard avait pris l'ip du vpn et n'avait plus celle de free....

Solution :
Remplir correctement "/etc/resolv.conf" avec les nameservers adéquats en fonction ou non de l'utilisation de bind9 ou utiliser les nameservers de google ou d'opendns et empêcher toute modification de ce fichier par un "chattr +i "/etc/resolv.conf"

J'ai bien dit..je pense ....à confirmer...
Le problème vient de Synology :
Linux Kernel IP Advanced Routing
C'est ce détail uniquement qui m'empêche de faire la même chose sur mon NAS...

Après je voulais me monter un serveur Debian de toute façon, pour tester pas mal de choses, donc j'en profite aussi pour en faire une seedbox. Mais c'est vrai, plus pour m'amuser qu'autre chose.

Pour les DNS, je pensais avoir besoin de ceux fournis par le VPN, mais à partir du moment où tout le trafic torrent passe par le VPN, ça ne devrait pas être nécessaire ? En fait je veux juste être certain que rTorrent/ruTorrent ne permettent pas de voir mon adresse IP publique fournie par le FAI, mais je ne sais pas comment fonctionne ma configuration actuelle si rTorrent doit résoudre un nom. Je ne sais même pas si il peut avoir à le faire...

Concernant les DNS par défaut, pas d'inquiétude pour moi, je les maîtrise au niveau de mon routeur, j'ai remplacé ma box FAI par un routeur perso, et j'indique à toutes mes machines d'utiliser mon routeur comme serveur DNS.
Le problème vient de Synology :
Linux Kernel IP Advanced Routing
Mettre à jour le kernel si "CONFIG_IP_ADVANCED_ROUTER=y" n'a pas été implémenté...sinon point de salut...

Sinon pour tes DNS je ne m'inquiète pas...c'est que uniquement j'ai déjà eu le cas ou "update-resolv-conf" me modifiait à mon insu "/etc/resolv.conf"...
D'accord, merci pour l'info.
Merci beaucoup pour le tuto !
Ça fait un moment que je voulais le faire sur mon transmission sans prendre la peine de rechercher les différentes doc, un grand merci 🙂
16 jours plus tard
Pacnam wrote:D'accord, merci pour l'info.
Sinon comme t'es embêté avec le routage "CONFIG_IP_ADVANCED_ROUTER" non implémenté dans ton kernel; dans le up.sh tu mets simplement :
sed -i 's/.*"bind-address-ipv4":.*/    "bind-address-ipv4": \"'$4'\",/' /etc/transmission-daemon/settings.json
Comme ça transmission sera bind directement sur ton vpn, et tu pourras t'affranchir de l'interface et du routage vers lo:1 dans l'exemple du tuto.

Je l'ai testé sur une cubieboard avec rtorrent :
sed -i 's/.*bind =.*/bind = '$4'/' /home/seedbox1/.rtorrent.rc
...et ça marche..

12 jours plus tard
Bonjour,

tu dis que cette méthode permet de s'affranchir de l'interface et du routage, on peut donc modifier les fichier up.sh et down.sh et enlever toutes les règles iptable ? du coup si tu pouvais me donner un exemple de ce que pourrait être ces deux fichiers avec cette solution.

merci
5 mois plus tard
laster13 wrote:Bonjour,

tu dis que cette méthode permet de s'affranchir de l'interface et du routage, on peut donc modifier les fichier up.sh et down.sh et enlever toutes les règles iptable ? du coup si tu pouvais me donner un exemple de ce que pourrait être ces deux fichiers avec cette solution.
merci
Salut;
Je viens de m'apercevoir que tu m'avais posé une question ...ça date des vacances...
Regarde ici :
http://www.ichimonji10.name/blog/1/

Mon openvpn étant lancé par nobody, dans /etc/sudoers :
nobody  ALL=(ALL) NOPASSWD:  /etc/openvpn/script-up.sh, /etc/openvpn/script-down.sh
Mon up.sh :
sudo /etc/openvpn/script-up.sh $1 $4 $5
Mon down.sh :
sudo /etc/openvpn/script-down.sh $1 $4 $5
Mon script-up.sh :
#!/bin/bash
sed -i "/^bind/ s/bind.*/bind \= $2/g" /home/seedbox1/.rtorrent.rc
sed -i "/^bind/ s/bind.*/bind \= $2/g" /home/seedbox2/.rtorrent.rc
ip rule add from "$2" table VPN
ip route add table VPN default via "$3"
ip route add table VPN "$3" via "$2" dev "$1"
/usr/local/bin/rstart &
systemctl start rt@user1.service
systemctl start rt@user1.service
exit
Mon script-down.sh :
#!/bin/bash
ip rule delete from "$2" table VPN
ip route flush table VPN
systemctl stop rt@user1.service
systemctl stop rt@user1.service
exit
Ce qui donnerait pour le tuto d'ici avec openvpn lancé en root (pas besoin de la ligne sudoers ni script-up ou script-down) mais directement :

up.sh :
#!/bin/bash
sed -i "/^bind/ s/bind.*/bind \= $4/g" /home/user1/.rtorrent.rc
sed -i "/^bind/ s/bind.*/bind \= $4/g" /home/user2/.rtorrent.rc
#rajouter autant de lignes sed que d'user seedbox...
ip rule add from "$4" table VPN
ip route add table VPN default via "$5"
ip route add table VPN "$5" via "$4" dev "$1"
systemctl start rt@user1.service
systemctl start rt@user2.service
#rajouter autant de lignes systemctl que d'user seedbox...
killall checkVPN
/usr/bin/checkVPN &
exit
down.sh :
#!/bin/bash
killall checkVPN
ip rule delete from "$4" table VPN
ip route flush table VPN
systemctl stop rt@user1.service
systemctl stop rt@user2.service
#rajouter autant de lignes systemctl que d'user seedbox...ou
killall screen
exit
2 mois plus tard
Bonjour,

Génial Jean-Luc ! Ça fonctionne parfaitement !!!

Je te réponds bien longtemps après, j'ai eu pas mal de choses à gérer ces derniers temps. Je viens de changer de fournisseur VPN, et j'ai profité de modifier les fichiers de configuration pour tester ta méthode, que j'avais gardé dans un coin de ma tête avec intérêt.

J'en profite pour te demander comment tu as modifié checkVPN ? Je ne sais pas vraiment manier les scripts bash, mais celui d'origine ne peut plus fonctionner puisque l'on n'utilise plus l'interface virtuelle dédiée.

/usr/bin/checkVPN :
#!/bin/bash

# PING vers www.google.com toutes les 5 min.
# Si aucun paquet n est recu on relance le VPN.

while [ 1 > 0 ]; do
        sleep 300
	T=`ping -I 192.168.0.1 -c 1 www.google.com |grep "packets transmitted"`
	if [[ ${T:23:1} != "1" ]]
	then 
		/etc/init.d/openvpn restart
	fi
done
Je suppose qu'il faut que j'essaie de remplacer "192.168.0.1" par l'adresse IP indiquée dans le ligne "bind = X.X.X.X" de .rtorrent.rc ? Mais je dois faire appel à cette ligne, comme tu le fais avec ton sed ?

[EDIT] J'ai commencé à lire le lien que tu as cité, en fait c'est tout bête (corrige-moi si je me trompe ^^), il suffit de remplacer l'adresse IP de l'interface de sortie par l'interface virtuelle créée par OpenVPN, tun0. On a donc :
ping -I tun0 -c 1 www.google.com
Et ça fonctionne.


Et deuxième question, comme tout n'est pas encore parfaitement clair pour moi, pourrais-tu me confirmer (ou infirmer) le point suivant s'il te plaît ?

Lorsque je lis les logs d'OpenVPN, j'obtiens :
ovpn: SENT CONTROL [Fournisseur VPN]: 'PUSH_REQUEST' (status=1)
ovpn: PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option DNS X.X.X.X,dhcp-option DNS X.X.X.Y,ping 10,comp-lzo no,route Z.Z.Z.X,topology net30,ifconfig Z.Z.Z.Y Z.Z.Z.Z'
ovpn: Options error: option 'redirect-gateway' cannot be used in this context ([PUSH-OPTIONS])
ovpn: Options error: option 'dhcp-option' cannot be used in this context ([PUSH-OPTIONS])
ovpn: Options error: option 'dhcp-option' cannot be used in this context ([PUSH-OPTIONS])
ovpn: Options error: option 'route' cannot be used in this context ([PUSH-OPTIONS])
(Je peux envoyer les vraies adresses IP en MP si nécessaire.)

Cela a l'air de correspondre à ce qui est expliqué dans ce ticket :
https://community.openvpn.net/openvpn/ticket/291

Est-ce que cela veut dire que mon routage fonctionne bien et qu'il s'agit simplement d'un message d'erreur inadapté ?
Je précise que mon torrent "check my torrent IP" me renvoie bien l'adresse IP du serveur de mon fournisseur de VPN.

Merci !!!

[EDIT 2] En fait, rtorrent a l'air de crasher très vite avec ta méthode, alors que ça a l'air de tenir avec l'interface virtuelle dédiée. J'ai l'impression que c'est parce que $4 est régulièrement modifiée.
4 mois plus tard

Bonjour à tous,
Merci Zobrak pour ce tuto qui complète bien celui de Kanka.ch. Cependant je n'y arrive pas. Je ne dois pas être très loin mais ça coince

Assez Nouveau sur Linux, je viens d'acquérir une rasp pi 2 sur laquelle j'ai installé openvpn et transmission et suivi la procédure indiquée.
J'ai un compte VPN sur Freedomip et un port ouvert udp tcp (30001)
J'ai transféré les ports 30001, 443 dans ma box numéricable (192.168.0.1) vers ma rasp en ip fixe 192.168.0.29.

Après un /etc/init.d/openvpn start et ifconfig, je n'ai pas de tun0 ( comme sbouby )
sur cat /var/log/syslog |grep openvpn, voici le message d'erreur :

raspberrypi ovpn-client[503]: WARNING: file '/etc/openvpn/freedomip/mdp/pass.txt' is group or others accessible
raspberrypi ovpn-client[503]: WARNING: file '/etc/openvpn/freedomip/ta.key' is group or others accessible
raspberrypi ovpn-client[503]: Control Channel Authentication: using '/etc/openvpn/freedomip/ta.key' as a OpenVPN static key file
 raspberrypi ovpn-client[562]: /etc/openvpn/freedomip/scripts/up.sh tun0 1500 1560 10.8.1.154 10.8.1.153 init
raspberrypi systemd[1]: openvpn@client.service: main process exited, code=exited, status=1/FAILURE
raspberrypi systemd[1]: Unit openvpn@client.service entered failed state.
raspberrypi systemd[1]: Stopping system-openvpn.slice.
raspberrypi systemd[1]: Removed slice system-openvpn.slice

Voici mon "clientNL.conf":

client
# Ports availables: 443, 53, 8080, 1194, 110, 995
port 443
# Mode availables: TCP (default / safer) and UDP (faster)
proto tcp
dev tun
#Pas de modification depuis le serveur de la table de routage 
route-nopull
remote nl.freedom-ip.com
resolv-retry infinite
ca /etc/openvpn/freedomip/ca.crt
tls-auth /etc/openvpn/freedomip/ta.key 1
auth-user-pass /etc/openvpn/freedomip/mdp/pass.txt
cipher AES-256-CBC
comp-lzo
verb 1
nobind
ns-cert-type server
script-security 2
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
;Maintien de la connexion: ping envoye toutes les 10s, restart si pas de reponses pendant 60s
keepalive 10 60

Mon fichier up.sh :

iptables -N SERVICES

#Obtenir l'adresse IP donnée par le VPN à tun0, à supposer que votre vpn crée une interface de ce nom.
NET_DEV="tun0"
NET_IP="$(command ifconfig "${NET_DEV}" \
    | command grep 'inet ' \
    | command sed -e 's/^.*inet [^:]*:\([^ ]*\) .*$/\1/')"

# Add a default route via <tun0> into the VPN routing table
ip route add default dev tun0 table VPN

# Pass traffic from lo:1 (192.168.10.1) to the VPN routing table, using policy routing ("ip rule" commands)
ip rule add from 192.168.10.1/32 table VPN

# Pass traffic from tun0 IP address to the VPN routing table
ip rule add from ${NET_IP}/32 table VPN

#On ajoute les règles iptables pour faire le NAT

 # Source NAT and destination NAT rules
  iptables -A PREROUTING -t nat -i tun0 -p tcp --dport 443 -j DNAT --to 192.168.10.1
  iptables -A PREROUTING -t nat -i tun0 -p udp --dport 443 -j DNAT --to 192.168.10.1
  iptables -A POSTROUTING -t nat -o tun0 -j MASQUERADE
  # Allow session continuation traffic
  iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
  # Allow Bittorrent traffic via tun0
  iptables -A SERVICES -p tcp --dport 30001 -j ACCEPT  # transmission random range
  iptables -A SERVICES -p udp --dport 30001 -j ACCEPT  # DHT
  # Disallow BitTorrent traffic via eth0 - Just to be extra safe [img]/assets/images/smileys/wink.png[/img]
  iptables -A FORWARD -s 192.168.10.1/32 -o eth0 -j DROP

#Démarrage de transmission

/etc/init.d/transmission-daemon restart

#Démarrage du script vérifiant que le VPN est toujours actif

killall checkVPN
/usr/bin/checkVPN &

Mon fichier down.sh :

NET_DEV="tun0"
NET_IP="$(command ifconfig "${NET_DEV}" \
    | command grep 'inet ' \
    | command sed -e 's/^.*inet [^:]*:\([^ ]*\) .*$/\1/')"

#On arrête le script qui va vérifier l'existence du tunnel VPN
killall checkVPN
#On arrête transmission
/etc/init.d/transmission-daemon stop

#On efface les regles iptables ajoutees

iptables -D FORWARD -s 192.168.10.1/32 -o eth0 -j DROP
iptables -D SERVICES -p udp --dport 30001 -j ACCEPT # DHT
iptables -D SERVICES -p tcp --dport 30001 -j ACCEPT # rTorrent random range
iptables -D INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -D POSTROUTING -t nat -o tun0 -j MASQUERADE
iptables -D PREROUTING -t nat -i tun0 -p udp --dport 443 -j DNAT --to 192.168.10.1
iptables -D PREROUTING -t nat -i tun0 -p tcp --dport 443 -j DNAT --to 192.168.10.1

Remove rule for the secondary loopback IP address (192.168.0.1)

ip rule del from 192.168.10.1/32 table VPN

Remove rule for tun0 IP address

ip rule del from ${NET_IP}/32 table VPN

Remove the default route via tun0 from the IPRED routing table

ip route del default dev tun0 table VPN

Interface :

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
auto lo:1
        iface lo:1 inet static
        address 192.168.10.1
        netmask 255.255.255.255

les lignes importantes de transmission settings.json

  "bind-address-ipv4": "192.168.10.1", 
    "bind-address-ipv6": "fe80::", 
    "blocklist-enabled": false, 
    "download-dir": "/media/disque1/Data", 
    "incomplete-dir": "/media/disque1/Temp", 
    "incomplete-dir-enabled": true, 
    "peer-port": 30001, 
    "peer-port-random-high": 30001, 
    "peer-port-random-low": 30001, 
    "peer-port-random-on-start": false, 
    "port-forwarding-enabled": false, 
    "rpc-bind-address": "0.0.0.0", 
    "rpc-port": 9091, 
    "rpc-url": "/transmission/", 
    "rpc-username": "moi", (pour les essais)
    "rpc-whitelist": "127.0.0.1", 
    "rpc-whitelist-enabled": false, 

mon fichier interfaces :

Include files from /etc/network/interfaces.d:

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
auto lo:1
        iface lo:1 inet static
        address 192.168.10.1
        netmask 255.255.255.255

mon rt_tables

#
# reserved values
#
255	local
254	main
253	default
0	unspec
#
# local
#
#1	inr.ruhep
1 VPN

mon checkVPN :

while [ 1 > 0 ]; do
        sleep 300
	T=`ping -I 192.168.10.1 -c 1 [url=http://www.google.com]www.google.com[/url] |grep "packets transmitted"`
	if [[ ${T:23:1} != "1" ]]
	then 
		/etc/init.d/openvpn restart
	fi
done

si cette discussion est toujours suivie, est-ce qu'une âme charitable pourrait m'aider et m'indiquer où se trouve mon (mes) erreurs ?
Merci d'avance
PS : au passage, comment faites-vous pour que votre code soit sur fond noir ?

9 mois plus tard

J ai teste 2 fois le TUTO dans une VM avec debian 8.
Lorsque openvpn et rutorrent sont lancés , rien ne se passe et tun0 n est pas créé.
Tout conseil est le bienvenu.

  • Aerya a répondu à ça.

    Ernie95 Des infos seraient les bienvenues, on ne peut pas deviner...

    Quelle type d'info ?

    Debian 8.6 et j'utilise vpntunnel

    1) contenu de /etc/network/interfaces

        source /etc/network/interfaces.d/*
    #auto lo
    #iface lo inet loopback
    # The primary network interface
    # allow-hotplug eth0
    # iface eth0 inet dhcp
    auto eth0
    iface eth0 inet static
            address 192.168.zzz.yy
            netmask 255.255.255.0
            broadcat 192.168.zzz.255
            gateway 192.168.zzz.xx
    #for openvpn
    auto l0:1
    iface l0:1 inet static
    address 192.168.0.1
    netmask 255.255.255.255

    2) contenu de /etc/openvpn/openvpn.conf

    client
    dev tun
    proto tcp
    nobind
    route-nopull
    ; Cert
    ns-cert-type server
    cipher BF-CBC
    ;Scripts
    script-security 2
    up /etc/openvpn/up.sh
    down /etc/openvpn/down.sh
    ;Host
    resolv-retry infinite
    ;auth
    auth-user-pass pass
    keepalive 10 30
    sndbuf 0
    rcvbuf 0
    remote "adresse et port du fournisseur"
    persist-key
    persist-tun
    persist-remote-ip
    comp-lzo
    verb 2
    <ca>
    le certificat
    <ca>

    3) résultat de ifconfig

    eth0      Link encap:Ethernet  HWaddr 08:00:27:8b:ac:52  
              inet adr:192.168.zzz.yy  Bcast:192.168.zzz.255  Masque:255.255.255.0
              adr inet6: sdddddd/64 Scope:Lien
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:66019 errors:0 dropped:4 overruns:0 frame:0
              TX packets:2582 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:1000 
              RX bytes:4188137 (3.9 MiB)  TX bytes:318097 (310.6 KiB)
    
    lo        Link encap:Boucle locale  
              inet adr:127.0.0.1  Masque:255.0.0.0
              adr inet6: ::1/128 Scope:Hôte
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:31 errors:0 dropped:0 overruns:0 frame:0
              TX packets:31 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:0 
              RX bytes:2160 (2.1 KiB)  TX bytes:2160 (2.1 KiB)

    4) résultat de iptables -L

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination 

    5) résultat de ps -aux |grep rtorrent

    root      3043  0.0  0.1  12748  2288 pts/0    S+   11:46   0:00 grep rtorrent

    VPS ou dédié ? Car sur VPS il faut encore souvent activer TUN/TAP dans son panel de gestion. Alors que sur dédié en général le script d'installation (si tu as utilisé un script) active cette interface virtuelle. Sinon

    sudo modprobe tun

    Je suis dans une machine virtuelle sous phpvbox (mis sur un nas).

    J ai installé sans script (manuellement en suivant le TUTO)

    Esg ce que dans debian 8.6 par rapport à wheezy il y a un Deamon à activer ou une commande à faire pour que tun soit autorisé ?

    De plus le fichier /etc/init.d/openvpn contient autostart en All alors que le fichier de etc/Default/openvpn est en Client pour autostart

    Je ne connais pas PHPvBox mais si c'est une VM il te faut activer TUN/TAP dans ton "interface" ou sur ton NAS. Ça ne dépend pas de l'OS, juste de l'hôte et de la VM. Il faut regarder la doc de ton NAS.

    Merci

    Même dans le host tun n apparaît pas.
    J ai bien bridgé eth0 avec la carte réseau de mon nas pour voir acces au reseau et internet.

    Mais pas de tun

    Je vais regarder en détail. Ce qui me surprend c est qu avec wheezy pas de soucis en VM.

    Bonjour Ernie, toujours sur Nas4free je vois 🙂

    Je me sers de ce tuto sur une carte banana pI avec une distribution bananian basée sur du Jessie et cela fonctionne parfaitement bien à une nuance près, j'utilise le tuto de kanta qui a toujours bien fonctionné pour moi
    https://tech.kanka.ch/index.php/faire-transiter-uniquement-les-torrents-dans-un-tunnel-openvpn-sur-un-serveur-debian/

    Je te conseille de procéder par élimination et de suivre le tuto avec transmission tel qu'il est préconisé dans le tuto. Si ca fonctionne tu transposes avec rutorrent.

    Hello Laster13
    Eh oui toujours sur nas4free 🙂

    Je soupconne une erreur dan le fichier de config openvpn.conf.
    L'interface tun ne s'active une fois le lien fait avec vpntunnel.

    SI j'ai rien c'est que le lien avec vpntunnel plante

    Je vais recommencer en partant du lien source que tu sites.

    7 jours plus tard

    cela fonctionne.
    Le point était sur le fichier de vpntunnel à modifier. Il a fallu que je modifie et sépare le fichier en 2 : 1 avec les paramètres et un avec la clé.

    4 mois plus tard

    Bonsoir,
    Je vais me lancer à partir d'un serveur créé à partir du script rtorrent de ce site, mais un point me turlupine.
    Dans ce tuto, dans le script up.sh on a :

    Source NAT and destination NAT rules

    iptables -A PREROUTING -t nat -i <tun0> -p tcp --dport <XXXX:XXXX> -j DNAT --to 192.168.0.1
    iptables -A PREROUTING -t nat -i <tun0> -p udp --dport <port udp pour les dht XXXX> -j DNAT --to 192.168.0.1
    iptables -A POSTROUTING -t nat -o <tun0> -j MASQUERADE
    on renseigne les ports utilisé par rtorrent

    dans le tuto de référence tech.kanka.ch

    Source NAT and destination NAT rules to make sure the incoming and ougoing packets on 192.168.0.1 are $

    iptables -A PREROUTING -t nat -i $1 -p tcp --dport 443 -j DNAT --to 192.168.0.1
    iptables -A PREROUTING -t nat -i $1 -p udp --dport 443 -j DNAT --to 192.168.0.1
    iptables -A POSTROUTING -t nat -o $1 -j MASQUERADE

    on indique le port du VPN.
    Quel est la bonne méthode ???

    Salut,

    J'ai pas lu les tutoriels mais logiquement faut router le trafic sur le VPN.

    un mois plus tard

    Bonjour lowfab, es-tu parvenu à faire fonctionner rtorrent (installé avec le script d'ex_rat) via openvpn avec ce tuto ? Personnellement je galère pas mal, je pense que le routage y est pour beaucoup...

    Par exemple:

    ping -I 192.168.0.123 -c 1 www.google.com

    (issu du checkVPN.sh) me renvoie systématiquement

    bind: Cannot assign requested address

    192.168.0.123 étant l'adresse que j'ai choisi pour le bind de rtorrent

    Si quelqu’un peut me donner une piste, merci 🙂

    edit : après un reboot je n'ai plus ce problème de bind... Mon seul souci restant est plutot lié à openvpn : si je lance avec un

    openvpn /etc/openvpn/<fichier de conf>.ovpn

    cela fonctionne. Par contre, dans le tuto il est indiqué

    service openvpn start

    et là ça ne fait absolument rien... J'ai l'impression que c'est mon fichier en .ovpn qui lui pose problème...

    7 mois plus tard

    Merci pour ce tuto !!
    🙂

    un mois plus tard

    Salut,

    Super tutoriel !
    Pour ma part je me pose la question suivante: du moment que nous activons le VPN, rutorrent n'arrive plus à communiquer avec rtorrent, est-ce normal ? Est-ce qu'il y a quelque chose à faire de particulier ?
    Je ne sais pas si j'obtiendrais des réponses vu qu'il n'y a pas eu d'activité ces derniers temps mais je tente quand même.
    Merci par avance,

    Thib

    9 mois plus tard

    Merci pour ton tutoriel.

    Etant donné que je ne veux pas gérer rTorrent depuis le terminal, j'aimerai savoir si ce setup est compatible avec l'installation RuTorrent décrite dans le dernier tuto du site.

    Ensuite, j'utilise APF firewall.
    Précédemment, j'ai essayé d'installer un serveur VPN sur mon dédié mais le firewall bloquait le surf une fois la liaison VPN établie.
    Client --vpn--> Dédié X --internet--> site web x

    Même en whitelistant tun0 ça bloquait. Je soupçonne qu'il n'apprécie pas le MASQUERADE
    J'ai peur que cela se reproduise avec ce tuto, est-ce quelqu'un sait quelle option activer/désactiver pour que ça marche ?

    Enfin, mon fournisseur VPN (PIA) n'autorise qu'un port pour le forwarding et il faut le récupérer via un appel sur leur API.
    Est-ce que quelqu'un a réussit à faire fonctionner leur script ou ce script ?
    (l'idée est d'ensuite éditer le fichier de config de rTorrent avant le lancement)

    Au passage, l'auteur de rTorrent à posté un tuto expliquant le traffic splitting appliqué à son logiciel.
    (il n'y a pas de règles de firewall à ajouter)

    Merci d'avance,