Home-server sous FreeBSD, c'est possible

Migration 2003 serveur -> FreeBSD.

: Je sais que ce post va faire un peu blog, mais c’est plus simple à rédiger pour moi. Le but du post étant de raconter mon experience de home-server avec freebsd. Sans rentrer dans les détails, vu que l’on trouve pas mal de documentations sur la plupart des points abordés, mais dans l’optique de proposer une marche a suivre, et de conseiller un éventuel débutant sur les différentes étapes de configuration.
En effet, si la configuration des différents éléments n’est pas insurmontable, c’est surtout la question de quels éléments choisirs (et ou trouver LA doc pour cet élément) pour que tout fonctionne bien ensemble qui peux poser problème. Ce post est toutefois une invitation à ceux qui sont interressés par une démarche similaire à demander des détails sur telle ou telle étape.

Depuis bientôt 4 ans, je suis adepte du home-server.
Le principe est simple, il s’agit d’avoir une machine qui tourne 24/24, de préférence qui consome pas trop et ne fais pas trop de bruit, pour les applis qui nécessitant de tourner en permanence.

Ayant 4 pcs @home, (PC boulot perso/jeu, PC multimédia dans le salon, portable du taf et le serveur) j’ai décidé il y’a peu de rassembler tout mes fichiers dans le serveur, tout les disques étant tous aux 7/8 pleins, ca devenais difficile à gérer.

Sauf que avant de mettre tout les oeuf dans le même panier, on s’assure d’avoir un panier solide (et bien rembourré à l’interieur).

Il m’étais donc indispensable de limiter la casse en cas de crash disque. La solution la plus économique, en terme rapport capacité/prix s’est avérée être la suivante :
4 disques 250G en RAID5, sois 3*250 = 750Go. Avec une carte controleur non RAID (le vrai RAID fesant exploser le budget).

Premiers tests sous windows, niveau fonctionalités, ok.
Questions perfs, par contre, c’est pas ca. 4Mo/s en lecture max, 2-3 Mo/s en ecriture. Cependant, le CPU n’est pas utilisé a fond. Je soupcone le northbridge (un KT133). Après patch, le CPU tourne a fond, et on passe à 16 Mo / 5 Mo.
C’est mieux, mais c’est pas la panacée. Un coup d’oeil sur perfmon me donnera un indice : pendant l’écriture sur le raid, j’ai autant de débit en lecture que d’écriture… zarb, a moins que le systeme ne vérifie tout ce qu’il écris.

Dans le doute, les disques encore vides, je débranches tout les disques (sauf le raid), et boote sur un FreeNAS (freenas gere le RAID5).
C’est largement mieux, du coup. Depuis un autre PC du réseau, j’arrive à 20/10 Mo/s (FreeNAS n’a rien en interne pour mesurer des perfs).
C’est assez concluant pour me décider. Non pas à passer sur freenas (j’ai d’autres besoins qu’un simple NAS), mais à retenter ma chance avec FreeBSD.

Je vous passe les détais de l’installation du systeme de base. Avec le handbook sous la main, c’est une gageure.
Seul hic, le CD refuse de booter avec mes 4 disques Sata présents. Je les débranches le temps de l’install, pas de soucis après pour booter sur le disque… ouf.

Niveau matos, tout est détecté du premier coup (y compris le controleur sata promise, donc).

1ere étape, installer le module RAID5.
En effet FreeBSD ne gère pas nativement le RAID5 (pour le moment), mais comporte une archi assez bien foutue et modulaire pour la gestion des disques : GEOM.
Pour le projet FreeNAS, à donc été developpé un module noyau (une classe geom donc) : geom_raid5.
L’install est relativement simple : voir http://fanplastic.org/freebsd-geom-raid-5/ .
La création de l’array est tout aussi simple : graid5 create nom_de_l_array da0 da1 da2 da3
La synchronisation des disques va prendre un certain temps, mais l’on peux commencer à utiliser l’array immédiatement.
(création du systeme de fichiers : newfs , activation des soft-updates et acls : tunefs, montage : mount et /etc/fstab ).

Une fois l’array synchrone (encore une fois, cela prends du temps, 2h dans mon cas, mais beaucoup moins que sous win), quelques tests de perfs avec gstat.
En écriture : cat /etc/random > /mnt/raid5/test
Par disque : 4 Mo/s en ecriture, 0 en lecture, sois 10Mo/s sur l’array, c’est déja plus sympatique.
En lecture, maintenant : cp /mnt/raid5/test /dev/null
Par disque : ~12 Mo/s , sois ~64 Mo/s sur l’array : là, je suis content B).
OK, c’est décidé, on reste sur FreeBSD.

2ème étape : Le réseau.
Avant l’install, l’a fallu passer la freebox en mode routeur (ERK), on va donc configurer la machine pour qu’elle reprenne son role de NAT/FW.
La configuration des interfaces réseau (3 dans mon cas : FreeBox, LAN et WLAN) se fais dans rc.conf.
Puis : activation et configuration de pf en Nat (/etc/rc.conf et /etc/pf.conf)
Oups ! J’oublie ALTQ ! Tant qu’a utiliser FBSD et PF, autant profiter des fonctionnalités de QoS. Malheuresement, pour ca, il faut recompiler le noyau.
Heuresement, avec le handbook sous la main, c’est l’affaire de 2mn dans un unique fichiers de conf, de deux commandes (et de 10-15 mn de compilation, pendant lequelles ont peux passer à autre chose).

3ème étape : Le DNS.
J’aime bien avoir mon petit DNS. Cela évite d’utiliser les IPs des machines, et évite de se reposer sur NetBios pour la résolution de noms locale.
Donc configuration de BIND (intégré au systeme de base). Je vous passe les détails, et j’avoue que cela deviens un peu complexe, pour qqun qui n’a jamais touché a Bind.
Dans mon cas, j’utilisais déja Bind sous Windows…

4ème étape : DHCP.
Installation de isc-dhcpd-3.
La configuration est quand à elle relativement aisée en utilisant le fichier de conf exemple.
L’activation du demon se fait comme pour tout les autres, dans rc.conf.

5ème étape : Wifi.
Je n’utilise pas d’AP materiel. Le serveur étant le point central du réseau, j’estime que c’est plus sa tache. (et une carte réseau coute moins cher qu’un AP wifi, surtout quand on l’a déja).
Suite des opérations, configurer la carte wifi en mode AP.
Là, ca se complique. En effet, si le simple chiffrage WEP est géré par le noyau, l’authentification WPA nécessite l’utilisation d’un démon séparé : hostapd.
Or, si hostapd est inclus dans le systeme de base, la documentation fais pas mal défaut. Pas de fichier de conf d’exemple, ni de détails sur les options du dit fichier dans man.
J’ai heuresement fini par trouver un How-To qui explique tout bien comme il faut :
http://www.howtoforge.com/setting_up_a_fre…an_access_point
Notamment : nécessité de modules noyau qui ne sont pas dans le noyau GENERIC (recompilation du coup, tant qu’a faire…) et des options de hostapd nécessaires pour que ca marche.
Une fois que l’on dispose de toutes les infos, par contre, cela fonctionne très bien, voire mieux qu’en hostAP sous windows.
En effet, hostapd permet au passage de faire du WPA2, et d’utiliser indifféremment TKIP ou AES-CCMP.
Je n’ai pas voulu pousser le vice à installer une authentification EAP/radius, mais sachez que c’est tout aussi fesable.

La suite (partage de fichiers, bittorrent, news) au prochain edit.

Voilà, FreeBSD c’est bon, mangez-en.

(Et n’y voyez aucun prosélytisme, non, aucun. B) )

C’est assez surprenant ce que tu dis là : d’expérience quand tu compiles un kernel FreeBSD, tout ce qui n’est pas compilé en dur dans le kernel est compilé en module. Tu as essayé de charger le module à la main (avec kldload) ?

[edit] ou alors, tu parles p-e d’options et non de modules kernel ?

hop bookmarké

merci pour ton retour

Bussiere

J’ai toujours réussi à faire fonctionner ma carte wifi (MSI truc chipset Ralink, driver ral) en AP sans recompiler (FreeBSD 6.X toute les versions et 7.0-CURRENT en ce moment) Peut etre que c’est le WPA qui necessite la recompilation, moi je reste en WEP pour cause de DS et la securité est assurée par le bug dans le txpower du driver ral.

Sinon, un des trucs à installer vite pour ceux qui sont habitués à Linux c’est bash qui n’est pas livré par défaut.

Pour le partage de fichiers, Samba est dans les ports, y’a aussi un NFS Server (attention à laisser les options adéquates pour le NFS quand tu recompiles le kernel) Pour le torrent, perso j’utilise ctorrent dans un screen.

Bienvenue dans le monde des *BSD.

[quote=« unreal, post:3, topic: 44942 »]C’est assez surprenant ce que tu dis là : d’expérience quand tu compiles un kernel FreeBSD, tout ce qui n’est pas compilé en dur dans le kernel est compilé en module. Tu as essayé de charger le module à la main (avec kldload) ?

[edit] ou alors, tu parles p-e d’options et non de modules kernel ?[/quote]

C’est des modules kernel. Je parle de recompilation, parceque vu que j’ai besoin de recompiler pour ALTQ, je les integre directement. Le modules sont en effet pour l’auth et l’interaction avec hostapd. notamment wlan_xauth.

[quote=« majinboo, post:5, topic: 44942 »]Sinon, un des trucs à installer vite pour ceux qui sont habitués à Linux c’est bash qui n’est pas livré par défaut.

Pour le partage de fichiers, Samba est dans les ports, y’a aussi un NFS Server (attention à laisser les options adéquates pour le NFS quand tu recompiles le kernel) Pour le torrent, perso j’utilise ctorrent dans un screen.

Bienvenue dans le monde des *BSD.[/quote]

Pour ce qui est de samba, c’est déja installé, mais je n’ai pas encore eu le temps de finir le post.

Post vraiment intéressant, cela fait quelques temps que je voulais tester les BSD histoire de voir les différence avec linux.

Petites question, je voulais passer sous OpenBSD, maintenant quelles différences y’a t-il avec FreeBSD?

Cela vaut-il vraiment la peine de migrer de Linux a BSD a-t-on avis?

En tout cas bravo pour ce post intéressant ^^

[quote=“Baalkor, post:7, topic: 44942”]Post vraiment intéressant, cela fait quelques temps que je voulais tester les BSD histoire de voir les différence avec linux.

Petites question, je voulais passer sous OpenBSD, maintenant quelles différences y’a t-il avec FreeBSD?

Cela vaut-il vraiment la peine de migrer de Linux a BSD a-t-on avis?

En tout cas bravo pour ce post intéressant ^^[/quote]

Donc, tu poses plusieurs questions, et je vais répondre dans la foulée :

  • les BSD c’est pas vraiment le même esprit que Linux. Les BSD actuels sont maintenus par des équipes plus petites, mieux organisées (je pense) et dans des conditions de développement plus contrôlées.
    Le résultat est un produit qui avance moins vite sur certaines choses, mais qui est plus abouti, plus pro.

  • OpenBSD et FreeBSD sont assez similaires pour passer de l’un a l’autre presque naturellement. Je suis assez fanboy de FreeBSD, mais quand j’ai installé OpenBSD sparc l’autre jour, je n’ai pas été spécialement surpris. Evidemment, FreeBSD est plus ciblé i386/x64 & performances alors qu’OpenBSD cible la sécurité et la multiplatefome. Les 2 ont donc des raisons d’être assez différentes, mais l’administrateur passe de l’un à l’autre très naturellement.

  • Migrer de Linux à BSD, ça peut se justifier, mais y’a pas de cas général. Linux est plus “multimedia Web 2.0” ( B) ) que BSD dans le sens où y’a plus de développeurs, donc forcément plus de choses qui se passent.

Globalement, Linux offre un meilleur support hardware et des binaires propriétaires, alors que BSD offre une meilleure stabilité (stabilité != uptime, je parle de la stabilité des API, de la compatibilité entre versions dans le temps) et sécurité.

Pour les drivers, y’a pas mal de contre exemples (par exemple le driver ral pour puces wifi ralink est plus abouti et stable sous BSD que sous Linux) mais en général y’a plus de chance que le matos fonctionne sous Linux que sous BSD si il est un peu trop exotique.

Le majeur problème d’OpenBSD (et qui fait que je l’ai abandonné pour FreeBSD) c’est que le process de mise à jour du userland (les applications qui ne font pas parti du système de base) est manuel. Ce qui veut dire qu’il fallait s’occuper de faire les mise à jour à la main ce qui est assez lourd et qui fait que finalement la mise à jour est effectuée avec plus de retard et donc on perd de la sécurité. Enfin, ça a peut être évolué depuis mais j’ai vraiment l’impression que c’etait la philosophie de la distrib’.

Sinon pour la comparaison à Linux, unreal a déjà assez bien expliqué la situation. On peut ajouter la couche d’émulation linux integrée à FreeBSD qui permet de faire tourner sans problèmes des binaires compilés pour Linux (au dernière nouvelle, c’était comme ça que fonctionnait Opera sous FreeBSD)

Et tu fais comment sous FreeBSD ? B) J’ai tjs fait ca à gros coups de make buildworld, make buildkernel, make installkernel ainsi de suite (la façon documentée dans le handbook quoi).

Pour OpenBSD, 2 failles dans le base system en 10 ans, ça va, je pense pas qu’ils « perdent » trop de la sécurité…

Ouais, je crois que je suis tenté par une install de FreeBSD ou OpenBSD ^^
Mais d’après ce que j’avais lu (linuxfr je crois) le noyau BSD permet maintenant d’intégrer les drivers Linux. Mainetant faut tester.

Je pense pas.

Sous FreeBSD, y’a portupgrade qui permet d’updater les ports simplement.

Euh, oui, effectivement, j’avais lu ta phrase un peu vite, je croyais que tu parlais du système de base BSD. B)

Portupgrade et portaudit c’est clairement des outils tres puissants pour gérer un serveur FreeBSD.

C’est 2 failles expoitables à distance dans l’install par defaut (sachant qu’il y a pas beaucoup de services qui tournent par defaut). Des failles dans le systeme de base exploitables en local (avec un compte sur la machine) y en a beaucoup plus que ca.

Pour le support des pilotes Linux pour FreeBSD :
http://linuxfr.org/2007/02/12/22058.html

Bon d’après le court résumé, pour l’instant c’est surtout l’USB…

Bon, le but du thread n’étais pas de faire un débat linux-windows…

6ème étape : partage de fichiers avec windows.
Installation de samba, et premiers tests : vraiments pas concluants niveau performance : ca pointe à 80kbits… sur un cable croisé et deux cartes Gbits. Y’a une couille quelque part.
Après un tour sur google, il apparait qu’il faille utiliser quelques optimisations.

[codebox]# Samba config file created using SWAT

from 192.168.203.3 (192.168.203.3)

Date: 2007/05/17 23:38:17

[global]
dos charset = UTF-8
unix charset = ISO-8859-1
server string = FreeBSD File Server
interfaces = lo1
bind interfaces only = No
client NTLMv2 auth = Yes
disable netbios = Yes
acl compatibility = win2k
deadtime = 15
socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
load printers = No
show add printer wizard = No
preferred master = Yes
ldap ssl = no
acl group control = Yes
use sendfile = Yes
case sensitive = No
strict locking = No

[dl]
path = /mnt/dl
read only = No

[raid5]
path = /mnt/raid5
read only = No

[musique]
path = /mnt/raid5/Musique
read only = No

[video]
path = /mnt/raid5/Video
read only = No

[softs]
path = /mnt/raid5/Softs
read only = No

[photos]
path = /mnt/raid5/Photos
read only = No

[docs]
path = /mnt/raid5/Docs
Read Only = No
[/codebox]

7ème étape : UPnP
Pour pouvoir faire fonctionner correctement les services associés à MSN, il est quasiment indispensable d’utiliser UPnP. UPnP peux aussi éviter d’avoir a faire des portmappings permanents quand ce n’est pas nécessaires.
Pour cela, j’ai trouvé un sympatique demon appellé miniupnpd.
Celui ci permet, à l’aide de deux ancres dans la conf pf, de simuler une IGD Upnp, et donc de faire du mapping dynamique. Au passage, le placement des ancres dans la conf pf est manuelle, ce qui permet un controle assez flexible de la chose.
Seul hic, cela ne fonctionne pour le moment que sur une des deux interfaces locales (wlan ou lan). J’ai mis le dévelloppeur dessus B).

8ème étape.
Voilà, nous avons presques toutes les fonctionnalités que j’utilisais sous 2003 serveur… il manque encore un client bittorent.
Le choix, très large sous windows, est considérablement réduit sous BSD.
Les clients python sont a proscrire : aussi lent, voire plus que sous windows.
Ctorrent (ou enhanced ctorrent) parrais sympatique, mais peu maintenu, il m’est apparu relativement lent comparé à utorrent. Idem pour rtorrent. En fait, il manque à ces derniers la fonctionnalité DHT.
Au final, je me suis résigné à installer une JRE, et à utiliser azureus. Pour ce dernier, utiliser le port n’est pas forcément recommandé, du fait qu’il contient de nombreuses dépendances qui nous serons pas, dans l’absolu, utiles.
Azureus est lancé en mode console : java -jar Azureus.jar --ui=console
De la, il est possible de tout configurer (le wiki aide bien). Puis l’on installe le plugin htmlwebui, qui permet de quasiment tout faire via une interface web.

9ème étape : newzgroups.
Assez fan de newzleecher, notament pour la vérification et la décompression automatique, je ne pensais pas retrouver un équivalent. Je l’ai trouvé sous la forme du soft SABnzbd, qui s’utilise lui aussi via une interface web.
Pas eu le temps de tester entierement ce dernier, mais les premiers tests étaient plutot concluants.
Tout comme azureus, sabnzbd sera lancé par cron au boot.

10ème étape : OpenVPN
Pour administrer plus aisément mon dédié OVH, j’avais monté un VPN. Récupération du fichier de conf de windows, et hop, ca marche…

11ème étape : 6to4.
Pas encore d’IPv6 chez free ? Pas grave, je continues à utiliser 6to4. Très simple a utiliser, il suffit de rajouter une ligne dans le rc.conf.

[codebox]## /etc/rc.conf
hostname="carenath.tzim.net"
keymap=“fr.iso.acc”

Reseau

hostapd_enable="YES"
tcp_extensions="YES"
cloned_interfaces="lo1"
ifconfig_rl0="DHCP"
ifconfig_ral0="inet 192.168.203.1 mediaopt hostap mode 11g channel 9 netmask 255.255.255.0"
ifconfig_re0="inet 192.168.0.1 netmask 255.255.255.0"
ifconfig_lo1="inet 192.168.254.254/32"
gateway_enable=“YES”

ipv6

ipv6_defaultrouter="2002:c058:6301::"
ipv6_ifconfig_lo1_alias0="fe80::1%lo1"
ipv6_ifconfig_lo1_alias1="2002:52e9:e5e0:1:: eui64"
ipv6_ifconfig_re0="2002:52e9:e5e0:3:: eui64"
ipv6_ifconfig_ral0="2002:52e9:e5e0:2:: eui64"
stf_interface_ipv4addr="82.233.229.224"
ipv6_gateway_enable="YES"
ipv6_enable="YES"
rtadvd_enable="YES"
rtadvd_interfaces=“ral0 re0”

pf_enable="YES"
dhcpd_enable=“YES”

Services

inetd_enable="YES"
samba_enable="YES"
named_enable="YES"
sshd_enable="YES"
usbd_enable="YES"
named_uid="bind"
openvpn_enable="YES"
cron_enable=“YES”
[/codebox]

[codebox]####/etc/hostapd.conf
interface=ral0
driver=bsd
logger_syslog=-1
logger_syslog_level=0
logger_stdout=-1
logger_stdout_level=0
debug=3
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel

IEEE 802.11 related config

ssid=TzimWL
macaddr_acl=0
auth_algs=1

IEEE 802.1X related config

ieee8021x=0

WPA/IEEE 802.11i config

wpa=2
wpa_passphrase=XXXXXXXXXXXXXX
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
[/codebox]