Auteur Sujet: NAT-box : quels protocoles applicatifs?  (Lu 18088 fois)

0 Membres et 1 Invité sur ce sujet

corrector

  • Invité
NAT-box : FTP : linux
« Réponse #24 le: 11 juin 2011 à 20:30:24 »
Après quelques expérimentations sur la gestion du FTP client derrière une Freebox v5 en mode routeur, il s'avère que :
Étrangement ;) la lecture du code source de linux coïncide avec les observations expérimentales.

la Freebox laisse passer tel quel tout segment TCP du client vers le serveur FTP,
sauf si les données TCP commencent une suite de lettres qui est un préfixe de "PORT" ou de "EPTR" (insensible à la casse)
à l'exception de la toute première commande FTP, qui elle passe toujours directement.
C'est dans la fonction help dans nf_conntrack_ftp.c :
369        /* Until there's been traffic both ways, don't look in packets. */
 370        if (ctinfo != IP_CT_ESTABLISHED &&
 371            ctinfo != IP_CT_ESTABLISHED + IP_CT_IS_REPLY) {
 372                pr_debug("ftp: Conntrackinfo = %u\n", ctinfo);
 373                return NF_ACCEPT;
 374        }

Concernant les segment TCP envoyé par le PC derrière la Freebox contenant juste "p", "po", "por", "port", "e", "ep", "epr", "eprt" : ces segments ne sont pas transmis par la Freebox. En fait la Freebox attend d'avoir une commande PORT ou EPRT complète avant de la transmettre.
Les séquences reconnues sont définies par le tableau search qui associe à chaque direction (client->serveur, serveur->client) un tableau de "motifs" de la forme : (texte, fonction de décodage)

La fonction find_pattern teste si un segment TCP correspond à un motif donné :
254/* Return 1 for match, 0 for accept, -1 for partial. */
 255 static int find_pattern(const char *data, size_t dlen,
 256                        const char *pattern, size_t plen,
 257                        char skip, char term,
 258                        unsigned int *numoff,
 259                        unsigned int *numlen,
 260                        struct nf_conntrack_man *cmd,
 261                        int (*getnum)(const char *, size_t,
 262                                      struct nf_conntrack_man *, char))

La Freebox perd ces données incomplètes, ce qui provoque une retransmission TCP.
C'est toujours dans la fonction help :
425        if (found == -1) {
 426                /* We don't usually drop packets.  After all, this is
 427                   connection tracking, not packet filtering.
 428                   However, it is necessary for accurate tracking in
 429                   this case. */
 430                pr_debug("conntrack_ftp: partial %s %u+%u\n",
 431                         search[dir][i].pattern,  ntohl(th->seq), datalen);
 432                ret = NF_DROP;
 433                goto out;

En entrant une commande PORT ou EPRT mal-formée avec telnet, on peut mettre en vrac l'entrée NAT, qui ne transmet plus rien, jusqu'à ce que le client abandonne (RST du client).
Si une commande mal-formée correspondant à un motif a été envoyée par le client, find_pattern va systématiquement renvoyer -1, et le paquet sera systématiquement DROPé.

Donc cette donnée sera encore retransmise par le client, et DROPée encore, donc il n'est plus possible d'avancer sur cette connexion TCP.

Tout cela est causé uniquement par le fonctionnement du système de suivi d'état des connexions (modules nf_conntrack*) et non par le NAT lui-même, même si c'est le NAT qui rend indispensable le suivi d'état des connexions.

Edit : C'est mon 800ème message!

corrector

  • Invité
NAT-box : FTP
« Réponse #25 le: 26 juin 2011 à 21:42:47 »
Si ce n'était que de l'écoute, ce serait simple. C'est beaucoup plus difficile parce qu'il faut corriger l'adresse de socket (IP et port) : il faut changer "PORT 192,168,a,b,x,y" en "PORT mon.adresse.Internet,u,v".

Le plus souvent u = x et y = v (préservation des ports par défaut sous linux), mais si le n-uplet
(IPv4, TCP, mon.adresse.Internet, x*256+y, adresse.du.serveur.FTP, 21)
existe déjà, il faut en choisir u,v tq
(IPv4, TCP, mon.adresse.Internet, u*256+v, adresse.du.serveur.FTP, 21)
n'existe pas dans la table des connexions.

En plus comme c'est de l'ASCII et non du binaire, "PORT mon.adresse.Internet,u,v" peut être plus long que "PORT 192,168,a,b,x,y" et donc il faut corriger les numéros de séquence sur les segments suivants envoyés et donc il faut corriger les numéros ACK sur les segments reçus suivants.
C'est expliqué dans la RFC 3022 - Traditional IP Network Address Translator (Traditional NAT) :
Citer
4.4. FTP support

   One of the most popular applications, "FTP" ([FTP]) would require an
   ALG to monitor the control session payload to determine the ensuing
   data session parameters.  FTP ALG is an integral part of most NAT
   implementations.

   The FTP ALG would require a special table to correct the TCP sequence
   and acknowledge numbers
with source port FTP or destination port FTP.
   The table entries should have source address, destination address,
   source port, destination port, delta for sequence numbers and a
   timestamp.  New entries are created only when FTP PORT commands or
   PASV responses are seen.  The sequence number delta may be increased
   or decreased for every FTP PORT command or PASV response.  Sequence
   numbers are incremented on the outbound and acknowledge numbers are
   decremented on the inbound by this delta.
(Mais ça ne parle pas de SACK; si on oublie de gérer les SACK, ça doit être comique.)

corrector

  • Invité
NAT-box : quels protocoles applicatifs?
« Réponse #26 le: 27 juin 2011 à 23:15:49 »
Quelles type de protocoles client veux-tu quels supportent?

De manière générique tcp / udp ne s’inquiète pas du client ni de la charge transporter. Ainsi le port 21, ftp par default peut etre utiliser pour faire transiter du trafic http, smb ou tout autre protocole d'application (que le client consomme, ou initie).
Sauf si le protocole spécifie que le client doit envoyer au serveur une commande "p" ou "e" et attendre la réponse.

corrector

  • Invité
NAT-box : quels protocoles applicatifs?
« Réponse #27 le: 01 juillet 2011 à 00:24:29 »
Quelles type de protocoles client veux-tu quels supportent?
Ceux-là par exemple :

4.0 Protocols that can work with the aid of an ALG
4.1 FTP
4.2 RSVP
4.3 DNS
4.4 SMTP
4.5 SIP
4.6 RealAudio
4.7 H.323
4.8 SNMP

Bon, pour le RSVP, DNS, SMTP et SNMP on va dire que c'est optionnel.

corrector

  • Invité
Internet v6 sur la Freebox v5 : pas de gestion du protocole FTP
« Réponse #28 le: 12 juillet 2011 à 23:19:02 »
Sauf si le protocole spécifie que le client doit envoyer au serveur une commande "p" ou "e" et attendre la réponse.
On vérifie facilement que cela n'est pas le cas en IPv6 avec la Freebox v5 : en se connectant sur le port FTP en IPv6 à un serveur quelconque (p.ex. ftp.free.fr) :
  • si on envoie des segments "p", "po", "e", "ep", etc. on voit dans WireShark qu'ils ne sont pas perdus
  • si on envoie la commande "port<NL>", la connexion n'est pas gelée.
Donc conntrack n'est pas actif en IPv6 sur Freebox v5. :)

corrector

  • Invité
NAT-box : quels protocoles applicatifs?
« Réponse #29 le: 27 février 2012 à 01:18:08 »
Quels protocoles applicatifs sont gérés par les NAT-box?
Sur la Freebox ADSL :
+CONFIG_NF_CONNTRACK_ENABLED=y
+# CONFIG_NF_CONNTRACK_SUPPORT is not set
+CONFIG_IP_NF_CONNTRACK_SUPPORT=y
+CONFIG_IP_NF_CONNTRACK=y

+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+CONFIG_IP_NF_TFTP=m
+# CONFIG_IP_NF_AMANDA is not set
+CONFIG_IP_NF_PPTP=m
+# CONFIG_IP_NF_H323 is not set
+# CONFIG_IP_NF_SIP is not set

+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_PPTP=m
Les modules FTP, IRC, TFTP et PPTP sont en dynamique (pourquoi dynamique?).

Sur la Freebox Server :
+# CONFIG_NF_CT_PROTO_DCCP is not set
+CONFIG_NF_CT_PROTO_GRE=m
+# CONFIG_NF_CT_PROTO_SCTP is not set
+# CONFIG_NF_CT_PROTO_UDPLITE is not set
+# CONFIG_NF_CONNTRACK_AMANDA is not set
+CONFIG_NF_CONNTRACK_FTP=y
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
+# CONFIG_NF_CONNTRACK_SNMP is not set
+CONFIG_NF_CONNTRACK_PPTP=m
+# CONFIG_NF_CONNTRACK_SANE is not set
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=y

+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_PPTP=m
Les modules conntrack FTP, TFTP sont compilés en statique, et les modules conntrack H323, SIP, IRC, et PPTP sont en dynamique (pourquoi dynamique?).

Les modules de NAT FTP, IRC, TFTP et PPTP sont en dynamiques (pourquoi dynamique?).

vivien

  • Administrateur
  • *
  • Messages: 47 170
    • Twitter LaFibre.info
NAT-box : quels protocoles applicatifs?
« Réponse #30 le: 25 septembre 2015 à 12:23:10 »
Fonctionnement des Accélérateurs:
Lorsque l'utilisateur lance un téléchargement TCP/UDP, les premiers paquets qui sont responsables de l'établissement de la connexion passent par le CPU(chemin classique :NAT/FIREWALL/policies...), une fois le lien est établie tous les prochains paquets passeront par les accélérateurs (chemin rapide). Les accélérateurs n'analyse que l'entête TCP/IP du paquet et pas son contenue.

Voici concrètement, sur un chipset Broadcom, la différence de débit avec et sans accélérateurs, dans le cas d'un téléchargement avec une connexion TCP :

Rouge : accélérateur désactivé
Vert : accélérateur activé


Le débit sans accélérateur varie selon les chips, il me semble que c'est plus dans les 200 Mb/s pour les chips Ikanos.

On me souffle que certaines box récentes du marché arrivent à monter à 350 Mb/s sans accélérateurs.

La problématique pour les opérateurs comme K-Net qui souhaitent customiser le firmware de leur box est de trouver une box avec un firmware alternatif qui gère l'accélération matériel, sans quoi les débits sont limités.

corrector

  • Invité
NAT-box : quels protocoles applicatifs?
« Réponse #31 le: 25 septembre 2015 à 12:52:23 »
On voit qu'en ADSL/VDSL ça reste encore jouable sans accélérateur matériel.

En FTTH, non.

Marin

  • Client Bbox vdsl
  • Modérateur
  • *
  • Messages: 2 804
  • 73
NAT-box : quels protocoles applicatifs?
« Réponse #32 le: 25 septembre 2015 à 13:52:31 »
La problématique pour les opérateurs comme K-Net qui souhaitent customiser le firmware de leur box est de trouver une box avec un firmware alternatif qui gère l'accélération matériel, sans quoi les débits sont limités.

Le firmware peut être alternatif et toujours contenir les pilotes Broadcom (la Neufbox par exemple, est basée sur OpenWRT). Il ne sera juste pas 100 % libre.