• Seedbox
  • Raspberry Pi 4 avec transmission et OpenVPN via VPS

Bonjour les amis,

Cela fait maintenant plusieurs jours que je me bat pour faire fonctionner correctement ma seedbox installé sur un Pi 4 et qui utilise un tunnel VPN sortant sur mon VPS chez FirstHerberge. Les téléchargement fonctionnent correctement et passe bien par le tunnel. Par contre dans la gui de transmission je trouve l'information "Port is closed" et de ce fait aucun téléchargement n'est partagé (l'upload ne marche donc pas).
Pour contourner un éventuel blocage du port par défaut (51413) j'ai décidé d'utiliser le port 55000 (comme utilisé dans un sujet sur ce forum). Mais je n'arrive toujours pas à débloquer ce port fermé.

Voici mes configurations :
IP du VPS qui host le serveur OpenVPN : 188.XX.XX.XX
IP de mon Raspberry sur le réseau privé : 192.XXX.XX.XX
IP de mon Raspberry sur le réseau privé OpenVPN : 10.8.0.6

SERVER OpenVPN

server.conf

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1

iptables-rules.sh

#!/bin/sh
#Vider les tables actuelles
iptables -t filter -F
#Vider les règles personnelles
iptables -t filter -X
#Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
#Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
#ICMP (Ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
#SSH In
iptables -t filter -A INPUT -p tcp --dport XXXX -j ACCEPT
#SSH Out
iptables -t filter -A OUTPUT -p tcp --dport XXXX -j ACCEPT
#DNS In/Out
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
#NTP Out
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
#HTTP + HTTPS Out
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
#HTTP + HTTPS In
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT
#Mail SMTP:587
iptables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
#Transmission
iptables -t filter -A INPUT -p tcp --dport 55000 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 55000 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 55000 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 55000 -j ACCEPT
#OpenVPN
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 55000 -j ACCEPT
iptables -A FORWARD -i eth0 -p udp --dport 55000 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 55000 -j DNAT --to-destination 10.8.0.6:55000
iptables -t nat -A PREROUTING -i eth0 -p udp -m udp --dport 55000 -j DNAT --to-destination 10.8.0.6:55000
iptables -t nat -A PREROUTING -i tun0 -p tcp -m tcp --dport 55000 -j DNAT --to-destination 10.8.0.6:55000
iptables -t nat -A PREROUTING -i tun0 -p udp -m udp --dport 55000 -j DNAT --to-destination 10.8.0.6:55000

Raspberry Pi

client.conf

client
dev tun
proto udp
nobind
remote 188.XX.XX.XX 1194
resolv-retry infinite
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3

iptables-rules.sh

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT`

Comme vous pouvez le constater au niveau du Pi 4 je n'ai pas mis en place de règles iptables, j'avais fait une tentative mais cela me posait trop de problèmes. Voici tout fois le scripte pour les règles que j'avais mis en place mais le trafic ne passait pas par le tunnel avec ces règles 😀

#!/bin/sh
#Vider les tables actuelles
iptables -t filter -F
#Vider les règles personnelles
iptables -t filter -X
#Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
#Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
#ICMP (Ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
#SSH In
iptables -t filter -A INPUT -p tcp --dport 2802 -j ACCEPT
#SSH Out
iptables -t filter -A OUTPUT -p tcp --dport 2802 -j ACCEPT
#DNS In/Out
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
#NTP Out
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
#HTTP + HTTPS Out
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
#HTTP + HTTPS In
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT
#Mail SMTP:587
iptables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
#NFS
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p udp -m multiport --sports 111,2049,32773,804,816,894 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m multiport --sports 111,2049,54559,807,897 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p udp -m multiport --dports 111,2049,32773,804,816,894 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m multiport --dports 111,2049,54559,807,8972 -m state --state NEW,ESTABLISHED -j ACCEPT
#OpenVPN
iptables -A OUTPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -p udp --sport 1194 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#Transmission
iptables -t filter -A INPUT -p tcp --dport 9091 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 42311 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 42311 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 42311 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 42311 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 55000 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 55000 -j ACCEPT

Une âme charitable aurait-elle le temps et l'envie de bien vouloir m'aider à résoudre ce petit problème qui me fait perdre mes cheveux ?

    inity
    Hello !
    La règle importante pour que ton port apparaisse ouvert sur ton GUI est la règle de PREROUTING:
    La tienne:

    iptables -t nat -A PREROUTING -i tun0 -p udp -m udp --dport 55000 -j DNAT --to-destination 10.8.0.6:55000
    

    Voici celle que j'utilise chez moi et qui fonctionne:

    iptables -t nat -A PREROUTING -p tcp --dport 45000 -j DNAT --to-destination 10.99.97.2:45000
    

    Peut tu toutes les enlever (les PREROUTING) et tester celle ci stp:

    iptables -t nat -A PREROUTING -p tcp --dport 55000 -j DNAT --to-destination 10.8.0.6:55000
    

    J'aimerais également que tu me renvoie le resultat de cette commande pour checker que ton port 55000 et bien ouvert au travers du vpn:

    nc -zvw3 10.8.0.6 55000
    

    si ton pi ne connais pas nc, il faut installer le paquet netcat 🙂

      Petite précison, la régle de PREROUTING doit etre appliquer sur la machine distante, la commande nc aussi 🙂

      @zethis Merci pour ta réponse rapide. j'ai donc supprimé toutes les règles de prerouting sur mon serveur VPN et ai rajouté la tienne.
      La commande tu me demande de l'executer sur la machine distante aussi et cela donne ca
      nc -zvw 10.8.0.6 55000
      55000: inverse host lookup failed: Unknown host
      no port[s] to connect to

      Par contre quand je fait la même commande sur mon Pi 4 j'ai un résultat différent :
      nc -zvw3 10.8.0.6 55000
      Connection to 10.8.0.6 55000 port [tcp/*] succeeded!

      Je suis désolé je n'ai peut-être pas bien compris mais dans ton premier message tu me demande de faire ca sur la machine distante (dans mon esprit fatigué il s'agit du VPS avec le serveur VPN) et dans le deuxième tu me demandes de le faire sur le PI 4 ... Aurais-je dû mettre en place la règle de prerouting sur le PI 4 ? Car après modification cela ne fonctionne toujours pas

      En tout cas un grand merci déjà d'avoir pris le temps de me répondre

      zethis La tienne:
      iptables -t nat -A PREROUTING -i tun0 -p udp -m udp --dport 55000 -j DNAT --to-destination 10.8.0.6:55000

      Voici celle que j'utilise chez moi et qui fonctionne:
      iptables -t nat -A PREROUTING -p tcp --dport 45000 -j DNAT --to-destination 10.99.97.2:45000

      ok pour virer "-m xxx"
      ko pour virer "-i eth0"

      => si l'interface n'est pas eth0 il faut adapter le "-i", mais pas le virer !
      Pourquoi rediriger le trafique de TOUTES les interfaces quand seul celui sur eth0 nous intéresse ?

      En gros, tu remplaces les 4 règles par celle-ci:
      iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 45000 -j DNAT --to-destination 10.8.0.6:55000

      Explications:

      • on vire les règles "tun0" car ce que tu veux, c'est rediriger le trafique qui arrive au VPS.
      • on vire les règles udp car le port que tu souhaite rediriger fonctionne sur du ... tcp 😉
        -

        @zer Salut et merci à toi pour ton aide. On est bien d'accord c'est a mettre sur le VPS (serveur VPN) et non pas sur le raspberry (Seedbox)?

        zer iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 45000 -j DNAT --to-destination 10.8.0.6:55000

        J'ai tenté vos deux propositions mais mon port s'affiche toujours comme closed dans transmission. Y a-t-il d'autres informations qui pourraient être utiles ?

        Super réponse de la part de @zer, il faut tout faire sur le VPS oui, la commande nc montre bien que ton vps à accès au port 55000 de ta seedbox et c'est parfait.
        Pour eviter de te fier au logo du GUI et voir si ton port est vraiment ouvert, peut tu refaire la commande nc ? mais cette fois ci depuis ton pi4 et avec comme adresse ip celle de ton VPS:

        nc -zvw3 ip.de.ton.vps 55000

        si la commande te renvoie succeeded! c'est que le port est bien ouvert, et le bug est coté GUI, sinon le port est fermé et il faut revoir tes règles Iptables 🙂

        Pour le nc, 
        z = port en listening
        v = verbose
        w = retry
        3 = nombre de retry

        Petit tips:
        Pour afficher tes regles iptables en place:

        iptables -L

        Pour les Flusher
        iptables -F

        @zethis la commande me retourne

        sudo nc -zvw3 188.XX.XX.XX 55000
        nc: connect to 188.XX.XX.XX port 55000 (tcp) timed out: Operation now in progress

        Etant donné que sur le Pi 4 je n'ai aucune règle iptables (comme montré plus haut) le problème doit donc provenir des règles iptables sur le VPS.

        As-tu une idée ? Qu'as-tu comme règles sur la machine qui héberge
        ton VPN ?

        Pour rappel les règles en place sur le serveur VPN concernant OpenVPN sont 😀

        #Transmission
        iptables -t filter -A INPUT -p tcp --dport 55000 -j ACCEPT
        iptables -t filter -A OUTPUT -p tcp --dport 55000 -j ACCEPT
        #OpenVPN
        iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
        iptables -A INPUT -i tun0 -j ACCEPT
        iptables -A FORWARD -i tun0 -j ACCEPT
        iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
        iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
        iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
        iptables -A OUTPUT -o tun0 -j ACCEPT
        iptables -A FORWARD -i eth0 -p tcp --dport 55000 -j ACCEPT
        iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 55000 -j DNAT --to-destination 10.8.0.6:55000

        J'ai flush iptables et réappliqué mes règles et rien n'y change ca marche pas 🙁

        Oula attendez je ne sais pourquoi mais finalement la commande nc -zvw3 ip.de.ton.vps 55000 depuis mon Pi 4 me retourne bien Connection to 188.XX.XX.XX 55000 port [tcp/*] succeeded! . @zethis me confirmes-tu alors que ca marche et que la GUI de transmission a un bug ?

        Attention à ne pas tout mélanger.
        nc te permet de tester ton port et savoir s'il est ouvert ou non. Il faut le faire:
        1- sur ton VPS vers ip de ton Pi => permet de confirmer que transmission tourne bien et est bien configuré sur le bon port.
        2- depuis un poste hors de ton réseau von sur ip de ton VPS => permet de tester la redirection nat.

        Déjà, ça permettra de bien cibler le problème.

        Hello,
        @zer, il tunnelise tout sont trafic vers sont vpn, pour ça que je lui est fait tester sont port depuis le pi4.
        Ta commande nc fonctionne bien donc, regarde coté GUI et .rtorrent, si le check ne ce fait pas sur l'ancien port 😉

        De toute façon c'est très simple à voir, si tu seed, cela veut dire que ton port est ouvert

        Peut tu nous dire ce que tu utilises pour tes torrents ? Docker ou installer sur la machine ?

        Répondre…