Tengo un host con dos contenedores Docker (con NET_ADMIN
capacidad):
backend
con una interfazeth0
(172.16.7.3
)openvpn-server
con interfaceseth0
(172.16.7.2
) ytun0
(10.8.0.1
), ejecutando un servidor OpenVPN (modo tun)
Hay un cliente OpenVPN en otra máquina openvpn-client
con interfaz tun0
( 10.8.0.2
). La VPN está funcionando.
Configuración de ruta adicional:
backend
tiene rutas10.8.0.0/24 via 172.16.7.2
y224.0.0.0/4 via eth0
.openvpn-server
tiene rutas10.8.0.0/24 dev tun0
y224.0.0.0/4 dev tun0
.
backend
puede hacer ping con éxito openvpn-client
(enrutado a través de openvpn-server
): ping 10.8.0.2
funciona de maravilla.
Observaciones:
ping -t3 239.1.2.3
Cuando ejecuto openvpn-server
, pasan por el túnel VPN y puedo ver los paquetes ICMP que llegan openvpn-client
(con tcpdump -i tun0 net 224.0.0.0/4
on openvpn-client
).
Además, cuando ejecuto ping -t3 239.1.2.3
on backend
, salen a través de ese host eth0
y entran en openvpn-server
on eth0
. Puedo verlos en openvpn-server
uso tcpdump -i eth0 net 224.0.0.0/4
.
Problema:
Me gustaría poder seguir ejecutando ping -t3 239.1.2.3
y backend
que los pings se reenvíen a openvpn-client
, como si 10.8.0.2
me hubieran hecho ping. (El objetivo final es realizar multidifusión de paquetes UDP a backend
todos los clientes VPN).
Mi intento:
smcroute -d -n -j eth0 239.1.2.3 -a eth0 172.16.7.3 239.1.2.3 tun0
Pensé que esto configuraría la ruta de multidifusión, pero en realidad no hace nada. No puedo ver los paquetes ICMP salientes en openvpn-server
's tun0
. -- ¿Qué ocurre?
También intenté configurar pimd
en dos pares cualesquiera de los tres hosts, y también en los tres. Como resultado, pude hacer un iperf
punto de referencia (como se sugiereaquí) entre backend
y openvpn-server
, y también entre openvpn-server
y openvpn-client
, pero no entre backend
y openvpn-client
. Parece que el reenvío/enrutamiento a través del salto en el medio de alguna manera no funciona. (Había configurado el TTL en 5, por lo que ese no debería ser el problema).
Me complace proporcionar más detalles si es necesario (como ip route list
el resultado), pero no quería saturar la pregunta innecesariamente.
Respuesta1
El problema fue que no me aseguré de que openvpn-client
se uniera al grupo de multidifusión, por lo que el enrutador en el medio ( openvpn-server
) no sabía que debía enviar tráfico de multidifusión allí.
La siguiente configuración es suficiente:
- En
backend
, configure la ruta224.0.0.0/4 via 172.16.7.2
; esto garantiza que el tráfico para el rango de IP de multidifusión se envíeopenvpn-server
(es posible que desee especificar un rango más estrecho) - Instalar y
pimd
comenzaropenvpn-server
Asegúrese de que
openvpn-client
anuncie que quiere unirse al grupo de multidifusión.scmroute
Para ello, se necesita un demonio IGMP como el . Esto funciona en sólo dos pasos:smcroute -d
-- iniciar el demoniosmcroute -j tun0 239.1.2.3
-- para unirse al grupo
Tenga en cuenta que no es posible ejecutar ambos en un solo comando (
smcroute -d -j tun0 ...
).
De esta manera, todo funciona como se esperaba.
Nota:Si inicia los demonios pimd
o smcroute
antes de que OpenVPN se haya configurado tun0
, las cosas no funcionarán. Es mejor iniciarlos usando route-up
el gancho de OpenVPN.