<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<?xml-stylesheet type="text/css" href="http://www.inetdoc.net/styles/feed.css"?>
<title type="html">inetdoc.net</title>
<subtitle type="html">Interconnexion réseau &amp; Logiciel Libre</subtitle>
<link rel="alternate" type="text/html" href="http://www.inetdoc.net" />
<link rel="self" type="application/atom+xml" href="http://www.inetdoc.net/atom.xml" />
<updated>2013-05-22T13:50:24+02:00</updated>
<author>
<name>Philippe Latu</name>
<uri>http://www.inetdoc.net</uri>
</author>
<id>http://www.inetdoc.net/</id>
<generator uri="http://nanoblogger.sourceforge.net" version="3.5-RC1">NanoBlogger</generator>
<entry>
<title type="html">NIS, NFSv4, autofs5 &amp; dual stack IPv4 + IPv6</title>
<author>
<name>Philippe Latu</name>
</author>
<link rel="alternate" type="text/html" href="http://www.inetdoc.net/archives/2013/05/21/nis_nfsv4_autofs5__38_dual_stack_ipv4__43_ipv6/index.html" />
<id>http://www.inetdoc.net/archives/2013/05/21/nis_nfsv4_autofs5__38_dual_stack_ipv4__43_ipv6/index.html</id>
<published>2013-05-21T22:17:06+02:00</published>
<updated>2013-05-21T22:17:06+02:00</updated>
<category term="nfs" />
<category term="travaux_pratiques" />
<category term="système" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Pour employer une formule marketing à 2€cts, la collection des acronymes donnés dans le titre constitue un «savoureux mélange» entre anachronisme et modernité. Ceci-dit, je me doute bien qu'à la lecture du même titre, d'aucuns auront déjà trouvé que la mixture est on ne peut plus indigeste ! Enfin, n'ayant plus du peur du ridicule, voici une petite introduction sur ce faux-nouveau support : 
<a href="http://www.inetdoc.net/travaux_pratiques/index.html#sysadm-net.autofs-nis-nfs">Association NIS, NFSv4 et autofs</a>.</p>
<p>Après avoir adapté les supports de la 
<a href="http://www.inetdoc.net/dev/">rubrique développement</a>à IPv6, je me suis posé la question de faire le même travail sur les autres supports de travaux pratiques. Écrire une version IPv6 séparée pour chaque séance de travaux pratiques obligerait à maintenir deux versions pour un même document. Au delà de la quantité de travail, il y a fort à parier qu'une version IPv6 isolée ne serait jamais utilisée vu ce que l'on sait de l'engouement général pour adopter rapidement ce protocole. Il restait donc l'option du document unique double pile ou 
<i>dual stack</i>dans le jargon. À titre d'entraînement, j'ai repris 
<a href="http://www.inetdoc.net/travaux_pratiques/index.html#sysadm-net.autofs-nis-nfs">un vieux support abandonné</a>qui associe trois services.</p>
<ul>
<li>
<b>
<i>Network Information Service</i>
</b>(NIS) permet le partage des paramètres de compte utilisateur. C'est un service démodé qui ne fonctionne qu'avec la pile IPv4 ; ce qui le rend intéressant dans le contexte présent.</li>
<li>
<b>
<i>Network File System</i>
</b>(NFS) est le système de fichiers réseau de prédilection dans le monde Unix. Sa version 4 fonctionne très bien avec la pile IPv6.</li>
<li>
<b>
<i>Automounter</i>
</b>(autofs) permet l'accès transparent au système de fichiers réseau. On l'utilise lors de la connexion d'un utilisateur pour accéder simplement à son répertoire. Normalement, ce service fonctionne avec IPv6. J'ai découvert avec surprise que son utilisation d'IPv6 est assez singulière puisqu'il semble s'appuyer exclusivement sur les enregistrements DNS.</li>
</ul>
<p>Même si le but recherché était de «croiser» les usages des deux piles de protocole de couche réseau, le résultat a dépassé mes attentes puisqu'en trois services on dispose de trois modes opératoires distincts.</p>
<p>Pour être complet, il faut ajouter les appels de procédures distants (RPC) sur lesquels sont basés NIS et NFS. C'est justement ce mécanisme qui autorise le mixage entre les deux piles 
<span style="color:green">IPv4</span>et 
<span style="color:red">IPv6</span>.</p>
<pre>
# rpcinfo -s ip6-srvr.fake.domain
   program version(s) netid(s)                         service     owner
    100000  2,3,4     local,
<span style="color:green">udp,tcp,</span>
<span style="color:red">udp6,tcp6</span>          portmapper  superuser
    100004  1,2       
<span style="color:green">tcp,udp</span>                          ypserv      superuser
    100009  1         
<span style="color:green">udp</span>                              yppasswdd   superuser
    100003  4,3,2     
<span style="color:red">udp6,tcp6</span>,udp,tcp                nfs         superuser
    100227  3,2       udp6,tcp6,udp,tcp                -           superuser
    100021  4,3,1     
<span style="color:red">tcp6,udp6</span>,tcp,udp                nlockmgr    superuser
 600100069  1         
<span style="color:green">tcp,udp</span>                          fypxfrd     superuser
    100007  1,2       
<span style="color:green">tcp,udp</span>                          ypbind      superuser
    100005  3,2,1     tcp6,udp6,tcp,udp                mountd      superuser
</pre>
<h3>
<i>autofs troubleshooting</i>
</h3>
<p>Comme je l'ai dit plus haut la version du paquet 
<b>autofs</b>fourni dans la branche 
<i>testing</i>semble se baser uniquement sur les enregistrements DNS. Voyons comment je suis parvenu à cette conclusion.</p>
<ol>
<li>On commence par un montage statique de l'arborescence depuis le poste client. 
<pre>
# mount -t nfs4 
<span style="color:red">[2001:db8:feb2:10::12]</span>:/home /ahome
root@clnt:/home/etu# ls -lAh /ahome/etu-nis/
total 16K
-rw------- 1 etu-nis etu-nis  385 mai   21  2013 .bash_history
&lt;snip/&gt;

# mount | grep nfs4
<span style="color:red">[2001:db8:feb2:10::12]</span>://home on /ahome type nfs4 \
  (rw,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp6, \
   timeo=600,retrans=2,sec=sys,clientaddr=
<span style="color:red">2001:db8:feb2:10::11</span>,minorversion=0, \
   local_lock=none,addr=
<span style="color:red">2001:db8:feb2:10::12</span>)
</pre>Le montage statique utilisant les adresses 
<span style="color:red">IPv6</span>fonctionne. Rien d'original.</li>
<li>On passe à l'utilisation du démon 
<b>automount</b>avec des fichiers de configuration complétés directement sur le poste client, toujours avec une adresse IPv6 numérique. 
<pre>
# cat /etc/auto.master
/ahome          /etc/auto.home

# cat /etc/auto.home 
* -port=2049,-fstype=nfs4 
<span style="color:red">[2001:db8:feb2:10::12]</span>:/home/&amp;

# service autofs start
[ ok ] Starting automount....
# automount -m

autofs dump map information
===========================

global options: none configured

Mount point: /ahome

source(s):

  instance type(s): file 
  map: /etc/auto.home

  * | -port=2049,-fstype=nfs4 
<span style="color:red">[2001:db8:feb2:10::12]</span>:/home/&amp;
</pre>La configuration a bien été prise en compte par le démon ... 
<pre>
# ls -lAh /ahome/etu-nis
ls: impossible d'accéder à /ahome/etu-nis: Aucun fichier ou dossier de ce type

# tail -3 /var/log/syslog 
clnt automount[3652]: attempting to mount entry /ahome/etu-nis
clnt automount[3652]: 
<span style="color:purple">mount(nfs): no hosts available</span>
clnt automount[3652]: failed to mount /ahome/etu-nis
</pre>
<span style="color:purple">Catastrophe !</span>Le montage automatique échoue.</li>
<li>On reprend la même expérience avec un nom d'hôte DNS dont les enregistrements AAAA et PTR sont valides. 
<pre>
# service autofs start
[ ok ] Starting automount....
# automount -m

autofs dump map information
===========================

global options: none configured

Mount point: /ahome

source(s):

  instance type(s): file 
  map: /etc/auto.home

  * | -port=2049,-fstype=nfs4 
<span style="color:red">vm2.fake.domain</span>:/home/&amp;

# dig +short aaaa vm2.fake.domain
<span style="color:red">2001:db8:feb2:10::12</span>
root@clnt:/home/etu# dig +short -x 
<span style="color:red">2001:db8:feb2:10::12</span>
vm2.fake.domain.
</pre>L'adresse IPv6 utilisée est bien identique à celle du test précédent. 
<pre>
# ls -lAh /ahome/etu-nis
total 16K
-rw------- 1 etu-nis etu-nis  385 mai   21 23:44 .bash_history
&lt;snip/&gt;

# tail -3 /var/log/syslog 
clnt automount[3759]: mounted indirect on /ahome with timeout 300, freq 75 seconds
clnt automount[3759]: attempting to mount entry /ahome/etu-nis
clnt automount[3759]: 
<span style="color:purple">mounted /ahome/etu-nis</span>
</pre>
<span style="color:purple">Bingo !</span>Cette fois-ci le montage se fait correctement. Enfin, si les paramètres de configuration sont publiés via NIS, ça fonctionne aussi.</li>
</ol>
<p>Voilà. On peut considérer que le choix consistant à associer les trois services est pertinent puisqu'il illustre des usages distincts de la pile IPv6. À mon niveau de connaissances, je ne sais pas si le fait d'imposer l'utilisation des enregsitrements DNS par le démon 
<b>automount</b>est volontaire.</p>
<p>Dans tous les cours sur IPv6, il est courant de dire que comme le format numérique des adresses IPv6 est très difficile à retenir, l'usage des enregistrements DNS est impératif. Pour généraliser l'utilisation de la double pile réseau, il semble qu'il faille revoir la séquence des travaux pratiques. Je vais devoir aborder le service DNS au tout début de façon à en bénéficier pour le cycle sur le stockage et les systèmes de fichiers réseau. En conclusion, le support de travaux pratiques DNS est le prochain sur la liste !</p>
</div>
</content>
</entry>
<entry>
<title type="html">Initiation au développement IPv4 + IPv6</title>
<author>
<name>Philippe Latu</name>
</author>
<link rel="alternate" type="text/html" href="http://www.inetdoc.net/archives/2013/03/05/initiation_au_développement_ipv4__ipv6/index.html" />
<id>http://www.inetdoc.net/archives/2013/03/05/initiation_au_développement_ipv4__ipv6/index.html</id>
<published>2013-03-05T21:54:58+02:00</published>
<updated>2013-03-05T21:54:58+02:00</updated>
<category term="dev" />
<category term="formations" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>La rubrique 
<a href='http://www.inetdoc.net/dev/'>dev</a>vient d'être enrichie d'un nouveau support sur l'
<a href='http://www.inetdoc.net/dev/socket-c-4and6/'>Initiation au développement C sur les sockets IPv4 &amp; IPv6</a>.</p>
<p>Ce qui, au départ, ne devait être qu'un complément au précédent document utilisant seulement IPv4 a finalement abouti à une progression en quatre étapes ou programmes. J'ai conservé l'idée initiale d'échange de chaîne de caractères entre un client et un serveur. Cette forme rudimentaire de 
<i>chat</i>est très bien accueillie par les étudiants.</p>
<p>La première étape est un plagiat éhonté du programme 
<tt>showip</tt>du livre 
<a href='http://beej.us/guide/bgnet/'>Beej's Guide to Network Programming</a>. La technique de parcours des enregistrements 
<tt>addrinfo</tt>issus de l'appel à 
<tt>getaddrinfo()</tt>est ensuite reprise dans tous les autres programmes du document. À la deuxième étape, le programme client se contente d'ouvrir la première prise réseau ou 
<i>socket</i>disponible. Jusque là, tout va bien ! C'est avec le programme serveur que les choses se compliquent. Faut-il utiliser une ou deux prises réseau ?</p>
<a href="http://www.inetdoc.net/dev/socket-c-4and6/socket-c-4and6.dual-what.html">
<img src="http://www.inetdoc.net/dev/socket-c-4and6/images/dual-stack-single-socket.png" width="640" alt="dual stack single socket" />
</a>
<p>Franchement, je n'ai pas le recul nécessaire pour prendre parti sur cette question. Ce qui est sûr, c'est que la solution «académique» est plus séduisante pour un prof. Le code de la couche application est indépendant des protocoles de la couche réseau et la quantité de code est plus réduite. Ça n'empêche pas de souffrir un peu sur l'utilisation de l'option 
<tt>bindv6only</tt>et sur l'interprétation des codes d'erreurs associés. J'ai fini par aboutir au tableau de tests suivant. Les deux étapes restantes proposent les programmes serveurs avec une puis deux prises réseau.</p>
<table summary="Protocole de couche réseau utilisé suivant les conditions de tests" border="1" cellpadding="7" style="border:2px solid black;border-collapse:collapse;">
<thead>
<tr>
<th style="padding:.33em;">
<p>client ou 
<em class="wordasword">talker</em></p>
</th>
<th style="padding:.33em;">
<p>Serveur ou 
<em class="wordasword">listener</em></p>
<p>
<em class="wordasword">socket</em>unique</p>
<p>
<code class="option">bindv6only = 0</code>
</p>
</th>
<th style="padding:.33em;">
<p>Serveur ou 
<em class="wordasword">listener</em></p>
<p>
<em class="wordasword">socket</em>double</p>
<p>
<code class="option">bindv6only = 1</code>-&gt; 
<em class="wordasword">socket</em>
<acronym class="acronym">IPv6</acronym></p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding:.33em;">
<p>Client 
<em class="wordasword">dual stack</em></p>
<p>
<code class="option">disable_ipv6 = 0</code>
</p>
</td>
<td style="padding:.33em;">
<p>
<acronym class="acronym">IPv6</acronym>
</p>
</td>
<td style="padding:.33em;">
<p>
<acronym class="acronym">IPv6</acronym>
</p>
</td>
</tr>
<tr>
<td style="padding:.33em;">
<p>Client 
<em class="wordasword">single stack</em></p>
<p>
<code class="option">disable_ipv6 = 1</code>
</p>
</td>
<td style="padding:.33em;">
<p>
<acronym class="acronym">IPv6</acronym>
</p>
<p>
<em class="wordasword">IPv4-mapped IPv6 addresses</em>
</p>
</td>
<td style="padding:.33em;">
<p>
<acronym class="acronym">IPv4</acronym>
</p>
</td>
</tr>
</tbody>
</table>
<p>Une fois la difficulté de gestion des options sur les 
<i>sockets</i>franchie, la dernière étape avec le codage d'un serveur 
<i>dual stack</i>à deux prises réseau permet de se familiariser avec l'utilisation de la fonction 
<tt>select()</tt>et des macros associées.</p>
<p>Pour conclure, l'utilisation conjointe des deux protocoles 
<tt>IPv4</tt>et 
<tt>IPv6</tt>entraîne un niveau de difficulté plus important dans la manipulation des enregistrements d'adresses 
<tt>IP</tt>. Ce pas supplémentaire peut être délicat à franchir pour un public débutant. C'est certainement la raison pour laquelle les enseignants préfèrent s'en remettre à des bibliothèques de plus haut niveau pour aborder les 
<i>sockets</i>. En Génie Électrique, les développements sont très proches de l'espace noyau et le langage C reste incontournable, ce qui rend le compromis délicat à négocier.</p>
<p>Comme d'habitude, si quelqu'un à le courage de s'attaquer à la lecture du document, je serais très content de lire toutes les remarques ou critiques !</p>
</div>
</content>
</entry>
<entry>
<title type="html">Architecture système et initiation au développement réseau</title>
<author>
<name>Philippe Latu</name>
</author>
<link rel="alternate" type="text/html" href="http://www.inetdoc.net/archives/2013/02/07/architecture_système_et_initiation_au_développement_réseau/index.html" />
<id>http://www.inetdoc.net/archives/2013/02/07/architecture_système_et_initiation_au_développement_réseau/index.html</id>
<published>2013-02-07T17:45:15+02:00</published>
<updated>2013-02-07T17:45:15+02:00</updated>
<category term="dev" />
<category term="réseau" />
<category term="formations" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Avant les séances de travaux pratiques sur 
<a href="http://www.inetdoc.net/dev/socket-c/">l'initiation au développement sur les sockets</a>avec les étudiants de seconde année de DUT GE2I, j'ai voulu passer à une version 
<i>dual stack</i>
<tt>IPv4</tt>et 
<tt>IPv6</tt>des programmes étudiés. L'évolution relativement récente consiste à remplacer les appels à 
<tt>'gethostbyname'</tt>par l'utilisation de 
<tt>'getaddrinfo'</tt>qui renvoie les adresses des deux versions du protocole 
<tt>IP</tt>via des pointeurs sur des enregistrements 
<tt>'addrinfo'</tt>chaînés. Tout ceci fonctionne très bien et la façon dont les données sont structurées est très intéressante à étudier ... à mes yeux.</p>
<p>On constate une fois de plus que le niveau requis pour accéder à la compréhension d'une technique ou d'une technologie augmente sans cesse. Pour un débutant complet, il devient de plus en plus difficile de se hisser à un niveau permettant de s'accrocher au train en marche. L'argument qui vient immédiatement consiste à dire que les étudiants actuels sont nés avec l'intégration système et qu'ils utilisent très bien leur smartphone sans se soucier de l'encapsulation des paquets 
<tt>IP</tt>dans les réseaux radio numériques. Mon point de vue repose sur le fait que le niveau correspondant à «l'utilisation» des systèmes n'est pas suffisant pour accéder à un emploi et un niveau de revenus décent. Je tente donc à nouveau ma chance en présentant quelques 
<a href="http://www.inetdoc.net/presentations/os-arch-hints/">éléments sur l'architecture système</a>. L'idée est de montrer que les systèmes d'exploitation des «dispositifs mobiles» dont les étudiants sont friands ont une longue histoire chaotique mais continue. Suivant cette idée, les «petits programmes pour débuter» viennent bien s'intégrer dans les technologies utilisées au quotidien.</p>
<a href="http://www.inetdoc.net/presentations/os-arch-hints/">
<img src="http://www.inetdoc.net/presentations/os-arch-hints/images/kernel-network-subsystem.png" width="630" alt="Sous-système réseau du noyau Linux" />
</a>
<p>La présentation est disponible aux formats 
<a href="http://www.inetdoc.net/odp/os-arch-hints.odp">ODP</a>et 
<a href="http://www.inetdoc.net/pdf/os-arch-hints.pdf">PDF</a>. Si vous avez envie d'apporter des corrections, n'hésitez pas !</p>
</div>
</content>
</entry>
<entry>
<title type="html">Aire OSPF et passerelles multiples (2ème)</title>
<author>
<name>Philippe Latu</name>
</author>
<link rel="alternate" type="text/html" href="http://www.inetdoc.net/archives/2012/11/22/aire_ospf_et_passerelles_multiples_2ème/index.html" />
<id>http://www.inetdoc.net/archives/2012/11/22/aire_ospf_et_passerelles_multiples_2ème/index.html</id>
<published>2012-11-22T17:51:40+02:00</published>
<updated>2012-11-22T17:51:40+02:00</updated>
<category term="ospf" />
<category term="rpdb" />
<category term="failover" />
<category term="réseau" />
<category term="formations" />
<category term="travaux_pratiques" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Suite à l'article 
<a href="http://www.inetdoc.net/articles/ospf-triangle-multiple-default/">Aire OSPF et passerelles multiples</a>et au cycle de travaux pratiques des M1 STRI sur l'interconnexion des réseaux locaux et étendus, voici une variante d'utilisation du marquage de paquets avec des tables de routage multiples. L'idée est toujours d'implanter un mécanisme de tolérance aux pannes entre les passerelles d'une aire OSPF et un routeur de niveau «supérieur».</p>
<a href="http://www.inetdoc.net/travaux_pratiques/interco.cs/">
<img src="http://www.inetdoc.net/travaux_pratiques/interco.cs/images/interco.cs.multiple-gw.png" width="630" alt="Interconnexion avec deux routeurs de bordure OSPF" />
</a>
<p>Ici, les trois routeurs protagonistes ont chacun une interface dans le même domaine de diffusion et on utilise un octet d'adresse MAC pour identifier et distinguer les passerelles.</p>
<p>Pour un nouveau flux 
<em>sortant de l'aire OSPF</em>, il y a ...</p>
<ol>
<li>Marquage du premier paquet en fonction de l'adresse MAC source dans la chaîne 
<tt>PREROUTING</tt>de la table 
<em>mangle</em>.</li>
<li>Mémorisation du marquage de paquet dans le mécanisme de suivi d'état du système de filtrage (
<em>connmark</em>)</li>
<li>Entrée dans la table de routage dédiée au routeur de bordure à l'origine du flux.</li>
</ol>
<p>Pour un flux 
<em>retour dans l'aire OSPF</em>, il y a ...</p>
<ol>
<li>Restauration du marquage de paquet en fonction des enregistrements effectués via le mécanisme de suivi d'état</li>
<li>Entrée dans la table de routage dédiée au routeur de bordure vers lequel le flux doit être dirigé.</li>
</ol>
<p>La configuration correspondante est alors obtenue avec ...</p>
<ul>
<li>Une table de routage par routeur de bordure : 
<pre>
# cat /etc/iproute2/rt_tables 
#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
<em>72      centares
79      naboo</em>
</pre>
<br />
<pre>
# ip route add 10.0.16.0/20 via 172.16.1.1 table centares
# ip route add 10.0.32.0/20 via 172.16.1.1 table centares
# ip route add default dev bond0 table centares
</pre>
<br />
<pre>
# ip route add 10.0.16.0/20 via 172.16.4.1 table naboo
# ip route add 10.0.32.0/20 via 172.16.4.1 table naboo
# ip route add default dev bond0 table naboo
</pre></li>
<p>Le plan d'adressage est donné dans le support 
<a href="http://www.inetdoc.net/travaux_pratiques/interco.cs/">Étude de cas sur l'interconnexion LAN/WAN</a>.</p>
<li>Des règles de marquages utilisant la table 
<em>mangle</em>: 
<pre>
# iptables -t mangle -A PREROUTING -i bond0.1 -m mac --mac-source 00:1f:c6:01:26:72 -j MARK --set-mark 72
# iptables -t mangle -A PREROUTING -i bond0.1 -m mac --mac-source 00:1f:c6:01:26:79 -j MARK --set-mark 79
# iptables -t mangle -A PREROUTING -i bond0.1 -j CONNMARK --save-mark
# iptables -t mangle -A PREROUTING -i bond0 -j CONNMARK --restore-mark
</pre></li>
<p>Ici, l'interface 
<tt>bond0</tt>correspond au lien vers l'Internet et l'interface 
<tt>bond0.1</tt>appartient au même réseau local que les deux routeurs de bordure.</p>
<li>Des règles d'entrée dans les tables de routage en fonction des marques : 
<pre>
# ip rule add fwmark 72 table centares
# ip rule add fwmark 79 table naboo
</pre></li>
</ul>
<p>Voilà ! Cette configuration n'est qu'un exemple supplémentaire d'utilisation des tables de routage multiples sur les systèmes GNU/linux. Cette technique est trop souvent considérée à tort comme «effrayante». Dès lors que l'on accepte de traiter le problème pas à pas, la «représentation intellectuelle» de la gestion des flux se met plus facilement en place ;).</p>
<p>Une fois de plus, le «copié-collé de la mort» si cher aux étudiants ne rend pas service et ne permet pas de visualiser les mécanismes en jeu.</p>
</div>
</content>
</entry>
<entry>
<title type="html">Comment résoudre un problème d'accès à la configuration du service LDAP</title>
<author>
<name>Philippe Latu</name>
</author>
<link rel="alternate" type="text/html" href="http://www.inetdoc.net/archives/2012/09/23/comment_résoudre_un_problème_d_39accès_à_la_configuration_du_service_ldap/index.html" />
<id>http://www.inetdoc.net/archives/2012/09/23/comment_résoudre_un_problème_d_39accès_à_la_configuration_du_service_ldap/index.html</id>
<published>2012-09-23T17:24:57+02:00</published>
<updated>2012-09-23T17:24:57+02:00</updated>
<category term="travaux_pratiques" />
<category term="système" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>En révisant le support de travaux pratiques sur 
<a href='http://www.inetdoc.net/travaux_pratiques/index.html#sysadm-net.ldap'>l'introduction aux annuaires LDAP avec OpenLDAP</a>, j'ai perdu 
<i>un certain temps</i>avant de pouvoir traiter la partie sur 
<em>l'analyse de la configuration du service LDAP</em>. Relativement à l'édition précédente, les versions du paquet source 
<tt>openldap</tt>ont évolué et un petit détail sur la résolution des noms m'avait échappé. Bien sûr, me direz-vous, dans la vraie vie tout le monde installe son service LDAP en ayant préalablement validé que le serveur est connu du service DNS. Eh bien, pas moi ! Dans un contexte de travaux pratiques, on cherche à isoler les services les uns des autres de façon à ne traiter qu'un seul problème bien identifié à la fois. Voyons donc comment on peut se fourvoyer facilement et quelle démarche aurait pu être suivie d'entrée de jeu.</p>
<h3>Au début, il était question d'authentification ...</h3>
<p>Pour valider les questions et les réponses du TP, on configure de façon très classique deux instances de machines virtuelles avec le système de base et le service SSH en 
<i>Debian/testing</i>: un serveur et un client. On effectue les mises à jour et on renomme les machines. On obtient avec la topologie suivante :</p>
<pre>
          |eth0
         _|____
       (_______)           noyau
       |Routeur|    &lt;-- système hôte
       (_______)
          |br0  @IP: 198.51.100.1
       ___|______
      |          |  &lt;-- openvswitch
      `-.------.-'
        |tap0  |tap1
        |    --'.
        |    |' |hostname : vm-ldap-client
        |    |. |@IP      : 198.51.100.3
      --'.   `--'
      |' |hostname : 
<b>
<em>vm-ldap-server</em>
</b>
      |. |@IP      : 198.51.100.2
      `--'
</pre>
<p>Après installation des deux paquets 
<tt>slapd</tt>et 
<tt>ldap-utils</tt>sur le serveur, on teste l'accès à la configuration.</p>
<pre>
Traitement des actions différées (« triggers ») pour « man-db »...
Paramétrage de libltdl7:amd64 (2.4.2-1.1) ...
Paramétrage de libodbc1:amd64 (2.2.14p2-5) ...
Paramétrage de libperl5.14 (5.14.2-13) ...
Paramétrage de libslp1 (1.2.1-9) ...
Paramétrage de slapd (2.4.31-1) ...
  Creating new user openldap... done.
  Creating initial configuration... done.
  Creating LDAP directory... done.
[ ok ] Starting OpenLDAP: slapd.
Paramétrage de ldap-utils (2.4.31-1) ...
localepurge: Disk space freed in /usr/share/locale: 0 KiB
localepurge: Disk space freed in /usr/share/man: 0 KiB

Total disk space freed by localepurge: 0 KiB

# ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" dn
<b style="color: red;">ldap_sasl_interactive_bind_s: Local error (-2)</b>
</pre>
<p>Eh paf ! C'est à partir de là que les choses ont mal tourné. Je me suis focalisé sur l'authentification SASL et non sur la partie 
<tt>interactive_bind_s</tt>du message. Pourtant, cette instruction est bien celle préconisée dans le fichier de documentation du paquet 
<tt>slapd</tt>: 
<tt>/usr/share/doc/slapd/README.Debian.gz</tt></p>
<p>Je me suis lancé dans la configuration de l'authentification SASL avec le paquet 
<tt>sasl2-bin</tt>et le mécanisme PAM pour authentifier les utilisateurs locaux dont le super-utilisateur qui doit avoir accès sans restriction à la configuration du ou des annuaires LDAP configurés sur le serveur. Bien que cette authentification soit fonctionnelle, j'obtenais toujours le même message d'erreur. La situation était bloquée. Pas moyen de modifier le DIT.</p>
<h3>À la fin, il n'était plus question que de résolution des noms</h3>
<p>Au lieu de m'enfermer dans cette voie sans issue, j'aurais dû commencer par faire appel à 
<tt>strace</tt>.</p>
<pre>
# strace ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" dn
<i>&lt;snipped&gt;</i>
recvfrom(4, "h4\201\203\0\1\0\0\0\1\0\0\16vm-ldap-server\0\0\34\0\1"..., 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("198.51.100.1")}, [16]) = 107
gettimeofday({1348409171, 770189}, NULL) = 0
poll([{fd=4, events=POLLIN}], 1, 4998)  = 1 ([{fd=4, revents=POLLIN}])
ioctl(4, FIONREAD, [107])               = 0
recvfrom(4, "6\361\201\203\0\1\0\0\0\1\0\0\16vm-ldap-server\0\0\1\0\1"..., 1941, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("198.51.100.1")}, [16]) = 107
close(4)                                = 0
write(2, "ldap_sasl_interactive_bind_s: Lo"..., 47
<b style="color: red;">ldap_sasl_interactive_bind_s: Local error (-2)</b>
) = 47
write(3, "0\5\2\1\1B\0", 7)             = 7
close(3)
</pre>
<p>Voici à nouveau le message d'erreur consécutivement à une transaction réseau avec des sockets. Mais que diable vient faire cette requête réseau dans une manipulation locale au système ? On passe donc à l'analyse réseau sur le système hôte ; celui avec l'adresse IP 198.51.100.1.</p>
<pre>
# tshark -i br0 ! port 22
tshark: Lua: Error during loading:
 [string "/usr/share/wireshark/init.lua"]:45: dofile has been disabled
Running as user "root" and group "root". This could be dangerous.
Capturing on br0
  0.000000 198.51.100.2 -&gt; 198.51.100.1 DNS 74 Standard query 0x6213  A vm-ldap-server
  0.000266 198.51.100.1 -&gt; 198.51.100.2 DNS 149 Standard query response 0x6213 No such name
  0.016816 198.51.100.2 -&gt; 198.51.100.1 DNS 74 Standard query 0x2cd4  A vm-ldap-server
  0.016885 198.51.100.2 -&gt; 198.51.100.1 DNS 74 Standard query 0x28a4  AAAA vm-ldap-server
  0.017050 198.51.100.1 -&gt; 198.51.100.2 DNS 149 Standard query response 0x28a4 No such name
  0.017110 198.51.100.1 -&gt; 198.51.100.2 DNS 149 Standard query response 0x2cd4 No such name
</pre>
<p>Bingo ! la requête locale sur le DIT de l'annuaire à besoin de connaître la correspondance entre nom et adresse IP. On se jette sur l'édition du fichier 
<tt>/etc/hosts</tt>dans lequel on donne l'information manquante.</p>
<pre>
# head -4 /etc/hosts
127.0.0.1       localhost
127.0.1.1       vm-ldap-server

198.51.100.2    vm-ldap-server
</pre>
<p>Ouf ! Une nouvelle exécution de la commande 
<tt>ldapsearch</tt>ne produit plus d'erreur et on peut enfin modifier le DIT de l'annuaire.</p>
<pre>
# ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" dn
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base &lt;cn=config&gt; with scope subtree
# filter: (objectclass=*)
# requesting: dn 
#
<i>&lt;snipped&gt;</i>
# search result
search: 2
result: 0 Success

# numResponses: 12
# numEntries: 11
</pre>
<h3>En guise de conclusion</h3>
<p>C'est une nouvelle petite leçon d'humilité. On s'imagine être expérimenté et on se fait attraper comme un débutant sur un détail insignifiant en apparence.</p>
<p>Maintenant, pour rebondir sur le billet intitulé 
<a href='http://raphaelhertzog.fr/go/bugreporting/'>7 astuces pour rapporter les bogues Debian efficacement et voir vos problèmes résolus</a>, est-ce que le problème que je viens de rencontrer mérite un rapport de bug ? Il m'est déjà arrivé dans le passé d'émettre des rapports qui ont fait flop. Ils étaient soit hors sujet (#616487), soit sans aucun intérêt.</p>
</div>
</content>
</entry>
<entry>
<title type="html">Présentation et support de travaux pratiques NFSv4</title>
<author>
<name>Philippe Latu</name>
</author>
<link rel="alternate" type="text/html" href="http://www.inetdoc.net/archives/2012/09/16/pr_233sentation_et_support_de_travaux_pratiques_nfsv4/index.html" />
<id>http://www.inetdoc.net/archives/2012/09/16/pr_233sentation_et_support_de_travaux_pratiques_nfsv4/index.html</id>
<published>2012-09-16T00:59:03+02:00</published>
<updated>2012-09-16T00:59:03+02:00</updated>
<category term="nfs" />
<category term="formations" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<a href='http://www.inetdoc.net/presentations/network-filesystems/'>
<img style="float:right; padding-left:1em; padding-bottom:.33em" src="http://www.inetdoc.net/presentations/network-filesystems/network-filesystems-13.idx.png" width="200" alt="Flux NFS" />
</a>
<p>La présentation sur les 
<a href="http://www.inetdoc.net/presentations/network-filesystems/">systèmes de fichiers réseau</a>et le support de 
<a href="http://www.inetdoc.net/travaux_pratiques/index.html#sysadm-net.nfs">travaux pratiques sur le protocole NFSv4</a>ont été mis à jour pour la session 2012 du module sur 
<a href="http://www.inetdoc.net/formations/sysadm-net/">l'administration système en réseau</a>. L'ensemble des documents du module devraient être 
<i>Wheezy ready !</i>.</p>
<p>Comme d'habitude, si les supports listés ci-dessus vous intéressent, toutes les relectures, les critiques et autres remarques sont les bienvenues.</p>
<br />
<br />
</div>
</content>
</entry>
<entry>
<title type="html">Présentations Cisco Live accessibles gratuitement</title>
<author>
<name>Philippe Latu</name>
</author>
<link rel="alternate" type="text/html" href="http://www.inetdoc.net/archives/2012/06/09/pr_233sentations_cisco_live_accessibles_gratuitement/index.html" />
<id>http://www.inetdoc.net/archives/2012/06/09/pr_233sentations_cisco_live_accessibles_gratuitement/index.html</id>
<published>2012-06-09T18:38:19+02:00</published>
<updated>2012-06-09T18:38:19+02:00</updated>
<category term="réseau" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Les grand-messes réseau organisées tout autour de la planète par Cisco sont appelées 
<i>Cisco Live!</i>(autrefois 
<i>networkers</i>). Elles sont particulièrement riches en présentations orientées conception d'architecture réseau. Il est dorénavant possible d'accéder gratuitement à ces présentations (celles des sessions passées) en s'enregistrant sur le site 
<a href="https://www.ciscolive365.com/">www.ciscolive365.com</a>.</p>
<p>À titre d'exemple, je vous conseille vivement la lecture d'un grand classique : 
<i>Multilayer Campus Architectures and Design Principles</i>. Que votre environnement réseau soit à l'échelle d'un campus ou d'une chambre du CROUS, ce document est très riche d'enseignements et offre de nombreuses pistes de réflexions.</p>
<p>S'il est facile d'envisager la transposition des principes et des technologies présentées avec des logiciels libres et des plateformes «plus ouvertes», le fan des systèmes GNU/Linux sera toujours frustré de ne pas pouvoir accéder à son environnement «habituel». La copie d'écran ci-dessous n'en est qu'une illustration.</p>
<pre>
asr1001-gw#sh bootlog rp active
<b>Linux version 2.6.27.45 (mcpre@mcp-bld-lnx-36) (gcc version 4.2.1)</b> ...
Command line: root=/dev/ram rw console=ttyS2,9600 max_loop=64 crashkernel=128M@16M \
<b>SR_BOOT=bootflash:asr1001-universalk9.03.06.00.S.152-2.S.bin</b>
KERNEL supported cpus:
  Intel GenuineIntel
  AMD AuthenticAMD
  Centaur CentaurHauls
</pre>
</div>
</content>
</entry>
<entry>
<title type="html">Utilisation des interfaces de pilotes virtualisées</title>
<author>
<name>Philippe Latu</name>
</author>
<link rel="alternate" type="text/html" href="http://www.inetdoc.net/archives/2012/06/04/utilisation_des_interfaces_de_pilotes_virtualis_233es/index.html" />
<id>http://www.inetdoc.net/archives/2012/06/04/utilisation_des_interfaces_de_pilotes_virtualis_233es/index.html</id>
<published>2012-06-04T23:48:26+02:00</published>
<updated>2012-06-04T23:48:26+02:00</updated>
<category term="virtualisation" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Le titre du billet aurait pu être une suite d'acronymes barbares : 
<tt>KVM</tt>, 
<tt>VDI</tt>, 
<tt>QXL</tt>, 
<tt>Spice</tt>, etc.</p>
<p>En fait, je me suis juste contenté de transposer le contenu de la page 
<a href="http://www.linux-kvm.org/page/SPICE">Example using SPICE and QXL for improved Graphics experience in the guest</a>dans le contexte Debian 
<i>testing</i>pendant les séances de travaux pratiques. J'ai pris l'habitude de projeter l'écran d'une instance de machine virtuelle aux étudiants de façon à être en phase avec les manipulations proposées. J'utilise donc une image machine jetable par séance. L'instance tourne sur un serveur de 
<a href="http://www.inetdoc.net/travaux_pratiques/infra.tp/">l'infrastructure de travaux pratiques</a>et la séance de travaux pratiques peut avoir lieu dans n'importe quelle salle du campus.</p>
<p>Relativement à l'utilisation de 
<a href="http://www.kde.org/applications/internet/krdc/">krdc</a>avec le protocole 
<a href="http://fr.wikipedia.org/wiki/Virtual_Network_Computing">VNC</a>, le résultat est 
<i>bluffant</i>. Les résolutions d'écrans et l'interactivité sont considérablement améliorées.</p>
</div>
</content>
</entry>
<entry>
<title type="html">Compte utilisateur local &amp; accès SSH sur un équipement Cisco</title>
<author>
<name>Philippe Latu</name>
</author>
<link rel="alternate" type="text/html" href="http://www.inetdoc.net/archives/2012/05/25/compte_utilisateur_local__38_acc_232s_ssh_sur_un__233quipement_cisco/index.html" />
<id>http://www.inetdoc.net/archives/2012/05/25/compte_utilisateur_local__38_acc_232s_ssh_sur_un__233quipement_cisco/index.html</id>
<published>2012-05-25T17:21:00+02:00</published>
<updated>2012-05-25T17:21:00+02:00</updated>
<category term="ssh" />
<category term="réseau" />
<category term="sécurité" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Les équipements réseau Cisco disposent d'un mode d'authentification minimal avec plusieurs niveaux de «privilèges». Historiquement, les deux niveaux couramment utilisés sont le premier et le dernier. Le niveau 1, baptisé 
<i>User EXEC mode</i>, est comparable à l'utilisateur normal d'un système GNU/Linux. Il ne donne accès qu'à la consultation d'informations telles que l'état des interfaces ou la table de routage. Le niveau 15, baptisé 
<i>Privileged EXEC mode</i>, est comparable au super utilisateur d'un même système GNU/Linux.</p>
<p>Comme les capacités d'un équipement réseau en matière d'usages multimédias sur l'Internet sont pour le moins limitées, l'utilisation du compte utilisateur normal ne présente pratiquement aucun intérêt. Si on se connecte à un équipement, c'est fatalement pour effectuer une opération de configuration qui nécessite des droits étendus sur le système. Voici donc la liste des commandes à implanter pour accéder directement au niveau 
<i>Privileged EXEC mode</i>tout en chiffrant les communications à l'aide du protocole 
<tt>SSH</tt>.</p>
<pre>
! Activation du modèle d'authentification AAA
<b>aaa new-model</b>

! Création de la liste d'authentification par défaut.
! Elle est appliquée automatiquement à toutes les interfaces.
! Elle utilise les comptes utilisateurs définis localement.
<b>aaa authentication login default local</b>

! Définition de la base locale comme source d'information
! sur les autorisations.
<b>aaa authorization exec default local</b>

! Création du compte utilisateur local avec les droits étendus.
<b>username 
<i>myusername</i> privilege 15 secret 
<i>mysecretpassword</i></b>

! Définition du nom de domaine nécessaire pour la génération
! des clés SSH
<b>ip domain name my-own.lab</b>

! Génération des clés SSH
<b>crypto key generate rsa label SSH-KEY modulus 4096</b>

! Paramétrage du protocole SSH
! . version 2
<b>ip ssh version 2</b>
! . temps d'attente maximum pendant l'établissement de la connexion
<b>ip ssh time-out 60</b>
! . nombre maximum de tentatives de connexion avant réinitialisation
!   de l'interface
<b>ip ssh authentication-retries 4</b>

! Paramétrage interface d'accès console
! . déconnexion automatique après 5 minutes d'inactivité
! . entrée directe au niveau super utilisateur
! . synchronisation des messages système et de la journalisation
<b>line con 0
 exec-timeout 5
 privilege level 15
 logging synchronous</b>

! Paramétrage interface d'accès distant
! . déconnexion automatique après 5 minutes d'inactivité
! . accès via le protocole SSH uniquement
<b>line vty 0 4
 exec-timeout 5 0
 transport input ssh</b>
</pre>
<p>Voilà pour ce billet sur le mode pense-bête dont le code peut être copié/collé facilement.</p>
</div>
</content>
</entry>
<entry>
<title type="html">Introduction aux systèmes GNU/Linux</title>
<author>
<name>Philippe Latu</name>
</author>
<link rel="alternate" type="text/html" href="http://www.inetdoc.net/archives/2012/05/04/introduction_aux_systèmes_gnulinux/index.html" />
<id>http://www.inetdoc.net/archives/2012/05/04/introduction_aux_systèmes_gnulinux/index.html</id>
<published>2012-05-04T19:15:54+02:00</published>
<updated>2012-05-04T19:15:54+02:00</updated>
<category term="présentations" />
<category term="système" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<a href='http://www.inetdoc.net/presentations/sysadm-base-1/'>
<img style="float:right; padding-left:.33em; padding-bottom:.33em" src="http://www.inetdoc.net/presentations/sysadm-base-1/sysadm-base-1-12.idx.png" width="267" alt="Vue architecture système" />
</a>
<p>L'édition 2012 de la première présentation d'une série de 6 sur l'introduction aux systèmes GNU/Linux est disponible à la rubrique 
<a href='http://www.inetdoc.net/presentations/'>présentations</a>. J'ai essayé de rendre «le propos» plus attrayant que lors des éditions précédentes réalisées avec Magicpoint.</p>
<p>Cette nouvelle publication a entraîné une révision des règles de construction des documents. La génération du fichier PDF correspondant au document source ODP se fait par un appel direct à 
<tt>libreoffice</tt>dans une règle de 
<tt>Makefile</tt>.</p>
<br />
<pre>
$(MAIN_DIR)/pdf/%.pdf: %.odp
        @if [ -z $(libreoffice) ]; then echo 'libreoffice indisponible'; exit 1; fi
        # Génération du fichier imprimable PDF
        @$(libreoffice) --headless --invisible --convert-to pdf -outdir $(MAIN_DIR)/pdf $?
</pre>
<p>Pour la création des images associées à chaque vue, 
<tt>pdftoppm</tt>a été abandonné au profit de 
<tt>convert</tt>, un des outils de la famille 
<tt>imagemagick</tt>. Avec 
<tt>convert</tt>, il est possible de contrôler la qualité du rendu des photos et autres graphiques en les «échantillonnant» avec des résolutions différentes. Pour les présantations publiées ici, la règle est la suivante.</p>
<pre>
$(OUTPUT)/$(BASENAME)-00.png: $(MAIN_DIR)/pdf/$(BASENAME).pdf
        # Génération d'un fichier image par vue
        @if [ ! -d $(OUTPUT) ]; then mkdir $(OUTPUT); fi
        @convert -density 720 $? -resample 150 $(OUTPUT)/$(BASENAME)-%02d.png
</pre>
<p>Le temps de traitement est le seul défaut de cette méthode.</p>
<p>Toutes les règles de traitement sont données dans le fichier 
<a href='https://github.com/platu/inetdoc/blob/311bf4373252f023cf92b4d82d9d1174d8a6ce56/common/Makefile.Rules'>Makefile.Rules</a>.</p>
<br />
<p>Voilà pour ce court billet. Comme pour tous les autres documents du site, si vous avez des remarques sur la forme et le contenu, n'hésitez pas !</p>
<p style="text-align: right;">
<a href='http://www.inetdoc.net/presentations/sysadm-base-1/'>Voir la présentation ...</a>
</p>
</div>
</content>
</entry>
</feed>
