멀티캐스트 라우팅은 사용자 공간에 연결되지 않습니다.

멀티캐스트 라우팅은 사용자 공간에 연결되지 않습니다.

좋습니다. 멀티캐스트 트래픽에서 데이터를 가져와야 하는 사용자 공간 애플리케이션이 있지만 커널 공간에서 애플리케이션이 데이터를 활용할 수 있는 사용자 공간으로 트래픽을 가져올 수 없는 것 같습니다. Redhat의 경우 커널 모듈이 누락되었을 수 있는지 궁금합니다. 아래에서 볼 수 있듯이 사용자 공간에 대한 경로를 생성하기 위한 모든 설정이 완료된 것처럼 보이지만 경로를 생성할 때 실제로는 예상한 대로 어떤 종류의 링크도 생성되지 않습니다.

지금까지 확인한 내용은 다음과 같습니다.

sysctl file
# Kernel sysctl configuration file for Red Hat Linux

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth2.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.icmp_echo_ignore_broadcasts = 0 #allow multicast through the kernel

따라서 내 말이 맞다면 내 커널은 트래픽을 필터링해서는 안 됩니다. 방화벽도 꺼져 있지만 INPUT 체인을 통한 모든 멀티캐스트 트래픽을 허용하도록 iptable 규칙을 수정했습니다. 경로를 생성하기 위해 Route-eth2 파일을 만들었습니다.

#create the persistent multicast route

224.0.0.0/4 via 0.0.0.0  dev eth2

또한 멀티캐스트 트래픽의 대상과 소스 사이에 라우터가 없기 때문에 게이트웨이를 0.0.0.0으로 설정했습니다. 이것이 제가 멀티캐스트 경험이 부족한 이유입니다. eth2의 소켓을 포트에 연결하고 224.0.0.70의 멀티캐스트 그룹에 대한 액세스를 요청하는 소프트웨어가 있습니다. (참고로, 소프트웨어는 다른 Linux 상자에서 작동합니다. 이전에는 작동했습니다. 동일한 OS 및 모든 장치에서 멀티캐스트 사용) 나는 내가 만든 서브넷 224.0.0.0/8에서 내 멀티캐스트 주소 224.0.0.70으로 라우팅되는 일종의 링크를 보고 싶었지만 적어도 지금은 그렇지 않습니다. 이 방법. 프로그램을 열기 전 IP Route Show의 내용입니다.

10.50.100.0/24 dev eth2  proto kernel  scope link  src 10.50.100.3
192.168.11.0/24 dev eth3  proto kernel  scope link  src 192.168.11.3
//more stuff 
224.0.0.0/8 dev eth2
default via 149.97.48.3 dev eth0  proto static

프로그램을 연 후 ip maddr을 살펴보니 eth2에 224.0.0.70이 표시되어 내가 믿는 그룹에 요청하고 가입한 것 같지만 심지어 maddr에서 이것을 보고 tcpdump를 사용하여 내가 맞는지 확인하고 확인했습니다. 해당 인터페이스로 멀티캐스트 트래픽을 보내면 사용자 측에는 아무 것도 표시되지 않으며 예상한 대로 IP 경로 표시에 대한 변경 사항도 표시되지 않습니다. 프로그램을 열면 IP 라우팅이 표시됩니다

224.0.0.0/8 dev eth2

또한 흥미로운 점은 mroute, pimd 또는 smcroute가 없다는 것입니다. 제가 본 것들은 꽤 많이 사용되었지만 Red Hat, 특히 Red Hat 6은 이를 지원하지 않으므로 igmp가 "생각"하는 것입니다. 사용하려고 하는데 활성화하지 않고 어떻게 사용할 수 있는지 잘 모르겠습니다. ifconfig를 사용하여 수행하고 확인했습니다.

그렇다면 내 경로 생성에 결함이 있는 것 같습니다. 아니면 경로를 프로그램에 연결하는 데 필요한 커널 모듈이 설치되어 있지 않은 것 같습니다. 어떤 아이디어와 설명이라도 대단히 감사하겠습니다. 감사합니다.

답변1

저는 실제로 네트워킹 전문가는 아니지만, 경험상 멀티캐스트 트래픽을 시작하고 실행하는 데 필요한 것은 다음과 같습니다.

sudo route add -net XXX.0.0.0 netmask 255.0.0.0 IFACE

여기서 XXX는 서브넷이고 IFACE는 인터페이스입니다. 이것이 ip route show전후의 나의 모습입니다.

앞으로:

default via 10.0.3.2 dev enp0s8 proto dhcp metric 109 
default via 192.168.14.1 dev enp0s3 proto dhcp metric 110 
10.0.3.0/24 dev enp0s8 proto kernel scope link src 10.0.3.15 metric 109 
169.254.0.0/16 dev enp0s8 scope link metric 1000 
192.168.14.0/24 dev enp0s3 proto kernel scope link src 192.168.14.146 metric 110 
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.102 metric 107

뒤쪽에:

default via 10.0.3.2 dev enp0s8 proto dhcp metric 109 
default via 192.168.14.1 dev enp0s3 proto dhcp metric 110 
10.0.3.0/24 dev enp0s8 proto kernel scope link src 10.0.3.15 metric 109 
169.254.0.0/16 dev enp0s8 scope link metric 1000 
192.168.14.0/24 dev enp0s3 proto kernel scope link src 192.168.14.146 metric 110 
192.168.56.0/24 dev enp0s9 proto kernel scope link src 192.168.56.102 metric 107 
224.0.0.0/8 dev enp0s3 scope link 

또한 pimd, smcroute 또는 mroute 모듈이 설치되어 있지 않습니다. 해당 포트에서 트래픽이 예상되는 경우 을 전달할 수 있습니다 socat.

이에 대해서는 더 자세히 설명하겠습니다... 그룹에 가입하기 전에 프로그램에서 라우팅을 제대로 구성하지 않고 멀티캐스트를 구성하지 않으면 그룹( setsockopt( sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)))에 멤버십을 얻으려고 할 때 오류 메시지가 표시됩니다.

그룹에 가입할 수 있으면 이 요구 사항이 충족된 것입니다.

소프트웨어에서 멀티캐스트 포트를 구성하기 위해 특별히 작성된 코드가 있습니까?

관련 정보