GRE con multidifusión
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.
¿Por qué está desactivada la multidifusión en la red de Equinix Metal?
Equinix Metal™ no admite multidifusión en su topología de red de capa 3 predeterminada. Esto se debe a problemas de rendimiento y seguridad relacionados con la escalabilidad de los conmutadores y enrutadores multiarrendamiento.
Para ello, le sugerimos que utilice un túnel GRE.
¿Qué es el GRE?
Generic Routing Encapsulation (GRE) es un protocolo de tunelización desarrollado por Cisco Systems que permite encapsular una amplia variedad de protocolos de red en enlaces virtuales punto a punto a través de una red de protocolo de Internet.
Configuración de un túnel GRE
Configurar un túnel GRE entre dispositivos es bastante sencillo. A continuación se muestra una configuración básica para dispositivos CentOS.
Dispositivo 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
Dispositivo 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
En ambos dispositivos, active la interfaz ejecutando ifup gre1
Para verificar la configuración, puede ejecutar ifconfig gre y muestrear la salida aquí, en dispositivo 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 ~]#
Lo mismo se ejecutó en el dispositivo 2 de :
[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 Dispositivo 2 <> Dispositivo 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 ~]#
Con un rápido TCPDump--tcpdump -n -i bond0 proto 47--on bond0 puede verificar que el tráfico entre los dos dispositivos fluye a través del túnel 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
Nota: el método anterior envía el tráfico en texto plano. Para cifrar el tráfico sería conveniente configurar IPSec, Wireguard, etc.
Activación de la multidifusión
Para asegurarse de que gre1 tiene habilitada la multidifusión en caso de reinicio, compruebe /usr/sbin/ifup-pre-local y asegúrese de que tiene el aspecto de este ejemplo:
#!/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
️ Debe tenerse en cuenta que la interfaz denominada gre1 puede, por supuesto, renombrarse a algo que se ajuste a su despliegue y configuración.