feigned

Installer le firmware OpenWrt sur un routeur Wi-Fi

35.8K vues

Vous avez acheté un routeur Wi-Fi et vous souhaitez exploiter pleinement son potentiel ? Alors l’installation du firmware alternatif OpenWrt est très certainement ce qu’il vous faut ! En effet, OpenWrt fournit plus de 3000 paquets, prêts à être installés. Vous allez pouvoir installer sur votre routeur Wi-Fi : un client OpenVPN, un serveur de fichiers… et plus encore !

Vous l’aurez compris, je vais vous expliquer dans cet article comment remplacer le firmware d’origine de votre routeur Wi-Fi par le firmware OpenWrt. 🙂

Vous allez voir, c’est très simple !

OpenWrt et LEDE

OpenWrt et LEDE sont des firmwares alternatifs basés sur le système d’exploitation GNU/Linux à destination des systèmes embarqués (routeurs, modems…) et qui visent à remplacer le firmware fourni par le fabricant.

OpenWrt a vu le jour en 2014. En mai 2016, quasiment tous les développeurs d’OpenWrt sont partis pour un nouveau projet, LEDE (Linux Embedded Development Environment), ce qui a arrêté le développement d’OpenWrt. LEDE est donc un fork d’OpenWrt, c’est-à-dire un firmware créé à partir du code source d’OpenWrt.

En janvier 2018, les équipes de LEDE et OpenWrt ont annoncé que les deux projets allaient fusionner. Le projet unifié utilise le nom OpenWrt mais utilise le code source et les règles du projet LEDE. Les membres actifs des anciens projets LEDE et OpenWrt travaillent désormais ensemble sur l’OpenWrt unifié.

Il est recommandé d’installer OpenWrt sur des périphériques équipés d’au moins :

  • 8 Mo de mémoire flash ;
  • 64 Mo de mémoire vive (RAM).

La mémoire flash permet de stocker l’image du firmware et des programmes supplémentaires (OpenVPN, Samba, LuCI…) ; la mémoire vive à exécuter les tâches confortablement, sans latence.

Ce tutoriel est destiné exclusivement aux routeurs Wi-Fi équipés d’au moins 8 Mo de stockage interne.

Important : si vous avez un routeur avec seulement 4 Mo de stockage interne comme le routeur TP-Link TL-MR3020, quittez ce tutoriel et suivez celui-ci à la place : installer le firmware OpenWrt sur un routeur avec 4 Mo de stockage.

Prérequis

  • Un routeur compatible OpenWrt.
  • Un client SSH sur votre PC :
    • Avec Linux : en utilisant le client SSH natif.
    • Avec Windows : en utilisant le client SSH natif de Windows 10 ou bien le logiciel cmder.

      Utiliser cmder

      Téléchargez cmder (Full), décompressez l’archive puis double-cliquez sur le fichier cmder.exe. Cmder intègre Git for Windows et permet d’établir une connexion SSH avec des périphériques réseau.

      Par défaut, cmder ouvre une instance de cmd.exe (Invite de commandes) qui ne supporte pas le SSH, contrairement à bash.exe (Git Bash). Vous devez donc ouvrir un onglet (CTRL + T) et sélectionnez la tâche {bash::bash}.

      Pour plus de confort, je vous recommande de définir {bash::bash} comme tâche par défaut : Settings > Startup > Specified named task > {bash::bash} > Save settings.

Étape 1 : installation d’OpenWrt sur le routeur Wi-Fi

  • Consultez la page Table of Hardware: Firmware downloads et recherchez votre routeur Wi-Fi en utilisant les filtres de recherche. N’hésitez pas à cliquez sur le lien View/Edit data pour obtenir des informations utiles sur votre routeur.
  • Dans la colonne Firmware OpenWrt Install URL, téléchargez le fichier « […]factory.bin » puis renommez-le en factory.bin.

    Pour le TP-Link Archer C7 :

    Pour le TP-Link TP-WR902AC v1 : tl-wr902ac-v1-squashfs-factory.bin.

  • Reliez votre routeur Wi-Fi (port LAN) à la carte réseau de votre PC via un câble Ethernet.
  • Rendez-vous sur l’interface d’administration de votre routeur Wi-Fi, page « System Upgrade » et sélectionnez le fichier factory.bin.Cliquez sur Upgrade et patientez jusqu’à l’installation complète du firmware OpenWrt.
  • Ouvrez votre navigateur Web et entrez l’adresse Web http://192.168.1.1/ pour vous connecter à l’interface d’administration d’OpenWrt. Identifiez-vous avec le nom d’utilisateur par défaut root (aucun mot de passe).
  • Définissez un mot de passe pour l’utilisateur root en cliquant sur le lien Go to password configuration, puis cliquez sur Save & Apply en bas de la page.

Voilà, OpenWrt est correctement installé ! Maintenant, allons configurer l’accès Internet. 😉

Étape 2 : configuration de la connexion Internet

Via une box ADSL/fibre par Ethernet

Si vous disposez un box ADSL/fibre et que votre routeur dispose d’un port WAN, reliez simplement un des ports LAN de la box ADSL/fibre au port WAN du routeur avec un câble Ethernet.

Important : il faut que votre box ADSL/fibre utilise une plage d’adresses IP autre que 192.168.1.0/24 car elle est utilisée par OpenWrt. Rendez-vous dans les paramètres de votre box et vérifiez qu’elle utilise une autre plage d’adresse comme 192.168.0.0/24, 192.168.2.0/24…

En effet, par défaut, OpenWrt est configuré avec les interfaces virtuelles nécessaires (une avec le protocole DHCP et une autre avec le protocole DHCPv6) sur l’interface réseau physique eth0 (carte WAN du routeur). La connexion Internet sera de suite opérationnelle.

Vérifiez la connexion Internet en cliquant sur le bouton Ping dans Network > Diagnostics.

La connexion Internet est opérationnelle si sur les cinq paquets transmis, 5 sont bien reçus (0% de paquet perdu).

Voilà, votre routeur Wi-Fi sous OpenWrt est maintenant connecté à Internet. 🙂

Via un point d’accès Wi-Fi

Note : dans cette section, j’explique comment établir une connexion WLAN en utilisant le point d’accès Wi-Fi d’un routeur comme celui intégré dans votre box ADSL/fibre (Freebox, Bbox…).
  1. Rendez-vous dans Network > Wireless et activez les points d’accès Wi-Fi « OpenWrt » en cliquant sur les boutons Enable. Ces points d’accès Wi-Fi vont permettre à vos appareils de se connecter à votre routeur Wi-Fi sous OpenWrt. Vous avez par défaut une carte radio0 pour la bande de fréquence des 5 GHz (802.11nac) et une carte radio1 pour celle des 2,4 GHz (802.11bgn).
  2. Scanner les réseaux Wi-Fi en cliquant sur le bouton Scan en face d’une des cartes Wi-Fi du routeur.
  3. Rejoignez le réseau Wi-Fi de votre box ADSL/fibre en cliquant sur Join Network.
  4. Entrez le mot de passe du réseau Wi-Fi dans le champ WPA passphrase, « wlan » dans le champ Name of the new network, sélectionnez la zone Firewall « wan » puis cliquez sur Submit.
  5. Descendez en bas de la page puis cliquez sur Save & Apply.
    Dans la section Associated Stations, le SSID du point d’accès Wi-Fi de votre box ADSL/fibre devrait apparaitre :
    Et dans Network > Interfaces, vous trouvez l’interface virtuelle wlan :
  6. Vérifiez la connexion Internet en cliquant sur le bouton Ping dans Network > Diagnostics.
    La connexion Internet est opérationnelle si sur les cinq paquets transmis, 5 sont bien reçus (0% de paquet perdu).

Voilà, votre routeur Wi-Fi sous OpenWrt est maintenant connecté à Internet 🙂

Via un modem LTE (4G)

Note : dans cette section, j’explique comment établir une connexion WWAN en utilisant le dongle USB LTE Huawei E3372. Avant de continuer, vous devez au préalable avoir configuré l’accès Internet de votre routeur via une box ADSL/fibre par Ethernet ou un point d’accès Wi-Fi (voir précédemment).

Protocole RNDIS

Important : nous allons utiliser le protocole RNDIS pour nous connecter à Internet. Le dongle Huawei E3372 doit être équipé d’un firmware HiLink.
  1. Insérez le dongle Huawei E3372 sur un port USB de votre routeur Wi-Fi.
  2. Connectez-vous en SSH à votre routeur :
    ssh root@192.168.1.1
  3. Installez les paquets kmod-usb-net-rndis  et usb-modeswitch en entrant les commandes suivantes :
    opkg update
    opkg install kmod-usb-net-rndis usb-modeswitch
  4. Vérifiez que le périphérique est bien détecté :
    opkg install usbutils
    lsusb
    Bus 001 Device 003: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard

    Ainsi que l’interface réseau physique eth2 :

    dmesg | grep cdc_ether
    [30832.616731] usbcore: registered new interface driver cdc_ether
    [30834.907868] cdc_ether 1-1:1.0 eth2: register 'cdc_ether' at usb-ehci-platform.0-1, CDC Ethernet Device, 0c:5b:8f:27:9a:64
    
    ip link show eth2
    64: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
        link/ether 0c:5b:8f:27:9a:64 brd ff:ff:ff:ff:ff:ff
  5. Créez une interface virtuelle wwan en spécifiant le protocole (dhcp) et l’interface réseau physique (eth2) du dongle Huawei E3372 :
    uci set network.wwan=interface
    uci set network.wwan.ifname='eth2'
    uci set network.wwan.proto='dhcp'
    uci commit
  6. Pour protéger votre connexion Internet, ajoutez l’interface virtuelle wwan que nous venons de créer à la zone wan du pare-feu :
    uci add_list firewall.@zone[1].network='wwan'
    uci commit
  7. Redémarrez les services firewall et network :
    /etc/init.d/firewall reload
    /etc/init.d/network restart
  8. Patientez un moment, jusqu’à ce que le dongle USB Huawei E3372 affiche une LED cyan fixe, signifiant que la connexion au réseau cellulaire LTE (4G) est bien active.
  9. Votre connexion Internet est opérationnelle ! Vérifiez avec un ping sur votre site Web favori 😉
    ping lecrabeinfo.net -c 4 -I eth2
    PING lecrabeinfo.net (213.32.22.96): 56 data bytes
    64 bytes from 213.32.22.96: seq=0 ttl=51 time=42.278 ms
    64 bytes from 213.32.22.96: seq=1 ttl=51 time=34.948 ms
    64 bytes from 213.32.22.96: seq=2 ttl=51 time=34.665 ms
    64 bytes from 213.32.22.96: seq=3 ttl=51 time=34.377 ms
    
    --- lecrabeinfo.net ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max = 34.377/36.567/42.278 ms

    Sur LuCI, dans Network > Interfaces, vous retrouverez l’interface virtuelle wwan :

Protocole NCM

Important : nous allons utiliser le protocole NCM pour nous connecter à Internet. Le dongle Huawei E3372 doit être équipé d’un firmware Stick. Avant de commencer, configurez le « multi-mode » du dongle afin d’activer le protocole NCM dans un mode unique : AT^SETPORT="FF;12,16,A2".
  1. Insérez le dongle Huawei E3372 sur un port USB de votre routeur Wi-Fi.
  2. Connectez-vous en SSH à votre routeur :
    ssh root@192.168.1.1
  3. Installez les paquets suivants :
    • kmod-usb2 et kmod-usb3 : nécessaires pour le support de l’USB 2.0 et 3.0 (uniquement si vous branchez votre dongle E3372 sur un port USB 2.0 ou 3.0) ;
    • kmod-usb-net-huawei-cdc-ncm et comgt-ncm : nécessaires pour se connecter à Internet avec le protocole NCM ;
    • kmod-usb-serial, kmod-usb-serial-option et kmod-usb-serial-wwan : nécessaires pour utiliser l’interface série du dongle Huawei E3372.
    • luci-proto-ncm :  permet le support du protocole NCM dans l’interface LuCI.

    Pour ce faire, saisissez les commandes suivantes :

    opkg update
    opkg install kmod-usb2 kmod-usb3
    opkg install kmod-usb-net-huawei-cdc-ncm comgt-ncm
    opkg install kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan
    opkg install luci-proto-ncm
  4. Vérifiez que les périphériques /dev/cdc-wdm0 et /dev/ttyUSB0 sont bien détectés :
    ls -l /dev/cdc-wdm0 /dev/ttyUSB0
    crw-------    1 root     root      180, 176 Jan 31 14:44 /dev/cdc-wdm0
    crw-------    1 root     root      188,   0 Jan 31 14:46 /dev/ttyUSB0

    Ainsi que l’interface réseau physique wwan0 :

    ip link show wwan0
    3: wwan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN qlen 1000
        link/ether 00:1e:10:1f:00:00 brd ff:ff:ff:ff:ff:ff
  5. Dans LuCI, rendez-vous dans Network > Interfaces et cliquez sur le bouton Add new interface.
  6. Nommez l’interface wwan, choisissez le protocole NCM puis cliquez sur Submit.
  7. Saisissez les informations suivantes puis cliquez sur Save & Apply.
    • Modem device : /dev/ttyUSB0.
    • Service type : Prefer LTE.
    • APN : l’APN de votre opérateur mobile.
    • PIN : le code PIN de la carte SIM.
    • Advanced settings > Modem init timeout : 30.
    • Firewall settings > Firewall-zone : wan.

  8. Patientez un moment, jusqu’à ce que le dongle USB Huawei E3372 affiche une LED cyan fixe, signifiant que la connexion au réseau cellulaire LTE (4G) est bien active.
  9. Votre connexion Internet est opérationnelle ! Vérifiez-la en cliquant sur le bouton Ping dans Network > Diagnostics.Dans Network > Interfaces, vous retrouverez l’interface virtuelle wwan :

Voilà, votre routeur Wi-Fi sous OpenWrt est maintenant connecté à Internet. 🙂

Multi-WAN

Si vous avez plusieurs interfaces virtuelles connectées à Internet, comme ici :

  • wan et wan6 : connexion ADSL.
  • wwan : connexion LTE (4G).

Vous allez la possibilité d’utiliser une interface virtuelle plutôt qu’une autre pour la connexion Internet grâce la métrique.

Métrique (routage)

Un routeur possède une table de routage avec toutes les routes possibles. Par exemple, dans la capture d’écran ci-dessus, il y a deux routes : la route wan et la route wwan. Les métriques sont utilisées pour déterminer si une route doit être utilisée plutôt qu’une autre. La route avec la métrique la plus basse sera utilisée en priorité.

Pour me connecter à Internet, supposons que je veuille utiliser en priorité l’interface virtuelle wwan (connexion LTE) puis l’interface virtuelle wan (connexion ADSL).

Pour cela, je vais définir une métrique de 10 pour l’interface wwan et une métrique de 20 pour l’interface wan. Cela se fait très simplement : je clique sur le bouton Edit sur la ligne de l’interface wwan > onglet Advanced Settings > je saisis la valeur 10 dans le champ Use gateway metric > Save & Apply.

Je procède de la même façon pour l’interface wan mais en spécifiant cette fois-ci une métrique de 20.

Pour savoir si mon interface virtuelle wwan est bien utilisée en priorité, je consulte le site https://www.whoismyisp.org/ et je note l’adresse IP et l’ISP (FAI) détectés :

L’adresse IP et l’ISP correspondent bien à ceux de ma connexion LTE (4G), tout est bon ! 😉

Reconnexion automatique au réseau LTE (4G)

La connexion au réseau LTE (4G) peut s’interrompre sans prévenir. C’est pourquoi nous allons utiliser un script watchdog.sh qui testera la connexion Internet de l’interface wwan et qui la redémarrera si la connexion Internet est hors-service. Le script est disponible ici : watchdog.sh.

  1. Attribuez l’interface réseau physique wwan0 à l’interface wwan :
    uci set network.wwan.ifname='wwan0'
    uci commit
  2. Rechargez la configuration du réseau :
    /etc/init.d/network restart
  3. Téléchargez le script watchdog.sh :
    cd /root
    wget https://gist.githubusercontent.com/dreamon11/dc35c659a594ee5e51d74d028e9ce988/raw/6e9a51a7070958adb1c045d92b6ea7049d940780/watchdog.sh
    chmod +x watchdog.sh
  4. Créez une tâche planifiée qui exécutera le script watchdog.sh toutes les minutes :
    crontab -l | { cat; echo "* * * * * /usr/bin/flock -n /tmp/watchdog.lockfile /root/watchdog.sh wwan"; } | crontab -
  5. Installez le paquet flock qui verrouillera le script watchdog.sh afin d’éviter qu’une nouvelle instance de ce script ne s’exécute si la précédente est toujours en cours d’exécution :
    opkg update
    opkg install flock
  6. Redémarrez le service cron :
    /etc/init.d/cron restart
  7. Un p’tit coup d’oeil dans les logs pour s’apercevoir que la tâche est bien exécutée, et que l’interface est bien redémarrée lorsque la connexion au réseau LTE (4G) est perdue :
    logread
    Sat Feb 17 23:40:00 2018 cron.info crond[8535]: USER root pid 8538 cmd /root/watchdog.sh wwan
    Sat Feb 17 23:41:32 2018 user.notice watchdog: Physical network interface 'wwan0' is down: restart interface 'wwan'
    Sat Feb 17 23:41:32 2018 daemon.notice netifd: wwan (8560): Stopping network wwan
    Sat Feb 17 23:41:33 2018 daemon.notice netifd: Interface 'wwan' is now down
    Sat Feb 17 23:41:33 2018 daemon.notice netifd: Interface 'wwan' is setting up now
    Sat Feb 17 23:42:05 2018 daemon.notice netifd: wwan (8604): sending -> AT
    Sat Feb 17 23:42:06 2018 daemon.notice netifd: wwan (8604): sending -> ATZ
    Sat Feb 17 23:42:07 2018 daemon.notice netifd: wwan (8604): sending -> ATQ0
    Sat Feb 17 23:42:07 2018 daemon.notice netifd: wwan (8604): sending -> ATV1
    Sat Feb 17 23:42:08 2018 daemon.notice netifd: wwan (8604): sending -> ATE1
    Sat Feb 17 23:42:09 2018 daemon.notice netifd: wwan (8604): sending -> ATS0=0
    Sat Feb 17 23:42:09 2018 daemon.notice netifd: wwan (8604): sending -> AT+CGDCONT=1,"IP","free"
    Sat Feb 17 23:42:11 2018 daemon.notice netifd: wwan (8604): SIM ready
    Sat Feb 17 23:42:11 2018 daemon.notice netifd: wwan (8604): PIN set successfully
    Sat Feb 17 23:42:12 2018 daemon.notice netifd: wwan (8604): sending -> AT^SYSCFGEX="030201",3fffffff,2,4,7fffffffffffffff,,
    Sat Feb 17 23:42:13 2018 daemon.notice netifd: wwan (8604): Starting network wwan
    Sat Feb 17 23:42:13 2018 daemon.notice netifd: wwan (8604): sending -> AT^NDISDUP=1,1,"free"
    Sat Feb 17 23:42:14 2018 daemon.notice netifd: wwan (8604): Setting up wwan0
    Sat Feb 17 23:42:14 2018 daemon.notice netifd: Interface 'wwan' is now up
    Sat Feb 17 23:42:14 2018 daemon.notice netifd: Network device 'wwan0' link is up
    Sat Feb 17 23:42:14 2018 daemon.notice netifd: Network alias 'wwan0' link is up

Ce guide s’achève ici ! 🙂 Mais vous n’allez pas vous arrêter en si bon chemin… 😎

Maintenant que notre routeur est équipé d’un super firmware, allons installer un client VPN dessus pour chiffrer notre connexion Internet : installer et configurer un client OpenVPN sur votre routeur sous OpenWrt 😉