Linux ignorando a rota multicast através de loopback

3

Estou tentando testar alguns códigos multicast em uma única máquina. Eu estou tentando obter os pacotes enviados através do dispositivo de loopback (lo) em vez da eth1 padrão. Googling continua aumentando o encantamento

route add -net 224.0.0.0 netmask 240.0.0.0 dev lo
ifconfig lo multicast

mas mesmo depois de fazer isso os pacotes ainda estão saindo pela eth1. Exemplo de código (Python)

#!/usr/bin/env python
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b'hello world', ('225.100.101.0', 8888))

Saída de tcpdump -i any 'udp port 8888' :

10:28:28.957679 IP 192.168.1.104.51159 > 225.100.101.0.8888: UDP, length 11

em que 192.168.1.104 é o endereço do host para eth1. Eu sei que posso usar a opção de soquete IP_MULTICAST_IF para forçá-lo (e isso funciona), mas eu preferiria ser capaz de definir a política de roteamento uma vez na máquina, em vez de em cada aplicativo que faz multicast.

Estou executando o Ubuntu 14.04 com o kernel 3.13.0-68-genérico.

    
por Bruce Merry 18.11.2015 / 09:40

1 resposta

1

Acontece que olhar para endereços IP no tcpdump era enganoso: sempre parece usar 192.168.1.104 como o endereço de origem, mesmo quando o pacote é enviado através de loopback. Ao especificar uma interface para o tcpdump eu poderia dizer qual interface foi realmente usada. A rota estava de fato trabalhando algumas vezes. Esta questão descreve um caso em que não funciona.

    
por 19.11.2015 / 08:23