Point d’accès Wifi (hotspot)

Debian Stretch

Sur une installation debian stretch , il est impossible de définir plusieurs points d'accès avec hostapd ,car les interfaces réseau ont un nom complexe au lieu des traditionnels eth0 et wlan0
Si on regarde l’intialisation (sudo dmesg | grep -i eth) ,les interfaces sont renommées avec la nouvelle convention ([ 1.514587] e1000 0000:00:03.0 ens33: renamed from eth0)
La solution est de ne pas faire le renommage des interfaces, éditer le fichier grub
sudo nano /etc/default/grub
La ligne GRUB_CMDLINE_LINUX=”“
Devient
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
Regénérer le fichier de configuration grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
Redémarrer la machine

Pilotes et outils

Modification fichier /etc/apt/sources.list pour installer les “firmwares” Ralink et/ou Realtek
nano /etc/apt/sources.list
Ajouter “ contrib non-free” après stretch main des 2 lignes concernées
Màj
apt update && apt upgrade
Installation des pilotes Realtek et Ralink apt -y install firmware-realtek firmware-misc-nonfree
Installer les outils wifi apt install wireless-tools iw wpasupplicant

Interface WiFi

Interface USB
lsusb
Bus 005 Device 005: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
Compatibilité Access Point
iw list |grep -i AP

* AP
* AP/VLAN
Capabilities: 0x17e
* start_ap
* set_noack_map
* set_qos_map
* AP: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* AP/VLAN: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* AP: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* AP/VLAN: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* AP/VLAN
* #{ AP, mesh point } <= 8,
HT Capability overrides:
Device supports AP scan.
Driver supports full state transitions for AP/GO clients

Interface systéme
ip link

3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:0f:00:39:88:84 brd ff:ff:ff:ff:ff:ff

HostApd

Installer hostapd et les outils wifi
sudo apt install hostapd
Configurer HostApd , éditer ou créer le fichier hostapd.conf
sudo nano /etc/hostapd/hostapd.conf

interface=wlan0
driver=nl80211
ssid=YanHotSpot
hw_mode=g
channel=5
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=passphrase_YanHotSpot
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Modifier le fichier /etc/default/hostapd
sudo nano /etc/default/hostapd

DAEMON_CONF="/etc/hostapd/hostapd.conf"

DHCP DnsMasq

Installer dnsmasq
sudo apt install dnsmasq
Sauuver configuration par défaut
mv /etc/dnsmasq.conf /etc/dnsmasq.conf.sav Configuration /etc/dnsmasq.conf
sudo nano /etc/dnsmasq.conf

no-resolv
interface=wlan0
dhcp-range=10.10.11.3,10.10.11.20,12h
server=208.67.222.222 # OpenDNS
server=208.67.222.220

Configurer interface wifi

Configurer l’interface’ wlan0 pour être statique
sudo nano /etc/network/interfaces
Supprimer tout ce qui fait référence aux anciens paramètres de configuration de wlan0, nous allons les changer
Ajouter en fin de fichier

allow-hotplug wlan0  
iface wlan0 inet static  
    address 10.10.11.1
    netmask 255.255.255.0

Activer et définir une adresse statique wifi dans une autre plage privée d’adresse 10.10.11
sudo ip link set dev wlan0 up

Pour corriger l’erreur RTNETLINK answers: Operation not possible due to RF-kill

	sudo -s
	apt install rfkill
	rfkill unblock all
	ip link set dev wlan0 up

On définit l’IP de wlan0 manuellement pour éviter de relancer le service
sudo ip addr add 10.10.11.1/24 dev wlan0

Configuration NAT

NAT (Network Address Translation) est une technique qui permet à plusieurs périphériques d’utiliser une seule connexion à Internet.
Linux prend en charge NAT en utilisant Netfilter (également connu sous le nom iptables)
Passage en su
sudo -s
Tout d’abord, activez le redirection IP dans le noyau:
sysctl net.ipv4.ip_forward=1
Pour le configurer automatiquement au démarrage, modifiez le fichier /etc/sysctl.conf
nano /etc/sysctl.conf
et décommenter la ligne suivante:

net.ipv4.ip_forward=1   # enable packet forwarding for IPv4

Dans la chaîne POSTROUTING, (après routage) on ne peut modifier que l’adresse source. L’adresse de destination est conservée. On fait donc du SNAT. On dit qu’on fait du “NAT source”.(masquerade : les adresses privées, utilisent toutes la même adresse publique)

Activer MASQUERADE sur l’interface qui partage internet Internet (eth0)

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE -m comment --comment "Activer MASQUERADE sur interface eth0 qui partage Internet"
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT -m comment --comment "Accepter les connexions etablies"
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT -m comment --comment "Accepter les nouvelles connexions venant interface wlan0"

Charger les règles iptables au démarrage
apt install iptables-persistent
Faut-il enregistrer les règles IPv4 actuelles ? OUI
Faut-il enregistrer les règles IPv6 actuelles ? NON
Les tables sont enregistrés sous /etc/iptables/ , rules.v4 pour IPv4 et rules.v6 pour IPv6
Sauvegarde/Restauration manuelle des régles iptables
iptables-save > /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4

Relancer hostapd
sudo systemctl restart hostapd Relancer dnsmasq
sudo systemctl restart dnsmasq

Accès internet via SSID “YanHotSpot” et mot de passe

Point d’accès wifi multiple

Configuration des interfaces

Vérifier si l’interface wifi accepte le multi accès
iw list

...
valid interface combinations:
* #{ AP, mesh point } <= 8,
total <= 8, #channels <= 1, STA/AP BI must match
...

Sur cette interface , 8 points d’accès sont possibles ,ils utiliseront le MEME CANAL RADIO
Interface wifi
ip link

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:0f:00:39:88:84 brd ff:ff:ff:ff:ff:ff

Pour pouvoir créer plusieurs réseaux WiFi, hostapd a besoin que l’adresse MAC de votre carte réseau WiFi soit corrigée comme suit :

  • Le premier nombre va prendre la valeur 02, qui est attribuée aux interfaces dont l’adresse MAC est gérée manuellement.
  • Le dernier chiffre doit valoir zéro. Hostapd créera ensuite des interfaces virtuelles qui auront une adresse MAC incrémentée.

Adresse MAC 00:0f:00:39:88:84 sera modifiée en 02:0f:00:39:88:80

On ne peut modifier l’adresse MAC que d’une interface éteinte, à titre d’information ,ci-dessous ,la séquence à exécuter :

ip link set dev wlan0 down
ip link set dev wlan0 address 02:0f:00:39:88:80
ip link set dev wlan0 up

Ne pas exécuter la séquence ci-dessus, le changement d’adresse mac se fera avant la validation de l’interface (pre-up)
hostapd ajoute un underscore et un incrément (_0,_1,etc) aux noms de ses interfaces virtuelles, créer leurs configurations sur le modèle actuel avec persistance sur le changement d’adresse MAC
Modification des interfaces wifi

# interface wifi
allow-hotplug wlan0  
iface wlan0 inet static  
    address 10.10.11.1
    netmask 255.255.255.0
    pre-up ip link set dev wlan0 address 02:0f:00:39:88:80

# interface wifi wirtuelle
allow-hotplug wlan0_0  
iface wlan0_0 inet static  
    address 10.10.12.1
    netmask 255.255.255.0

HostApd

Sauvegarde avant de modifier la configuration hostapd
sudo cp /etc/hostapd/hostapd.conf /etc/hostapd/hostapd.bak
Associer l’adresse MAC de base modifiée
sudo nano /etc/hostapd/hostapd.conf

interface=wlan0
driver=nl80211
ssid=YanOpenVPN
hw_mode=g
channel=8
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
bssid=02:0f:00:39:88:80
wpa=2
wpa_passphrase=pass_YanOpenVPN
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Ajout des nouveaux réseaux à la fin du fichier

bss=wlan0_0
ssid=YanHotSpot
wpa=2
wpa_passphrase=pass_YanHotSpot
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Les réseaux secondaires héritent de la configuration du réseau principal. Exception faite naturellement du SSID et des paramètres qui lui sont liés, comme l’authentification.
Dans chaque réseau secondaire, on peut surcharger à peu près tous les paramètres possible, tant qu’ils ne sont pas liés au matériel. Par exemple, il n’est pas possible de changer de canal, tous les réseaux d’un point d’accès donné utilisent la même radio sur le plan physique.

Redémarrer le service pour prendre en compte les modifications
sudo service hostapd restart

DnsMasq

Sauvegarde avant de modifier la configuration dnsmasq
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.bak
placer chacun de nos sous-réseaux WiFi sur des branches IP différentes , idem avec les tranches DHCP

no-resolv
interface=wlan0
interface=wlan0_0
dhcp-range=wlan0,10.10.11.3,10.10.11.20,12h
dhcp-range=wlan0_0,10.10.12.3,10.10.12.20,12h
server=208.67.222.222 # OpenDNS
server=208.67.222.220

redémarrer le service
sudo systemctl restart dnsmasq

OpenVPN

Installer openvpn
sudo apt install openvpn
Choix du serveur “secure protonVPN”

se-fr ProtonVpnSecure ch-uk ProtonVpnSecure is-nl ProtonVpnSecure
remote 185.159.156.15 1194 remote 185.159.157.12 1194 remote 185.159.158.105 1194
remote 185.159.156.16 1194 remote 185.159.157.15 1194 remote 185.159.158.55 1194

Créer le fichier de configuration Secure ProtonVPN
sudo nano /etc/openvpn/protonvpn-secure.conf

# ==============================================================================
# Copyright (c) 2016-2017 ProtonVPN A.G. (Switzerland)
# Email: contact@protonvpn.com
#
# The MIT License (MIT)
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR # OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
# ==============================================================================

client
dev tun
proto udp

remote 185.159.157.12 1194  # ch-uk
remote 185.159.157.15 1194  # ch-uk
server-poll-timeout 20

remote-random
resolv-retry infinite
nobind
cipher AES-256-CBC
auth SHA512
comp-lzo
verb 3

tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun

ping 15
ping-restart 0
ping-timer-rem
reneg-sec 0

remote-cert-tls server
auth-user-pass
pull
fast-io

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

<ca>
-----BEGIN CERTIFICATE-----
MIIFozCCA4ugAwIBAgIBATANBgkqhkiG9w0BAQ0FADBAMQswCQYDVQQGEwJDSDEV
MBMGA1UEChMMUHJvdG9uVlBOIEFHMRowGAYDVQQDExFQcm90b25WUE4gUm9vdCBD
QTAeFw0xNzAyMTUxNDM4MDBaFw0yNzAyMTUxNDM4MDBaMEAxCzAJBgNVBAYTAkNI
MRUwEwYDVQQKEwxQcm90b25WUE4gQUcxGjAYBgNVBAMTEVByb3RvblZQTiBSb290
IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt+BsSsZg7+AuqTq7
vDbPzfygtl9f8fLJqO4amsyOXlI7pquL5IsEZhpWyJIIvYybqS4s1/T7BbvHPLVE
wlrq8A5DBIXcfuXrBbKoYkmpICGc2u1KYVGOZ9A+PH9z4Tr6OXFfXRnsbZToie8t
2Xjv/dZDdUDAqeW89I/mXg3k5x08m2nfGCQDm4gCanN1r5MT7ge56z0MkY3FFGCO
qRwspIEUzu1ZqGSTkG1eQiOYIrdOF5cc7n2APyvBIcfvp/W3cpTOEmEBJ7/14RnX
nHo0fcx61Inx/6ZxzKkW8BMdGGQF3tF6u2M0FjVN0lLH9S0ul1TgoOS56yEJ34hr
JSRTqHuar3t/xdCbKFZjyXFZFNsXVvgJu34CNLrHHTGJj9jiUfFnxWQYMo9UNUd4
a3PPG1HnbG7LAjlvj5JlJ5aqO5gshdnqb9uIQeR2CdzcCJgklwRGCyDT1pm7eoiv
WV19YBd81vKulLzgPavu3kRRe83yl29It2hwQ9FMs5w6ZV/X6ciTKo3etkX9nBD9
ZzJPsGQsBUy7CzO1jK4W01+u3ItmQS+1s4xtcFxdFY8o/q1zoqBlxpe5MQIWN6Qa
lryiET74gMHE/S5WrPlsq/gehxsdgc6GDUXG4dk8vn6OUMa6wb5wRO3VXGEc67IY
m4mDFTYiPvLaFOxtndlUWuCruKcCAwEAAaOBpzCBpDAMBgNVHRMEBTADAQH/MB0G
A1UdDgQWBBSDkIaYhLVZTwyLNTetNB2qV0gkVDBoBgNVHSMEYTBfgBSDkIaYhLVZ
TwyLNTetNB2qV0gkVKFEpEIwQDELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFByb3Rv
blZQTiBBRzEaMBgGA1UEAxMRUHJvdG9uVlBOIFJvb3QgQ0GCAQEwCwYDVR0PBAQD
AgEGMA0GCSqGSIb3DQEBDQUAA4ICAQCYr7LpvnfZXBCxVIVc2ea1fjxQ6vkTj0zM
htFs3qfeXpMRf+g1NAh4vv1UIwLsczilMt87SjpJ25pZPyS3O+/VlI9ceZMvtGXd
MGfXhTDp//zRoL1cbzSHee9tQlmEm1tKFxB0wfWd/inGRjZxpJCTQh8oc7CTziHZ
ufS+Jkfpc4Rasr31fl7mHhJahF1j/ka/OOWmFbiHBNjzmNWPQInJm+0ygFqij5qs
51OEvubR8yh5Mdq4TNuWhFuTxpqoJ87VKaSOx/Aefca44Etwcj4gHb7LThidw/ky
zysZiWjyrbfX/31RX7QanKiMk2RDtgZaWi/lMfsl5O+6E2lJ1vo4xv9pW8225B5X
eAeXHCfjV/vrrCFqeCprNF6a3Tn/LX6VNy3jbeC+167QagBOaoDA01XPOx7Odhsb
Gd7cJ5VkgyycZgLnT9zrChgwjx59JQosFEG1DsaAgHfpEl/N3YPJh68N7fwN41Cj
zsk39v6iZdfuet/sP7oiP5/gLmA/CIPNhdIYxaojbLjFPkftVjVPn49RqwqzJJPR
N8BOyb94yhQ7KO4F3IcLT/y/dsWitY0ZH4lCnAVV/v2YjWAWS3OWyC8BFx/Jmc3W
DK/yPwECUcPgHIeXiRjHnJt0Zcm23O2Q3RphpU+1SO3XixsXpOVOYP6rJIXW9bMZ
A1gTTlpi7A==
-----END CERTIFICATE-----
</ca>

key-direction 1
<tls-auth>
# 2048 bit OpenVPN static key
-----BEGIN OpenVPN Static key V1-----
6acef03f62675b4b1bbd03e53b187727
423cea742242106cb2916a8a4c829756
3d22c7e5cef430b1103c6f66eb1fc5b3
75a672f158e2e2e936c3faa48b035a6d
e17beaac23b5f03b10b868d53d03521d
8ba115059da777a60cbfd7b2c9c57472
78a15b8f6e68a3ef7fd583ec9f398c8b
d4735dab40cbd1e3c62a822e97489186
c30a0b48c7c38ea32ceb056d3fa5a710
e10ccc7a0ddb363b08c3d2777a3395e1
0c0b6080f56309192ab5aacd4b45f55d
a61fc77af39bd81a19218a79762c3386
2df55785075f37d8c71dc8a42097ee43
344739a0dd48d03025b0450cf1fb5e8c
aeb893d9a96d1f15519bb3c4dcb40ee3
16672ea16c012664f8a9f11255518deb
-----END OpenVPN Static key V1-----
</tls-auth>
auth-user-pass credentials

Créer le fichier contenant log ligne 1 et mot de passe ligne 2
sudo nano /etc/openvpn/credentials
On peut tester que tout fonctionne avec systemd : sudo systemctl start openvpn@protonvpn-secure
au terme de l’initialisation, si tout est ok
sudo systemctl status openvpn@protonvpn-secure
le message suivant est affiché
janv. 02 17:56:47 xs35v2 ovpn-protonvpn-secure[9448]: Initialization Sequence Completed
Vérification du tunnel VPN
ip addr

tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.8.97/24 brd 10.8.8.255 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::f129:5c9:4722:dcaf/64 scope link flags 800 
       valid_lft forever preferred_lft forever

si tun0 est bien dans la liste, paramétrer le démarrage automatique de la configuration vpn (boot startup)
sudo systemctl enable openvpn@protonvpn-secure

Supprimer les règles NAT
sudo iptables -F -t nat Ajouter la règle pour activer le nat sur tun0
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE -m comment --comment "Activer MASQUERADE sur tunnel vpn tun0 "
Le point d’accès YanOpenVPN (wlan0_0) accède à internet via un tunnel VPN , YanHotSpot (wlan0) n’a pas accès à internet
sudo iptables -A FORWARD -s 10.10.11.0/24 -i wlan0 -o tun0 -m conntrack --ctstate NEW -j REJECT -m comment --comment "VPN : Bloquer le trafic des clients wlan0 vers tun0"
sudo iptables -A FORWARD -s 10.10.12.0/24 -i wlan0_0 -o tun0 -m conntrack --ctstate NEW -j ACCEPT -m comment --comment "VPN : Autoriser uniquement le trafic des clients wlan0_0 vers tun0"
Sauvegarder les règles
sudo iptables-save > /etc/iptables/rules.v4

L’accès internet se fera à travers le tunnel tun0 VPN , uniquement sur le Wifi SSID “YanOpenVPN”