Eu tenho um host com dois contêineres Docker (com NET_ADMIN
capacidade):
backend
com uma interfaceeth0
(172.16.7.3
)openvpn-server
com interfaceseth0
(172.16.7.2
) etun0
(10.8.0.1
), executando um servidor OpenVPN (modo tun)
Existe um cliente OpenVPN em outra máquina openvpn-client
com interface tun0
( 10.8.0.2
). A VPN está funcionando.
Configuração adicional de rota:
backend
tem rotas10.8.0.0/24 via 172.16.7.2
e224.0.0.0/4 via eth0
.openvpn-server
tem rotas10.8.0.0/24 dev tun0
e224.0.0.0/4 dev tun0
.
backend
pode executar ping com sucesso openvpn-client
(roteado através de openvpn-server
): ping 10.8.0.2
funciona perfeitamente.
Observações:
Quando executo ping -t3 239.1.2.3
on openvpn-server
, eles passam pelo túnel VPN e posso ver os pacotes ICMP chegando openvpn-client
(com tcpdump -i tun0 net 224.0.0.0/4
on openvpn-client
).
Além disso, quando executo ping -t3 239.1.2.3
on backend
, eles saem pelo host eth0
e entram em on openvpn-server
's eth0
. Eu posso vê-los openvpn-server
usando tcpdump -i eth0 net 224.0.0.0/4
.
Problema:
Eu gostaria de poder continuar executando ping -t3 239.1.2.3
e backend
encaminhando os pings para openvpn-client
, como se 10.8.0.2
tivesse sido feito um ping. (O objetivo final é fazer multicast de pacotes UDP backend
para todos os clientes VPN.)
Minha tentativa:
smcroute -d -n -j eth0 239.1.2.3 -a eth0 172.16.7.3 239.1.2.3 tun0
Achei que isso configuraria a rota multicast, mas na verdade não faz nada. Não consigo ver os pacotes ICMP de saída nos openvpn-server
arquivos tun0
. -- O que está errado?
Também tentei configurar pimd
dois pares dos três hosts e também todos os três. Como resultado, eu poderia fazer um iperf
benchmark (como sugeridoaqui) entre backend
e openvpn-server
, e também entre openvpn-server
e openvpn-client
, mas não entre backend
e openvpn-client
. Parece que o encaminhamento/roteamento através do salto intermediário de alguma forma não funciona. (Eu configurei o TTL para 5, então esse não deveria ser o problema.)
Terei prazer em fornecer mais detalhes, se necessário (como ip route list
resultados), mas não queria sobrecarregar a questão desnecessariamente.
Responder1
O problema é que eu não me certifiquei de openvpn-client
ingressar no grupo multicast, então o roteador do meio ( openvpn-server
) não sabia que deveria enviar tráfego multicast para lá.
A seguinte configuração é suficiente:
- Em
backend
, configure a rota224.0.0.0/4 via 172.16.7.2
- isso garante que o tráfego para o intervalo de IP multicast seja enviado paraopenvpn-server
(você pode especificar um intervalo mais estreito) - Instale e
pimd
comeceopenvpn-server
Certifique-se de que
openvpn-client
anuncia que deseja ingressar no grupo multicast.Para esse fim, é necessário um daemon IGMP como essescmroute
. Isso funciona apenas em duas etapas:smcroute -d
--inicia o daemonsmcroute -j tun0 239.1.2.3
- para entrar no grupo
Observe que não é possível executar ambos em um comando (
smcroute -d -j tun0 ...
).
Dessa forma, tudo funciona conforme o esperado.
Observação:Se você iniciar os daemons pimd
ou smcroute
antes da configuração do OpenVPN tun0
, as coisas não funcionarão. É melhor iniciá-los usando route-up
o gancho do OpenVPN.