Nous avons abordé, au cours des moments passés ensemble, l’adressage IPv6, la configuration en mode sans ou avec état, le fonctionnement de radvd, DHCPv6 et nous avons terminé avec la configuration d’un serveur de nom. Nous allons utiliser ce dernier pour mettre en place quelques services qui devront fonctionner à la fois sur IPv4 et sur IPv6. Parmi les services, nous allons commencer par SSH, puis FTP, ensuite HTTP avec Apache2, et nous terminerons enfin par une suite de messagerie. Nous tâcherons de voir in fine comment se comporte Netfilter avec IPv6.
1. Introduction
Comme nous travaillons avec Netkit, nous n'avons pas d'interface graphique pour tester les services, mais cela n'est pas très important, puisque sous GNU/Linux, il existe toujours des outils en mode texte. Par contre, on indiquera comment faire pour utiliser les clients graphiques de la machine hôte.
Le lab Netkit est normalement déjà configuré au niveau de DNS, nous allons l'utiliser, mais nous allons tout d'abord vérifier que chaque machine, et le service DNS, sont bien configurés.
1.1. Rappels sur la configuration
Pour le lecteur qui nous rejoindrait, comme vous le constatez, vous avez raté trois articles. C'est dommage ! Mais ne vous inquiétez pas, vous pouvez retrouver les faits importants, à savoir le schéma du réseau que nous vous proposons, les configurations Netkit et la manière de l'utiliser, sur notre site [FL]. Bien sûr, si vous ne souhaitez connaître que les aspects théoriques, n'hésitez pas à continuer votre lecture, cela n'est en rien bloquant !
- La machine 'S' est serveur DNS, nous n'utiliserons que ce serveur DNS là , pas le secondaire.
- La machine 'C461' est en IPv6 uniquement : 2001:db8:46::61/64.
- La machine 'C462' est en IPv4 uniquement : 192.168.46.62.
Les commandes ci-dessous, réalisées sur les clients 'C461' et 'C462', doivent fonctionner correctement :
|
|
dig ns formation-libre.fr dig ftp.formation-libre.fr |
et de la même façon pour tous les autres alias www, pop, imap... Par ailleurs, la machine R doit accéder à Internet car nous en aurons besoin.
Si tout vous semble en ordre, nous pouvons démarrer.
2. Le service SSH
Le protocole SSH, pour Secure SHell, permet de faire communiquer deux machines à l'aide d'un client et d'un serveur. Il crée un canal chiffré et permet à l'utilisateur d'avoir accès à un shell sur la machine distante. Sous GNU/Linux et autres Unix, la commande la plus employée est ssh. Sous Microsoft Windows, c'est en général le client libre putty. Cela étant dit, concentrons-nous sur la configuration de SSH sur le serveur S.
La configuration est réalisée dans le fichier : /etc/ssh/sshd_config. Deux paramètres sont en commentaires :
|
|
#ListenAddress :: #ListenAddress 0.0.0.0 |
En décommentant l'une des deux lignes, on peut indiquer sur quelle pile IP (4 ou 6) on souhaite que le service fonctionne. En décommentant la première ligne, la commande netstat indiquera :
|
|
S:~# netstat -nat | grep 22 tcp6 Â Â Â Â :::22 Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â :::* Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â LISTEN |
et en décommentant la deuxième ligne, netsat indiquera :
|
|
tcp      0.0.0.0:22              0.0.0.0:*              LISTEN |
En ne conservant que cette dernière option, vous ne pourrez pas vous connecter à partir de 'C461' :
|
|
C461:~# ssh root@ns1.formation-libre.fr ssh: connect to host ns1.formation-libre.fr port 22: Network is unreachable |
Si les deux lignes sont commentées, ce qui est la configuration par défaut, sshd utilisera toutes les interfaces et tous les protocoles. Avant de tenter une connexion, nous lançons un analyseur de trame afin de pouvoir regarder a posteriori ce qui se passe. Nous pouvons tenter une connexion à partir des clients 'C461' et 'C462' vers le serveur (sur Netkit, le mot de passe de root est root) :
|
|
C461:~# ssh root@ns1.formation-libre.fr root@ns1.formation-libre.fr's password: S:~# |
et sur l'autre :
|
|
C462:~# ssh root@ns1.formation-libre.fr root@ns1.formation-libre.fr's password: S:~# |
Sur le serveur, on identifie bien les sessions IPv4 et IPv6 initiées par les clients :
|
|
S:~# netstat -nat tcp         192.168.46.1:22         192.168.46.2:44542      ESTABLISHED tcp6        2001:db8:46::1:22       2001:db8:46::61:53757  ESTABLISHED |
Revenons sur notre analyseur. En l'occurrence, nous avons employé tshark, mais nous aurions tout aussi bien pu prendre tcpdump ou wireshark :
|
|
0.007379 192.168.46.62 -> 192.168.46.1 TCP 55536 > ssh [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=20512 TSER=0 WS=1 0.007430 192.168.46.1 -> 192.168.46.62 TCP ssh > 55536 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 TSV=18981 TSER=20512 WS=1 0.007958 192.168.46.62 -> 192.168.46.1 TCP 55536 > ssh [ACK] Seq=1 Ack=1 Win=5840 Len=0 TSV=20512 TSER=18981 0.130919 192.168.46.1 -> 192.168.46.62 SSH Server Protocol: SSH-2.0-OpenSSH_5.1p1 Debian-4 |
Nous voyons bien que la connexion depuis C461 s'effectue en IPv6, alors que celle depuis C462, ci-dessous, est effectuée en IPv4 :
|
|
0.010197 2001:db8:46::61 -> 2001:db8:46::1 TCP 58204 > ssh [SYN] Seq=0 Win=5760 Len=0 MSS=1440 TSV=4294961337 TSER=0 WS=1 0.010238 2001:db8:46::1 -> 2001:db8:46::61 TCP ssh > 58204 [SYN, ACK] Seq=0 Ack=1 Win=5712 Len=0 MSS=1440 TSV=4294957976 TSER=4294961337 WS=1 0.010537 2001:db8:46::61 -> 2001:db8:46::1 TCP 58204 > ssh [ACK] Seq=1 Ack=1 Win=5760 Len=0 TSV=4294961337 TSER=4294957976 0.170699 2001:db8:46::1 -> 2001:db8:46::61 SSH Server Protocol: SSH-2.0-OpenSSH_5.1p1 Debian-4 |
Ce premier essai montre que si un service est conçu pour supporter les deux piles de protocoles, comme c'est le cas pour de nombreux démons, la mise en œuvre peut rester assez simple.
2.1. Le problème du séparateur ':' (deux points)
Ce séparateur sert, dans certains cas, à préciser le port de destination. On peut, parfois, utiliser l'option -p pour indiquer le port, comme :
|
|
ssh root@ns1.formation-libre.fr -p 22 ssh root@2001:db8:46::1 -p 22 |
mais ça devient moins lisible pour SSH quand on souhaite, par exemple, créer un tunnel avec une instruction équivalente à :
|
|
C461:~# ssh -L 2525:2001:db8:46::1:22 root@2001:db8:46::1 |
qui retourne :
|
|
Bad local forwarding specification '2525:2001:db8:46::1:22' Â |
Il faut, en fait, mettre l'adresse IPv6 entre crochets (ou alors utiliser le nom de la machine distante). Les instructions deviennent :
|
|
C461:~# Â ssh -L 2525:[2001:db8:46::1]:22 root@2001:db8:46::1 C461:~# Â ssh -L 2525:ns1.formation-libre.fr:22 root@2001:db8:46::1 |
et là , effectivement, ça fonctionne.