Vendredi 23 novembre 2018 (Modifié le Vendredi 23 novembre 2018)

IPV6 Freebox

De plus en plus de réseaux proposent une adresse en IPv6. Je ne détaillerai pas ce qu’est IPv6, le pourquoi et la nécessité de le développer...

Obtenir une IPv6 sur sa machine Yunohost

Dans les prérequis, il y a :

    sur la Freebox, dans la partie administration, avoir activé l’IPv6.
    avoir IPv6 d’actif sur l’OS sur lequel se trouve Yunohost (Debian Jessie dans mon cas)

Avec l’IPv6, chaque machine se voit attribuer une IP publique, basée sur l’IP principale (celle de la Freebox) et l’adresse MAC de l’équipement concerné (pour faire simple). Une fois IPv6 activée sur la Freebox, la machine Yunohost étant réglée en DHCP (avec comme paramétrage au niveau de la Freebox de toujours associer la même IP), la machine se voit attribuer 2 IPv6.

Une adresse commençant par fe80:: qui est une adresse locale (fonctionnant uniquement sur le sous-réseau physique local : le switch et le wifi de la Freebox). Une adresse commençant par 2a01:exxx:xxxx:xxxx : qui est une adresse publique (La Freebox ayant l’adresse 2a01:exxx:xxxx:xxxx::1)

Pour chaque machine ayant une IPv6, la Freebox ouvre un tunnel vers Internet (indépendamment de la redirection de ports nécessaire pour l’adresse en IPv4 qui n’est que privée, liée au réseau local. Le NAT et la redirection de ports de l’IPv4 publique de la Freebox vers l’IPv4 locale de la machine sous Yunohost n’est utile qu’en IPv4). La redirection n’est donc plus nécessaire puisque la machine peut être attaquée via le tunnel V6. Comme indiqué, l’adresse IPv6 est publique : la machine est donc directement visible et accessible depuis Internet (d’où la nécessité de surveiller les logs, de faire les mises à jour, d’avoir un pare-feu activé, fail2ban... tout ce qui est installé et configuré par défaut dans Yunohost).

On peut voir ces deux adresses via un

sudo ifconfig /all

eth0   Link encap:Ethernet  HWaddr 78:xx:xx:xx:xx:xx  
       inet adr:192.168.0.1  Bcast:192.168.0.255  Masque:255.255.255.0
       adr inet6: 2a01:exxx:xxxx:xxxx:b81b/64 Scope:Global
       adr inet6: fe80::7a2b:cbff:fea8:b81b/64 Scope:Lien
(...)

Configuration du DNS

Si on a un nom de domaine, par exemple mondomaine.fr, il faut noter l’adresse IPv6 publique de la machine sous Yunohost et dans la configuration des entrées DNS, en plus de l’entrée correspondant à l’association de l’IPv4 publique de la Freebox (ici représentée par XYZ.XYZ.XYZ.XYZ)

Nom   Type    Valeur
 @     A      XYZ.XYZ.XYZ.XYZ

On ajoute une entrée AAAA avec l’adresse IPv6 publique de la machine sous Yunohost (ici représentée par 2a01:exxx:xxxx:xxxx:b81b)

Nom   Type    Valeur
 @     A      XYZ.XYZ.XYZ.XYZ
 @    AAAA    2a01:exxx:xxxx:xxxx:b81b

Validation de l’accessibilité en IPv6

Depuis une autre machine, sur un réseau extérieur et pour lequel on a une adresse IPv6, on peut vérifier qu’un

ping -v6 mondomaine.fr

répond et renvoie bien l’adresse IPv6 de la machine Yunohost.

On peut aussi tester un traceroute, ou encore, depuis un navigateur, saisir dans la barre d’adresse (avec les crochets, contrairement à une IPv4)

http://[2a01:exxx:xxxx:xxxx:b81b]

et ça doit afficher la même page par défaut que si on va sur l’url http://mondomaine.fr1

Conclusion

Si ça marche, votre machine Yunohost est bien accessible en IPv6 de l’extérieur. Pratique quand on souhaite s’y connecter depuis un réseau sur lequel on n’a pas d’IPv4 (seulement de l’IPv6).

2a01:e34:ee6a:b270::/64 fe80::beae:c5ff:fe57:150c

root@yanspm:/home/yann# cat /etc/network/interfaces

This file describes the network interfaces available on your system

and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

The loopback network interface

auto lo iface lo inet loopback

The primary network interface

allow-hotplug eth0 iface eth0 inet dhcp

This is an autoconfigured IPv6 interface

iface eth0 inet6 static address 2a01:e34:ee6a:b270::1 netmask 64 post-up ip -6 route add default via fe80::beae:c5ff:fe57:150c dev eth0

MODIFICATION

root@yanspm:/home/yann# cat /etc/network/interfaces

This file describes the network interfaces available on your system

and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

The loopback network interface

auto lo iface lo inet loopback

The primary network interface

allow-hotplug eth0 iface eth0 inet dhcp

This is an autoconfigured IPv6 interface

iface eth0 inet6 static address 2a01:e34:ee6a:b270::1 netmask 64 post-up ip -6 route add default via fe80::224:d4ff:fea6:aa20 dev eth0

Il faut ensuite installer le paquet “radvd” et le configurer pour qu’il annonce le bon préfixe sur le réseau local. Dans le cas de notre exemple, cela donne les commandes suivantes (pensez a remplacer le préfixe par votre préfixe, celui que vous avez noté) : pi@raspberrypi ~ $ sudo apt-get install radvd

pi@raspberrypi ~ $ sudo cat «EOF >/etc/radvd.conf interface eth0 { AdvSendAdvert on; prefix 2a01:e34:ee6a:b270::/64 { }; };
EOF Une fois cela fait, il faut activer le routage des paquets IPv6 dans Linux. pi@raspberrypi ~ $ sudo echo “net.ipv6.conf.all.forwarding=1” » /etc/sysctl.conf

A partir de maintenant, si on redémarre la Raspberry Pi, elle va agir en tant que routeur IPv6, et l’IPv6 sera fonctionnel sur le réseau LAN, tout comme si on avait tout simplement activé IPv6 sur la Freebox.


Adresse IPV6 lien local : fe80::224:d4ff:fea6:aa20 Délégation de prefixe Attention si vous configurez un Next Hop pour le premier subnet, il ne sera plus annoncé par la Freebox sur votre réseau

Prefixe 	: 2a01:e34:ee6a:b270::/64
Next hop	: 	

Prefixe 	: 2a01:e34:ee6a:b271::/64
Next hop	: fe80::beae:c5ff:fe57:150c eth0	    shuttle

Prefixe 	: 2a01:e34:ee6a:b272::/64
Next hop	: 

Prefixe 	: 2a01:e34:ee6a:b273::/64
Next hop	: 

Prefixe 	: 2a01:e34:ee6a:b274::/64
Next hop	: 

Prefixe 	: 2a01:e34:ee6a:b275::/64
Next hop	: 

Prefixe 	: 2a01:e34:ee6a:b276::/64
Next hop	: 
 
Prefixe 	: 2a01:e34:ee6a:b277::/64
Next hop	: 

fe80::f:54ff:fe13:2400 wlan0 YanHotSpot
fe80::c2:9ff:fe40:f22b eth0 Olibox
fe80::a00:27ff:fecc:c8ba
fe80::20f:54ff:fe13:24b5

IPV6-free–cubiebox-olibox-shuttle

Paramétrage IPV6 free

Le lien https://utux.fr/index.php?tag/ipv6

La première chose à faire consiste à se rendre dans l’interface de configuration de la freebox grâce à l’adresse qui fonctionne même si vous êtes en bridge.

Puis rendez-vous dans : Paramètres de la Freebox, onglet Mode avancé, Configuration IPv6.

Adresse IPV6 lien local : fe80::224:d4ff:fea6:aa20 Délégation de prefixe Attention si vous configurez un Next Hop pour le premier subnet, il ne sera plus annoncé par la Freebox sur votre réseau

Prefixe 	: 2a01:e34:ee6a:b270::/64
Next hop	: 	

Prefixe 	: 2a01:e34:ee6a:b271::/64
Next hop	: fe80::beae:c5ff:fe57:150c eth0	    shuttle

Paraméter le réseau ipv6 sur “shuttle”

This is an autoconfigured IPv6 interface

iface eth0 inet6 static address 2a01:e34:ee6a:b271::1 netmask 64 post-up ip -6 route add default via fe80::beae:c5ff:fe57:150c dev eth0




---

## IPv6 sécurisé sur Freebox Révolution avec une Raspberry Pi

[IPv6 sécurisé sur Freebox Révolution avec une Raspberry Pi](https://www.goudal.net/?p=6)  
Posted on October 3, 2015	

IPv6 est le protocole du futur Internet. Il existe depuis longtemps, mais la transition massive n’a toujours pas eu lieu, malgré la pénurie d’adresses IPv4.

Free a été le premier FAI grand public à proposer l’IPv6 via leur offre Freebox.

N’importe quel abonné Freebox peut aujourd’hui activer l’IPv6. La Freebox va alors établir un tunnel 6to4rd pour fournir une connectivité IPv6 sur son LAN, et va se mettre a envoyer des paquets **Router Advertisement** pour annoncer le préfixe (un /64) qui a été alloué aux machines sur le LAN qui savent faire de l’IPv6.

Dès lors, toute machine connectée au LAN de la Freebox et sachant parler l’IPv6 va pouvoir s’auto-assigner une IPv6 “publique” (ayant un scope global) et parler en IPv6 avec le reste du monde.

**Problème** : Puisque chaque machine obtient une adresse IPv6 ayant un scope global, n’importe quel autre machine sur l’Internet IPv6 peut communiquer avec tous les devices connectés sur le LAN. La Freebox ne propose strictement aucun moyen de filtrer le traffic IPv6. Il faudrait donc mettre en place un filtrage sur chaque device, sans exception. Sauf qu’installer un firewall sur une machine Windows, Mac ou Linux, c’est facile, mais dans certains autres cas, c’est tout simplement impossible.

Par exemple, une imprimante réseau qui saurait faire de l’IPv6 serait alors potentiellement utilisable par n’importe qui, depuis l’autre bout du monde, et il n’y a aucun moyen d’empêcher cela.

Activer l’IPv6 sur sa Freebox est donc un pari risqué. Le nombre d’adresses disponibles fait qu’il est certes très peu probable qu’on arrive a trouver l’adresse IPv6 de votre imprimante. Mais le risque existe bel et bien, et l’imprimante n’est qu’un exemple pas trop “grave” du problème (au pire, on vous vide le bac de feuilles / la cartouche) car l’accès à d’autres devices pourrait être beaucoup plus compromettant (Camera IP, Serveur NAS, …).

Que faire, alors ?

Plusieurs solutions existent :

* Ne pas activer l’IPv6. Ca peut paraitre bête, mais pour l’instant, le commun des mortels n’a pas vraiment besoin d’IPv6. Donc a moins de savoir vraiment ce que l’on fait, mieux vaut ne pas l’activer tout simplement.
* Utiliser la Freebox comme modem (en mode Bridge) et avoir un routeur/bridge externe. On trouve plusieurs tutos sur Internet pour faire cela, mais cette solution a plusieurs inconvénients, car lorsque la Freebox est en mode Bridge, on perd un certain nombre de fonctionnalités, dont le Wifi, l’UPnP, la Seedbox, la TNT en multiposte, … .(cf: <http://www.free.fr/assistance/5082.html>)
* Conserver la Freebox en mode Routeur, et utiliser un deuxième routeur externe uniquement pour la gestion de l’IPv6. C’est cette solution que je vais décrire ici, et pour ce faire, je vais utiliser une Raspberry Pi, car c’est une solution qui ne coute pas cher, qui consomme peu et qui peut se brancher facilement à la Freebox. On peut cependant faire la meme chose avec n’importe quel device qui fait tourner Linux en adaptant un peu.

Depuis Freebox OS 2.0, la configuration IPv6 permet de configurer des “next hops” pour 8 prefixes /64 (Autrement dit, chaque abonné Freebox dispose d’un /61). De plus, lorsqu’un next hop est configuré sur le premier prefixe, la Freebox n’envoie plus de Router Advertisements sur le LAN.

L’objectif est donc de :

*    Mettre une Raspberry Pi sur le LAN, et activer IPv6
*    Router le premier préfixe vers la Raspberry Pi
*    Configurer une adresse de ce préfixe sur l’interface LAN de la Raspberry Pi
*    Faire en sorte que la Raspberry Pi envoie les Router Advertisements pour ce préfixe sur son interface LAN
*    Activer le routage des paquets IPv6
*    Mettre en place des règles IP6Tables pour filtrer le traffic IPv6

Tout d’abord, il faut donc brancher la Raspberry Pi au LAN de la Freebox. Elle va obtenir une IPv4 automatiquement, grâce au DHCP.

La Raspberry Pi n’a pas IPv6 actif par défaut. Il faut donc l’activer avec les commandes suivantes :

	pi@raspberrypi ~ $ sudo modprobe ipv6
	pi@raspberrypi ~ $ sudo echo ipv6 >> /etc/modules

Cela aura pour effet de rajouter une adresse IP de type Link-local a l’interface eth0. Cette adresse est automatiquement générée en se basant sur l’adresse MAC, elle sera donc toujours la même. Il faut la noter, on en aura besoin plus tard. Dans l’exemple ci dessous, il s’agit de fe80::ba27:ebff:fe36:cb4e

	pi@raspberrypi ~ $ sudo ifconfig eth0

eth0 Link encap:Ethernet HWaddr b8:27:eb:36:cb:4e
inet addr:192.168.42.34 Bcast:192.168.42.255 Mask:255.255.255.0 inet6 addr: fe80::ba27:ebff:fe36:cb4e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:82134 errors:0 dropped:3 overruns:0 frame:0 TX packets:83989 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:31899129 (30.4 MiB) TX bytes:34922782 (33.3 MiB)


* il faut activer IPv6 dans l’interface web de la Freebox, et configurer le Next Hop du premier préfixe avec l’adresse IP Link-local de la Raspberry Pi que l’on a notée plus haut. 
* Il faut également noter l’adresse IPv6 lien local de la Freebox (ici fe80::f6ca:e5ff:fe57:1ceb) ainsi que le préfixe (ici 2001:db8:dead:beef::/64). Le préfixe utilisé ici à été modifié pour rédiger ce tutoriel, n’essayez pas d’y accéder, c’est une IP qui n’existe pas vraiment.

![Screen-Shot-2015-09-27-at-23](file://media/1880561980.png)


Il est possible que l’adresse IPv6 lien local ne s’affiche pas, juste après avoir activé l’IPv6. Il suffit de fermer et ouvrir la page de configuration a nouveau pour la voir s’afficher.

Il est bien important que ce soit le premier préfixe pour lequel on spécifie le next hop. Autrement, la Freebox va continuer d’envoyer des Router Advertisements sur le LAN, et le traffic IPv6 risque donc de passer directement par la Freebox, sans passer par la Raspberry Pi, et donc sans filtrage.

A partir de maintenant, on a donc un prefixe IPv6 public qui est routé de la Freebox vers la Raspberry Pi (a travers son IP Link-local sur le LAN).

Passons maintenant a la configuration IPv6 de la Raspberry Pi.

On va assigner la premiere adresse IPv6 du préfixe a l’interface eth0, et rajouter une route par défaut vers l’adresse IPv6 Link-local de la Freebox. Dans le cas de notre exemple, il faut donc executer la commande suivante. Pensez donc a remplacer les deux adresses IPv6 par celles notées à l’étape prédédente (pour construire l’adresse IPv6 de l’interface, il faut simplement retirer le “/64″ a la fin du préfixe, et le remplacer par “1”) :

sudo cat «EOF »/etc/network/interfaces iface eth0 inet6 static address 2001:db8:dead:beef::1 netmask 64 post-up ip -6 route add default via fe80::f6ca:e5ff:fe57:1ceb dev eth0 EOF


Il faut ensuite installer le paquet “radvd” et le configurer pour qu’il annonce le bon préfixe sur le réseau local. Dans le cas de notre exemple, cela donne les commandes suivantes (pensez a remplacer le préfixe par votre préfixe, celui que vous avez noté) :

	pi@raspberrypi ~ $ sudo apt-get install radvd

sudo cat «EOF >/etc/radvd.conf interface eth0 { AdvSendAdvert on; prefix 2001:db8:dead:beef::/64 { }; };
EOF


Une fois cela fait, il faut activer le routage des paquets IPv6 dans Linux.

	pi@raspberrypi ~ $ sudo echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf

A partir de maintenant, si on redémarre la Raspberry Pi, elle va agir en tant que routeur IPv6, et l’IPv6 sera fonctionnel sur le réseau LAN, tout comme si on avait tout simplement activé IPv6 sur la Freebox. Mais le problème que l’on souhaitait résoudre a la base sera présent, puisqu’aucun filtrage n’est en place. Donc toutes les machines sur le LAN qui savent faire de l’IPv6 seront directement joignables depuis le reste de l’Internet IPv6.

Il nous reste donc a mettre en place un filtrage basique. L’idée est de retomber dans le même genre de protection que celle fournie implicitement en IPv4 par le NAT. A savoir, les machines vers le LAN peuvent accéder a toute machine vers l’Internet, mais l’inverse n’est pas possible. Pour cela, on crée un fichier de configuration pour ip6tables (le firewall IPv6 de Linux) :

sudo cat «EOF >/etc/ip6tables.conf *filter :INPUT ACCEPT [14:960] :FORWARD DROP [34:3344] :OUTPUT ACCEPT [63:15248] -A FORWARD -s 2001:db8:dead:beef::/64 -j ACCEPT -A FORWARD -m state –state RELATED,ESTABLISHED -j ACCEPT COMMIT EOF

 
Encore une fois, n’oubliez pas d’adapter la commande a votre préfixe. Ce que l’on fait ici c’est qu’on va refuser de router les paquets qui viennent de l’internet vers notre LAN, sauf si on est capable de les associer a une session qui a été initiée depuis notre LAN vers l’Internet.

Reste maintenant a faire en sorte que ces règles soient mises en place au démarrage :

pi@raspberrypi ~ $ sudo cat «EOF »/etc/network/interfaces post-up ip6tables-restore < /etc/ip6tables.conf EOF

 

Puis a rebooter la Raspberry Pi afin d’appliquer tous ces nouveaux paramètres.

	pi@raspberrypi ~ $ sudo reboot

Voila, c’est terminé !

Si tout se passe bien, vos machines sur le LAN devraient maintenant recevoir un router advertisement IPv6 de la Raspberry Pi, et donc s’auto-assigner une adresse IPv6 globale, et router leur traffic IPv6 vers la Raspberry Pi, qui va le faire suivre a la Freebox.

Vous pouvez verifier que tout fonctionne en allant visiter le site http://test-ipv6.com/ qui devrait normalement vous retourner un score de 10/10.

 
This entry was posted in Freebox, IPv6, Linux, Networking, Raspberry Pi by Fanfwe. Bookmark the permalink. 

## OpenVpn carte Olimex + MultiWebApp

Installation

	sudo apt install openvpn

Configuration **/etc/openvpn/vpntest.conf**

Bash pour activer le VPN

	sudo nano /usr/local/bin/startvpn

#!/bin/bash

Lancement openvpn

if [ $(systemctl is-active openvpn@vpntest >/dev/null 2>&1 && echo true || echo false) = false ]; then echo “lancer openvpn et attendre 5 secondes …” sudo systemctl start openvpn@vpntest # attendre 5 secondes sleep 5 else echo “démarré” exit 0 fi

règles iptables

if [ ! -e “/tmp/iptablesvpn” ]; then echo “ajout des règles iptables” sudo iptables -w -t nat -A POSTROUTING -o tun0 -j MASQUERADE -m comment –comment “Use VPN IP for tun0”
#sudo iptables -w -A FORWARD -s 10.118.111.0/24 -i wlan0 -o tun0 -m conntrack –ctstate NEW -j ACCEPT -m comment –comment “Allow only traffic from wlan0 clients to tun0” #sudo iptables -w -A FORWARD -s 192.168.0.0/24 -i eth0 -o tun0 -m conntrack –ctstate NEW -j ACCEPT -m comment –comment “Allow only traffic from eth0 clients to tun0”
# on a ajouté les règles iptables touch /tmp/iptablesvpn else echo “règles iptables existantes” fi


Droits en exécution

	sudo chmod +x /usr/local/bin/startvpn

Démarrage

	startvpn

Vérification

debian@olibox:~$ ip link |grep tun 6: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 100

debian@olibox:~$ ip route 0.0.0.0/1 via 10.8.0.1 dev tun0 default via 192.168.0.254 dev eth0 10.0.242.0/24 dev wlan0 proto kernel scope link src 10.0.242.1 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2 10.118.111.0/24 dev hotspot2 proto kernel scope link src 10.118.111.1 10.231.51.0/24 dev hotspot1 proto kernel scope link src 10.231.51.1 37.235.49.24 via 192.168.0.254 dev eth0 128.0.0.0/1 via 10.8.0.1 dev tun0 192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.43

règles

$ sudo iptables -L -t nat

MASQUERADE all – anywhere anywhere /* Use VPN IP for tun0 */


#### Multi custom webapp (multi_webapp)

**multi_webapp** : <https://github.com/YunoHost-Apps/multi_webapp_ynh>

App vide sans accès FTP  
Dossier : /me   
Publique : non  

Modification configuration **/etc/php5/fpm/pool.d/webapp_me.conf** pour autoriser le *php exec*

[webapp_me]

listen = /var/run/php5-fpm-webapp_me.sock

listen.owner = www-data listen.group = www-data listen.mode = 0600

user = admin group = admins

pm = dynamic pm.max_children = 6 pm.start_servers = 3 pm.min_spare_servers = 3 pm.max_spare_servers = 5 pm.max_requests = 500 pm.status_path = /fpm-status

ping.path = /ping

request_terminate_timeout = 600s

request_slowlog_timeout = 0

slowlog = /var/log/nginx/webapp_me.slow.log

rlimit_files = 4096

rlimit_core = 0

chdir = /var/www/webapp_yan/me

catch_workers_output = no

php_value[max_execution_time] = 600 php_value[upload_max_filesize] = 10G php_value[post_max_size] = 10G


Relancer php5-fpm

    sudo systemctl restart php5-fpm

Le fichier de configuration nginx

    /etc/nginx/conf.d/yan.me.d/webapp_me.conf

location /me { alias /var/www/webapp_yan/me/ ; if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } index index.html index.php ; try_files $uri $uri/ index.php; location ~ [^/].php(/|$) { fastcgi_split_path_info ^(.+?.php)(/.*)$; fastcgi_pass unix:/var/run/php5-fpm-webapp_me.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param REMOTE_USER $remote_user; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $request_filename; }

# Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; }


On implémente le micro framework php limonade  

Structure du dossier 

	tree -L 4 /var/www/webapp_yan/me/

/var/www/webapp_yan/me/ ├── config.php ├── entries ├── index.php ├── lib │ ├── limonade │ ├── limonade.php │ ├── vendors │ │ └── markdown │ │ ├── markdown.php │ │ └── PHP Markdown Readme.text │ └── vendors.php ├── pages ├── public │ ├── bootstrap │ │ ├── css │ │ │ ├── bootstrap.css │ │ │ ├── bootstrap.css.map │ │ │ ├── bootstrap.min.css │ │ │ ├── bootstrap-theme.css │ │ │ ├── bootstrap-theme.css.map │ │ │ └── bootstrap-theme.min.css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ └── glyphicons-halflings-regular.woff │ │ └── js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ └── npm.js │ ├── css │ │ ├── bootstrap-toggle.min.css │ │ ├── screen.css │ │ └── style.css │ ├── img │ │ ├── A20-Olinuxino-MICRO.png │ │ ├── bg_header_wikir.jpg │ │ ├── github.png │ │ ├── loading.gif │ │ └── nice.ogg │ ├── jquery │ │ └── jquery-2.1.1.min.js │ └── js │ ├── bootstrap-toggle.min.js │ └── custom.js └── views ├── about.html.php ├── entry.html.php ├── index.html.php ├── layout.html.php └── posts.html.php ```

Accès web https://yan.me/me/