OVH Cloud OVH Cloud

[OpenBSD] Firewall et problème de transfert sur des gros fichiers

4 réponses
Avatar
Christophe Labouisse
J'ai un problème assez récurent lorsque j'essaye de récupérer depuis
l'extérieur des fichiers stocké chez moi par scp. J'ai une machine Nunux
qui est sur un LAN protégé par un firewall sous OpenBSD avec pf. De
l'extérieur je fais : "scp chezmoi:/fichier .". Tout marche bien au
départ mais lorsque la taille du fichier est suffisamment importante le
transfert s'arrête (scp indique "stalled" en vitesse de transfert) &
reste ainsi jusqu'à temps que je l'interrompe pas un Ctrl-C rageur.

N'ayant pas d'info dans les logs j'ai décidé lancé deux tcpdump, un sur
l'interface réseau interne (xl0) & un sur l'interface réseau externe
(tun0). Lorsque je compare le deux tout va bien jusqu'à ce que je vois
les lignes suivantes dans le tcpdump de tun0 :

11:27:13.432423 ailleurs.41931 > chez.moi.22: . ack 3053314 win 32424 <nop,nop,timestamp 157571563 180513175> (DF)
11:27:13.515972 ailleurs.41931 > chez.moi.22: . ack 3056130 win 32424 <nop,nop,timestamp 157571647 180513261> (DF)
11:27:13.516597 chez.moi.22 > ailleurs.41931: . 3119090:3120498(1408) ack 2994 win 2332 <nop,nop,timestamp 180516132 157571647> (DF) [tos 0x8]
11:27:13.516720 chez.moi.22 > ailleurs.41931: . 3120498:3121906(1408) ack 2994 win 2332 <nop,nop,timestamp 180516132 157571647> (DF) [tos 0x8]
11:27:13.516833 chez.moi.22 > ailleurs.41931: . 3121906:3123314(1408) ack 2994 win 2332 <nop,nop,timestamp 180516132 157571647> (DF) [tos 0x8]
11:27:13.516945 chez.moi.22 > ailleurs.41931: . 3123314:3124722(1408) ack 2994 win 2332 <nop,nop,timestamp 180516132 157571647> (DF) [tos 0x8]
11:27:13.671686 ailleurs.41931 > chez.moi.22: . ack 3057538 win 32424 <nop,nop,timestamp 157571801 180513349,nop,nop,sack 1 {3058946:3060354} > (DF)
11:27:13.712682 ailleurs.41931 > chez.moi.22: . ack 3057538 win 32424 <nop,nop,timestamp 157571838 180513349,nop,nop,sack 1 {3058946:3061762} > (DF)
11:27:13.805457 ailleurs.41931 > chez.moi.22: . ack 3057538 win 32424 <nop,nop,timestamp 157571934 180513349,nop,nop,sack 2 {3063170:3064578} {3058946:3061762} > (DF)
11:27:13.828350 ailleurs.41931 > chez.moi.22: . ack 3057538 win 32424 <nop,nop,timestamp 157571958 180513349,nop,nop,sack 2 {3063170:3065986} {3058946:3061762} > (DF)
11:27:13.864811 ailleurs.41931 > chez.moi.22: . ack 3057538 win 32424 <nop,nop,timestamp 157571995 180513349,nop,nop,sack 2 {3063170:3067394} {3058946:3061762} > (DF)
11:27:13.936019 ailleurs.41931 > chez.moi.22: . ack 3057538 win 32424 <nop,nop,timestamp 157572065 180513349,nop,nop,sack 2 {3063170:3068802} {3058946:3061762} > (DF)
11:27:13.972485 ailleurs.41931 > chez.moi.22: . ack 3057538 win 32424 <nop,nop,timestamp 157572099 180513349,nop,nop,sack 2 {3063170:3070210} {3058946:3061762} > (DF)
11:27:14.024227 ailleurs.41931 > chez.moi.22: . ack 3057538 win 32424 <nop,nop,timestamp 157572151 180513349,nop,nop,sack 2 {3063170:3071618} {3058946:3061762} > (DF)
[...]

Dans le même temps sur le tcpdump de xl0 j'ai :

11:27:13.432538 ailleurs.41931 > 192.168.66.2.22: . ack 3053314 win 32424 <nop,nop,timestamp 157571563 180513175> (DF)
11:27:13.516084 ailleurs.41931 > 192.168.66.2.22: . ack 3056130 win 32424 <nop,nop,timestamp 157571647 180513261> (DF)
11:27:13.516492 192.168.66.2.22 > ailleurs.41931: . 3119090:3120498(1408) ack 2994 win 2332 <nop,nop,timestamp 180516132 157571647> (DF) [tos 0x8]
11:27:13.516633 192.168.66.2.22 > ailleurs.41931: . 3120498:3121906(1408) ack 2994 win 2332 <nop,nop,timestamp 180516132 157571647> (DF) [tos 0x8]
11:27:13.516750 192.168.66.2.22 > ailleurs.41931: . 3121906:3123314(1408) ack 2994 win 2332 <nop,nop,timestamp 180516132 157571647> (DF) [tos 0x8]
11:27:13.516862 192.168.66.2.22 > ailleurs.41931: . 3123314:3124722(1408) ack 2994 win 2332 <nop,nop,timestamp 180516132 157571647> (DF) [tos 0x8]
11:27:17.077559 192.168.66.2.22 > ailleurs.41931: . 3056130:3057538(1408) ack 2994 win 2332 <nop,nop,timestamp 180519694 157571647> (DF) [tos 0x8]

Bref pour une raison inconnue, le pf a arrêté de transmettre les paquets
d'ailleurs vers chez moi à partir de celui de 11:27:13.671686. Est-ce que
quelqu'un a une piste à explorer ?

Christophe


--
Le cinéma en Lumière : http://www.lumiere.org/
Retirer .invalid pour me répondre
Remove .invalid to reply

4 réponses

Avatar
espie
Est-ce que ton `chez.moi' a une adresse fixe ?
Ca serait pas un gag de reconfiguration de ppp qui te change l'adresse IP ?
Je crois qu'avec les bonnes incantations style (tun0) a la place de tun0,
pf est capable de s'en sortir.

Plus generalement, c'est uniquement les gros transferts a base de scp, ou
c'est toute connexion a longue duree ?

Pour contourner vaguement le probleme, rsync sait reprendre des transferts
interrompus de la sorte... et l'option -B s'avere alors particulierement
utile.

En rapport avec la reponse de Xavier:

When a packet matches a stateful connection, the seconds to live
for the connection will be updated to that of the proto.modifier
which corresponds to the connection state. Each packet which
matches this state will reset the TTL. Tuning these values may im-
prove the performance of the firewall at the risk of dropping valid
idle connections.

sauf si les regles de pf sont explicitement stateless, je ne vois pas le
firewall dropper les connexions, sauf s'il est vraiment charge.

Je pencherais plutot pour un changement dynamique d'adresse IP que pf ne
capte pas...

(dis, t'as pas de trucs hyper-gourmands en paquets comme un mldonkey, par
hasard).
Avatar
Christophe Labouisse
On Sun, 02 Jan 2005 23:59:21 +0000, Marc Espie wrote :

Est-ce que ton `chez.moi' a une adresse fixe ?
Ca serait pas un gag de reconfiguration de ppp qui te change l'adresse IP ?


chez.moi est effectivement une adresse IP fixe mais je n'ai pas souvenir
d'un changement intempestif d'adresse IP depuis que je suis en IP fixe. En
outre je n'ai ce problème que sur le transfert : la connexion ssh en
cours n'est pas affectée.

Plus generalement, c'est uniquement les gros transferts a base de scp, ou
c'est toute connexion a longue duree ?


Non uniquement sur les gros transferts scp, pas de problème pour
maintenir une connexion ssh ouverte plusieurs heures ni tunneller sur imap
via cette même connexion.

Pour contourner vaguement le probleme, rsync sait reprendre des
transferts interrompus de la sorte... et l'option -B s'avere alors
particulierement utile.


En fait j'ai trouvé un contournement qui consiste à initier le scp à
partir de chez moi plutôt que l'inverse.

sauf si les regles de pf sont explicitement stateless, je ne vois pas le
firewall dropper les connexions, sauf s'il est vraiment charge.

Je pencherais plutot pour un changement dynamique d'adresse IP que pf ne
capte pas...

(dis, t'as pas de trucs hyper-gourmands en paquets comme un mldonkey,
par hasard).


Non non je viens de refaire plusieurs fois le test alors que le trafic
réseau chez moi est réduit à un serveur mail perso (donc pas grand
chose), la récupération des news & une connexion ssh. À part ça rien
de particulièrement consommateur en paquets (à moins que mon firewall ne
croule sous les scans & les tentatives de connexion netbios).

Avatar
Christophe Labouisse
On Sun, 02 Jan 2005 14:40:32 +0100, Xavier wrote :

Probablement que la connexion TCP a expiré dans la table des états. Je
ne connais pas le paramètre qui définit ça, mais à mon avis tu peux
chercher de ce côté.



Je viens de reproduire ce problème en faisant des pfctl -s state durant
le transfert. Je vois bien une connexion arriver sur le port 22 lorsque je
lance le transfert mais lorsqu'il s'arrête cette connexion est toujours
présent en ESTABLISHED:ESTABLISHED (d'ailleurs elle reste même lorsque
j'ai fait un ctrl-c pour arrêter le transfert).

Avatar
J.
Christophe Labouisse wrote:
J'ai un problème assez récurent lorsque j'essaye de récupérer depuis
l'extérieur des fichiers stocké chez moi par scp. J'ai une machine Nunux
qui est sur un LAN protégé par un firewall sous OpenBSD avec pf. De
l'extérieur je fais : "scp chezmoi:/fichier .". Tout marche bien au
départ mais lorsque la taille du fichier est suffisamment importante le
transfert s'arrête (scp indique "stalled" en vitesse de transfert) &
reste ainsi jusqu'à temps que je l'interrompe pas un Ctrl-C rageur.


Cela se produit souvent quand il y a un problème de negotiation de
duplex sur les réseaux ethernet. Ta configuration réseau entre ton linux
et ton bsd est peut-être mauvaise (100FX d'un coté vs 100HX de l'autre
par exemple).

J.