iznobe
Posts: 267
Joined: Sun Feb 05, 2017 4:14 pm
Location: Avignon , FRANCE

[TUTO] raspi en box locale sous stretch + repeteur wifi + smartphone modem

Thu Oct 31, 2019 8:15 am

Bonjour ,
depuis plusieurs mois je cherchais a faire de mon pi , un genre de " box locale " et a priori je ne suis pas le seul dans ce cas sur ce forum !

Je tiens a remercier toutes les personnes qui m ' ont aider dans mes multiples recherches pour leur patience sur ce forum , notamment @tqhien , pour la partie reseau en particulier .

Je partage donc dans ce tuto des bribes du forum ainsi que d' autres sources avec vous , afin de monter sa propre box locale de secours ( ou pas , comme pour moi qui est resolument definitive :P )

Evidemment pour que cela fonctionne il faut adapter les IP a votre reseau local , l ' exemple presente ici est adapte si vous avez une freebox ( ip du type en 192.168.0.X ) si vous avez une live box il suffit de placer des IP du type 192.168.1.X :roll:

Ce tuto est prevu pour etablir une connexion bidirectionnelle entre le wifi et l ' ethernet du pi , il permet avec un minimum d' adaptations d ' etablir en plus un repeteur wifi et donc tous les appareils connectés au pi ( par wifi ou RJ45 ) ont acces a internet et peuvent communiquer ensemble dans les 2 sens :D

Ce tuto n ' est pas de moi , je l ' ai juste traduit , le lien original est ici et j ' y ai aussi ajouté la possibilité du repeteur wifi pour ceux qui ont une box FAI chez eux .

La premiere partie de ce tuto peut etre realisée seule est est fonctionnelle , meme sans realiser la 2eme partie .

Dans la 2eme partie de ce tuto , il sera question d' ajouter a notre box une solution de connexion par données mobiles et smartphone pendant qu ' il se recharge :idea: qui offre donc la possiblité de remplacer un routeur 4G et d' offrir une solution viable de connexion pour ceux qui sont en zone blanche comme moi où la 4G est LA SOLUTION !

Elle ne peut pas etre realisée seule comme decrite ci dessous , si vous n' etes interressé QUE par la 2eme partie reporter au vous au lien d' origine que j' ai mis dans le 2eme post .


Voici donc ce que j ' ai trouvé , et qui fonctionne sur raspbian stretch afin d' entrer d ' entrer dans le vif du sujet :P :

Commencons deja par la maj des paquets installés :

Code: Select all

 sudo apt update  
si le retour annonce des paquets upgradable , continuez avec la commande suivante :

Code: Select all

sudo apt upgrade
Installer les paquets suivants des le depart car vous n ' aurez plus de connexion internet fonctionnelle apres :

Code: Select all

 sudo apt install dnsmasq hostapd bridge-utils 
arreter les services:

Code: Select all

 sudo systemctl stop dnsmasq hostapd 
Creer le pont ( bridge ) br0 :

Code: Select all

sudo brctl addbr br0
Ajouter l ' interface eth0 au pont br0 :

Code: Select all

 sudo brctl addif br0 eth0 
Creer le fichier /etc/hostapd/hostapd.conf qui gere le point d' acces sans fil :

Code: Select all

sudo nano /etc/hostapd/hostapd.conf 
placez-y ( à adapter pour repeteur wifi avec les infos de votre box principale ) :

Code: Select all

interface=wlan0
bridge=br0
#driver=nl80211
ssid=RPiNet # SSID de votre box pour repeteur
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2 # de votre box pour repeteur
wpa_passphrase=mypassphrase # passphrase de votre box pour repeteur 
wpa_key_mgmt=WPA-PSK # de votre box pour repeteur
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Editer le fichier /etc/default/hostapd :

Code: Select all

 sudo nano /etc/default/hostapd 
et ajouter la ligne :

Code: Select all

 DAEMON_CONF="/etc/hostapd/hostapd.conf" 
Editer /etc/network/interfaces :

Code: Select all

 sudo nano  /etc/network/interfaces 
et ajouter les lignes suivantes :

Code: Select all

iface eth0 inet manual
iface wlan0 inet manual

# Bridge setup
auto br0
iface br0 inet manual
        bridge_ports eth0 wlan0
Editer le fichier /etc/dhcpcd.conf :

Code: Select all

 sudo nano  /etc/dhcpcd.conf 
et ajouter ceci au-dessus des autres lignes interfaces si deja presentes dans le code :

Code: Select all

denyinterfaces eth0 wlan0
interface br0
	static ip_address=192.168.1.1/24 # a adapter en fonction du type d' adresse de votre reseau local


Redemarrer la framboise , pour vous y connecter en ssh il faudra utiliser pour cela l ' adresse que vous aurez mise dans le fichier /etc/dhcpcd.conf

Renommer et deplacer le fichier dnsmasq.conf original :

Code: Select all

 sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig 
Creer un nouveau fichier vide dnsmasq.conf :

Code: Select all

 sudo nano /etc/dnsmasq.conf 
y ajouter cela :

Code: Select all

interface=br0
except-interface=wlan0
dhcp-range=192.168.1.12,192.168.1.254,255.255.255.0,24h
server=9.9.9.9
domain-needed
bogus-priv
#############
## Logging ##
#############
# For debugging purposes, log each DNS query as it passes through dnsmasq.
log-queries

# Log lots of extra information about DHCP transactions.
log-dhcp

# Log facility
# Définit la "facility" dans laquelle Dnsmasq enverra ses entrées syslog,
# par défaut DAEMON ou LOCAL0 si le mode debug est activé.
# Si la "facility" contient au moins un caractère "/", alors
# Dnsmasq  considère qu'il s'agit d'un fichier et enverra les logs dans
# le fichier correspondant à la place du syslog.
# (Les erreurs lors de la lecture de la configuration vont toujours vers
# le syslog, mais tous les messages postérieures à un démarrage réussi
# seront exclusivement envoyés vers le fichier de logs).
# Lorsque Dnsmasq est configuré pour envoyer ses traces  vers  un
# fichier, la réception d'un signal SIGUSR2 entraine la fermeture et réouverture du fichier.
# Cela permet la rotation de fichiers de traces sans nécessiter l'arrêt de Dnsmasq.
log-facility=/var/log/dnsmasq.log
Demarrer les services :

Code: Select all

 sudo service hostapd dnsmasq start 
afin de verifier que le serveur DHCP et dnsmasq sont fonctionnels , on peut executer la commande suivante :

Code: Select all

systemctl status dnsmasq.service
devrait retourner :

Code: Select all

[email protected]:~ $ systemctl status dnsmasq.service
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
   Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-11-04 18:29:51 CET; 5s ago
  Process: 814 ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf (code=exited, status=0/SUCCESS)
  Process: 804 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=0/SUCCESS)
  Process: 802 ExecStartPre=/usr/sbin/dnsmasq --test (code=exited, status=0/SUCCESS)
 Main PID: 813 (dnsmasq)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/dnsmasq.service
           └─813 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -r /run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg

nov. 04 18:29:51 rasphomfi systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
nov. 04 18:29:51 rasphomfi dnsmasq[802]: dnsmasq: vérification de syntaxe OK.
nov. 04 18:29:51 rasphomfi dnsmasq[814]: Too few arguments.
nov. 04 18:29:51 rasphomfi systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.
en cas de soucis , si le service a demarré on pourra avoir plus d' info avec la commande :

Code: Select all

sudo cat /var/log/dnsmasq.log
qui affiche :

Code: Select all

[email protected]:~ $ sudo cat /var/log/dnsmasq.log
Nov  4 18:29:51 dnsmasq[813]: demarré, version 2.76 (taille de cache 150)
Nov  4 18:29:51 dnsmasq[813]: options à la compilation : IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify
Nov  4 18:29:51 dnsmasq-dhcp[813]: DHCP, plage d'adresses IP 192.168.1.12 -- 192.168.1.254, durée de bail 1d
Nov  4 18:29:51 dnsmasq[813]: utilise le serveur de nom 9.9.9.9#53
Nov  4 18:29:51 dnsmasq[813]: Lecture de /run/dnsmasq/resolv.conf
Nov  4 18:29:51 dnsmasq[813]: utilise le serveur de nom 9.9.9.9#53
Nov  4 18:29:51 dnsmasq[813]: utilise le serveur de nom 192.168.42.129#53
Nov  4 18:29:51 dnsmasq[813]: lecture /etc/hosts - 5 adresses
Nov  4 18:29:51 dnsmasq[813]: query[A] safebrowsing.googleapis.com from 192.168.1.2
Nov  4 18:29:51 dnsmasq[813]: forwarded safebrowsing.googleapis.com to 9.9.9.9
Nov  4 18:29:51 dnsmasq[813]: forwarded safebrowsing.googleapis.com to 192.168.42.129
Nov  4 18:29:51 dnsmasq[813]: query[AAAA] safebrowsing.googleapis.com from 192.168.1.2
Nov  4 18:29:51 dnsmasq[813]: forwarded safebrowsing.googleapis.com to 9.9.9.9
Nov  4 18:29:51 dnsmasq[813]: forwarded safebrowsing.googleapis.com to 192.168.42.129
etc ........
Si tout est bon , vous pouvez commentez ( ou pas ) les lignes de journaux de dnsmasq.conf :

Code: Select all

 sudo nano /etc/dnsmasq.conf 
puis remplacez tout par :

Code: Select all

interface=br0
except-interface=wlan0
dhcp-range=192.168.1.12,192.168.1.254,255.255.255.0,24h
server=9.9.9.9
domain-needed
bogus-priv

#############
## Logging ##
#############
# For debugging purposes, log each DNS query as it passes through dnsmasq.
#log-queries

# Log lots of extra information about DHCP transactions.
#log-dhcp

# Log facility
# Définit la "facility" dans laquelle Dnsmasq enverra ses entrées syslog,
# par défaut DAEMON ou LOCAL0 si le mode debug est activé.
# Si la "facility" contient au moins un caractère "/", alors
# Dnsmasq  considère qu'il s'agit d'un fichier et enverra les logs dans
# le fichier correspondant à la place du syslog.
# (Les erreurs lors de la lecture de la configuration vont toujours vers
# le syslog, mais tous les messages postérieures à un démarrage réussi
# seront exclusivement envoyés vers le fichier de logs).
# Lorsque Dnsmasq est configuré pour envoyer ses traces  vers  un
# fichier, la réception d'un signal SIGUSR2 entraine la fermeture et réouverture du fichier.
# Cela permet la rotation de fichiers de traces sans nécessiter l'arrêt de Dnsmasq.
#log-facility=/var/log/dnsmasq.log
On continue avec l ' ajout des nouvelles routes et le masquerade :

Editer le fichier /etc/sysctl.conf :

Code: Select all

 sudo nano /etc/sysctl.conf 
et decommenter la ligne suivante :

Code: Select all

 net.ipv4.ip_forward=1 
Ajouter masquerade pour autoriser le traffic sur l ' interface eth0:

Code: Select all

 sudo iptables -t nat -A  POSTROUTING -o eth0 -j MASQUERADE 
Sauvegarder les regles iptables :

Code: Select all

 sudo sh -c "iptables-save > /etc/iptables.ipv4.nat" 
Editer le fichier /etc/rc.local :

Code: Select all

 sudo nano  /etc/rc.local 
et ajouter ceci juste avant "exit 0" pour installer les regles nouvellement sauvegarder au demarrage :

Code: Select all

 sudo iptables-restore < /etc/iptables.ipv4.nat 
Assurez vous de deconnecter toutes les serveurs DHCP du reseau local puis redemarrer le pi .
deconnectez et reconnectez tous les ordi etc du reseau local .

Maintenant tous les " ordi " du reseau filaire et wifi en DHCP devrait obtenir une adresse locale du type 192.168.0.X dans lequel 20 < X < 50 .

Si vous voulez que votre framboise fasse option de " repeteur wifi " afin d' etendre le reseau wifi chez vous , il suffit de mettre le meme SSID et la meme Passphrase ainsi que le meme mode de protection que votre reseau wifi principal dans le fichier /etc/hostapd/hostapd.conf .

Attention cependant , vous ne pouvez pas laisser votre routeur principal ET le pi avec un serveur DHCP operer en meme temps , car source de conflit !
La solution est donc de desactiver le serveur DHCP de votre box .

Autre avantage , Si un jour votre box est HS , hors mis le net qui ne sera plus actif bien sur , vous ne verrez aucune différence en local ! ;)
Last edited by iznobe on Tue Nov 05, 2019 8:47 pm, edited 12 times in total.

iznobe
Posts: 267
Joined: Sun Feb 05, 2017 4:14 pm
Location: Avignon , FRANCE

Re: [TUTO] transformer sa framboise en box locale sous stretch + repeteur wifi + acces internet smartphone

Thu Oct 31, 2019 8:44 pm

[ TUTO ] suite !
Je me suis inspiré de cette page : https://blog.michael.franzl.name/2017/0 ... -internet/
pour aller encore plus loin , et pouvoir enfin faire marcher son Smartphone en Modem USB connecté au pi pendant qu ' il recharge :D

Cette 2eme partie de tuto est entierement dependante de la premiere partie ! seule ca ne fonctionnera pas .

Voici comment proceder :

installer dnsutils afin de tester le serveur DNS ( sert a acceder aux sites ) actif sur le pi :

Code: Select all

 sudo apt-get install dnsutils 
Connecter votre phone au port USB du pi , puis dans les parametres reseaux , activer le partage de connexion par USB ainsi que les données mobiles .
creer un fichier nommé /etc/systemd/network/mobile.network :

Code: Select all

 sudo nano /etc/systemd/network/mobile.network 
inserer le contenu suivant :

Code: Select all

[Match] 
Name=usb0 

[Network] 
DHCP=yes 
si vous voulez configurer l ' IP de votre smartphone en IP fixe , remplacez " DHCP=yes " par : Address=192.168.42.X/24
puis redemarrer le service avec la commande suivante :

Code: Select all

 sudo systemctl restart systemd-networkd 
afin de verifier que les parametres ont bien ete pris en compte par networkd , utilisez la commande suivante :

Code: Select all

 networkctl 
vous devriez obtenir une reponse de la sorte si vous avez suivi le tuto depuis le debut :

Code: Select all

[email protected]:~ $ networkctl
WARNING: systemd-networkd is not running, output will be incomplete.

IDX LINK             TYPE               OPERATIONAL SETUP
  1 lo               loopback           n/a         unmanaged
  2 eth0             ether              n/a         unmanaged
  3 wlan0            wlan               n/a         unmanaged
  4 br0              ether              routable         unmanaged
  5 usb0             ether              routable         configured

5 links listed.
[email protected]:~ $
un

Code: Select all

 route -n 
devrait sortir en reponse

Code: Select all

[email protected]:~ $ route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
0.0.0.0         192.168.42.129  0.0.0.0         UG    205    0        0 usb0
192.168.1.0     0.0.0.0         255.255.255.0   U     204    0        0 br0
192.168.42.0    0.0.0.0         255.255.255.0   U     205    0        0 usb0
[email protected]:~ $
si tout est bon , on peut verifier que le serveur DNS du smartphone fonctionne en faisant :

Code: Select all

dig google.com
la reponse est faite par le fournisseur du service data du mobile , on en deduit donc que systemd a bien configure l ' adresse ip du tel comme serveur DNS du pi .

On peut aussi verifier le fonctionnement dur serveur DNS de la framboise avec :

Code: Select all

 dig @localhost google.com 
cette fois , la reponse est fourni par le serveur local du pi qui transite par le tel ( c ' est le fonctionnement normal ) .



on va maintenant autorisé le traffic de usb0 ( le smartphone ) a travers le pont avec les 3 commandes suivantes :

Code: Select all

sudo iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i br0 -o usb0 -j ACCEPT
verfier avec :

Code: Select all

 sudo iptables -L -n -v 
le resultat devrait etre du genre :

Code: Select all

[email protected]:~ $ sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 3019 packets, 657K bytes)
 pkts bytes target     prot opt in     out     source               destination 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 
 4201 1479K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
   89  6700 ACCEPT     all  --  br0    usb0    0.0.0.0/0            0.0.0.0/0   

Chain OUTPUT (policy ACCEPT 570 packets, 62405 bytes)
 pkts bytes target     prot opt in     out     source               destination 
maintenant , on sauvegarde le tout avec :

Code: Select all

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
maintenant , il faut ajouter le systemd.networkd au demarrage du pi , pour cela faites :

Code: Select all

sudo systemctl enable systemd-networkd
puis :

Code: Select all

sudo systemctl start systemd-networkd
un dernier reboot pour la route (-n) ;)

et voilou , il ne reste plus qu ' a tester !! :D

Return to “Français”