L'objectif de la procédure est de créer un nouveau réseau nommé "media" via un VLAN afin d'offrir l'internet à certains périphériques sur lesquels nous avons pas ou peu de contrôle par exemple: consoles de jeux, IoT (internet of things), téléviseur intelligents, etc. Les grandes lignes sont:

  1. Création d’un nouveau VLAN pour un réseau “media” avec accès à l’internet mais à aucun autre périphérique du réseau interne.
  2. Permettre à mon réseau internet (LAN) d'accéder aux périphériques du réseau "média" (mais pas l'inverse!)
  3. Association à un interface wlan0.1 en 2.4ghz (optionnel, pratique pour certaines consoles par exemple Wii)

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.

Création du réseau MEDIA

Créer les interfaces:

uci delete network.media
uci set network.media=interface
uci set network.media.proto=static
uci set network.media.ifname='eth0.4'
uci set network.media.type='bridge'
uci set network.media.ipaddr=172.19.80.1
uci set network.media.netmask=255.255.255.0
uci set network.media.broadcast='172.19.80.255'
uci set network.media.ip6assign='60'
uci changes network.media
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 à 12h
  • Force l'adresse du routeur à titre de DNS principal (dhcp_option='3,172.19.80.1')
  • Ajout des DNS google à titre de DNS secondaires et tertiaires (dhcp_option='3,172.19.80.1 6,10.10.80.1,8.8.8.8,8.8.4.4')
uci delete dhcp.media
uci set dhcp.media=dhcp
uci set dhcp.media.interface=media
uci set dhcp.media.start=20
uci set dhcp.media.limit=10
uci set dhcp.media.leasetime=12h
uci set dhcp.media.dhcp_option='3,172.19.80.1'
uci add_list dhcp.media.dhcp_option='6,172.19.80.1,8.8.8.8,8.8.4.4'
uci set dhcp.media.dhcpv6='server'
uci set dhcp.media.ra='server'
uci changes dhcp.media
uci commit

Créer le nouveau VLAN et l'assigner à notre port "trunk" créé précédemment (voir Trunk WAN + LAN). Ceci permettra par la suite d'activer ce VLAN sur certains ports de notre commutateurs à titre de réseau par défaut pour les périphériques voulus.

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

Certains préféreront possiblement activer ce VLAN comme réseau par défaut sur un port spécifique de votre routeur. Pour ce faire il faut alors spécifier le port en question pour ce VLAN et l'ajouter comme "untagged" (i.e. sans étiquette). Il faudra aussi modifier la configuration du VLAN associé au LAN afin de l'en retirer pour ce port. Par exemple, dans une configuration plus classique, afin de modifier le port 5 pour y offrir que le VLAN 4 par défaut:

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

Redémarrer les services:

root@OpenWrt:~# /etc/init.d/network restart
root@OpenWrt:~# /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='172.19.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:~# 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
br-media        7fff.647002e29b98       no              eth0.4
                                                        wlan0-2

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

root@OpenWrt:~# ip addr show br-media
11: br-media: <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 172.19.80.1/24 brd 172.19.80.255 scope global br-media
       valid_lft forever preferred_lft forever
    inet6 fd9b:4079:ea72:20::1/60 scope global 
       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]

4

br-media

@interface[5]

media

eth0.4

172.19.80.1

@switch_vlan[4]

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

-

media

4

off

off

tagged

off

off

off

-

Configuration du pare-feu

Créer une zone media:

uci add firewall zone
uci set firewall.@zone[-1].name=media
uci set firewall.@zone[-1].network=media
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='media'
uci set firewall.@forwarding[-1].dest='wan'

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

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

Autoriser les requêtes DNS:

uci add firewall rule
uci set firewall.@rule[-1].name='Allow DNS Queries From MEDIA'
uci set firewall.@rule[-1].src=media
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 media:

uci add firewall rule
uci set firewall.@rule[-1].name='Allow DHCP Requests From MEDIA'
uci set firewall.@rule[-1].src=media
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:~# uci changes firewall
root@OpenWRT:~# uci commit firewall
root@OpenWRT:~# /etc/init.d/firewall restart

Réseau WI-FI

Pour le réseau media 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 “-media
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=media
uci set wireless.@wifi-iface[-1].encryption=psk2
uci set wireless.@wifi-iface[-1].ssid=<SSID>-media
uci set wireless.@wifi-iface[-1].key='<PASSWD>'
uci changes wireless.@wifi-iface[-1]
uci commit wireless

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

root@OpenWRT:~# wifi reload