jeremm

Jérémy MURIEL ( jeremy [at] jeremm [dot] fr )

Mar 062012
 

Si votre routeur a un cache arp trop long, il est possible d’envoyer une trame ARP en broadcast ou ciblant directement le routeur où on déclare une IP et la MAC correspondante, et ainsi rafraîchir le cache.

Un inconvénient, la plupart des équipements réseau sécurise leur cache ARP pour éviter du ARP spoofing. Ils refusent les paquets de réponse ARP qui ne correspondent pas à une demande.

Un petit script pour envoyer ces paquets automatiquement en récupérant les adresses définis et la passerelle du système :

#!/bin/bash
 
TEST_IP=8.8.8.8
if [ ! -x /sbin/ip ] ; then
        apt-get install iproute -y
fi
if [ ! -x /bin/grep ] ; then
        apt-get install grep -y
fi
 
GW=`/sbin/ip route list | /bin/grep default | /usr/bin/awk '{print $3}'`
DEV=`/sbin/ip route list | /bin/grep default | /usr/bin/awk '{print $5}'`
 
if [ ! -x /usr/sbin/arping ] ; then
        apt-get install arping -y
fi
 
if [ ! -x /usr/bin/fping ] ; then
        apt-get install fping -y
fi
 
for ip in `/sbin/ip address list $DEV | /bin/grep "inet " | /usr/bin/awk '{print $2}' | /usr/bin/cut -d'/' -f1` ; do
        if [ `/usr/bin/fping -S $ip -c 1 $TEST_IP 2>&1 | /bin/grep "0% loss" | /usr/bin/wc -l` -eq 0 ] ; then
                echo "ARPING from $ip"
                /usr/sbin/arping -S $ip -c 1 -w 2 -i $DEV $GW &> /dev/null
        fi
done
 Posted by at 13 h 27 min  Tagged with:
Mar 052012
 

Avec varnish, par défaut quand vous appelez la routine pass,

return(pass);

votre requête sera envoyée directement au backend sans vérifier le cache mais si la réponse est « cachable » http://blog.jeremm.fr/?p=190, Varnish la sauvegardera dans son cache.

Bien sûr cela ne sert souvent à rien car la prochaine requête passera encore par le routine pass, et l’objet dans le cache ne sera pas utilisée.
Mais avec une configuration plus complexe, l’objet en cache pourrait être utilisé.

Pour être sûr que les objets passant par la routine pass ne soit pas cachée, ajoutez :

sub vcl_pass {
        set req.http.X-marker = "pass" ;
}

et dans le vcl_fetch :

if (req.http.X-marker == "pass" ) {
        unset req.http.X-marker;
        set beresp.ttl = 0s ;
}
Mar 052012
 

Pour savoir comment Varnish décide si un objet peut être caché :

Varnish regarde deux paramètres dans l’en-tête HTTP que lui renvoie le backend.

  • La date du paramètre Expires :
  1. Si il est dans le passé, il ne cache pas
  2. Si il est dans le futur, il cachera jusqu’à la date.
  • La valeur du s-maxage ou max-age du paramètre Cache-Control :
  1. Si il est égal à 0, il ne cachera pas
  2. Si il est supérieur à 0, il cachera le nombre de seconde que ce paramètre lui dit (avec ce paramètre, Varnish ne regardera pas le paramètre Expires)

Si aucun des deux paramètres n’est présent, Varnish cachera l’objet avec le temps de rafraichissement par défaut.

Vous pouvez bien sûr ajouter des règles pour forcer ou non des objets dans le cache.

Fév 232012
 

Par défaut chaque utilisateur est limité à un nombre de fichier ouverts (ulimit -n), 1024 par défaut.
Pour modifier cela :

echo "* hard nofile 65536" >> /etc/security/limits.conf
echo "* soft nofile 65536" >> /etc/security/limits.conf
if [ `cat /etc/pam.d/login  | grep "^session" | grep "pam_limits.so" | wc -l` -eq 0 ] ; then
echo "session required pam_limits.so" >> /etc/pam.d/login ; fi

A toute nouvelle connexion, la limite sera augmenté