Pour la partie TV, je ne refais pas les requis pour l'IGMP qui sont
Etape 1 - Création des aliasDans Firewall: Aliases, créer un 1er alias pour les ports:
- Name: TV_port (par exemple)
- Type : Port(s)
- Content : 8200, 8202
Dans
Firewall: Aliases, créer un 2eme alias pour les réseaux
- Name: TV_network (par exemple)
- Type : Network(s)
- Content : 89.86.97.0/24, 89.86.96.0/24, 193.251.97.0/24, 176.165.8.0/24
Etape 2 - Création des régles du parefeuDans
Firewall: Rules: Floating, ajouter une nouvelle régèle qui va taguer les flux IGMP avec la priorité 5.
- Interface: WAN et LAN
- Direction: any
- TCP/IP Version: IPv4
- Protocol: IGMP
- Description: Set priority for IGMP
- Clicker sur advanced option
- cocher la case allow options
- Set priority: Voice (5)
Dans
Firewall: Rules: WAN, ajouter une nouvelle régle pour autoriser le flux TV :
- Interface: WAN
- Direction: in
- TCP/IP Version: IPv4
- Protocol: UDP
- Source: TV_network qui est l'alias créer précédemment
- Destination port range: TV_port
- Description: Flux TV multicast
Etape 3 - Configuration d'IGMP proxyDans
System: Firmware: Plugins, installer le plugin os-igmp-proxy.
Dans
Services: IGMP Proxy, ajouter l'interface WAN, avec les paramètres :
- Interface: WAN
- Type: Upstream interface
- Network(s) : 89.86.97.0/24, 89.86.96.0/24, 193.251.97.0/24, 176.165.8.0/24
Puis ajouter l'interface LAN, avec les paramètres :
- Interface: LAN
- Type: Downstream interface
Etape 4a - Forcer IGMPv2 - PimdPour forcer la version 2 d'IGMP, il y a plusieurs façon. L'une est d'utiliser pimd qui va envoyer des trames IGMPv2 et faire passer l'interface en v2. (voir le tuto pfsense avec la proposition de modification suivante pour voir qu'on est en igmpv3).
if ifmcstat -i vlan01.100 -f inet | grep -q "igmpv3"; then
# Mettre le code pour arreter igmp proxy
echo "Stopping IGMPproxy"
sleep 3
# Puis lancer pimd
sleep 7
# puis le tuer
killall pimd
sleep 1
# Puis relancer igmp-proxy
echo "Starting again IGMPproxy"
fi
Etape 4b - Forcer IGMPv2 - Compilation du noyauPour ma part, j'ai choisi de recompiler le kernel pour modifier la version IGMP directement dans OPNsense. Le gros point noir de cette technique est qu'il est nécessaire de recompiler le noyau à chaque fois qu'une nouvelle version sort.
Dans
System: Settings: Tunables, ajouter une nouvelle entrée:
- Tunable: net.inet.igmp.default_version
- Value: 2
Pour la compilation du noyau, il faut monter une machine FreeBSD
https://github.com/opnsense/tools, puis réaliser les commandes suivantes pour cloner le repository
pkg install git
cd /usr
git clone https://github.com/opnsense/tools
Update du 31/05/2025 : Le dépot de freebsd contient 2 commits qui ne sont pas sous OPNsense et qui permettent de rester en IGMPv2. On ajoute alors les dépots de freebsd en tant qu'upstream.cd /usr/src
git remote add upstream https://github.com/freebsd/freebsd-src.git
git fetch upstream
Mettre à jour les dépots OPNsense en local, avec le dernier tag correspondant à la version ici 25.1. En cas de nouvelle version d'OPNsense, il est nécessaire de refaire toutes les étapes à partir d'ici avec la bonne version, par exemple 25.1.2 au lieu de 25.1
cd /usr/tools/
make update VERSION=25.1
Update du 31/05/2025: Il n'est plus nécessaire d'appliquer les modifications à la main comme ci-dessous mais on peut appliquer 2 commits directement depuis le dépot de freebsdAvant de compiler le kernel et une fois que le dépots sont à jour, il faut modifier le fichier igmp.c qui est dans le dossier /usr/src/sys/netinet/, pour lui appliquer la correction https://github.com/freebsd/freebsd-src/commit/b94ec00ba73ef4769f62555bfcb840919143e198 et forcer l'utilisation de la v2 en modfiant la ligne// Ce n'est plus nécessaire de faire la modification à la main. Voir commande plus bas pour le cherry-pick
VNET_DEFINE_STATIC(int, igmp_default_version) = IGMP_VERSION_3;
// Par cette nouvelle ligne pour forcer la v2
VNET_DEFINE_STATIC(int, igmp_default_version) = IGMP_VERSION_2;
La nouvelle commande est
cd /usr/src
git cherry-pick b94ec00ba73ef4769f62555bfcb840919143e198 d2c2d6d6b09e8a059dffd6b6c7513d0925a8753d
La commande suivante permet de compiler le kernel
make kernel
Le kernel est récupérable dans le dossier /usr/local/opnsense/build/25.1/amd64/sets. Il faut ensuite le copier sous ONsense, dans le dossier /home/ par exemple puis faire la mise à jour du kernel sous OPNsense avec la commande suivante :
opnsense-update -fikr 25.1 -l /home/