Linux는 루프백 시 멀티캐스트 라우팅을 무시합니다.

Linux는 루프백 시 멀티캐스트 라우팅을 무시합니다.

컴퓨터에서 일부 멀티캐스트 코드를 테스트하려고 합니다. 기본 eth1 대신 루프백 장치(lo)를 통해 패킷을 보내려고 합니다. Google 검색에 맞춤법이 계속 나타납니다.

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

하지만 이렇게 한 후에도 패킷은 여전히 ​​eth1을 통해 전송됩니다. 샘플 코드(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))

출력 tcpdump -i any 'udp port 8888':

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

그 중 192.168.1.104가 eth1의 호스트 주소입니다. IP_MULTICAST_IF 소켓 옵션을 사용하여 강제로 설정할 수 있다는 것을 알고 있지만(이 방법도 작동합니다) 멀티캐스트를 수행하는 모든 응용 프로그램보다는 컴퓨터에서 라우팅 정책을 한 번 설정할 수 있는 것을 선호합니다.

저는 커널 3.13.0-68-generic과 함께 Ubuntu 14.04를 실행하고 있습니다.

답변1

tcpdump에서 IP 주소를 보는 것은 잘못된 것으로 밝혀졌습니다. 루프백을 통해 패킷을 보낼 때에도 항상 192.168.1.104를 소스 주소로 사용하는 것 같습니다. tcpdump에 대한 인터페이스를 지정할 때 실제로 어떤 인터페이스가 사용되는지 알 수 있습니다. 이 경로는 때때로 작동합니다.이 문제작동하지 않는 상황을 설명합니다.

관련 정보