애플리케이션이 CentOS 7에서 멀티캐스트 패킷을 수신할 수 없습니다.

애플리케이션이 CentOS 7에서 멀티캐스트 패킷을 수신할 수 없습니다.

VMware 게스트인 CentOS 7.2 시스템이 있습니다. 멀티캐스트 그룹에 가입하고 예상한 모든 멀티캐스트를 보고 있지만 내 응용 프로그램에서는 스트림의 콘텐츠를 볼 수 없습니다. strace는 select() 시스템 호출을 기다리고 있음을 보여줍니다. 내가 무엇을 잊었나요?

내가 한 일은 다음과 같습니다.

  • 원격 호스트에서 멀티캐스트 전송자를 시작합니다.
  • VMware 호스트에 CentOS 7.2 게스트를 빌드합니다.
  • 방화벽을 중지하고 비활성화했으며 yum erase filewalld게스트에 있었습니다. iptables -L보여주다:

-

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
  • 난 달린다:socat UDP4-RECVFROM:65000,ip-add-membership=239.31.82.10:10.0.54.210,fork STDOUT
  • 이 명령의 출력이 표시되지 않습니다.
  • netstat -gn멀티캐스트 그룹에 가입되어 있음을 나타냅니다.
  • selinux가 비활성화되어 있고 /etc/selinux/config다음이 표시됩니다 SELINUX=disabled. 예, 설정한 후 재부팅했습니다. 나도 봤어요: SELinux status: disabledfromsestatus
  • tcpdump -n -nn -i eth0 host 239.31.82.10이 IP에서 인터페이스에 도착하고 UDP 포트 65000으로 향하는 패킷을 표시합니다.
  • 동일한 멀티캐스트 그룹에 가입된 다른 호스트는 데이터를 볼 수 있습니다.
  • 이번에는 CentOS 6.4를 사용하여 또 다른 VM 게스트를 구축했는데 제대로 작동했습니다. 멀티캐스트 발신자의 일반 출력이 표시됩니다.
  • CentOS 7.2를 사용하여 또 다른 VM 게스트를 다시 구축했는데 제대로 작동했습니다. 그러나 이번에는 최소 설치를 사용하고 있습니다.

내 질문것 같다마치 방화벽이 패킷을 차단하고 있는 것처럼 보이지만, 그림과 같이 방화벽이 활성화되어 있지 않습니다.

작동하지 않는 호스트와 작동하는 호스트 사이의 눈에 띄는 차이점 중 하나는 작동하지 않는 호스트에 두 개의 인터페이스가 구성되어 있다는 것입니다. 하지만 이번에도 멀티캐스트 그룹에 가입된 것으로 표시하고 인터페이스에 도착하는 패킷을 표시합니다. 또한 두 번째 인터페이스를 닫았지만 도움이 되지 않습니다.

감사해요.

답변1

아야! 속담,

일하지 않는 호스트와 일하는 호스트 사이의 한 가지 중요한 차이점은...

...저기에 용이 누워있으니까!

아야! 유명한 가설,

...하지만...

...이것이 모든 혼란의 근원이기 때문입니다!

문제는 Linux의 네트워크 역방향 경로 필터링에 있습니다. 문제는 패킷이 하나의 인터페이스로 들어오고 라우팅 테이블에서 보내는 호스트의 보낸 사람 주소가 다른 인터페이스(기본 라우터가 있는 인터페이스)를 통해 전달되어야 한다는 것을 발견한다는 것입니다. 따라서 커널은 패킷을 내 응용 프로그램으로 보내는 대신 패킷을 삭제합니다.

어떤 인터페이스를 사용해야 하는지 socat에 알려주기 때문에 IGMP 보고서가 전송됩니다. 라우터와 스위치는 내가 지시한 곳으로 정확히 갈 수 있도록 멀티캐스트를 성실하게 설정했습니다. 궁극적으로 불행한 것은 커널입니다.

저렴하고 저렴한 해결책은 sysctl을 사용하여 로 변경하는 것이지만 net.ipv4.conf.all.rp_filter, 주의하지 않으면 예상치 못한 결과가 발생할 수 있습니다(패킷이 잘못되었거나, 원하지 않는 패킷이 수신되거나, 패킷이 잘못된 방향으로 가는 경우). 상호 작용). 라우팅 테이블이 수행하려는 작업의 현실을 반영하는지 확인하는 것이 가장 좋습니다. 따라서 또 다른 해결 방법은 해당 특정 iface(즉, 사용자가 갖고 있는 항목)의 멀티캐스트 발신자 IP 전용 소스 또는 네트워크 경로를 설정하는 것입니다.10/etc/sysconfig/network-scripts/route-ifaceeth1

관련 정보