Avant propos - pourquoi faire tout ça ?
Ce que j'ai fait sur mon réseau n'a aucune nécessité pour mon auto-hébergement. Si je l'ai fait c'est plus par amusement, pour apprendre des choses et pour des projets futurs. C'est aussi pour reprendre la main sur mon réseau. J'ai ma ligne ADSL chez OVH (qui passent par SFR), et j'ai donc une de leurs boxs. À l'époque je n'avais pas envie de faire tout ce que j'ai finalement fait quelques mois plus tard sinon j'aurais pris leur forfait sans box.
La box n'étant pas super pratique (telnet buggé, mais apparemment que chez moi, pebkac et interface web pas super conviviale) comme : jamais trouvé comment choisir moi même l'ip que le dhcp distribue pour une mac-address, juste pouvoir passer le lease en statique. Rien de grave, mais un peu chiant à force. J'ai cherché à remplacer ma box.
Mon but étant de trouver un routeur qui gère la session PPP (puisque la box d'OVH en mode bridge ne le fait pas), qui firewall et NAT mon lan.
Quel remplacement pour la box
À l'époque étant déjà depuis un petit moment sur OpenBSD et connaissant déjà les facultés de cet OS pour le réseau (en gros, c'est juste génial) le choix de l'OS était fait.
J'ai, par contre, longuement hésité sur le matériel :
- Soekris
- Alix
- Rajouter une carte réseau USB-RJ45 sur mon serveur
La soekris ça coûtait cher, et à l'époque un peu trop évoluée pour ce que je voulais faire (à l'époque je ne comprenais pas l'utilité d'avoir 4 cartes réseaux :p).
L'alix, plus simple et moins cher que la soekris, par contre le stockage uniquement sur carte CompactFlash (sur un chan on m'a dit que c'était «un peu vieux quand même», ce qui m'a bien fait hésité :D). Par contre une faible consommation donc intéressante de ce point de vue là. Mais le seul moyen d'installer l'OS c'est via pxeboot (ou via lecteur de carte, mais j'en ai pas pour les CF) donc un peu repoussant, ayant suffisamment de choses à apprendre.
Rajouter une carte réseau, j'ai failli le faire, puis ça ne s'est pas fait, j'avais pas envie de mettre les services sur le routeur et puis c'est moins classe :p.
J'ai finalement opté pour l'alix, la voyant dans cette jolie rob^W boite rouge j'ai pas pu résister. Je l'ai donc commandée chez gooze.eu étant les moins chers et vu qu'ils sont pro-libres. J'ai été satisfait, en tout cas. Le pxeboot n'avait pas l'air si difficile (pour cause, c'est même très simple) et ça me ferait découvrir la préhist^W^W des choses.
Installation de l'OS sur l'Alix
Alors j'ai suivi un tuto où la personne a utilisé une Ubuntu pour faire le pxe (i.e. tftp, dhcp etc), je me suis donc dit que j'allais le faire avec ma Debian ... grave erreur. J'ai galéré, j'ai essayé diverses méthodes toutes aussi infructueuses les unes que les autres. Je me suis résigné à utiliser mon serveur sous OpenBSD, ça a marché du premier coup ... (aucun lien avec le fait que ce soit pour installer OpenBSD, là c'est juste donner un bail dhcp et ensuite fournir les fichiers en tftp).
Comment faire ? Tout est décrit dans la FAQ d'OpenBSD, je ne vais donc pas en parler plus que ça.
Mise en place du réseau
On a donc maintenant l'alix qui est sous OpenBSD. On prépare la conf réseau pour préparer l'alix à s'occuper du PPP.
Dans /etc/hostname.pppoe0
inet 0.0.0.0 255.255.255.255 NONE \
pppoedev vr0 authproto pap \
authname 'login' authkey 'password' up
dest 0.0.0.1
!/sbin/route add default -ifp pppoe0 0.0.0.1
(notez, que c'est donné dans le man de pppoe(4))
Dans /etc/hostname.vr0 on met juste up. Dans /etc/hostname.vr2, l'interface vers mon lan
inet 10.19.18.1 255.255.255.0
up
J'ai choisi de prendre des IPs dans les 10 (for the lulz, pas de raisons particulières) et en 19.18 pour faire un clin d'oeil à la RFC qui définit l'adressage privé.
Une fois que tout ceci est fait, on configure la box en bridge (je ne sais plus où c'est mais y a "Setup my technicolor" et ça marche assez bien). On branche vr0 sur le port 1 de la box et
sh /etc/netstart
Perso la session PPP a marché du premier coup. Je m'y attendais tellement pas que quand ça pingait pas dehors, j'ai cru que c'était le problème alors que c'était mon firewall/NAT (oui, c'est pf (<3) qui gère le NAT) qui posait problème ...
Distribuons des IPs
On modifie /etc/dhcpd.conf
option domain-name "chown.me";
option domain-name-servers 10.19.18.17, 8.8.8.8;
subnet 10.19.18.0 netmask 255.255.255.0 {
option routers 10.19.18.1;
range 10.19.18.201 10.19.18.221;
host pcfixe {
hardware ethernet 00:aa:bb:cc:dd:ee;
fixed-address 10.19.18.30;
}
}
et dans /etc/rc.conf.local
dhcpd_flags=""
On démarre le serveur
/etc/rc.d/dhcpd start
Mise en place du NAT et du firewall
J'ai fait ce setup depuis 2 mois et demi maintenant ce qui fait que j'ai rajouté pas mal de choses dans mon pf.conf (de la QoS par exemple) et donc c'est éloigné du simple firewall avec NAT.
Cependant je vais juste vous donner les lignes pertinentes (par rapport au sujet). C'est pas forcément utile pour quelqu'un qui veut faire le même setup (mais dans ce cas, envoyez moi un mail, je vous enverrais le tout) sachant que tout est expliqué dans la FAQ d'OpenBSD (on dit que c'est la meilleure documentation d'OS qui existe :)) mais c'est utile pour faire de la pub pour OpenBSD/pf :p.
La ligne pour le NAT
match out on $ext_if inet from $lan_net nat-to $ip_publique
Ensuite pour le firewall
block all
pass in on $int_if from $lan_net
pass out on $int_if to $lan_net
pass out on $ext_if
Pour les redirections de port
pass in on $ext_if proto tcp to $ext_if port $redirection_port rdr-to $server
pass in on $ext_if proto udp to $ext_if port domain rdr-to $server
Voilà en gros.
Notez que c'est une version très épurée, mon pf.conf contient beaucoup plus de lignes, ici c'est juste un aperçu.
Pour finir
On n'oublie pas de passer
net.inet.ip.redirect=0
à 1 (dans /etc/sysctl.conf pour que ça reste au reboot et via la
commande sysctl net.inet.ip.redirect=1
)
Bilan
Je suis satisfait de mon setup même si j'ai quelques problèmes :
- la QoS : le téléphone quand transmission et mon client bitcoin tourne, ça micro-coupe :/
- ipv6 : OVH fournit de l'ipv6, là j'ai pas encore pris le temps pour le faire tomber en marche
Mis à part ça, c'est sympa d'avoir juste à se connecter en ssh et à éditer un fichier texte pour modifier le firewall, faire des translations de ports etc.
alice:~$ uptime
10:23PM up 32 days, 3:55, 2 users, load averages: 0.19, 0.16, 0.16
Et le titre de cet article alors ?
C'est un jeu de mot qui fait évidemment référence à Alice in Wonderland, vu que ma machine s'appelle alice et qu'elle est dans mon LAN.