La Fibre

Datacenter et équipements réseaux => Routeurs => Bouygues Telecom Remplacer la Bbox par un routeur => Discussion démarrée par: mirtouf le 14 avril 2023 à 17:50:11

Titre: OpenWRT x86 v24.10 - Net, TV, replays (et plus de téléphone avec la Bbox)
Posté par: mirtouf le 14 avril 2023 à 17:50:11
Tutoriel réalisé avec une VM OpenWRT 22.03 puis mis à jour pour OpenWRT 24.10.

0. Prérequis.
Avoir au moins 2 ports réseaux physiques (voire 3 si on branche la Bbox en tant qu'adaptateur SIP et qu'on ne veut pas se compliquer la vie avec les VLAN).
Comprendre les problèmes liés à la diffusion de trames multicast sur son réseau (et la solution de l'IGMP snooping)
Avec une architecture x86, le switch est logiciel, les problématiques de switch hardware ou d'offload ne seront pas détaillées.

Paquets à installer:
- igmpproxy
- ip-full (au cas où)
- ethtool (si vous avez des problèmes avec le multicast)

1. Accès internet et firewall.
Si vous utilisez les règles fw par défaut d'OpenWRT, vous aurez accès à Internet (au moins IPv4) avec cette configuration (le spoof de l'@ MAC n'est obligatoire si et seulement si le bail DHCP est libéré proprement).
Pour IPv6 il faut calculer votre clientid en fonction de l'adresse MAC de votre bbox, il s'agit d'avoir '00030001 + @MAC bbox'.
Dans mon cas, j'ai une configuration avec le téléphone fixe dont on peut se passer d'autant plus que ByTel ne fournit qu'un /60 malheureusement.
J'ai également fait le choix de pouvoir au moins faire des requêtes ICMP sur l'ONT Huawei HG8010H (IP 192.168.100.1).
Je force l'IGMP en version 2, obligatoire pour la TV. Les options egress sont là pour la QOS nécessaires pour la TV.

/etc/config/network
config interface 'loopback'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
option device 'lo'

config globals 'globals'
option packet_steering '1'

config interface 'lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
list dns '80.67.169.12'
list dns '80.67.169.40'
option ip6ifaceid '::e1'
option ip6assign '64'
option device 'br-lan'

config interface 'wan'
option proto 'dhcp'
option vendorid 'BYGTELIAD'
option device 'eth1.100'
option delegate '0'

config interface 'wan6'
option proto 'dhcpv6'
option device 'eth1.100'
option ip6assign '64'
option ip6ifaceid '::1'
option reqprefix '60'
option clientid '00030001506f0c1a2b34'
option reqaddress 'none'

config interface 'ONT'
option proto 'static'
option ipaddr '192.168.100.99'
option netmask '255.255.255.0'
option device 'eth1'
option delegate '0'

config device
option name 'br-lan'
option type 'bridge'
list ports 'eth0'
list ports 'eth2'
option igmpversion '2'
option acceptlocal '1'
option sendredirects '0'

config device
option name 'eth1.100'
option type '8021q'
option ifname 'eth1'
option vid '100'
option igmpversion '2'
option macaddr '50:6F:0C:1A:2B:34'
        list egress_qos_mapping '1:0'
        list egress_qos_mapping '0:6'
        list egress_qos_mapping '6:6'

config device
option name 'br-lan.100'
option type '8021q'
option ifname 'br-lan'
option vid '100'
option ipv6 '1'

Veuillez noter la zone dédiée pour la bbox et la marquage prévu pour avoir la TV.
En outre, j'ai préféré séparer les règles pour wan et wan6 (question de goût).

/etc/config/firewall
config defaults
option output 'ACCEPT'
option synflood_protect '1'
option forward 'DROP'
option drop_invalid '1'
option input 'ACCEPT'

config zone
option name 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option masq_allow_invalid '1'
list network 'lan'
list network 'ONT'

config zone
option name 'wan'
option output 'ACCEPT'
option masq '1'
option mtu_fix '1'
option input 'DROP'
option forward 'DROP'
option family 'ipv4'
list network 'wan'

config forwarding
option src 'lan'
option dest 'wan'

config rule
option name 'Allow-DHCP-Renew'
option src 'wan'
option proto 'udp'
option dest_port '68'
option target 'ACCEPT'
option family 'ipv4'

config rule
option name 'Allow-Ping'
option src 'wan'
option proto 'icmp'
option icmp_type 'echo-request'
option family 'ipv4'
option target 'ACCEPT'

config rule
option name 'Allow-IGMP'
option src 'wan'
option proto 'igmp'
option family 'ipv4'
option target 'ACCEPT'

config rule
option name 'Allow-DHCPv6'
option proto 'udp'
option dest_port '546'
option family 'ipv6'
option target 'ACCEPT'
option src 'wan6'

config rule
option name 'Allow-MLD'
option proto 'icmp'
option family 'ipv6'
option target 'ACCEPT'
list src_ip 'fe80::/10'
option src 'wan6'

config rule
option name 'Allow-ICMPv6-Input'
option proto 'icmp'
option limit '1000/sec'
option family 'ipv6'
option target 'ACCEPT'
list icmp_type 'destination-unreachable'
list icmp_type 'echo-reply'
list icmp_type 'echo-request'
list icmp_type 'neighbour-advertisement'
list icmp_type 'neighbour-solicitation'
list icmp_type 'packet-too-big'
list icmp_type 'router-advertisement'
list icmp_type 'router-solicitation'
list icmp_type 'time-exceeded'
option src 'wan6'

config rule
option name 'Allow-ICMPv6-Forward'
option dest '*'
option proto 'icmp'
option limit '1000/sec'
option family 'ipv6'
option target 'ACCEPT'
list icmp_type 'destination-unreachable'
list icmp_type 'echo-reply'
list icmp_type 'echo-request'
list icmp_type 'neighbour-advertisement'
list icmp_type 'neighbour-solicitation'
list icmp_type 'packet-too-big'
list icmp_type 'redirect'
list icmp_type 'router-advertisement'
list icmp_type 'router-solicitation'
list icmp_type 'time-exceeded'
option src 'wan6'

config rule
option name 'Allow-IPSec-ESP'
option src 'wan'
option dest 'lan'
option proto 'esp'
option target 'ACCEPT'
option family 'ipv4'

config rule
option family 'ipv6'
list proto 'esp'
option src 'wan6'
option dest 'lan'
option target 'ACCEPT'
option name 'Allow-IPSec-ESP-v6'

config rule
option name 'Allow-ISAKMP'
option src 'wan'
option dest 'lan'
option dest_port '500'
option proto 'udp'
option target 'ACCEPT'
option family 'ipv4'

config include 'bytel_rules'
option enabled '1'
option type 'nftables'
option path '/etc/nftables.d/nft-prio6-rules.include'
option position 'chain-append'
option chain 'mangle_postrouting'

config rule
option name 'Allow-ISAKMP-v6'
option family 'ipv6'
list proto 'udp'
option src 'wan6'
option dest 'lan'
option dest_port '500'
option target 'ACCEPT'

config redirect
option src 'wan'
option name 'CMS1'
option src_dport '8443'
option target 'DNAT'
option dest_ip '192.168.1.2'
option dest 'lan'
list proto 'tcp'
option dest_port '8443'

config rule
option dest_port '8443'
option src 'wan'
option name 'CMS1'
option dest 'lan'
list dest_ip '192.168.1.2'
option target 'ACCEPT'
list proto 'tcp'
option family 'ipv4'

config zone
option name 'wan6'
option input 'DROP'
option output 'ACCEPT'
option forward 'DROP'
option mtu_fix '1'
option family 'ipv6'
list network 'wan6'
list device 'br-lan'

config forwarding
option src 'lan'
option dest 'wan6'

config include 'miniupnpd'
option type 'script'
option path '/usr/share/miniupnpd/firewall.include'

config zone
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
list network 'wan6'
option masq_allow_invalid '1'
option name 'dmz'
option masq '1'

config forwarding
option dest 'dmz'

2. TV & replays
Il faut installer igmpproxy (mcproxy ou omcproxy ne sont pas suffisamment développés).
Les paquets installés ajoutent des règles pour le multicast à la règle déjà existante pour l'IGMP.

Il faut aussi installer miniupnpd pour que la Miami (ici 192.168.1.2) puisse ouvrir un port pour le service TR-069

/etc/sysctl.conf devrait contenir ceci (à vérifier toutefois).
# Defaults are configured in /etc/sysctl.d/* and can be customized in this file
net.ipv4.conf.all.force_igmp_version=2
net.ipv4.conf.all.mc_forwarding = 1

/etc/config/igmpproxy
config igmpproxy
        option quickleave 1
#       option verbose [0-3](none, minimal[default], more, maximum)

config phyint
        option network wan
        option zone wan
        option direction upstream
        list altnet 193.251.97.0/24
        list altnet 89.86.97.0/24
        list altnet 89.86.96.0/24

config phyint
        option network lan
        option zone lan
        option direction downstream
        list altnet 192.168.1.0/24

Vous noterez que, j'ai aussi inclus d'autres modifications de DSCP pour copier au mieux la Bbox (on ne sait jamais).

/etc/nftables.d/nft-prio6-rules.include
oifname "eth1.100" counter meta priority set 0:1
oifname "eth1.100" ip protocol icmp counter meta priority set 0:5
oifname "eth1.100" ip protocol igmp counter meta priority set 0:5
oifname "eth1.100" udp dport 67 counter meta priority set 0:6
oifname "eth1.100" udp dport 547 counter meta priority set 0:6
oifname "eth1.100" udp dport 5060 counter meta priority set 0:5
oifname "eth1.100" ip protocol icmpv6 counter meta priority set 0:5

Il faut tuner son firewall4:
uci -q batch <<-EOF
firewall.bytel_rules='include'
firewall.bytel_rules.enabled='1'
firewall.bytel_rules.path='/etc/nftables.d/nft-prio6-rules.include'
firewall.bytel_rules.position='chain_append'
firewall.bytel_rules.chain='mangle_postrouting'
EOF

SI VOS FLUX TV SONT PIXELISES pour un débit > 5 mbits/s
ethtool -K eth1 gro offoù eth1 est l'interface physique connectée à l'ONT.
C'est sans doute lié aux modifications portées dans le noyau 6.6 et cela pourrait vous impacter également.

PLUS BESOIN
SI vous n'avez pas le télé de façon optimale (coupure 5 min après avoir lancé le flux), vous pouvez faire tourner ce script (paquet ip-full requis) :


SI la TV mais surtout les replays ne fonctionnent pas malgré un marquage correctement appliqué, il faudrait peut-être avoir une VM (par exemple) qui a pour hostname gestionbbox et qui contient un serveur web pour servir:
ls -lR /var/www/api/
/var/www/api/:
total 4
drwxr-xr-x    3 root     root          4096 Oct 16  2021 v1

/var/www/api/v1:
total 4
drwxr-xr-x    3 root     root          4096 Oct 24  2021 wan

/var/www/api/v1/wan:
total 20
-rw-r--r--    1 root     root          7729 Oct 24  2021 diags.json
drwxr-xr-x    2 root     root          4096 Oct 24  2021 ftth
-rw-r--r--    1 root     root           363 Jan 21 13:35 ip.json
-rw-r--r--    1 root     root           331 Oct 16  2021 xdsl.json

/var/www/api/v1/wan/ftth:

total 4
-rw-r--r--    1 root     root            56 Oct 24  2021 stats.json

ip.json (les informations se trouvent dans les menus OpenWRT):
[{"wan":{"internet":{"state":2},"interface":{"id":8,"default":0,"state":1},"ip":{"address":"IP4_publique","cgnatenable":0,"maptenable":0,"state":"Up","gateway":"GW_IP4","dnsservers":"194.158.122.10,194.158.122.15","subnet":"255.255.255.255","dnsserversv6":"2001:860:b0ff:1::1,2001:860:b0ff:1::2","ip6state":"Up","ip6address":[{"ipaddress":"IP6","status":"Preferred","valid":"9999-12-31T23:59:59Z","preferred":"9999-12-31T23:59:59Z"}],"ip6prefix":[{"prefix":"IP6_prefixe/64","status":"Preferred","valid":"2023-04-14T19:34:00+0200","preferred":"2023-04-14T19:04:00+0200"}],"mac":"50:6f:0c:1a:2b:34","mtu":1500},"link":{"state":"Up","type":"ftth"}}}]
xdsl.json:
[{"wan":{"xdsl":{"state":"Idle","modulation":"","showtime":0,"atur_provider":"","atuc_provider":"","sync_count":0,"up":{"bitrates":0,"noise":0,"attenuation":0,"power":0,"phyr":0,"ginp":0,"nitro":"","interleave_delay":0},"down":{"bitrates":0,"noise":0,"attenuation":0,"power":0,"phyr":0,"ginp":0,"nitro":0,"interleave_delay":0}}}}]
stats.json:
[{"wan":{"ftth":{"mode":"1000baseT-FD","state":"Up"}}}]
et pour nginx:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name gestionbbox.lan;

# Everything is a 404
# location / {
# return 404;
# }

# You may need this to prevent return 404 recursion.
# location = /404.html {
# internal;
# }

root /var/www;
if ($request_uri ~ ^/([^?]*)\.json(\?.*)?$) {
return 302 /$1$2;
}

try_files $uri $uri.json =404;

}

3. Téléphone
En branchant la bbox, cela devrait fonctionner si celle-ci reçoit un /64 depuis OpenWRT.
Les mises à jour des équipements réseaux font qu'il n'est plus possible d'utiliser la Bbox comme adaptateur SIP.

4. Bugs connus
igmpproxy renvoie ce genre de messages chez moi:
Fri Apr 14 16:57:31 2023 user.warn igmpproxy[7256]: MRT_DEL_MFC; Errno(2): No such file or directory
sans impact notable mais cela pourrait ne pas être le cas chez vous.
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: mirtouf le 14 avril 2023 à 17:51:28
Tutoriel ne fonctionnant plus pour la TV avec OpenWRT 24.10 à cause de ce bug:
https://github.com/openwrt/openwrt/issues/18214
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: mirtouf le 14 avril 2023 à 17:51:36
Réservé
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: yeocti le 14 avril 2023 à 19:47:33
Bonsoir,

Chouette tuto!

La VM pour faire tourner nginx n'est peut-être pas nécessaire. Le paquet nginx est disponible sous openWRT.
Ça implique de reconfigurer uhttpd pour qu'il utilise un autre port que le 80 et éventuellement de configurer nginx en reverse proxy pour servir luci si c'est utilisé.
Il y a un paquet luci-nginx à installer qui permet d'installer nginx et une configuration de base pour servir luci si l'interface web de openWRT est utilisée.
Il sera certainement nécessaire de désactiver uhttpd.

edit: Il y a un paquet luci-nginx qui configure nginx pour servir luci.
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: mirtouf le 14 avril 2023 à 20:47:41
Tout à fait mais comme j'utilise OpenWRT via une VM, j'ai préféré lancer un container avec nginx pour des raisons de convenance personnelle.
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: mirtouf le 10 mai 2023 à 21:00:10
Avec le passage sur de l'unicast pour les replays, je laisse pour historique les règles pour les replays mais désactivées.
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: Tomtom69 le 07 juillet 2023 à 18:44:18
Merci pour ce tuto. Les replays marchent impec par contre par encore la TV mais je n'ai pas installé: miniupnpd
Car j'en ai 2 en options sur OpenWRT 22.03:
Peux-tu m'indiquer laquelle choisir?
D'avance, merci
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: simon le 07 juillet 2023 à 22:04:59
22.03 a migré vers nftables, donc je suppose qu'il faut prendre miniupnpd-nftables .
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: mirtouf le 01 mai 2024 à 15:02:45
ATTENTION: la mise à jour de banip (0.9.5) provoque l'impossibilité par défaut d'avoir les flux multicast opérationnels, je connais pas encore la configuration requise.

EDIT: option ban_udplimit '5000' devrait être OK.
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: mbooma le 13 janvier 2025 à 15:17:35
ATTENTION: la mise à jour de banip (0.9.5) provoque l'impossibilité par défaut d'avoir les flux multicast opérationnels, je connais pas encore la configuration requise.

EDIT: option ban_udplimit '5000' devrait être OK.

Bonjour.. Ou mettre cette ligne ? Le reste de la conf iptv est toujours OK ? Est ce qu'il y a des ports à ouvrir, j'ai vu qu'on parle sur Le forum de priorité qos5...

Merci
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: mbooma le 30 avril 2025 à 10:57:00
Tutoriel ne fonctionnant plus pour la TV avec OpenWRT 24.10 à cause de ce bug:
https://github.com/openwrt/openwrt/issues/18214

Bonjour, j'ai testé la configuration sous openwrt 24.10, et effectibvement j'ai une erreur F3411-1010

ais quand je regarde le bug dans le lien, ils disent bien que c'est uniquement quand le software ou hardware offload sont activés dans les options du firewall, ce qui n'est pas mon cas.

j'ai aussi installé miniupnpd-nftables car miniupnpd n'est plus dispo, mais je vois qu'il n't a aucune conf a ajouter dans le firewall pour ce dernier, il suffit de l'installer.

Si vous avez des nouvelles de votre coté n'hésitez pas.

Merci par avance.
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: tahitib0b07 le 17 mai 2025 à 10:02:55
Salut,

Après avoir pas mal galéré sur la partie iptv, (peu de chaines accessible, parfois aucune)...

Il faut bien s'assurer que les packets IGMP envoyés vers 224.0.0.0/4 passent par le VLAN100 avec une PRIOritiy à 5, idem pour flux ADP en provenance de 89.86.x.x par exemple vers 224.0.0.0/4.

J'ai du pousser des règles nft afin d'y arriver.

Pendant un moment, je n'avais que TF1 et quelques autres chaines, mais pas France 2 par exemple.


En ajoutant cette règle, par exemple, j'ai pu avoir france2 et d'autres mais tout n'était pas encore parfaitement OK:

nft add rule inet fw4 mangle_output oifname eth1 ether type ip ip protocol igmp vlan id 100 counter vlan pcp set 5
whireshark voyait bien les flux UDP en provenance de 89.86.xx.xx encapsulé  dans le vlan100 avec PRIO 5.



Un peu plus galère pour forcer les flux IGMP en sortie sur le VLAN 100 et surtout en PRIO 5:

Cette règle me permet de tagguer le protocole IGMP en CS6 (header ip (couche 3)):
nft add rule inet fw4 raw_output ip protocol igmp counter meta priority set 6
Ensuite, il faut définir les EGRESS priority sur l'interface wan vlan (eth1.100 chez moi) : celle-ci permet à ce que lorsque le flux arrive sur l'interface eth1.100 (celle qui encapsule) taggue les paquets avec une CS6 (couche 3) (appliquée par la la regle précédente) avec une PRIO 5 sur le header VLAN (802.1q (couche2).

EGRESS priority mappings: 0:0 1:1 2:2 3:3 4:4 5:5 6:5 7:7
la ligne ci-dessus est un extrait de la conf /proc/net/vlan/config.  La conf est à créer via la GUI sur le device vlan wan eth1.100.


Routeur: Gl inet flint 2
openwrt version 23.x.x





Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: basilix le 17 mai 2025 à 12:06:59
@mirtouf:

oifname "eth1.100" counter meta priority set 0:1
oifname "eth1.100" ip protocol icmp counter meta priority set 0:5
oifname "eth1.100" ip protocol igmp counter meta priority set 0:5
oifname "eth1.100" udp dport 67 counter meta priority set 0:6
oifname "eth1.100" udp dport 547 counter meta priority set 0:6
oifname "eth1.100" udp dport 5060 counter meta priority set 0:5
oifname "eth1.100" ip protocol icmpv6 counter meta priority set 0:5

oifname "eth1.100" udp dport 67 counter meta priority set 0:6
oifname "eth1.100" udp dport 547 counter meta priority set 0:6

On peut faire mieux que de tout retranscrire en priorité 1 pour sélectionner les « raw sockets » lesquels persistent avec leur priorité 0.
On peut appliquer un correctif au client udhcpc (pas accessible aux débutants) et définir la valeur du paramètre skpriority pour odhcp6c.

Depuis la très récente version 1.3 de nftables, il est possible spécifier la valeur du champ PCP dans la table netdev.

table netdev filter
flush table netdev filter

table netdev filter {
    chain set_isp_qos {
        udp dport 547 vlan pcp set 6 ip6 dscp set cs6 counter
        udp dport 67 vlan pcp set 6 ip dscp set cs6 counter
    }

   chain egress {
       type filter hook egress device eth1 priority filter; policy accept;
       vlan id 100 jump set_isp_qos
   }
}

Je n'ai pas pu tester sur mon routeur (car Hors-Service).

# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2015 OpenWrt.org
#

include $(TOPDIR)/rules.mk

PKG_NAME:=nftables
PKG_VERSION:=1.1.1
PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://netfilter.org/projects/$(PKG_NAME)/files
PKG_HASH:=6358830f3a64f31e39b0ad421d7dadcd240b72343ded48d8ef13b8faf204865a

La version la plus récente disponible est numérotée 1.1.1. Mais mettre à niveau ne semble pas compliqué (https://github.com/openwrt/openwrt/commit/c11a18be0dc38c81280baa948500fe1a57de0685). Le hic est qu'il faut réussir à construire
son image à partir des sources et il y a un risque de « briquer » le routeur. Ce n'est pas accessible aux débutants.
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: mbooma le 17 mai 2025 à 12:09:33
Bonjour,

Merci a vous deux, quelqu'un arrive à faire marcher la TV sur la version 24.10 ?
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: basilix le 17 mai 2025 à 12:21:29
nft add rule inet fw4 mangle_output oifname eth1 ether type ip ip protocol igmp vlan id 100 counter vlan pcp set 5
Je ne suis pas certain que cela fonctionne (https://www.mankier.com/8/nft#Payload_Expressions-Vlan_Header_Expression).

Pourquoi avoir deux règles pour appliquer la « même » modif ?

nft add rule inet fw4 raw_output ip protocol igmp counter meta priority set 6
On peut modifier ces règles via le fichier de configuration de firewall4 (fw4).
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: tahitib0b07 le 17 mai 2025 à 22:51:14
la commande est valide.

la premiere n'appliquait pas la PRIO (PCP) sur mes paquets envoyés vers 232.x.x.x

Les deux commandes ne sont pas identiques, l'une tapes mangle_output et ajoutes une priorité (DSCP) sur la couche 3 (tcp/ip), l'autre raw_output et appliques la priorité (PCP) sur la couche 2 (802.1q).

Je veux bien ta conf fw4 stp. D'après mes tests, le champ DCSP n'appliques pas une priorité sur un paquet, mais filtre le paquet selon la priorité.











Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: basilix le 18 mai 2025 à 07:28:18
@tahitib0b07:

Tu dois confondre.

La déclaration meta priority set change la priorité interne Linux des paquets correspondant à l'expression qui précède dans la règle.

La première règle ne correspond qu'aux paquets IGMP du VLAN 100 tandis que la seconde correspond à tous les paquets IGMP. Les
règles sont appliquées dans un ordre donné en fonction de la priorité de leur chaîne. Mais j'ai la flemme de vérifier si raw_output est
plus prioritaire que mangle_output (ou de vérifier si ces deux chaînes font vraiment partie de la configuration d'origine de fw4).

Cette priorité interne telle qu'elle est définie dans ce fil de discussion sert à modifier le champ PCP de trames Ethernet (802.1q). Le
champ DSCP n'est jamais défini par ces règles. La règle mangle_output modifierait éventuellement (https://www.mankier.com/8/nft#Payload_Expressions-Vlan_Header_Expression) la valeur du champ PCP.

Je ne vais pas filer ma configuration. Premièrement, je ne suis pas abonné chez Bouygues. Deuxièmement, mon routeur est hors-service.
Troisièmement, je veux bien fournir un exemple de configuration ou un extrait de configuration, mais pas ma véritable configuration.

Un moyen « simple » pour vérifier que tes règles nftables sont correctement appliquées est d'effectuer une capture réseau sur l'interface
« WAN ». Tu pourrais ainsi observer la valeur des champs DSCP ou PCP des paquets envoyés.
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: tahitib0b07 le 18 mai 2025 à 10:27:14

C'est justement avec wireshark que j'ai pu constater que:
 - la 1ere règle permettait d'encapsuler mes paquets IGMP
 - la PRIO 5 était appliqués au traffic mutlicast UDP
 - la PRO 5 n'était pas appliqué aux paquets IGMP construits par igmpproxy.

D'ou l'utilisation de la 2eme règle pour:
 -  appliquer une CS6
 - appliquer le "EGRESS priority mapping" pour translater ma CS6 en PCP 5. (j'aurais pu mettre une autre valeur sur DSCP, peu importe).

tu confirmes donc ce que je dis, les deux règles sont disctinctes.

Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: basilix le 18 mai 2025 à 12:55:45
Non, c'est faux ! Tu confonds plusieurs concepts : priorité Linux interne des paquets, champ DSCP et champ PCP.

Informations générées par l'intelligence artificielle ChatGPT4.1

Voici une explication des deux règles nftables que tu as fournies :

1. Première règle :

nft add rule inet fw4 mangle_output oifname eth1 ether type ip ip protocol igmp vlan id 100 counter vlan pcp set 5
- Table et chaîne : dans la table `fw4`, la chaîne `mangle_output` (probablement utilisée pour modifier ou marquer les paquets en sortie).
- Condition : cette règle s'applique aux paquets sortants (`mangle_output`) qui ont pour interface de sortie (`oifname`) `eth1`, de type Ethernet, avec un protocole IP, et plus précisément un protocole IGMP.
- Filtre VLAN : si le paquet appartient à un VLAN avec l'ID 100.
- Action :
  - Incrémente le compteur pour suivre le nombre de paquets correspondant.
  - Modifie le champ VLAN Priority Code Point (PCP) en le réglant à 5 (`vlan pcp set 5`).

En résumé : cette règle intervient sur les paquets IGMP sortant via l’interface `eth1` qui sont dans le VLAN 100, et elle ajuste la priorité VLAN du paquet à 5 tout en comptabilisant le tout.



2. Deuxième règle :

nft add rule inet fw4 raw_output ip protocol igmp counter meta priority set 6

- Table et chaîne : dans la même table `fw4`, la chaîne `raw_output`.
- Condition : cette règle concerne tous les paquets IP sortants (`raw_output`) dont le protocole est IGMP.
- Action :
  - Incrémente le compteur.
  - Modifie la méta-donnée `priority` du paquet en la réglant à 6.

En résumé : cette règle modifie la priorité des paquets IGMP sortants en leur assignant une priorité de 6, tout en comptabilisant ces paquets.



Note générale :
- La première règle se concentre sur le traitement des paquets IGMP sortant via une interface spécifique et dans un VLAN précis, en modifiant la priorité VLAN.
- La seconde règle s'applique à tous les paquets IGMP sortants, en leur assignant une priorité globale.

Si tu souhaites une explication plus détaillée ou des précisions sur un point particulier, n'hésite pas !
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: tahitib0b07 le 19 mai 2025 à 09:58:53
Ok, noté. Merci pour le temps consacré.

Quand j'aurais un peu de temps libre, je reprendrai ma conf de 0.

Dans tous les cas, le post original était  dédié à ceux qui galèrent avec leur iptv:

Il faut capturer le trafic wan avec wireshark et vérifier que les échanges sur le protocole IGMP et les flux multicast UDP soient tous encapsulés dans le VLAN100 avec une PRIO à 5.



Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: basilix le 19 mai 2025 à 11:09:05
@tahitib0b07 :

Il aurait fallu ajouter les lignes dans la conf réseau dans la section "device" (eth1.100). Cela remplace le script défini par @mirtouf.
Je montre ci-dessous la section de configuration et ci-après la commande uci correspondante pour éditer le fichier de configuration.

config device
option name 'eth1.100'
option type '8021q'
option ifname 'eth1'
option vid '100'
option igmpversion '2'
option macaddr '50:6F:0C:1A:2B:34'
        list egress_qos_mapping '1:0'
        list egress_qos_mapping '0:6'
        list egress_qos_mapping '6:6'

Le nombre négatif entre crochet désigne la section. Un nombre négatif permet de compter dans l'ordre inverse : -1 représente la dernière section, -2 l'avant-dernière, 0 la première (c.f. UCI (https://openwrt.org/docs/guide-user/base-system/uci)).

uci -q batch <<-EOF
add_list network.@device[-2].egress_qos_mapping='1:0'
add_list network.@device[-2].egress_qos_mapping='0:6'
add_list network.@device[-2].egress_qos_mapping='6:6'
EOF

Créer le fichier /etc/nftables.d/nft-prio6-rules.include

oifname "eth1.100" counter meta priority set 0:1
oifname "eth1.100" ip protocol icmp counter meta priority set 0:5
oifname "eth1.100" ip protocol igmp counter meta priority set 0:5
oifname "eth1.100" udp dport 67 counter meta priority set 0:6
oifname "eth1.100" udp dport 547 counter meta priority set 0:6
oifname "eth1.100" udp dport 5060 counter meta priority set 0:5
oifname "eth1.100" ip protocol icmpv6 counter meta priority set 0:5

Dans le fichier ci-dessus, il me semble qu'il faut ajouter un caractère fin de ligne (newline) en dernière ligne. Certains éditeurs de texte le font automatiquement.

Lancer dans le Shell Unix du routeur la commande uci batch ci-dessous.

uci -q batch <<-EOF
firewall.bytel_rules='include'
firewall.bytel_rules.enabled='1'
firewall.bytel_rules.path='/etc/nftables.d/nft-prio6-rules.include'
firewall.bytel_rules.position='chain_append'
firewall.bytel_rules.chain='mangle_postrouting'
EOF
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: mirtouf le 19 mai 2025 à 15:00:37
Bonjour,

Merci a vous deux, quelqu'un arrive à faire marcher la TV sur la version 24.10 ?
Nope, c'est mort pour le moment. A priori, ce serait dû à la réorganisation des paquets UDP ce qui casse les flux dès que le débit dépasse les 8 mbits/s.
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: mirtouf le 19 mai 2025 à 15:01:39
@tahitib0b07 :

Il aurait fallu ajouter les lignes dans la conf réseau dans la section "device" (eth1.100). Cela remplace le script défini par @mirtouf.
Je montre ci-dessous la section de configuration et ci-après la commande uci correspondante pour éditer le fichier de configuration.

config device
option name 'eth1.100'
option type '8021q'
option ifname 'eth1'
option vid '100'
option igmpversion '2'
option macaddr '50:6F:0C:1A:2B:34'
        list egress_qos_mapping '1:0'
        list egress_qos_mapping '0:6'
        list egress_qos_mapping '6:6'

Le nombre négatif entre crochet désigne la section. Un nombre négatif permet de compter dans l'ordre inverse : -1 représente la dernière section, -2 l'avant-dernière, 0 la première (c.f. UCI (https://openwrt.org/docs/guide-user/base-system/uci)).

uci -q batch <<-EOF
add_list network.@device[-2].egress_qos_mapping='1:0'
add_list network.@device[-2].egress_qos_mapping='0:6'
add_list network.@device[-2].egress_qos_mapping='6:6'
EOF

Créer le fichier /etc/nftables.d/nft-prio6-rules.include

oifname "eth1.100" counter meta priority set 0:1
oifname "eth1.100" ip protocol icmp counter meta priority set 0:5
oifname "eth1.100" ip protocol igmp counter meta priority set 0:5
oifname "eth1.100" udp dport 67 counter meta priority set 0:6
oifname "eth1.100" udp dport 547 counter meta priority set 0:6
oifname "eth1.100" udp dport 5060 counter meta priority set 0:5
oifname "eth1.100" ip protocol icmpv6 counter meta priority set 0:5

Dans le fichier ci-dessus, il me semble qu'il faut ajouter un caractère fin de ligne (newline) en dernière ligne. Certains éditeurs de texte le font automatiquement.

Lancer dans le Shell Unix du routeur la commande uci batch ci-dessous.

uci -q batch <<-EOF
firewall.bytel_rules='include'
firewall.bytel_rules.enabled='1'
firewall.bytel_rules.path='/etc/nftables.d/nft-prio6-rules.include'
firewall.bytel_rules.position='chain_append'
firewall.bytel_rules.chain='mangle_postrouting'
EOF
Merci pour la mise à jour, cela remplacera très bien ce script un peu q&d. ;)
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: gg40530 le 19 mai 2025 à 17:55:39
La téléphonie fonctionne avec la box derrière le routeur ?
Titre: OpenWRT x86 v22.03 - Net, TV, replays (et téléphone avec la Bbox)
Posté par: mirtouf le 19 mai 2025 à 17:57:06
Nope, plus maintenant.
Titre: OpenWRT x86 v24.10 - Net, TV, replays (et plus de téléphone avec la Bbox)
Posté par: mirtouf le 27 mai 2025 à 13:31:16
Mise à jour pour OpenWRT 24.10:
- plus de téléphone
- suppression des règles pour les replays de la Miami
- plus de script pour les règles QOS nécessaires pour la TV mais des options de configurations rappelées par basilix
- ajout d'une modification du port réseau si les flux TV pixelisent au-delà d'un certain débit