Skip to main content

GRE avec multidiffusion

Multicast (often referred to as multicasting) is where data transmission is addressed to a group of destination computers simultaneously. Multicast can be a one-to-many or a many-to-many distribution. Multicast requires the source to send a packet only once, even if it needs to be delivered to a large number of receivers.

Pourquoi la multidiffusion est-elle désactivée sur le réseau d' Equinix Metal ?

Equinix Metal™ ne prend pas en charge la multidiffusion dans sa topologie réseau de couche 3 par défaut. Cela est dû à des problèmes de performances et de sécurité liés à la mise à l'échelle des commutateurs et routeurs multilocataires.

Pour ce faire, nous suggérons d’utiliser un tunnel GRE.

Qu'est-ce que le GRE ?

Generic Routing Encapsulation (ou GRE en abrégé) est un protocole de tunneling développé par Cisco Systems qui peut encapsuler une grande variété de protocoles de couche réseau dans des liaisons point à point virtuelles sur un réseau IP.

Configuration d'un tunnel GRE

La configuration d'un tunnel GRE entre appareils est relativement simple. Voici une configuration de base pour les appareils CentOS.

Appareil 1:

DEVICE=gre1
BOOTPROTO=none
ONBOOT=yes
TYPE=GRE
PEER_OUTER_IPADDR=Site2.public.address
PEER_INNER_IPADDR=Site2.private.address
MY_INNER_IPADDR=Site1.private.address

Appareil 2:

DEVICE=gre1
BOOTPROTO=none
ONBOOT=yes
TYPE=GRE
PEER_OUTER_IPADDR=Site1.public.address
PEER_INNER_IPADDR=Site1.private.address
MY_INNER_IPADDR=Site2.private.address

Sur les deux appareils, affichez l'interface en exécutant ifup gre1

Pour vérifier la configuration, vous pouvez exécuter la commande ifconfig gre et examiner le résultat ici, sur appareil 1:*

[root@centos-ewr1 ~]# ifconfig gre1
gre1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1476
inet 10.100.126.3 netmask 255.255.255.255 destination 10.88.152.3
unspec 00-00-00-00-00-00-F0-00-00-00-00-00-00-00-00-00 txqueuelen 0 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@centos-ewr1 ~]#

Le même processus s'est exécuté sur l'appareil 2:

[root@centos-sjc1 ~]# ifconfig gre1
gre1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1476
inet 10.88.152.3 netmask 255.255.255.255 destination 10.100.126.3
unspec 00-00-00-00-00-00-F0-00-00-00-00-00-00-00-00-00 txqueuelen 0 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@centos-sjc1 ~]#

Ping Périphérique 2 <> Périphérique 1

[root@centos-sjc1 ~]# ping -c5 10.100.126.3
PING 10.100.126.3 (10.100.126.3) 56(84) bytes of data.
64 bytes from 10.100.126.3: icmp_seq=1 ttl=64 time=73.5 ms
64 bytes from 10.100.126.3: icmp_seq=2 ttl=64 time=73.5 ms
64 bytes from 10.100.126.3: icmp_seq=3 ttl=64 time=73.5 ms
64 bytes from 10.100.126.3: icmp_seq=4 ttl=64 time=73.5 ms
64 bytes from 10.100.126.3: icmp_seq=5 ttl=64 time=73.4 ms
--- 10.100.126.3 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 73.416/73.516/73.558/0.179 ms
[root@centos-sjc1 ~]#
[root@centos-ewr1 ~]# ping -c5 10.88.152.3
PING 10.88.152.3 (10.88.152.3) 56(84) bytes of data.
64 bytes from 10.88.152.3: icmp_seq=1 ttl=64 time=73.4 ms
64 bytes from 10.88.152.3: icmp_seq=2 ttl=64 time=73.1 ms
64 bytes from 10.88.152.3: icmp_seq=3 ttl=64 time=73.4 ms
64 bytes from 10.88.152.3: icmp_seq=4 ttl=64 time=73.4 ms
64 bytes from 10.88.152.3: icmp_seq=5 ttl=64 time=73.4 ms
--- 10.88.152.3 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 73.183/73.405/73.489/0.360 ms
[root@centos-ewr1 ~]#

Avec un TCPDump rapide --tcpdump -n -i bond0 proto 47-- sur bond0, vous pouvez vérifier que le trafic entre les deux périphériques transite par le tunnel GRE.

17:36:22.295418 IP 147.75.64.13 > 147.75.69.141: GREv0, length 56: IP 10.100.126.3.48950 > 10.88.152.3.ssh: Flags [.], ack 2897, win 249, options [nop,nop,TS val 2332411 ecr 6130351], length 0

17:36:25.360737 IP 147.75.64.13 > 147.75.69.141: GREv0, length 124: IP 10.100.126.3.48950 > 10.88.152.3.ssh: Flags [P.], seq
1764:1832, ack 2897, win 249, options [nop,nop,TS val 2335476 ecr 6130351], length 68

17:36:25.360917 IP 147.75.69.141 > 147.75.64.13: GREv0, length 124: IP 10.88.152.3.ssh > 10.100.126.3.48950: Flags [P.], seq
2897:2965, ack 1832, win 149, options [nop,nop,TS val 6133490 ecr 2335476], length 68

Remarque: la méthode ci-dessus envoie le trafic en texte brut. Pour chiffrer le trafic, il est conseillé de configurer IPSec, Wireguard, etc.

Activation de la multidiffusion

Pour vous assurer que gre1 a le multidiffusion activé en cas de redémarrage, veuillez vérifier /usr/sbin/ifup-pre-local et vous assurer qu'il ressemble à cet exemple:

#!/bin/bash
set -o errexit -o nounset -o pipefail -o xtrace
iface=${1#*-}
case $iface in
bond0 | enp0s20f0) ip link set $iface address 0c:c4:7a:81:0a:84;;
enp0s20f1) ip link set $iface address 0c:c4:7a:81:0a:85 && sleep 4;;
gre1) ip link set $iface multicast on;;
*) echo "ignoring unknown interface $iface" && exit 0;;
esac

️ Il est à noter que l'interface nommée gre1 peut bien sûr être renommée pour correspondre à votre déploiement et à votre configuration.

Cette page vous a-t-elle été utile ?