Fichier | URL |
system.getInfo.xml | http://192.168.1.1/api/1.0/?method=system.getInfo |
ftth.getInfo.xml | http://192.168.1.1/api/1.0/?method=ftth.getInfo |
wan.getInfo.xml | http://192.168.1.1/api/1.0/?method=wan.getInfo |
lan.getHostsList.xml | http://192.168.1.1/api/1.0/?method=lan.getHostsList |
tv.getInfo.xml | http://192.168.1.1/api/1.0/?method=tv.getInfo |
usb.getInfo.xml | http://192.168.1.1/api/1.0/?method=usb.getInfo |
# apt update && apt install php-fpm
Ensuite on va paramétrer les bons droits sur la socket de php-fpm:# vi /etc/php/7.4/fpm/pool.d/www.conf
On modifie listen.owner et listen.group comme suit:listen.owner = nginx
listen.group = nginx
Maintenant on copie dans /root le fichier de configuration nginx en charge de l'écoute sur le port 80 (le décodeur requête en HTTP, pas en HTTPS):# cp /data/unifi-core/config/http/site-local-ip.conf /root
On édite le fichier pour qu'il ressemble à ça:# vi /root/site-local-ip.conf
server {
listen 443 ssl http2 default_server;
server_name _;
include /data/unifi-core/config/http/local-certs.conf;
include /usr/share/unifi-core/http/errors.conf;
include /usr/share/unifi-core/http/shared-server-defaults.conf;
include /usr/share/unifi-core/http/shared-post-setup-server.conf;
}
server {
listen 80 default_server;
index index.php;
server_name _;
root /var/www;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
include /etc/nginx/snippets/fastcgi-php.conf;
}
location /api/1.0/ {
rewrite ^(\?(.*)) index.php?$1 last;
}
location / {
try_files $uri $uri/ =404;
}
# return 301 https://$host$request_uri;
}
Cela permettra de désactiver la redirection HTTP vers HTTPS (pas de souci, l'interface de configuration UniFi n'est de toute façon pas publiée en HTTP), et de faire la réécriture d'URL nécessaire au décodeur.# mkdir /etc/nginx/snippets && vi /etc/nginx/snippets/fastcgi-php.conf
On place ça dans le fichier:# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;
# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_index index.php;
include fastcgi.conf;
On crée aussi /etc/nginx/fastcgi.conf:# vi /etc/nginx/fastcgi.conf
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
# mkdir -p /var/www/api/1.0
Dans /var/www/api/1.0 on place les fichiers XML récupérés de la box SFR, à transférer en SCP.# vi /var/www/api/1.0/index.php
On met ce contenu dedans:<?php
header('Content-Type: application/xml; charset=utf-8');
if (isset($_GET['method'])){
$method = $_GET['method'];
switch ($method) {
case "system.getInfo":
echo file_get_contents('system.getInfo.xml');
break;
case 'lan.getHostsList':
echo file_get_contents('lan.getHostsList.xml');
break;
case 'wan.getInfo':
echo file_get_contents('wan.getInfo.xml');
break;
case 'ftth.getInfo':
echo file_get_contents('ftth.getInfo.xml');
break;
case 'usb.getInfo':
echo file_get_contents('usb.getInfo.xml');
break;
case 'tv.getInfo':
echo file_get_contents('tv.getInfo.xml');
break;
}
return;
}
?>
Et enfin on place les bons droits:# chown -R www-data:www-data /var/www
L'OS va écraser le fichier /data/unifi-core/config/http/site-local-ip.conf à chaque boot, il faut donc mettre en place un script pour mettre le bon contenu.# vi /root/restore_nginx_conf.sh
#!/bin/bash
/bin/sleep 120
/bin/cp /root/site-local-ip.conf /data/unifi-core/config/http/site-local-ip.conf
/bin/systemctl restart nginx
exit 0
Le sleep 120 est là pour être sûr d'écraser le contenu du fichier après les routines de démarrage de l'UCG Ultra.# chmod +x /root/restore_nginx_conf.sh
Et on ajoute le script dans la crontab à chaque redémarrage:# crontab -e
@reboot /root/restore_nginx_conf.sh
Enfin on peut redémarrer le routeur, attendre 5 minutes et tester le bon fonctionnement en tentant d'accéder aux pages suivantes avec son navigateur (remplacer l'IP par celle du routeur):Bravo !
Je suppose que c'est transposable à 100% aux autres routeurs UniFi modernes, car j'ai un Dream Router et je ne vois pas de différence dans notre interface UniFi Network.
En revanche, chez moi l'IPv4 fonctionne avec seulement l'option 60 du client DHCP. Je n'ai pas besoin d'option 61 et pas besoin d'usurper l'adresse MAC de ma NB6VAC. J'ai un abonnement RED by SFR Série spéciale fibre, je n'ai pas la TV par SFR. Par acquis de conscience, peux-tu par hasard essayer sans ces 2 réglages ?
Et sais-tu comment faire fonctionner l'IPv6 via l'interface web UniFi Network ?
A 100% pas sûr, tout dépend du type de serveur web qui tourne en local sur un UDM.Je n'ai pas de décodeur TV SFR et je n'ai pas très envie de bricoler mon routeur, mais je peux confirmer que j'ai moi aussi un fichier de configuration Nginx à l'emplacement /data/unifi-core/config/http sur mon UniFi Dream Router.
Edit: je confirme, pas besoin d'option 61 ni de reprendre la MAC, j'ai édité le post initial.Cool, merci pour l'info !
A ce jour pas moyen d'avoir d'IPv6, j'ai soumis le problème sur le forum d'Ubiquiti: https://community.ui.com/questions/Missing-DHCPv6-options-on-UCG-Ultra/4f5619cc-15b5-41af-b1d0-771c5f0e22b5On croise les doigts ! Je suis tenté de basculer chez MikroTik, mais je suis frustré par leurs solutions Wi-Fi, à cause du manque d'IPv6 sur mon UniFi.