Salut
Depuis un moment j'ai finalement remplacé cette bouse de Livebox par un truc un peu plus acceptable, à savoir un vieux ordi sous Archlinux (mais toute distro ayant systemd-networkd fera l'affaire).
Avantages :
* supprimer cette horreur de box par quelque chose qui met pas trois plombes à demarrer (oui, Orange a prouvé qu'ils peuvent créer un OS embarqué qui met PLUS de temps à démarrer qu'un PC normal)
* limiter la surface d'attaque en virant tout ce qui sert pas, autrement dit Samba qui gère le partage de fichiers et d'imprimantes (putain mais pourquoi les fabricants de routeurs forcent encore à inclure cette merde dans tous leurs produits?), la téléphonie (le DECT entre-autres, chose qui ne devrait plus exister à l'heure du Wi-Fi, VoIP et des smartphones, et le pire c'est que c'est pas désactivable), les hotspots Orange qui ont la fâcheuse tendance à se réactiver tous seuls après une MàJ de la box (bien sûr c'est pas du tout intentionnel de leur part, on y croit).
* éviter que n'importe quel gus chez Orange puisse entrer dans le réseau local, avec cette solution ils voient juste une "boîte noire" qui a seulement un port SSH ouvert et qui les envoie bouler si ils s'aventurent à s'y connecter
* éviter de payer 3€/mois pour de la merde, déjà qu'on vous entube vu la qualité de cette "fibre", vu le peering moyen, le PPPoE sur fibre qui ressemble à un bidouillage alors qu'on peut faire de l'IP sur fibre directement, et l'absence d'IP fixe et d'IPv6 alors qu'on est en 2015
Il faudra donc un PC ou serveur (n'importe quoi qui peut faire tourner un OS) sous une distribution minimale utilisant systemd et systemd-networkd pour la gestion des réseaux. J'ai pris Arch vu que j'ai déjà de l'expérience dessus mais libre à vous de prendre ce que vous voulez. Niveau matériel il faut une carte Gigabit Ethernet et ce que vous voulez en sortie (j'ai seulement une bonne carte Wi-Fi et j'ai pas le temps de tirer des câbles pour utiliser de l'Ethernet).
Durant l'install de Arch, assurez vous d'installer les paquets requis (dans la chroot), vu qu'après avoir redémarré vous n'aurez plus de connexion Internet pendant un moment :
pacman -S --needed openssh ppp vim unbound
Tant qu'à faire vous pouvez faire la plupart de tout ça direct depuis la chroot de Arch, mais c'est pas grave si vous avez déjà redémarré. Vous devez donc sécuriser le serveur, donc firewall, clés SSH, bref la base. Si vous avez du mal voilà une config minimale :
On renomme notre interface de réseau local en "lan" et on augmente la MTU de l'interface, utile si vous avez une interface Gigabit qui supporte les jumbo frames, dans le cas contraire oubliez la dernière ligne :
# /etc/systemd/network/00-lan.link
[Match]
MACAddress=XXX
[Link]
Name=lan
MTUBytes=9000
On définit une adresse IP pour cette interface et donc la plage d'IPs qui sera utilisée pour le réseau local, en l'occurrence j'ai mis la même que la Livebox - 192.168.1.1. On active également le forwarding et masquerading (NAT) qui vous sera utile pour la fonction routeur un peu plus tard :
# /etc/systemd/network/lan.network
[Match]
Name=lan
[Network]
Address=192.168.1.1/24
IPForward=yes
IPMasquerade=yes
On active le service systemd-networkd qui va s'occuper de gérer les interfaces réseau :
systemctl enable systemd-networkd
Malheureusement le fait de démarrer ces services ne suffit pas pour appliquer les changements dans les fichiers "XX-xx.link", ceux-là sont uniquement lus à la détection d'une interface, donc soit vous déconnectez/reconnectez vos interfaces (bonne chance avec une carte réseau interne soudée à la carte mère), soit vous redémarrez le système. C'est ce qu'on va faire plus tard, donc inutile de "start" les services maintenant.
Maintenant on configure le resolver DNS "unbound" qui va nous permettre de ne plus dépendre d'aucun resolver DNS et de se passer de ceux d'Orange vu qu'ils n'inspirent pas confiance (blocage des sites soi-disant terroristes et sûrement d'autres pratiques pas très nettes, à quand la redirection de google.com vers la page de recherche du site d'Orange?) :
# /etc/unbound/unbound.conf
server:
interface: 127.0.0.1
interface: ::1
interface: 192.168.1.1
access-control: 192.168.1.0/24 allow
use-syslog: yes
username: "unbound"
directory: "/etc/unbound"
trust-anchor-file: trusted-key.key
root-hints: root.hints
On télécharge maintenant les "root hints" qui sont les adresses des serveurs DNS racines :
curl http://www.internic.net/domain/named.root -o /etc/unbound/root.hints
On active le service au démarrage :
systemctl enable unbound
Et on référence l'adresse de notre serveur DNS (la machine locale) dans /etc/resolv.conf :
echo "nameserver ::1" >> /etc/resolv.conf
echo "nameserver 127.0.0.1" >> /etc/resolv.conf
Ensuite une config de firewall basique, on bloque tout sauf trafic sur l'interface de loopback, le trafic lié à une connexion existante, le trafic sur l'interface du réseau local, le trafic ICMP, le trafic SSH sur le port SSH modifié, "2222" en l'occurrence, et on laisse passer tous les paquets venant de "lan" à destination d'autres hôtes sur le net, et on laisse passer les paquets liés à une connexion déjà existante :
# /etc/iptables/iptables.rules
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [69:6736]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lan -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2222 -j ACCEPT
-A FORWARD -i lan -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
Même chose pour l'IPv6, ça sera utile si un jour vous utilisez l'IPv6 (tunnel ou si dans quelques siècles Orange le propose enfin) :
# /etc/iptables/ip6tables.rules
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lan -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2222 -j ACCEPT
-A FORWARD -i lan -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
Ensuite on active les services iptables et ip6tables au démarrage :
systemctl enable iptables ip6tables
Enfin on sécurise SSH, modifiez les valeurs dans "/etc/ssh/sshd_config" comme suit :
# /etc/ssh/sshd_config
Port 2222
PermitRootLogin prohibit-password
PasswordAuthentication no
Maintenant on active le service SSH au démarrage :
systemctl enable sshd
N'oubliez pas de déposer votre clé publique SSH ("~/.ssh/id_rsa.pub" sur votre machine personelle, exécutez "ssh-keygen" si vous avez pas ces fichiers pour générer une paire de clés) dans "/root/.ssh/authorized_keys" pour vous connectez à la machine plus tard :
echo "ssh-rsa ..." > /root/.ssh/authorized_keys
On redémarre (avec "reboot"), on définit une IP statique sur son PC dans la plage 192.168.1.X, on connecte un câble Ethernet au port correspondant à l'interface "lan", on se reconnecte en SSH à l'IP 192.168.1.1 et on continue.
Voilà les fichiers importants vis-à-vis de la fibre Orange :
Ce fichier permettra de renommer l'interface connectée à l'ONT en "eth" et de changer la MTU du lien à 1508 pour laisser de la place à l'overhead du PPPoE (oui ces guignols chez Orange n'ont pas pensé que faire de l'IP sur la fibre directement aurait été mieux) et ainsi d'obtenir une MTU de 1500 sur le lien PPP (qui est finalement meilleur vu que même leur Livebox pourrie fait du 1492 dessus). Remplacez XXX par l'adresse MAC de la carte réseau qui sera connectée à l'ONT :
# /etc/systemd/network/01-ethernet.link
[Match]
MACAddress=XXX
[Link]
Name=eth
MTUBytes=1508
On définit un "netdev" pour le VLAN 835 sur lequel tout le trafic PPPoE doit passer, encore une fois merci aux guignols d'Orange d'avoir pensé que faire de l'IP directement sur la fibre était trop simple, résultat on se tape une config bien plus difficile qu'elle ne devrait l'être..
# /etc/systemd/network/wan.netdev
[NetDev]
Name=wan
Kind=vlan
[VLAN]
Id=835
On ajoute maintenant le VLAN défini précédemment à notre interface "eth" également définie (et renommée) précédemment :
# /etc/systemd/network/ethernet.network
[Match]
Name=eth
[Network]
VLAN=wan
On redémarre encore, vu que les fichiers "link" ne sont lus qu'à la détection des interfaces. Au redémarrage du système cela va donc créer l'interface "wan" qui correspond au VLAN 835 :
# ip link show
1: eth: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1508 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether ... brd ff:ff:ff:ff:ff:ff
2: wan@eth: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1508 qdisc noqueue state UP mode DEFAULT group default
link/ether ... brd ff:ff:ff:ff:ff:ff
Maintenant on va passer à la configuration du PPPoE. Le service systemd par défaut fourni avec le paquet ppp est dégueulasse et ne prend pas en charge les "exit code" de pppd, donc par exemple il va générer une erreur dans les logs si pppd a un exit code de 5, alors que ça veut juste dire que tout se passe bien et qu'on a demandé à pppd de s'arrêter manuellement, rien à voir avec une erreur. Voici une meilleure version à placer dans "/etc/systemd/system" :
# /etc/systemd/system/ppp@orange.service
[Unit]
Description=PPP link to %I
After=network.target
[Service]
Type=forking
PIDFile=/run/ppp-%i.pid
ExecStart=/usr/sbin/pppd call %I linkname %i updetach
SuccessExitStatus=0 5 16
Restart=always
[Install]
WantedBy=multi-user.target
Ensuite on "reload" le daemon systemd pour qu'il détecte le nouveau service qu'on vient de créer, et on active le service au démarrage :
systemctl daemon-reload
systemctl enable ppp@orange
On configure la liaison PPPoE, rien de transcendant, les valeurs à remplacer sont évidentes.
# /etc/ppp/peers/orange
plugin rp-pppoe.so wan
name "fti/XXX"
password "XXX"
defaultroute
noauth
maxfail 1
noipdefault
noproxyarp
linkname orange
Maintenant on crée un autre fichier "network" cette fois pour définir les serveurs DNS du système et éventuellement ajouter d'autres options plus tard, comme le forwarding (nécessaire pour créer un routeur), etc.. :
# /etc/systemd/network/wan.network
[Match]
Name=ppp0
[Network]
DHCP=no
IPForward=ipv4
Normalement à ce point là vous pouvez faire "systemctl start ppp@orange" et la connexion sera établie !
Dans les logs, vous devez voir ça :
# journalctl -f -u ppp@orange -n 50
systemd[1]: Starting PPP link to orange...
pppd[935]: Plugin rp-pppoe.so loaded.
pppd[935]: RP-PPPoE plugin version 3.8p compiled against pppd 2.4.7
pppd[935]: Plugin rp-pppoe.so loaded.
pppd[935]: RP-PPPoE plugin version 3.8p compiled against pppd 2.4.7
pppd[935]: pppd 2.4.7 started by root, uid 0
pppd[935]: PPP session is 17594
pppd[935]: Connected to ... via interface wan
pppd[935]: Using interface ppp0
pppd[935]: Connect: ppp0 <--> wan
pppd[935]: PPP session is 17594
pppd[935]: Connected to ... via interface wan
pppd[935]: Using interface ppp0
pppd[935]: Connect: ppp0 <--> wan
pppd[935]: CHAP authentication succeeded: CHAP authentication success, unit 11315
pppd[935]: CHAP authentication succeeded
pppd[935]: peer from calling number ... authorized
pppd[935]: CHAP authentication succeeded: CHAP authentication success, unit 11315
pppd[935]: CHAP authentication succeeded
pppd[935]: peer from calling number ... authorized
systemd[1]: Started PPP link to orange.
pppd[935]: local IP address ...
pppd[935]: remote IP address ...
Et une nouvelle interface "ppp0" devrait se créer :
# ip link show
1: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 3
link/ppp
Elle devrait également disposer d'une adresse IP, votre IP publique Orange. Le "peer" c'est l'adresse du serveur PPPoE sur lequel vous êtes connecté :
# ip addr show dev ppp0
13: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 3
link/ppp
inet ... peer ... scope global ppp0
valid_lft forever preferred_lft forever
Vous pouvez donc pinguer Google et apprécier votre magnifique ping digne d'une connexion ADSL de bas étages :
# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=51 time=35.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=51 time=35.6 ms
35,6ms, oui je confirme c'est bien la fibre par Orange. Y'a que Orange qui est capable de telles prouesses.
Parfois vous pouvez redémarrer votre lien PPP et jouer à la roulette avec le ping - vous avez des chances de tomber sur un serveur PPPoE un peu moins chargé ou situé à un meilleur emplacement dans leur datacentre à Paris :
# systemctl restart ppp@orange
# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=15.7 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=15.6 ms
15ms, c'est à peu près le minimum que vous pouvez atteindre et d'après plusieurs utilisateurs sur le forum c'est acceptable comparé à ma localisation, j'espère juste que vous aurez de meilleurs résultats.
Voilà quelques tests de débit que vous pouvez faire :
# curl -o /dev/null http://test-debit.free.fr/image.iso
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 647M 100 647M 0 0 31.9M 0 0:00:20 0:00:20 --:--:-- 38.7M
255mbps en moyenne, bof bof même si comme le ping c'est aléatoire et ça dépend sur quel serveur PPP on tombe.
# curl -4 -o /dev/null http://proof.ovh.net/files/1Gio.dat
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1024M 100 1024M 0 0 25.3M 0 0:00:40 0:00:40 --:--:-- 26.1M
Peering encore plus désastreux vers ce qui est pourtant le premier hébergeur en France, ils devraient vraiment faire mieux là dessus.
Maintenant votre routeur est prêt et vous pouvez normalement naviguer sur le net, évidemment il manque quelques trucs comme un serveur DHCP, on install donc le serveur dhcp :
pacman -S dhcp
Et voilà une configuration basique de celui-ci :
# /etc/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.254;
option routers 192.168.1.1;
option domain-name-servers 192.168.1.1;
interface lan;
}
On démarre le serveur dhcp et on l'active au démarrage :
systemctl start dhcpd4
systemctl enable dhcpd4
Voilà, normalement avec ça vous avez un routeur basique. Pour le reste je vous invite à lire la documentation d'Arch et les pages du manuel de systemd-networkd :
man systemd.network
man systemd.link
man systemd.netdev