L'objectif de la procédure est de créer un nouveau réseau 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:

  1. 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.
  2. Association à un interface wlan0.1 en 2.4ghz
  3. Empêcher les périphériques WI-FI de se voir (option isolate=1)
  4. Limitation de la bande passante 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 aisé de confirmer l'état des périphériques lorsque l'on en valide la connexion.

Réfécences:

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='60'
uci changes network.guest
uci commit

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
  • Force l'adresse du routeur à titre de DNS principal (dhcp_option='3,10.10.80.1')
  • 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.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 set dhcp.guest.dhcpv6='server'
uci set dhcp.guest.ra='server'
uci changes dhcp.guest
uci commit

Créer le nouveau VLAN et l'assigner à aucun port physique (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='0t'
uci show network.@switch_vlan[-1]
uci changes network
uci commit

Redémarrer les services:

root@OpenWrt|LEDE:~# /etc/init.d/network restart
root@OpenWrt|LEDE:~# /etc/init.d/dnsmasq restart

Surveillance du trafic via bandwidthd

Par défaut bandwidthd fait l'analyse des paquets uniquement sur l'interface br-lan. Si l'on veut surveiller l'ensemble plusieurs réseaux il faut changer l'interface par défaut par "any" puis ajouter chacun de nos sous-réseaux:

uci set bandwidthd.@bandwidthd[0].dev='any'
uci add_list bandwidthd.@bandwidthd[0].subnets='10.10.80.1/24'
uci commit

Puis redémarrer le démon bandwidthd:

root@OpenWrt|LEDE:~# /etc/init.d/bandwidthd restart

Le résultat est disponible en temps réel à l'adresse de notre routeur tel que http://192.168.80.1/bandwidthd/

État final

Association des interfaces wlan et eth à l'interface br-guest

root@OpenWrt|LEDE:~# brctl show
bridge name     bridge id               STP enabled     interfaces
br-lan          7fff.647002e29b98       no              eth0.1
                                                        wlan0
br-bell         7fff.647002e29b98       no              eth0.2
br-guest        7fff.647002e29b98       no              eth0.3
                                                        wlan0-1

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

root@OpenWrt|LEDE:~# ip add show br-guest
7: br-guest: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    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 fd9b:4079:ea72::1/60 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::6670:2ff:fee2:9b98/64 scope link 
       valid_lft forever preferred_lft forever

État final des tables de configurations

VLAN ID

Bridge

@interface[?]

name

device

IP

@switch_vlan[?]

-

-

@interface[0]

loopback

lo

127.0.0.1

-

1

br-lan

@interface[1]

lan

eth0.1

192.168.80.1

@switch_vlan[0]

35

-

@interface[2]

wan

eth0.35

PPPoE

@switch_vlan[1]

2

br-bell

@interface[3]

bell

eth0.2

192.168.2.1

@switch_vlan[2]

3

br-guest

@interface[4]

guest

eth0.3

10.10.80.1

@switch_vlan[3]

Assignation des ports physiques

WAN

bell

Trunk

LAN

Réseau

VLAN ID

Port 0
(CPU)

Port 1

Port 2

Port 3

Port 4

Port 5

Port 6

lan

1

tagged

off

untagged

untagged

untagged

untagged

-

wan

35

tagged

tagged

tagged

off

off

off

-

bell

2

tagged

untagged

off

off

off

off

-

guest

3

tagged

off

off

off

off

off

-

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

Appliquer les changements:

root@OpenWrt|LEDE:~# uci changes firewall
root@OpenWrt|LEDE:~# uci commit firewall
root@OpenWrt|LEDE:~# /etc/init.d/firewall restart

Réseau WI-FI

Pour le réseau guest je propose par défaut du sans-fil en 2.4Ghz uniquement (radio0) 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 (option 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 changes wireless.@wifi-iface[-1]
uci commit wireless

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

root@OpenWrt|LEDE:~# wifi reload

Limitation de la bande passante

Références:

Installer Smart Queue Management (SQM QOS pourrait avoir été installé préalablement lors de la mise en place de Bell Fibe WAN PPPoE):

root@OpenWrt|LEDE:~# opkg update
root@OpenWrt|LEDE:~# opkg install luci-app-sqm

Retirer la configuration par défaut (si pas déjà fait!):

uci del sqm.eth1

Allouer 5mbit en amont (sqm:upload), 2mbit en aval (sqm:download):

uci add sqm queue
uci set sqm.@queue[-1].qdisc='fq_codel'
uci set sqm.@queue[-1].script='simple.qos'
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].upload='5500'
uci set sqm.@queue[-1].download='2100'

Appliquer les changements

uci changes sqm
uci commit

Activer et redémarrer le service SQM:

root@OpenWrt|LEDE:~# /etc/init.d/sqm enable
root@OpenWrt|LEDE:~# /etc/init.d/sqm restart
SQM: Starting SQM script: simple.qos on br-guest, in: 2100 Kbps, out: 5500 Kbps
SQM: simple.qos was started on br-guest successfully