[[https://openwrt.org/|OpenWRT]] (Open Wireless Router) est une distribution Linux minimaliste pour matériel embarqué, historiquement développée pour des routeurs WIFI [[https://fr.wikipedia.org/wiki/WRT54G|Linksys WRT54G]], puis étendue sur [[https://openwrt.org/toh/start|nombre de routeurs]] (WIFI/grand public on non), qui ajoute de nombreuses fonctionnalités par rapport aux firmwares propriétaires installés par défaut sur ces matériels.
# exemple de sign-in banner :
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
CHAOS CALMER (15.05)
-----------------------------------------------------
* 1 1/2 oz Gin Shake with a glassful
* 1/4 oz Triple Sec of broken ice and pour
* 3/4 oz Lime Juice unstrained into a goblet.
* 1 1/2 oz Orange Juice
* 1 tsp. Grenadine Syrup
-----------------------------------------------------
[[informatique:hardware:tplink_wdr3600|Installation sur un Tp-Link WDR3600]]
======Gestion des paquets (opkg)======
On peut installer des paquets avec le [[http://wiki.openwrt.org/doc/techref/opkg|gestionnaire opkg]] intégré ; pour installer tcpdump par exemple :
opkg update
opkg list | grep tcpdump
tcpdump - 4.5.1-4 - Network monitoring and data acquisition tool
tcpdump-mini - 4.5.1-4 - Network monitoring and data acquisition tool (minimal version)
opkg install tcpdump
Pour mettre à jour les paquets upgradables :
opkg update
opkg list-upgradable | cut -f1 -d' ' | xargs -r opkg upgrade
======Configurer le rsyslog=====
On peut configurer l'envoie des messages de log à partir de la webUI, via le menu Sytem/Sytem puis l'onglet Logging. Il suffit de préciser l'adresse IP du serveur syslog distant dans "External system log server", et de définir le "Log output level" à Debug.
Cliquer ensuite sur "Save & Apply", ce qui, en fait, va juste sauvegarder la conf (on peut le vérifier en CLI en tapant ''uci show system.@system[0]'').
======UCI======
**UCI** (Unified Configuration Interface) est la commande qui permet d'interagir avec la configuration d'OpenWRT. Cet outil permet d'unifier/centraliser la configuration du routeur et est utilisé depuis les versions Kamikaze.
On peut afficher la configuration sous plusieurs formats :
# format natif, programmable
uci show system
system.@system[0]=system
system.@system[0].cronloglevel='8'
system.@system[0].zonename='Europe/Paris'
system.@system[0].timezone='CET-1CEST,M3.5.0,M10.5.0/3'
system.@system[0].hostname='har'
# paramètre précis
uci get system.@system[0].zonename
Europe/Paris
# format lisible (human-readable)
uci export system
config system
option cronloglevel '8'
option zonename 'Europe/Paris'
option timezone 'CET-1CEST,M3.5.0,M10.5.0/3'
option hostname 'har'
''uci changes'' permet d'afficher les modifications encore non appliquées ; ''uci commit'' permet de sauvegarder ces modifs, et ''reload_config'' permet de le appliquer.
Exemple de création d'une nouvelle section :
uci show sectionperso
uci import sectionperso < /dev/null
uci set sectionperso.myname=masectionperso
uci add sectionperso blah
uci commit
uci show sectionperso
sectionperso.@blah[0]=blah
=====UCI extras=====
Pour éviter les erreurs de configuration, installer les [[https://openwrt.org/docs/guide-user/advanced/uci_extras|UCI extras]] :
opkg update
opkg install diffutils
uclient-fetch -O uci-extras.sh "https://openwrt.org/_export/code/docs/guide-user/advanced/uci_extras?codeblock=0"
. ./uci-extras.sh
Cela permet d'ajouter les commandes ''uci validate'' et ''uci diff '', qui permettent respectivement de valider la syntaxe et de voir les différences entre 2 confs.
uci validate
uci diff dhcp
=====Liens utiles=====
* https://openwrt.org/docs/guide-user/base-system/uci
======Problèmes======
=====(dnsmasq) leases file in read-only=====
dnsmasq[1]: cannot open or create lease file /tmp/dhcp.leases: Read-only file system
[[https://github.com/openwrt/openwrt/issues/9064|Soucis avec le paquet proc-ujail]] ; en modifiant l'emplacement du fichier de leases cela refonctionne :
touch /var/run/dnsmasq/dhcp.leases
uci set dhcp.@dnsmasq[0].leasefile='/var/run/dnsmasq/dhcp.leases'
service dnsmasq restart
=====Problèmes DHCP depuis OpenWRT 24.10=====
Depuis la version 24.10 d'OpenWRT (avec la 23.05 je n'ai pas constaté le soucis), le serveur DHCP (dnsmasq) ne répond plus aux clients si son adresse est incluse dans le pool DHCP. Par exemple si le pool est 192.168.0.1 jusqu'à .100 (start=1 ; limit=100), si l'interface du routeur est la .1 alors le DHCP ne sert plus d'adresse.
C'est une best-practice que de ne pas inclure l'IP du serveur DHCP dans son pool d'IPs cliente, mais là c'est raide : le DHCP bloque.
Pour résoudre le soucis il faut juste sortir l'IP du serveur DHCP du pool d'IPs clientes (renuméroter l'IP du serveur ou modifier le pool), ou faire un rollback d'OpenWRT pour revenir en version 23.05.
src: forum.openwrt.org
* [[https://forum.openwrt.org/t/dhcp-bug-in-openwrt-24-10/231767|DHCP bug in OpenWrt 24.10]]
* [[https://forum.openwrt.org/t/dhcp-doesnt-work-anymore-when-router-ip-is-inside-dhcp-range/166539|Dhcp doesn’t work anymore when router IP is inside dhcp range]]