Sam & Max » ip http://sametmax.com Du code, du cul Sat, 07 Nov 2015 10:56:13 +0000 en-US hourly 1 http://wordpress.org/?v=4.1 You are deprecated 18 http://sametmax.com/you-are-deprecated/ http://sametmax.com/you-are-deprecated/#comments Mon, 18 Nov 2013 08:20:47 +0000 http://sametmax.com/?p=7985 Ceci est un post invité de Toniob posté sous licence creative common 3.0 unported.

Oh oui, je sais ce que vous allez me dire, et vous avez parfaitement raison. Oui, il m’arrive d’être un peu obtus sur certaines choses, surtout quand il s’agit d’un domaine que je connais. Bref, aujourd’hui nous allons parler de ifconfig et de route.

Soyons clair tout de suite : arrêtez d’utiliser ces merdes, elles sont dépréciées depuis longtemps ! Je sais comment sont les informaticiens de manière générale, et les administrateurs systèmes en particulier. Il est difficile de changer leurs habitudes. Mais si on vous proposait Scarlett Johansson, vous resteriez fidèle à Régine ou Jonathan Rhys Meyers si vous aviez Mickey Rourke ? Je vois à vos yeux lubriques que vous m’avez saisi. Alors c’est parti.

- ifconfig ? - ouiiiii ** tum tum tum tum **

Les interfaces

Utilisez la commande ip, c’est un ordre. Elle remplacera avantageusement ifconfig. Dans la suite de ce billet, je mettrai des exemples de commandes avec ifconfig et leur équivalent avec ip. Commençons avec du simple, afficher la liste des interfaces disponibles :

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:90:f5:ee:62:31  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interruption:20 Mémoire:f7e00000-f7e20000

lo        Link encap:Boucle locale  
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:720 (720.0 B)  TX bytes:720 (720.0 B)
$ ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:  mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:90:f5:ee:62:31 brd ff:ff:ff:ff:ff:ff

Vous voyez, pour le moment ce n’est pas si compliqué, vous économisez même de précieuses lettres. Vous constatez que la sortie est différente, mais vous y trouverez globalement les mêmes informations. C’est une question d’habitude. Personnellement, ça m’a pris un peu de temps, mais je ne reviendrais en arrière pour rien au monde.

On va maintenant assigner une adresse ip. Bon, j’avoue, c’est un peu plus long cette fois avec la commande ip :

# ifconfig eth0 192.168.1.1/24
# ip addr add 192.168.1.1/24 dev eth0

Et si maintenant nous ajoutions une adresse ipv4 ? Sauf qu’avec ifconfig, ce n’est pas possible, on ne peut le faire qu’avec ip :

# ip addr add 192.168.1.2/32 dev eth0

Si on affiche la configuration de l’interface réseau :

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:90:f5:ee:62:31  
          inet adr:192.168.1.1  Bcast:0.0.0.0  Masque:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interruption:20 Mémoire:f7e00000-f7e20000 
$ ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:90:f5:ee:62:31 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.2/32 scope global eth0
       valid_lft forever preferred_lft forever

Et oui, rien du côté de ifconfig. Il ne voit pas que l’interface dispose de deux adresses différentes. Alors qu’il fallait utiliser des alias d’interface avec ifconfig, plus de souci de ce côté là avec ip. Voici maintenant quelques exemples d’autres commandes pouvant être utiles :

# ifconfig eth0 mtu 9000
# ip link set eth0 mtu 9000

# ifconfig eth0 up
# ip link set eth0 up

Les routes

Passons maintenant aux routes. Si vous utilisez ifconfig, vous vous servez aussi probablement de route. C’est fini les conneries maintenant ! Commençons par les afficher :

# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
$ ip route
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.1

Oui, la sortie est moins verbeuse par défaut. Ça devrait vous plaire pour vos scripts shell. Ajoutons maintenant une route par défaut :

# route add default gw 192.168.1.254
# ip route add defaut via 192.168.1.254

Et si on regarde le résultat de la commande ip route maintenant :

$ ip route
default via 192.168.1.254 dev eth0 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.1

Contrairement à route, ip route génère une sortie qui peut être copiée / collée dans un ip route add. Pratique pour dupliquer une conf sur un autre serveur. Pour ajouter une route vers un hôte ou un réseau en particulier :

# route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.253
# ip route add 192.168.2.0/24 via 192.168.1.253

C’est une affaire de goût, mais je préfère largement la syntaxe de ip à celle de route.

Conclusion

Voilà cette petite introduction à la commande ip est terminée. Essayez de remplacer ifconfig dans vos usages au quotidien. Ça prend un peu de temps pour s’y faire, mais la syntaxe plus claire et les fonctionnalités disponibles permettent vite d’être plus rapide dans la configuration réseau d’une machine. Les exemples que j’ai donnés dans cet article devraient être suffisants pour 90% des usages. Si vous cherchez à vouloir en faire plus, il suffit d’ajouter l’option help à votre ligne de commande pour avoir des informations. Plus pratique que d’avoir à taper dans le man sans arrêt.

Si cet article vous plaît (merci de me faire des commentaires élogieux, c’est mon premier ici), j’essaierai de vous faire découvrir un peu plus la stack réseau sous Linux. Si les vlans sont connus, les bondings un peu moins, je pense que les macvtaps sont un mystère pour la plupart d’entre vous. Et tout se fait avec l’aide d’ip en plus, que demande le peuple ?

Et si la conf réseau ça vous saoule, je trouverai à m’énerver sur d’autres choses (le larousse n’a qu’à bien se tenir).

]]>
http://sametmax.com/you-are-deprecated/feed/ 18
Récupérer l’IP client avec Nginx en proxy sous CherryPy/Django/Bottle – proxy_set_header http://sametmax.com/recuperer-lip-client-avec-nginx-en-proxy-sous-cherrypy-proxy_set_header/ http://sametmax.com/recuperer-lip-client-avec-nginx-en-proxy-sous-cherrypy-proxy_set_header/#comments Thu, 06 Sep 2012 02:11:26 +0000 http://sametmax.com/?p=2041 Si vous utilisez Nginx en proxy, vous allez vous heurter à son IP lorsque votre script tentera de récupérer l’IP du client soit 127.0.0.1.

En rajoutant ces quelques lignes à votre config Nginx:

location / { 
 # ici un proxy pass quelconque
 proxy_pass http://cherrypy;
 
 # et ici la magie opère
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Dans votre script python (ici Bottle), vous pouvez du coup la récupérer:

#get user IP
user_ip = request.remote_addr
]]>
http://sametmax.com/recuperer-lip-client-avec-nginx-en-proxy-sous-cherrypy-proxy_set_header/feed/ 0
nginx et limitation de connexion par IP avec limit_conn_zone 2 http://sametmax.com/nginx-et-limitation-de-connexion-par-ip-avec-limit_conn_zone/ http://sametmax.com/nginx-et-limitation-de-connexion-par-ip-avec-limit_conn_zone/#comments Fri, 06 Jul 2012 13:54:20 +0000 http://sametmax.com/?p=921 Limiter une IP à une ou plusieurs connexion avec nginx peut s’averer utile si vous voulez proposer par exemple un seul téléchargement de fichier à la fois par IP sur votre serveur (économie de bande passante, éviter de se faire aspirer tout le site d’un coup, etc.)

Nginx rappelons le est actuellement l’un des serveurs web les plus performant, gratuit qui plus est.

L’exemple ci-dessous va limiter une IP à 5 connexions sur l’ensemble des images servies par votre serveur. On peut bien sur modifier la regex Location pour limiter aux videos, pdf, etc…


dans le fichier de config de nginx:


Dans http:

http {
limit_conn_zone $binary_remote_addr zone=limit:10m; 
}

10m veut dire qu’il va logguer les IPs connectées dans 10 MB de mémoire après il efface et recommence, ça permet de stocker les IPs connectées récement.


Dans server:

server {
    location ~ \.(jpg|jpeg|gif|png)$ {
      limit_conn limit 5; # limit to 5 cnx by IP
    } 
}

PS: limit est le nom de zone que vous donnez à votre règle, ça peut prendre la forme que ça veut comme dirait Egon dans Ghostbusters…

Pour en savoir plus : Doc nginx HttpLimitZoneModule

]]>
http://sametmax.com/nginx-et-limitation-de-connexion-par-ip-avec-limit_conn_zone/feed/ 2