Installer OpenBSD 6.0 sur un serveur Kimsufi

Les serveurs dédiés de chez Kimsufi représentent l'offre discount de serveurs du géant de l'hébergement OVH. Un des gros points forts des serveurs Kimsufi est leur prix puisque il est possible de disposer d'une machine à partir de 4.99€HT par mois. L'offre la moins chère (KS-1) est très demandée et il faut s'armer de patience pour en obtenir une mais nous finissons généralement par y arriver. Pour ma part, j'utilise des serveurs Kimsufi depuis quelques années et je suis très satisfait du service minimaliste offert en dehors de la configuration IPv6 sur laquelle nous reviendrons dans la suite de l'article. Une fois un serveur à disposition, Kimsufi permet d'installer facilement un grand nombre de systèmes d'exploitation différents (GNU/Linux Debian, FreeBSD, ...) mais pas OpenBSD. Comme rien ne nous empêche de le faire, je vous propose ici une marche à suivre pour installer OpenBSD 6.0 sur un serveur Kimsufi KS-1.

La démarche présentée dans cet article est similaire à celle proposée sur nipil.org. J'ai détaillé certaines étapes et parfois utilisé d'autres outils mais le principe reste le même. La configuration IPv6 de nipil.org n'est cependant plus d'actualité et je détaille en fin d'article comment j'ai pu la mettre correctement en place. Pour cette dernière partie, je remercie d'ailleurs les grandioses alarig et mherrb pour leurs explications à propos de la configuration réseau dans OpenBSD!

Pêche aux informations

Avant de se lancer dans l'installation de OpenBSD, nous devons récupérer quelques informations sur le matériel mis à disposition par Kimsufi et sa configuration. Étant donné que les systèmes *BSD ont une façon particulière de nommer les périphériques, il est plus simple de faire ces recherches à partir d'un FreeBSD proprement configuré par Kimsufi. Nous commençons donc par installer FreeBSD sur notre KS-1 à l'aide de l'interface web de Kimsufi. Dans ce qui suit, le template utilisé est FreeBSD 10.3 64bit (64bits).

Une fois le processus d'installation terminé, nous recevons un mail qui contient le mot de passe de l'utilisateur root pour notre FreeBSD fraîchement installé. Nous nous connectons au serveur à l'aide de ces informations et de SSH :

ssh -l root 37.187.XXX.YYY

Si vous vous étiez déjà connecté au serveur via SSH par le passé, la connexion sera bloquée car la clé d'identification créée à l'installation de FreeBSD ne correspond pas à celle déjà présente dans votre fichier known_hosts. Si tel est le cas, vous pouvez demander que cette précédente clé soit oubliée avec ssh-keygen :

ssh-keygen -f ~/.ssh/known_hosts -R 37.187.XXX.YYY

Une fois la connexion établie avec le serveur, nous pouvons collecter les informations utiles. Le serveur KS-1 dont je dispose est livré avec un processeur Intel Atom N2800 et dispose donc de plusieurs cœurs comme le montre la commande suivante :

root@:~ # dmesg | grep -i ^cpu
CPU: Intel(R) Atom(TM) CPU N2800   @ 1.86GHz (1866.71-MHz K8-class CPU)
cpu0: <ACPI CPU> on acpi0
cpu1: <ACPI CPU> on acpi0
cpu2: <ACPI CPU> on acpi0
cpu3: <ACPI CPU> on acpi0

Nous pourrons donc utiliser le noyau Scalable Multiple Processor (MP) lors de l'installation de OpenBSD.

Les autres informations dont nous avons besoin concernent la configuration réseau. Afin de connaître le nom *BSD de l'interface réseau, nous utilisons la commande ifconfig :

root@:~ # ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=4219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO>
    ether xx:xx:xx:xx:xx:xx
    inet 37.187.XXX.YYY netmask 0xffffff00 broadcast 37.187.XXX.255
    inet6 fe80::2xx:xxff:fexx:xxxx%em0 prefixlen 64 scopeid 0x1
    inet6 2001:41d0:a:22xx::1 prefixlen 128
    nd6 options=63<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL,NO_RADR>
    media: Ethernet autoselect (100baseTX <full-duplex>)
    status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
    inet6 ::1 prefixlen 128
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
    inet 127.0.0.1 netmask 0xff000000
    nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>

La boucle locale lo0 ne nous intéresse pas et nous voyons que notre interface réseau s'appelle em0, ce qui correspond à du matériel Intel selon la nomenclature *BSD. Quelques informations importantes peuvent également être récupérées dans la sortie de ifconfig :

  • Adresse IPv4 : 37.187.XXX.YYY
  • Masque de réseau IPv4 : /24
  • Adresse IPv6 : 2001:41d0:a:22xx::1
  • Masque de réseau IPv6 : /128

Le fichier /etc/resolv.conf nous donne l'adresse du serveur DNS de OVH (213.186.33.99). Pour configurer le réseau de notre serveur, nous avons aussi besoin de connaître les passerelles IPv4 et IPv6 :

root@:~ # netstat -rn | grep default
default            37.187.XXX.254      UGS         em0
default                           2001:41d0:a:22ff:ff:ff:ff:ff  UGS         em0

Dans un monde idéal, nous devrions maintenant avoir assez d'informations pour configurer le réseau de notre serveur KS-1... mais pas chez Kimsufi! Pour la partie IPv4, nous disposons de toutes les informations nécessaires mais il n'en va pas de même pour la partie IPv6. En effet, comme nous l'avons vu ci-dessus et pour des raisons que j'ignore, Kimsufi ne met à la disposition de ses clients qu'une seule adresse IPv6. Là où nous pourrions nous attendre à avoir au moins un /64, nous n'avons qu'un pauvre /128 et la passerelle IPv6 se trouve en dehors de la plage adressable. Il faudra donc définir une route spécifique pour cette passerelle dans OpenBSD et nous avons besoin de quelques informations supplémentaires pour cela :

root@:~ # ping6 -c 1 2001:41d0:a:22ff:ff:ff:ff:ff > /dev/null
root@:~ # netstat -rn | grep 2001:41d0:a:22
default                           2001:41d0:a:22ff:ff:ff:ff:ff  UGS         em0
2001:41d0:a:2200::/56             link#1                        U           em0
2001:41d0:a:22xx::1               link#1                        UHS         lo0
2001:41d0:a:22ff:ff:ff:ff:ff      xx:xx:xx:xx:xx:xx             UHS         em0
root@:~ # ndp -an | grep 2001:41d0:a:22ff:ff:ff:ff:ff
2001:41d0:a:22ff:ff:ff:ff:ff         00:05:73:a0:00:00    em0 1h7m32s   R R

Nous voyons que le masque réseau à considérer pour la passerelle est /56 et qu'une route statique pour celle-ci est définie via l'interface em0. Il s'agit de la même configuration que celle que nous mettrons en place dans OpenBSD à la fin de cet article. Pour définir cette route, nous aurons besoin de l'adresse MAC de la passerelle qui nous est donnée par la dernière commande ci-dessus.

Mode Rescue et virtualisation

La méthode décrite dans cet article consiste à installer OpenBSD dans une machine virtuelle basée sur le disque dur du KS-1. Pour cela, nous utiliserons le logiciel QEMU et l'affichage sera déporté à l'aide de VNC et d'un transfert du port 5900. Étant donné que nous souhaitons utiliser le véritable disque dur de notre serveur pour cette machine virtuelle, ce disque ne doit pas être en cours d'utilisation par le système d'exploitation du serveur. C'est pour cette raison que nous utiliserons un système d'exploitation chargé uniquement en mémoire. Ce genre de système est couramment utilisé pour dépanner une machine à problème et c'est pour cette raison que les outils de Kimsufi l'appellent Rescue.

Le menu NetBoot de l'interface de Kimsufi permet de configurer le périphérique de démarrage de notre serveur. Pour le moment, il s'agit de Disque Dur en ce qui nous concerne. En mode Rescue, nous pouvons choisir de démarrer sur différentes images mises à disposition par Kimsufi : freebsd10-amd64-rescue-pro, freebsd11-amd64-rescue-pro et rescue64-pro. Les deux premières chargeront un FreeBSD en mémoire et ce sera une GNU/Linux Debian avec la dernière. J'ai choisi d'utilise rescue64-pro car le logiciel QEMU y est installé par défaut. Une fois que nous avons confirmé cette modification du périphérique de démarrage, nous redémarrons notre KS-1 et nous recevons un mail avec les informations nécessaires pour nous connecter en tant qu'utilisateur root à notre serveur en mode Rescue. Comme précédemment, il faudra normalement supprimer la précédente clé pour pouvoir se connecter :

ssh-keygen -f ~/.ssh/known_hosts -R 37.187.XXX.YYY
ssh -l root 37.187.XXX.YYY -L 5900:localhost:5900

L'option -L 5900:localhost:5900 nous permettra de rediriger le port 5900 et de déporter l'affichage de la machine virtuelle dans quelques instants.

La première chose à faire est maintenant de récupérer et de vérifier une image d'installation de OpenBSD 6.0 à partir d'un des OpenBSD Mirrors :

root@rescue:~# wget -P /tmp/ http://ftp.fr.openbsd.org/pub/OpenBSD/6.0/amd64/install60.iso
root@rescue:~# wget -P /tmp/ http://ftp.fr.openbsd.org/pub/OpenBSD/6.0/amd64/SHA256
root@rescue:~# sha256sum /tmp/install60.iso; grep install60.iso /tmp/SHA256 | cut -d ' ' -f 4

Si les sommes SHA256 sont identiques, nous pouvons maintenant créer la machine virtuelle basée sur le disque dur /dev/sda du KS-1. Celle-ci démarrera sur le CD-ROM associé à l'image /tmp/install60.iso et déportera l'affichage via VNC :

root@rescue:~# qemu-system-x86_64 -hda /dev/sda -cdrom /tmp/install60.iso -vnc :0 -boot d

Afin d'avoir accès à l'affichage depuis votre poste de travail, il faut utiliser un client VNC. Sous GNU/Linux Debian, j'utilise gvncviewer pour me connecter via le transfert du port 5900 :

gvncviewer localhost

Toutes les captures d'écran suivantes ont été réalisées à l'aide de ce client.

Installation de OpenBSD

Après un grand nombre de lignes sur fond bleu (il s'agit du dmesg de OpenBSD), le programme d'installation nous propose plusieurs choix :

Accueil OpenBSD

Bien entendu, puisque nous souhaitons installer OpenBSD, nous répondons "I" à la question. Si dans le futur vous avez besoin de mettre à jour votre installation de OpenBSD ou d'accéder au disque dur pour dépanner un problème, vous pourrez choisir une des autres options proposées ici.

Nous commençons par choisir l'agencement de notre clavier (fr dans mon cas) et le nom d'hôte de notre serveur (comme il s'agit d'une machine de test condamnée à chuter, je l'appelle gondolin mais vous pouvez nommer la vôtre comme il vous plaira). Dans la suite, les réponses que je tape au clavier apparaissent en rouge dans les captures d'écran et les choix par défaut que j'accepte sont en jaune.

Premiers choix

Nous entrons ensuite dans la configuration du réseau pour laquelle nous allons utiliser des informations obtenues précédemment. Comme la partie IPv6 demande une attention particulière, nous ne la configurons pas lors de l'installation. Pour le nom de domaine, vous êtes évidemment libre de mettre celui que vous voulez.

Configuration réseau

Les étapes qui suivent sont classiques : nous donnons un mot de passe solide à l'utilisateur root, nous précisons que sshd doit être démarré automatiquement et que nous ne comptons pas utiliser de serveur X. Un utilisateur non-privilégié est également ajouté au système et nous interdisons la connexion de root via SSH pour des raisons de sécurité.

Utilisateurs

Il faut maintenant organiser les partitions du disque dur. Puisque je ne souhaite installer que OpenBSD sur mon KS-1, le disque entier est utilisé. Dans le cadre de cet article, nous acceptons le partitionnement par défaut. Si vous souhaitez le modifier, il faudra répondre "C" et se référer à la documentation de disklabel. Le formatage des partitions prend beaucoup de temps (en particulier pour /home qui est la plus grande) et nous pouvons aller prendre un café en attendant...

Partitionnement du disque dur

Enfin, nous arrivons à l'installation du système. Comme nous disposons de plusieurs cœurs, le set bsd.mp est ajouté pour pouvoir disposer du noyau MP. Je supprime ici les sets game60.tgz et xserv60.tgz mais vous pouvez les conserver si vous pensez en avoir besoin. Finalement, puisque nous ne disposons pas du fichier de signature, nous acceptons de continuer l'installation sans vérification.

Installation des sets

Une fois l'installation des sets terminée et le fuseau horaire configuré, nous recevons les félicitations d'usage et la main sur un shell nous est rendue. Nous pouvons en profiter pour mettre en place le noyau MP avant d'arrêter le système. Une fois arrivé au message sur fond bleu, nous pouvons fermer la fenêtre du client VNC et interrompre QEMU avec Control-C.

Finalisation

De retour dans l'interface de Kimsufi, nous replaçons le périphérique de démarrage de notre serveur sur Disque Dur et nous pouvons terminer l'installation en entrant la commade reboot dans notre console Rescue.

root@rescue:~# reboot

Le grand moment est maintenant arrivé : une fois le système redémarré, nous pouvons nous connecter à notre OpenBSD flambant neuf!

ssh-keygen -f ~/.ssh/known_hosts -R 37.187.XXX.YYY
ssh -l meseira 37.187.XXX.YYY

Configuration IPv6

Comme discuté précédemment, la configuration IPv6 de Kimsufi est un peu (beaucoup?) mal fichue car la passerelle se trouve en dehors de la plage adressable. Pour remédier à cela, il faut ajouter une route statique vers cette passerelle et corriger son adresse MAC. Si vous ne souhaitez que tester cette configuration, voici les commandes à entrer en tant que utilisateur root :

$ su
Password:
#
# ifconfig em0 inet6 2001:41d0:a:22xx::1/128
# route add -inet6 2001:41d0:a:22ff:ff:ff:ff:ff/56 -link -iface em0
# ndp -s 2001:41d0:a:22ff:ff:ff:ff:ff 00:05:73:a0:00:00
# route -n add -inet6 default 2001:41d0:a:22ff:ff:ff:ff:ff
#
# ping6 -c 1 meseira.net
PING6 meseira.net (2a03:7220:8081:4d00::1): 24 data bytes
32 bytes from 2a03:7220:8081:4d00::1, icmp_seq=0 hlim=56 time=15.464 ms
--- meseira.net ping6 statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 15.464/15.464/15.464/0.000 ms

Pour rendre cette configuration permanente, nous ajoutons quelques lignes au fichier /etc/hostname.em0 :

# cat /etc/hostname.em0
inet 37.187.XXX.YYY 255.255.255.0

inet6 2001:41d0:a:22xx::1 128
!route add -inet6 2001:41d0:a:22ff:ff:ff:ff:ff/56 -link -iface em0
!ndp -s 2001:41d0:a:22ff:ff:ff:ff:ff 00:05:73:a0:00:00
!sleep 3
!route -n add -inet6 default 2001:41d0:a:22ff:ff:ff:ff:ff

La commande sleep 3 permet d'attendre que la passerelle soit bien atteignable avant de l'ajouter comme route par défaut.

Conclusion

Nous disposons maintenant d'un serveur Kimsufi avec OpenBSD 6.0 installé et une configuration IPv6 propre. La première chose à faire pour continuer est de lire la page man de afterboot :

man afterboot

Pour aller plus loin, je vous conseille la lecture du livre Héberger son serveur avec OpenBSD de Xavier Carton.

Social