Skip to content

Réseau invité `guest`

Vincent Fortier edited this page Nov 17, 2019 · 3 revisions

L'objectif de la procédure est de créer un nouveau réseau pour nos visiteurs nommé guest via un VLAN afin d'offrir l'internet à nos visiteurs à la maison tout en limitant les risques de sécurité, virus, partage involontaire de données et surtout avec une limitation de bande passante (pratique avec les amis de nos enfants!). Les grandes lignes sont:

  • Création d’un nouveau VLAN pour un réseau guest (visiteurs) ayant accès à l’internet mais à aucun autre périphérique du réseau interne.
  • Création d'un nouveau réseau WIFI offert en 2.4Ghz et 5Ghz à partir du point d'accès (AP)
  • Empêcher les périphériques WIFI de se voir mutuellement (option isolate=1)
  • Limitation de la bande passante via sqm et bandwidthd pour ce VLAN en débit et quantité

Personnellement je trouve plus aisé d'utiliser une plage IP complètement différente pour chacun de mes sous réseaux. Il est alors facile de confirmer le réseau sous-jascent des périphériques lorsque l'on en valide la connexion. J'utilise donc:

  • 192.168.80.0/24 pour mon réseau local LAN
  • 10.10.80.0/24 pour mon réseau invité guest

Références:

Configuration ROUTEUR

Détails:

  • Le routeur principal utilise l'adresse statique 10.10.80.1 Dans mon cas j'utilise le modèle TP-Link WDR4300 à titre de routeur principal et il ne possède qu'un seul interface: eth0
  • CPU (eth0): est réservé à la fois pour le port identifié WAN ainsi que LAN1, LAN2, LAN3, LAN4
  • Le réseau invité guest sera établi sur l'interface eth0 et le VLAN ID 3 : eth0.3
  • Le réseau invité guest sera aussi rendu disponible sur le Port 2 (LAN1) qui reliera le routeur principal à notre point d'accès (AP)
Port 0 Port 1 Port 2 Port 3 Port 4 Port 5
Réseau VLAN ID @switch_vlan[*] CPU WAN LAN1 LAN2 LAN3 LAN4
LAN 1 0 tagged off untagged untagged untagged untagged
WAN 2 1 tagged tagged off off off off
WAN6 2 1 tagged tagged off off off off
guest 3 2 (nouveau) tagged off tagged off off off
TRUNK

État actuel des ports associés au LAN - VLAN ID 1 (@switch_vlan[0]):

root@th0ma7-router:~# uci show network.@switch_vlan[0]
network.cfg071ec7=switch_vlan
network.cfg071ec7.device='switch0'
network.cfg071ec7.vlan='1'
network.cfg071ec7.ports='2 3 4 5 0t'

État actuel ports associés aux réseaux WAN et WAN6 - VLAN ID 2 (@switch_vlan[1]):

root@th0ma7-router:~# uci show network.@switch_vlan[1]
network.cfg081ec7=switch_vlan
network.cfg081ec7.device='switch0'
network.cfg081ec7.vlan='2'
network.cfg081ec7.ports='1 0t'

Création du réseau guest

Créer les interfaces:

uci delete network.guest
uci set network.guest=interface
uci set network.guest.proto=static
uci set network.guest.ifname='eth0.3'
uci set network.guest.type='bridge'
uci set network.guest.ipaddr=10.10.80.1
uci set network.guest.netmask=255.255.255.0
uci set network.guest.broadcast='10.10.80.255'
uci set network.guest.ip6assign='64'
uci changes network.guest
uci commit

Créer le nouveau VLAN et l'assigner à aucun port physique pour le moment (mis à part le port 0 représentant le CPU logique et non pas un port physique à proprement parler)

uci add network switch_vlan
uci set network.@switch_vlan[-1].device='switch0'
uci set network.@switch_vlan[-1].vlan='3'
uci set network.@switch_vlan[-1].ports='2t 0t'
uci show network.@switch_vlan[-1]
uci changes network
uci commit

Redémarrer le service réseau:

root@openwrt:~# /etc/init.d/network restart

État final des interfaces:

root@openwrt~# brctl show
bridge name	bridge id		STP enabled	interfaces
br-lan		7fff.647002e29b98	no		eth0.1
br-guest	7fff.647002e29b98	no		eth0.3

État final de l'adressage de l'interface br-guest

root@poenwrt:~# ip add show br-guest
19: br-guest: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 64:70:02:e2:9b:98 brd ff:ff:ff:ff:ff:ff
    inet 10.10.80.1/24 brd 10.10.80.255 scope global br-guest
       valid_lft forever preferred_lft forever
    inet6 fd44:70b7:27d7:10::1/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::6670:2ff:fee2:9b98/64 scope link 
       valid_lft forever preferred_lft forever

Service DHCP

On y configure un service de DHCP:

  • Début de la plage DHCP à 20, fin à 29, 10 adresses max (limit='10')
  • Durée limitée du bail à 1h
  • OPTIONNEL: Force l'adresse du routeur à titre de DNS principal (dhcp_option='3,10.10.80.1')
  • OPTIONNEL: Ajout des DNS google à titre de DNS secondaires et tertiaires (dhcp_option='3,10.10.80.1 6,10.10.80.1,8.8.8.8,8.8.4.4')
uci delete dhcp.guest
uci set dhcp.guest=dhcp
uci set dhcp.guest.interface=guest
uci set dhcp.guest.start=20
uci set dhcp.guest.limit=10
uci set dhcp.guest.leasetime=1h
uci set dhcp.guest.dhcpv6='server'
uci set dhcp.guest.ra='server'
uci changes dhcp.guest
uci commit

OPTIONNEL: Forcer la passerelle et faire pointer la résolution DNS des clients vers google (ou autre):

uci set dhcp.guest.dhcp_option='3,10.10.80.1'
uci add_list dhcp.guest.dhcp_option='6,10.10.80.1,8.8.8.8,8.8.4.4'
uci changes dhcp.guest
uci commit

Redémarrer le service DHCP:

root@openwrt:~# /etc/init.d/dnsmasq restart

Configuration du pare-feu

Créer une zone guest:

uci add firewall zone
uci set firewall.@zone[-1].name=guest
uci set firewall.@zone[-1].network=guest
uci set firewall.@zone[-1].input=REJECT
uci set firewall.@zone[-1].forward=REJECT
uci set firewall.@zone[-1].output=ACCEPT

Autoriser l’accès à l’internet:

uci add firewall forwarding
uci set firewall.@forwarding[-1].src='guest'
uci set firewall.@forwarding[-1].dest='wan'

Autoriser les requêtes DNS:

uci add firewall rule
uci set firewall.@rule[-1].name='Allow DNS Queries From GUEST'
uci set firewall.@rule[-1].src=guest
uci set firewall.@rule[-1].dest_port=53
uci set firewall.@rule[-1].proto=udp
uci set firewall.@rule[-1].target=ACCEPT

Autoriser les requêtes DHCP afin d'obtenir une adresse IP sur le réseau guest:

uci add firewall rule
uci set firewall.@rule[-1].name='Allow DHCP Requests From GUEST'
uci set firewall.@rule[-1].src=guest
uci set firewall.@rule[-1].src_port=68
uci set firewall.@rule[-1].dest_port=67
uci set firewall.@rule[-1].proto=udp
uci set firewall.@rule[-1].target=ACCEPT

Permettre au réseau LAN d'accéder au réseau guest (mais par l'inverse!):

uci add firewall forwarding
uci set firewall.@forwarding[-1].src='lan'
uci set firewall.@forwarding[-1].dest='guest'

Appliquer les changements:

root@openwrt:~# uci changes firewall
root@openwrt:~# uci commit firewall
root@openwrt:~# /etc/init.d/firewall restart

Limitation de la bande passante avec sqm

Références:

Installer Smart Queue Management:

root@openwrt:~# opkg update
root@openwrt:~# opkg install luci-app-sqm

Retirer la configuration par défaut:

uci del sqm.eth1

Allouer 15 mbit en amont (sqm.upload), 2.5 mbit en aval (sqm.download):

uci add sqm queue
uci set sqm.@queue[-1].qdisc_advanced='0'
uci set sqm.@queue[-1].linklayer='none'
uci set sqm.@queue[-1].enabled='1'
uci set sqm.@queue[-1].interface='br-guest'
uci set sqm.@queue[-1].qdisc='fq_codel'
uci set sqm.@queue[-1].script='simplest_tbf.qos'
uci set sqm.@queue[-1].upload='15000'
uci set sqm.@queue[-1].download='2500'

Appliquer les changements

uci changes sqm
uci commit

Activer et redémarrer le service SQM:

root@openwrt:~# /etc/init.d/sqm enable
root@openwrt:~# /etc/init.d/sqm restart
SQM: Starting SQM script: simplest_tbf.qos on br-guest, in: 2500 Kbps, out: 15000 Kbps
SQM: Using generic sqm_start_default function.
SQM: get_burst (by duration): the calculated burst/quantum size of 312 bytes was below the minimum of 1749 bytes.
SQM: simplest_tbf.qos was started on br-guest successfully

Point d'accès (AP)

Dans mon cas j'utilise le modèle TP-Link Archer C2600 à titre de point d'accès et il possède deux interfaces: eth0 et eth1:

  • Le routeur principal utilise l'adresse statique 10.10.80.1
  • Le point d'accès n'a pas d'adresse sur le réseau 10.10.80.0/24
  • CPU (eth0): est réservé pour le port identifié WAN
  • CPU (eth1): est réservé pour les ports identifiés LAN1, LAN2, LAN3, LAN4
  • Le réseau invité guest sera établi sur l'interface eth1 et le VLAN ID 3 : eth1.3
  • Le réseau invité guest sera rendu disponible sur le Port 4 (LAN1) qui reliera notre point d'accès (AP) au routeur principal
  • Le réseau invité guest sera rendu disponible en mode exclusif sur le Port 1 (LAN4) permettant de tester la connectivité avec un câble réseau
Port
0
Port
6
Port
4
Port
3
Port
2
Port
1
Port
5
Réseau VLAN ID @switch_vlan[*] CPU (eth0) CPU (eth1) LAN1 LAN2 LAN3 LAN4 WAN
LAN 1 0 off untagged off untagged untagged untagged off
WAN 2 1 untagged off off off off off untagged
WAN6 2 1 untagged off off off off off untagged
guest 3 2 (nouveau) off tagged untagged off off tagged off
TRUNK

État actuel des ports associés au LAN - VLAN ID 1 (@switch_vlan[0]):

root@th0ma7-wifi:~# uci show network.@switch_vlan[0]
network.cfg071ec7=switch_vlan
network.cfg071ec7.device='switch0'
network.cfg071ec7.vlan='1'
network.cfg071ec7.ports='1 2 3 4 6'

État actuel ports associés aux réseaux WAN et WAN6 - VLAN ID 2 (@switch_vlan[1]):

root@th0ma7-wifi:~# uci show network.@switch_vlan[1]
network.cfg081ec7=switch_vlan
network.cfg081ec7.device='switch0'
network.cfg081ec7.vlan='2'
network.cfg081ec7.ports='5 0'

Prise en charge du réseau guest

Créer un interface guest non-géré:

uci delete network.guest
uci set network.guest=interface
uci set network.guest.proto='none'
uci set network.guest.type='bridge'
uci set network.guest.ifname='eth1.3'
uci changes network.guest
uci commit

Désactiver l'accès au réseau local du Port 4 (LAN1):

uci set network.@switch_vlan[0].ports='1 2 3 6'
uci changes network
uci commit

Redémarrer le réseau:
IMPORTANT: Suivant cette étape la communication avec le routeur principal devrait être encore fonctionnelle:

root@openwrt:~# /etc/init.d/network restart

Créer le nouveau VLAN et l'assigner aux ports:

  • Port 0 (CPU eth1, 6t) représentant le CPU logique de l'interface réseau associé à eth1.
  • Port 1 avec étiquettage VLAN (LAN4, 1t)
  • Port 4 sans étiquettage VLAN (LAN1, 4)
uci add network switch_vlan
uci set network.@switch_vlan[-1].device='switch0'
uci set network.@switch_vlan[-1].vlan='3'
uci set network.@switch_vlan[-1].ports='1t 4 6t'
uci show network.@switch_vlan[-1]
uci changes network
uci commit

Redémarrer le réseau:

root@openwrt:~# /etc/init.d/network restart

Réseau WI-FI

je rends par défaut disponible le réseau guest en 5Ghz (radio0) ainsi qu'en 2.4Ghz (radio1) avec les caractéristiques suivantes:

  • Utilise le même SSID que LAN avec l'ajout de -guest
  • Utilise à titre de mot de passe quelque chose de simple pour tous tel qu'un code postal, numéro de téléphone, adresse (facile pour tous de s'en souvenir!)
  • Empêche les périphériques connectés de se voir mutuellement (isolate=1)
uci add wireless wifi-iface
uci set wireless.@wifi-iface[-1].device=radio0
uci set wireless.@wifi-iface[-1].mode=ap
uci set wireless.@wifi-iface[-1].network=guest
uci set wireless.@wifi-iface[-1].encryption=psk2
uci set wireless.@wifi-iface[-1].isolate=1
uci set wireless.@wifi-iface[-1].ssid=<SSID>-guest
uci set wireless.@wifi-iface[-1].key='<#PHONE>'
uci add wireless wifi-iface
uci set wireless.@wifi-iface[-1].device=radio1
uci set wireless.@wifi-iface[-1].mode=ap
uci set wireless.@wifi-iface[-1].network=guest
uci set wireless.@wifi-iface[-1].encryption=psk2
uci set wireless.@wifi-iface[-1].isolate=1
uci set wireless.@wifi-iface[-1].ssid=<SSID>-guest
uci set wireless.@wifi-iface[-1].key='<#PHONE>'
uci changes wireless
uci commit wireless

On redémarre le réseau sans-fil:

root@openwrt:~# wifi reload

État final des interfaces:

root@openwrt~# brctl show
bridge name	bridge id		STP enabled	interfaces
br-lan		7fff.ec086b6a415c	no		eth1
							wlan1
							wlan0
br-guest	7fff.ec086b6a415c	no		eth1.3
							wlan0-1
							wlan1-1

État final de l'adressage de l'interface br-guest

root@poenwrt:~# ip add show br-guest
49: br-guest: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether ec:08:6b:6a:41:5c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::ee08:6bff:fe6a:415c/64 scope link 
       valid_lft forever preferred_lft forever