Forum Linux.général iptables & port forwarding

Posté par  (site web personnel, Mastodon) .
Étiquettes :
0
12
déc.
2006

Hello!

je pédale un peu dans la semoule avec iptables.

Soit une machine avec eth0 sur le WAN (212.74.x.x) et eth1 vers un petit réseau très local (des NAS sur 10.x.x.x). Les NAS sont configurables via le web, mais la machine est un serveur et on ne peut donc pas lancer firefox sur cette machine. Aussi, j'aimerais atteindre l'interface web de mes NAS depuis l'internet, via un port particulier de la machine 212.74.x.x: 10001 pour le NAS un (en 10.2.0.1), port 10002 pour le NAS 2 etc.

Donc, il faut que ma machine forward le port eth0 10001 vers eth1 10.2.0.1:80, le port 10002 vers 10.2.0.2:80, etc.

Après avoir beaucoup lu, je suis arrivé à ça:

iptables -t nat -A PREROUTING -i eth0 -p tcp -d 212.74.x.x --dport 10001 -j DNAT --to 10.2.0.1:80

iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 10.2.0.1 -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.2.0.1

Mais cela ne marche pas: un telnet en local sur le port 10001 n'ouvre pas et depuis ma workstation si j'ouvre 212.74.x.x:10001 il n'ouvre pas non plus (évidemment)

Quelqu'un peut-il me dire ce que je fait de faux ou si j'ai oublié une autre commande iptables?

PS: machine:~# cat /proc/sys/net/ipv4/ip_forward

1

  • # google et nous ...

    Posté par  . Évalué à 1.

    d'apres : http://www.hackorama.com/network/portfwd.shtml


    /sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 -d xxx.xxx.xxx.xxx --dport 8888 -j DNAT --to 192.168.0.2:80
    /sbin/iptables -A FORWARD -p tcp -i eth0 -d 192.168.0.2 --dport 80 -j ACCEPT


    pour faire une redirection de port

    en adaptant à ton cas

    /sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 -d xxx.xxx.xxx.xxx --dport 10001 -j DNAT --to 10.2.0.1:80
    /sbin/iptables -A FORWARD -p tcp -i eth0 -d 10.2.0.1 --dport 80 -j ACCEPT
    • [^] # Re: google et nous ...

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      Marche pas :(

      telnet 212.74.xx.xx 10001
      Trying 212.74.xx.xx...
      telnet: Unable to connect to remote host: Connection refused

      Dans firefox, si je vais sur 212.74.xx.xx:10001 il me répond

      Firefox ne peut pas établir de connexion avec le serveur à l'adresse 212.74.xx.xx:5000

      Pourquoi il est passé au port 5000? Mystère!

      Le script:

      #!/bin/sh
      EXTIF="eth0"
      EXTIP="212.74.xx.xx"
      INTIF="eth1"

      /sbin/iptables -F
      /sbin/iptables -t nat -A PREROUTING -p tcp -i $EXTIF -d $EXTIP --dport 10001 -j DNAT --to 10.2.0.1:80
      /sbin/iptables -A FORWARD -p tcp -i $EXTIF -d 10.2.0.1 --dport 80 -j ACCEPT

      La gelée de coings est une chose à ne pas avaler de travers.

  • # Il faut activer le forwarding

    Posté par  (site web personnel) . Évalué à 2.


    echo "1" > /proc/sys/net/ipv4/ip_forward


    Ou un equivalent avec sysctl.

    Au passage, je ne vois pas a quoi sert ta ligne SNAT a part faire partir des réponses dans l'espace.
  • # Des pistes.

    Posté par  . Évalué à 2.

    Le NAS execute-il bien un serveur web ?

    Un navigateur mode texte (lynx par exemple) est-il disponible sur le serveur ? Arrive-t-il à se connecter sur le serveur web du NAS ?

    Est-il possible d'utiliser un autre protocol pour se connecter sur le NAS (ssh ou telnet ) ?


    Essaye le script suivant sur le serveur :


    #!/bin/bash

    # on purge toutes les chaines des tables
    iptables -t filter -F
    iptables -t filter -X
    iptables -t nat -F
    iptables -t nat -X
    iptables -t mangle -F
    iptables -t mangle -X

    # pas de filtrage
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT

    # configuration de la translation d'adresse
    iptables -t nat -A PREROUTING -d 212.74.x.x -p tcp --dport 10001 -j DNAT --to 10.2.0.1:80
    iptables -A FORWARD -o eth1 -p tcp -d 10.2.0.1 -j ACCEPT

    # activation du forwarding
    echo 1 >/proc/sys/net/ipv4/ip_forward


    Pour afficher les paquets qui transitent repectivement par les interfaces eth0 et eth1 du serveur, lance sur le serveur dans des terminaux virtuels différents les commandes suivantes :
    tcpdump -i eth0 -ln
    tcpdump -i eth1 -ln
    Les paquets destinées aux NAS arrivent-ils bien sur le serveur sur le port eth0 et sortent-ils bien par l'interface eth1? Les paquets réponses suivent-ils le chemin inverse ?
    • [^] # Re: Des pistes.

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      Le NAS execute-il bien un serveur web ?

      Oui. Un "links 10.2.0.1" m'affiche l'interface d'authentification

      Essaye le script suivant sur le serveur :

      Toujours pas :(

      Les paquets destinées aux NAS arrivent-ils bien sur le serveur sur le port eth0 et sortent-ils bien par l'interface eth1? Les paquets réponses suivent-ils le chemin inverse ?

      Très pertinent mon cher!

      En fait, si je fais mon 'links' avec tcpdump qui tourne, je vois que c'est le port 80 du NAS qui redirige vers son port 5000!

      Ainsi donc, en changeant une ligne de ton script:
      iptables -t nat -A PREROUTING -d $EXTIP -p tcp --dport 1663 -j DNAT --to 10.13.0.11:5000

      J'arrive à aller sur mon NAS!

      Merci de m'avoir fait réfléchir :)

      La gelée de coings est une chose à ne pas avaler de travers.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.