La Fibre

Télécom => Réseau => reseau TCP/IP / Fonctionnement des réseaux => Discussion démarrée par: corrector le 03 juin 2011 à 15:58:01

Titre: NAT-box : quels protocoles applicatifs?
Posté par: corrector le 03 juin 2011 à 15:58:01
Quels protocoles applicatifs sont gérés par les NAT-box?

Je pense que toutes gèrent FTP en client, mais quoi d'autre?

Quelqu'un a fait des tests?
Titre: NAT-box : quels protocoles applicatifs?
Posté par: ruchard5 le 04 juin 2011 à 11:25:50
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).

Je joins une copie d’écran d'un test rapide sur mon router NAT/Firewall netgear (depuis la DMZ vers mon serveur interne), qui atteint les 98,5 Mbps. A noter que le debit de 98,5 Mbps ete soutenu jusqu’à ce que j’arrête le stream, puis pour une raison indéterminé il est reste a ~67Mbps avant de remonte a presque 100Mbps.

Titre: NAT-box : quels protocoles applicatifs?
Posté par: vivien le 04 juin 2011 à 11:53:17
Pour le FTP, en mode passif il est nécessaire que la Box "écoute" les données au dessus de la couche 4 afin d'ouvrir le port demandé pour le transfert de donnée en mode passif.

Sans cette écoute et compréhension du protocole FTP, le port demandé restera fermé...

De même Sagem "écoutait" MSN sur son port et le port de rempli (80) pour ouvrir le port demandé pour une conversation vidéo.

Le problème c'est que cette "écoute" forçait les paquets a passer par le CPU et non par les accélérateurs => Trafic limité à 20 Mb/s sur les ports concernés. Pour le port 80 c'était vraiment dommage.
Titre: NAT-box : FTP
Posté par: corrector le 04 juin 2011 à 14:55:04
Quelles type de protocoles client veux-tu quels supportent?
Tous, y compris ceux qui n'ont pas encore été inventés.

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).
UDP et TCP non, la Freebox si.

Extrait d'un log de connexion vers un serveur FTP chez Free :
Citer
Commande :   TYPE I
Réponse :   200 Type set to I
Commande :   PORT 192,168,1,11,196,17
Réponse :   200 PORT command successful
Commande :   LIST
Réponse :   150 Opening ASCII mode data connection for file list
Réponse :   226 Transfer complete.
FileZilla a envoyé l'adresse du PC 192.168.1.11 et le serveur a réussi à se connecter à cette adresse.

Alors, bluffé?
Titre: NAT-box : FTP
Posté par: corrector le 04 juin 2011 à 15:17:00
Pour le FTP, en mode passif il est nécessaire que la Box "écoute" les données au dessus de la couche 4 afin d'ouvrir le port demandé pour le transfert de donnée en mode passif.
Non seulement : la box qui écoute c'est la version "soft". C'est ce que ferait une box IPv6 avec pare-feu à états : il suffit d'écouter et d'accepter la nouvelle connexion (création d'un n-uplet).

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.

Bien sûr, cela veut dire que les segments doivent être traités dans l'ordre même s'ils arrivent dans le désordre.

Cela correspond grosso modo à faire passer la connexion FTP par toute la pile TCP deux fois dans la box.

Par défaut, linux n'espionne que le port 21 à la recherche de commandes FTP, mais on peut donner une liste de ports dans la ligne de commande.
Titre: NAT-box : tester le FTP
Posté par: corrector le 04 juin 2011 à 15:53:29
Pour tester si votre NAT-box gère le FTP client, c'est très simple; il vous faut :
Dans FileZilla:
allez dans "Édition > Paramètres...";
allez sur la page "Connexion > FTP";
dans "Mode de transfert" choisissez Actif et décochez "Autorisez un retour (...)";
validez.

Vous pouvez vous connecter en entrant un nom de serveur (et identifiant s'il ne s'agit pas d'un FTP anonyme) dans la barre de connexion rapide. (Pour enregistrer un serveur pour y revenir plus tard, allez plutôt dans "Fichier > Gestionnaire de Sites...")

Si la connexion à un serveur se passe bien et que vous voyez bien le listing du serveur dans le volet de droite, c'est que votre NAT-box gère le FTP.

Si possible, merci de copier ici un extrait du log de connexion (commande PORT et LIST).

Après le test, revenez quand même à la configuration par défaut : mode "Passif (recommandé)".
Titre: NAT-box : FTP
Posté par: ruchard5 le 04 juin 2011 à 17:42:52
UDP et TCP non, la Freebox si.

Bon, peut être pour la freebox mais elle te permet quand même de passer outre ses limitations.

Moi j'utilise l'option DMZ, ou tout le trafic entrant est router vers une adresse unique (le 192.168.0.253 de mon test précédent). Qui est mon router Netgear.

A partir de cela j'ai tout le contrôle nécessaire pour fournir des service http, web, git, ssh, rdp et autre. Et pas l'ombre d'une limitation freebox ici (puisque l'option DMZ rends le routage au niveau de la freebox on ne peux plus simple).

Bon, ça c'est pour la théorie. Dans la pratique je peux difficilement tester avec mon petit 1Mbps de bandes passante up... que ne donnerais pour un jolie 10Mbps symétrique (je demande pas 20, 50 ou 100 ~ juste 10Meg...).
Titre: NAT-box : problème des protocoles à plusieurs connexions
Posté par: corrector le 04 juin 2011 à 18:46:17
Bon, peut être pour la freebox mais elle te permet quand même de passer outre ses limitations.

Moi j'utilise l'option DMZ, ou tout le trafic entrant est router vers une adresse unique (le 192.168.0.253 de mon test précédent). Qui est mon router Netgear.
J'ai configuré une DMZ sur ma Freebox avec une IP locale que je n'utilise habituellement sur aucun PC (192.168.1.30), comme ça :
Mais la DMZ ne résout pas le problème du client FTP en mode passif, ni plus généralement celui d'un logiciel qui envoie l'adresse IP du PC.

A partir de cela j'ai tout le contrôle nécessaire pour fournir des service http, web, git, ssh, rdp et autre. Et pas l'ombre d'une limitation freebox ici (puisque l'option DMZ rends le routage au niveau de la freebox on ne peux plus simple).
http, ssh sont des protocoles "simples" qui n'échangent pas d'adresses de socket (port ou adresse IP), et ne nécessitent donc aucun traitement particulier de la part de la NAT-box. Je ne connais pas très bien Remote Desktop Protocol, ni le protocole GIT, mais je pense que c'est aussi le cas.

Le problème concerne les protocoles qui utilisent plusieurs connexions :
L'adresse de la connexion "de données" indiquée dans la une connexion "de contrôle" peut être une adresse complète (IP, protocole, port), ou bien seulement certaines informations :
Si l'adresse IP n'est pas transmise et est fixée comme étant celle d'un des participants, alors effectivement la DMZ peut aider.

Si le port est calculé en fonction d'un port utilisé par le client, alors le caractère port-preserving par défaut de la Freebox et la DMZ peuvent aider.
Titre: NAT-box : quels protocoles applicatifs?
Posté par: vivien le 04 juin 2011 à 21:18:45
Pour http ou ssh il faut quand même modifier l'adresse IP et le port (dans les en-têtes du protocole et non dans la partie donnée comme c'est le cas pour le FTP).

La box doit aussi mémoriser quel port va vers quel ip du réseau local. Après un certain délai, c'est effacé et là si la connexion est toujours ouverte c'est catastrophique car les paquets suivant se voient affecté un nouveau port. Le serveur va faire des reset car il n'attend rien sur ces ports...
Titre: NAT-box : quels protocoles applicatifs?
Posté par: corrector le 04 juin 2011 à 21:57:05
Pour http ou ssh il faut quand même modifier l'adresse IP et le port (dans les en-têtes du protocole et non dans la partie donnée comme c'est le cas pour le FTP).
Bien sûr, il y a la correction habituelle d'adresse de socket. Je veux dire que pour HTTP et SSH aucun protocole n'est enregistré avec nf_conntrack_helper_register (http://lxr.linux.no/#linux+v2.6.39/net/netfilter/nf_conntrack_helper.c#L184).

Le code pour le seul suivi des états TCP dans linux (http://lxr.linux.no/#linux+v2.6.39/net/netfilter/nf_conntrack_proto_tcp.c) (sans NAT) fait 1500 lignes.

La box doit aussi mémoriser quel port va vers quel ip du réseau local. Après un certain délai, c'est effacé et là si la connexion est toujours ouverte c'est catastrophique car les paquets suivant se voient affecté un nouveau port. Le serveur va faire des reset car il n'attend rien sur ces ports...
Le timeout pour une connexion TCP est de 5 jours sous linux (http://lxr.linux.no/#linux+v2.6.39/net/netfilter/nf_conntrack_proto_tcp.c#L73).

Mais je ne comprends pas pourquoi la box effacerait les n-uplets (http://lxr.linux.no/#linux+v2.6.39/include/net/netfilter/nf_conntrack_tuple.h#L62) d'une connexion TCP, alors qu'elle pourrait se contenter d'envoyer un segment vide (comme un keepalive) dans chaque direction pour voir si les deux sockets existent toujours. Associé à un timeout plus court que 5 jours, cela permettrait de nettoyer plus vite la table des n-uplets sans risque.
Titre: NAT-box : quels protocoles applicatifs?
Posté par: vivien le 04 juin 2011 à 22:18:38
Certaines box effacent les n-uplets d'une connexion TCP encore active quand on fait du P2P.

Je suppose donc que certaines box on un buffer trop petit et le P2P qui ouvre beaucoup de connexions en // (qui changent régulièrement) doit saturer le buffer de ces box.

Le P2P, c'est cruel pour de nombreuses NAT-box. Pas besoin de grand chose. Un test simple qui échoue sur de nombreuses box : Un upload a 70 Ko/s de distribution linux (via un client BitTorrent). Se connecter en SSH sur un serveur et laisser la nuit. Vérifier qu'on est toujours connecté en SSH le lendemain matin.
Titre: NAT-box : quels protocoles applicatifs?
Posté par: corrector le 05 juin 2011 à 00:05:12
Si les connexions TCP sont fermées normalement, les n-uplets sont effacés rapidement (1 minute sous linux).

Au démarrage, nf_conntrack_htable_size est initialisé à entre 32 et 16384 (http://lxr.linux.no/#linux+v2.6.39/net/netfilter/nf_conntrack_core.c#L1421) selon la RAM; nf_conntrack_max est initialisé à 4 * nf_conntrack_htable_size. (Ces valeurs sont modifiables à tout moment.)

init_conntrack (http://lxr.linux.no/#linux+v2.6.39/net/netfilter/nf_conntrack_core.c#L731) appelle __nf_conntrack_alloc (http://lxr.linux.no/#linux+v2.6.39/net/netfilter/nf_conntrack_core.c#L630) pour créer une nouvelle entrée conntrack; au delà de nf_conntrack_max, init_conntrack appelle early_drop (http://lxr.linux.no/#linux+v2.6.39/net/netfilter/nf_conntrack_core.c#L568) qui efface l'entrée la plus ancienne.
Titre: NAT-box : FTP
Posté par: corrector le 05 juin 2011 à 08:14:03
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".
La fonction nf_nat_mangle_tcp_packet (http://lxr.linux.no/#linux+v2.6.39/include/net/netfilter/nf_nat_helper.h#L18) est utilisée pour remplacer une partie d'un paquet.

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.
Cela a aussi lieu dans nf_nat_ftp (http://lxr.linux.no/#linux+v2.6.39/net/ipv4/netfilter/nf_nat_ftp.c#L103).

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.
L'ajustement des numéros de séquence a lieu dans nf_nat_seq_adjust (http://lxr.linux.no/#linux+v2.6.39/net/ipv4/netfilter/nf_nat_helper.c#L381); les numéros d'une éventuelle option SACK sont ajustés aussi.
Titre: NAT-box : MSN
Posté par: corrector le 06 juin 2011 à 06:17:29
De même Sagem "écoutait" MSN sur son port et le port de rempli (80) pour ouvrir le port demandé pour une conversation vidéo.
Est-ce encore nécessaire?

Comment tester le support MSN d'une box?
Titre: NAT-box : quels protocoles applicatifs?
Posté par: vivien le 06 juin 2011 à 09:39:07
Voici la réponse du chef de projet de CPE FTTH Sagem le 31 juillet 2006 :

Explication des performances non satisfaisantes vues sur un téléchargement HTTP.

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.

Cas d'un transfert de texte par MSN MESSENGER:
Lorsque un client utilise MSN MESSENGER pour chatter se dernier se connecte sur le port 1863/TCP à un serveur de chez Microsoft. dans ce cas le Nat est traversé proprement et le message retour est bien identifié par le Firewall du F@st3374.

Cas d'un transfert de vidéo par MSN MESSENGER :
Les problèmes arrivent lorsque le client demande une connexion vocale/video. Dans ce cas, MSN MESSENGER va demander au serveur de choisir un autre port pour faire passer le flux vidéo. Et le problème c'est que ce port est choisie au hasard entre le port TCP/9000 et TCP/65535. Pour que le flux
vidéo provenant du serveur soit identifier par le firewall du F@st3374 et qu'il soit forwardé correctement, tous les paquets msn( TCP et destPort/srcPort = 1863) passeront par une fonction de traitement supplèmentaire qui permet d'analyser les contenues des paquets en plus de leurs entêtes TCP/IP.
Dans ce cas le flux vidéo passera par les accélérateurs(chemin rapide) mais tous les paquets msn(TCP-port =1863) passeront par le CPU(chemin classique).

Cas du port 80:
Si pour une raison ou pour une autre le MSN MESSENGER n'arrive pas à se connecter au serveur Microsoft sur le port 1863 alors il retombe sur le port 80 en faisant du HTTP tunneling. Affin de supporter ce cas bien particulier le F@st3374 fait passer touts les paquets HTTP(port 80) par le même chemin par lequel passe les paquets msn (port 1863).

Solution immédiate :
Ne supporter que le chat en mode texte dans le cas où le client MSN MESSENGER fait du backup sur le port 80. Et si dans ce cas particulier l'utilisateur veut faire du Chat en mode vidéo il doit installer UPNP sur son poste qui va s'en charger  de communiquer avec le Firewall du F@st3374 pour ouvrir les bons ports.

Je reste à votre disposition pour tout éclaircissement supplèmentaire.

Cordialement.


A noter que le même phénomène est utilisé sur le port 21 pour le FTP.

Note : Les box équipées de Watchdog reboot lors d'un transfert HTTP à 20 Mb/s ou plus, le CPU étant utilisé à 100%, le watchdog est là pour rétablir la situation via un reboot
Titre: NAT-box : quels protocoles applicatifs?
Posté par: Mekthoub le 06 juin 2011 à 11:15:53
Bonjour!

Se connecter en SSH sur un serveur et laisser la nuit. Vérifier qu'on est toujours connecté en SSH le lendemain matin.
Un Netgear CBVG834G tient 5 petites minutes à ce régime, même sans P2P. Aucune pitié pour les connexions idle. Il faut mettre un keepalive à 295 secondes pour qu'une session SSH tienne sur la durée. Par contre dans ces conditions, le P2P ne semble pas gêner.

Tant qu'on y est, ce même CBVG834G effectue le suivi du protocole FTP sur le port TCP 21 entrant (pour héberger un serveur FTP chez soi). Tout bien: Il traduit les adresses LAN/WAN à l'intérieur du flux de commandes, et il accepte automatiquement les connexions data passives préalablement négociées (sans que l'on doive en permanence ouvrir une plage de ports à tout les vents). Mais le bazar est légérement buggé: Ça marche seulement si la chaîne de caractères qui représente l'adresse LAN est de la même longueur que celle de l'adresse WAN. Sinon il se prend les pieds dans le tapis entre taille du paquet, numéro de séquence, ou somme de contrôle, ce qui invalide le paquet, qui sera silencieusement détruit ensuite. Le client ne reçoit plus rien jusqu'au timeout. :'(
Titre: NAT-box : quels protocoles applicatifs?
Posté par: corrector le 06 juin 2011 à 11:17:46
C'est quel OS dans le Netgear CBVG834G ?
Titre: NAT-box : quels protocoles applicatifs?
Posté par: Mekthoub le 06 juin 2011 à 12:33:04
eCos v2
Titre: NAT-box : quels protocoles applicatifs?
Posté par: Mieszko le 06 juin 2011 à 14:27:46
ca serait bien qu'un de ces 4 numericable renouvelle ses modem/routeurs.
avec un switch 1gb dedans par exemple, donner un full access a l'interface etc etc ...
d'ailleurs quelqu'un a les user/password pour un acces complet au netgear CBVG834G ? vu qu'ils les changent a chaque mise a jour de firmware.
Titre: NAT-box : quels protocoles applicatifs?
Posté par: corrector le 09 juin 2011 à 22:56:51
Certaines box effacent les n-uplets d'une connexion TCP encore active quand on fait du P2P.

Je suppose donc que certaines box on un buffer trop petit et le P2P qui ouvre beaucoup de connexions en // (qui changent régulièrement) doit saturer le buffer de ces box.
Pour chipoter, c'est une table pas un buffer.

Le P2P, c'est cruel pour de nombreuses NAT-box. Pas besoin de grand chose. Un test simple qui échoue sur de nombreuses box : Un upload a 70 Ko/s de distribution linux (via un client BitTorrent). Se connecter en SSH sur un serveur et laisser la nuit. Vérifier qu'on est toujours connecté en SSH le lendemain matin.
Pas très scientifique... quelqu'un a essayé de mesurer le nombre de connexions simultanées maximum?
Titre: NAT-box : quels protocoles applicatifs?
Posté par: corrector le 09 juin 2011 à 23:02:35
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.
Quels matériels supportent cette optimisation?

A noter que le même phénomène est utilisé sur le port 21 pour le FTP.
Donc on pourrait savoir avec un test black-box sur quels ports les protocoles spécifiques sont gérés?

Note : Les box équipées de Watchdog reboot lors d'un transfert HTTP à 20 Mb/s ou plus, le CPU étant utilisé à 100%, le watchdog est là pour rétablir la situation via un reboot
Un watchdog, c'est pas pour détecter que le système est gelé?
Titre: NAT-box : quels protocoles applicatifs?
Posté par: vivien le 10 juin 2011 à 07:24:47
Là on parle de la méthode utilisée par Sagem pour faire du haut-débit.
Chaque fournisseur est obligé d'avoir des systèmes pour accélérer le traitement car un vrai routeur qui traite 100 Mb/s, cela coûte beaucoup plus cher qu'une box.

On aura peut-être des surprises (mauvaises) en IPv6...

Un watchdog, c'est pas pour détecter que le système est gelé?
C'est ça, si le système ne répond plus il reboot la box. En téléchargeant au débit max, le CPU est à 100% et ne répond plus au watchdog qui reboot la box. J'ai fait une démo à Sagem, avec une box citéFibre (https://lafibre.info/site/citefibre/index.htm) en téléchargeant simplement un gros fichier sur 01net.
Titre: Routeur puissant mais cher
Posté par: corrector le 10 juin 2011 à 11:13:56
Chaque fournisseur est obligé d'avoir des systèmes pour accélérer le traitement car un vrai routeur qui traite 100 Mb/s, cela coûte beaucoup plus cher qu'une box.
Avant on utilisait un vieux PC 486 en guise de routeur.

Et c'était encore sur-puissant.
Titre: NAT-box : FTP : test sur Freebox v5
Posté par: corrector le 11 juin 2011 à 19:40:49
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".
Après quelques expérimentations sur la gestion du FTP client derrière une Freebox v5 en mode routeur, il s'avère que :

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.

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.

La Freebox perd ces données incomplètes, ce qui provoque une retransmission TCP.

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).
Titre: NAT-box : FTP : linux
Posté par: corrector 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 (http://lxr.linux.no/#linux+v2.6.39/net/netfilter/nf_conntrack_ftp.c#L369) :
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 (http://lxr.linux.no/#linux+v2.6.39/net/netfilter/nf_conntrack_ftp.c#L68) qui associe à chaque direction (client->serveur, serveur->client) un tableau de "motifs" de la forme : (texte, fonction de décodage)

La fonction find_pattern (http://lxr.linux.no/#linux+v2.6.39/net/netfilter/nf_conntrack_ftp.c#L254) 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 (http://lxr.linux.no/#linux+v2.6.39/net/netfilter/nf_conntrack_ftp.c#L425) :
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!
Titre: NAT-box : FTP
Posté par: corrector 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) (http://tools.ietf.org/html/rfc3022) :
Citer
4.4. FTP support (http://tools.ietf.org/html/rfc3022#section-4.4)

   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.)
Titre: NAT-box : quels protocoles applicatifs?
Posté par: corrector 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.
Titre: NAT-box : quels protocoles applicatifs?
Posté par: corrector 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 (http://tools.ietf.org/html/rfc3027#section-4.0)
4.1 FTP (http://tools.ietf.org/html/rfc3027#section-4.1)
4.2 RSVP (http://tools.ietf.org/html/rfc3027#section-4.2)
4.3 DNS (http://tools.ietf.org/html/rfc3027#section-4.3)
4.4 SMTP (http://tools.ietf.org/html/rfc3027#section-4.4)
4.5 SIP (http://tools.ietf.org/html/rfc3027#section-4.5)
4.6 RealAudio (http://tools.ietf.org/html/rfc3027#section-4.6)
4.7 H.323 (http://tools.ietf.org/html/rfc3027#section-4.7)
4.8 SNMP (http://tools.ietf.org/html/rfc3027#section-4.8)

Bon, pour le RSVP, DNS, SMTP et SNMP on va dire que c'est optionnel.
Titre: Internet v6 sur la Freebox v5 : pas de gestion du protocole FTP
Posté par: corrector 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) :
Donc conntrack n'est pas actif en IPv6 sur Freebox v5. :)
Titre: NAT-box : quels protocoles applicatifs?
Posté par: corrector le 27 février 2012 à 01:18:08
Quels protocoles applicatifs sont gérés par les NAT-box?
Sur la Freebox ADSL (http://floss.freebox.fr/freebox_adsl/1.5.12/linux/linux-2.6.20.14-fbx.patch) :
+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 (http://floss.freebox.fr/freebox_server/1.1.4/linux/linux-2.6.39.4-fbx.patch) :
+# 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?).
Titre: NAT-box : quels protocoles applicatifs?
Posté par: vivien 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é
(https://lafibre.info/images/materiel/201509_Accelerateurs_chips_Broadcom_VDSL2_BCM63168.png)

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.
Titre: NAT-box : quels protocoles applicatifs?
Posté par: corrector 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.
Titre: NAT-box : quels protocoles applicatifs?
Posté par: Marin 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.