iptables를 사용하여 2개의 서로 다른 LAN 간에 멀티캐스트 트래픽을 전달하는 방법은 무엇입니까?

iptables를 사용하여 2개의 서로 다른 LAN 간에 멀티캐스트 트래픽을 전달하는 방법은 무엇입니까?

표적:

lmc가 필요하거나"랜 메신저"iptables를 사용하여 Linux 게이트웨이로 분리된 2개의 LAN에서 작업합니다.

정보:

  • "LAN 메신저" 프로그램이어야 합니다.
  • Lmc는 멀티캐스트 주소 239.255.100.100:50000을 사용하여 사용자를 확인한 다음 채팅을 위한 TCP 연결을 만듭니다.
  • lan1 = olan1 = 192.168.2.0/24: 게이트웨이는 스마트 스위치 "Linksys Etherfast Router"이며 필터 멀티캐스트는 비활성화됩니다.
  • lan2 = slan1 = 10.10.10.0/24: 게이트웨이는 Linux 상자입니다.
  • 게이트웨이 PC = Ubuntu 14 서버. iptables는 LAN 간에 일부 트래픽을 전달합니다.

IPtable 규칙:

필터 테이블:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A FORWARD -i slan1 -o olan1 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m iprange --src-range 192.168.2.100-192.168.2.254 -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 9696 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p udp -m udp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -s 224.0.0.0/4 -d 224.0.0.0/4 -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -p igmp -j ACCEPT
-A FORWARD -i olan1 -o slan1 -j DROP

NAT 테이블:

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -j MASQUERAD

내 생각에 멀티캐스트 트래픽을 전달해야 하는 규칙은 다음과 같습니다.

-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p udp -m udp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -s 224.0.0.0/4 -d 224.0.0.0/4 -j ACCEPT
-A FORWARD -p igmp -j ACCEPT

tcpdump를 사용하여 게이트웨이에 대한 트래픽을 모니터링하는 경우 iptable 규칙을 변경하면 멀티캐스트 트래픽이 전혀 표시되지 않습니다.

iptables가 멀티캐스트 트래픽을 전달합니까?알겠어요?

pimd멀티캐스트 라우팅 데몬이나 프록시(예: 또는 ) 를 사용해야 합니까 smcroute?

답변1

방금 smcroute두 개의 네트워크 네임스페이스와 두 쌍을 사용하여 veth테스트했습니다 . 설정:

ns1         <-- main namespace -->    ns2
10.0.0.1 -- 10.0.0.254  10.0.1.254 -- 10.0.1.1
veth0b      veth0a          veth1a    veth1b

Debian smcroute패키지는 버전 2.0.0이고 가상 eth를 지원하지 않는 것 같아서 다음에서 버전 2.3.1을 설치했습니다.smcroute홈페이지. 이것멀티캐스트 라우팅 가이드또한 매우 도움이 됩니다 smcroute.

나는 이 ssmping패키지를 사용하여 멀티캐스트를 테스트합니다. ns1에서 ping을 보내는 ssmpingd동안 ns2에서 실행 중입니다 . ssmping -4 -I veth0b 10.0.1.1이는 그룹을 사용하는 SSM(소스 특정 멀티캐스트)이며 232.43.211.234ASM(모든 소스 멀티캐스트)을 테스트하는 데에도 사용할 수 있습니다 asmping. LAN 메신저가 무엇을 사용하는지 모르겠습니다.

유니캐스트 핑 요청을 허용하기 위해 기본 네임스페이스에서 전달을 활성화한 다음 실행했습니다.

smcroutectl add veth1a 10.0.1.1 232.43.211.234 veth0a

모두 괜찮습니다. smcroutectl join스위치가 멀티캐스트를 올바르게 전달해야 한다고 스위치에 알려야 할 수도 있지만 설정에 맞게 조정하면 작동할 것으로 기대합니다. 모든 관련 인터페이스의 다중 터미널 창은 tcpdump디버깅에 큰 도움이 됩니다.

다음 정보가 흥미로웠습니다.

멀티캐스트 경로를 설정하려면 프로그램이 커널의 멀티캐스트 라우팅 소켓에 연결되어야 하며 소켓이 닫힐 때(UNIX 프로그램이 종료될 때 자동으로 수행됨) 커널은 모든 경로를 지웁니다.

이는 커널의 멀티캐스트 라우팅 기능을 사용하려는 경우~ 해야 하다명령줄 도구 대신 악마를 사용하세요.

정적 라우팅과 동적 라우팅의 경우 다음을 의미합니다.

smcroute의 의도된 목적은 동적 멀티캐스트 라우팅이 제대로 작동하지 않는 상황을 돕는 것입니다. 그러나 동적 멀티캐스트 라우팅 프로토콜은 거의 모든 경우에 선호되는 솔루션입니다. 그 이유는 레이어 3 신호를 레이어 2 신호로 변환하거나 그 반대로 변환할 수 있기 때문입니다(IGMP 또는 MLD).

마지막으로 LAN 메신저에서 생성된 TTL에 세심한 주의를 기울이십시오.멀티캐스트 FAQ마지막에.

답변2

글쎄, 그것은 다음과 같습니다iptables 홀로이것은 갈 길이 아닙니다.

우분투 저장소에서 시도 smcroute하거나 다운로드 하겠습니다 . pimd지금까지 나는 이 중 어떤 것도 작동시키지 못했습니다.

smcroute를 사용하십시오:


iptables

-A INPUT -i lo -j ACCEPT
-A FORWARD -i slan1 -o olan1 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p igmp -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p udp -m udp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A PREROUTING -d 239.255.100.100/32 -j TTL --ttl-set 64

smcroute 2.3.1원시인에게서.

다음으로 추출/opt

./configure기본 옵션을 사용하세요.

구성 파일은 다음 위치에 있습니다.

/usr/local/etc/smcroute.conf

#phyint olan1 enable ttl-threshold 1
phyint olan1 enable ttl-threshold 5
phyint slan1 enable ttl-threshold 5
mgroup from olan1 group 239.255.100.100
mgroup from slan1 group 239.255.100.100
mroute from olan1 group 239.255.100.100 to slan1
mroute from slan1 group 239.255.100.100 to olan
  • ttl-threshold - 이것이 최소 임계값입니까?
  • 내 패킷의 TTL이 1이면 phyint가 이를 무시한다는 의미입니까? 혹시나 해서 5로 바꿨습니다.

sudo smcrouted

sudo smcroutectl show groups

GROUP (S,G)                        INBOUND                                                                                                    
(*, 239.255.100.100)               slan1
(*, 239.255.100.100)               olan1

sudo smcroutectl show routs

ROUTE (S,G)                        INBOUND          PACKETS    BYTES  OUTBOUND                                                                
(*, 239.255.100.100)               slan1                  0        0  olan1
(*, 239.255.100.100)               olan1                  0        0  slan1
(10.10.10.154, 239.255.100.100)    slan1                  2      344  olan1
(192.168.2.53, 239.255.255.250)    olan1                  4      776 
(10.10.10.101, 239.255.100.100)    slan1                  1       32  olan1
(192.168.2.101, 239.255.100.100)   olan1                  1       32  slan1
(10.10.10.1, 239.255.100.100)      slan1                  2       64  olan1

정확히는 모두가 아니군요...

WinXP 멀티홈 컴퓨터에서는 라우팅을 변경해야 합니다.

route add 224.0.0.0 mask 240.0.0.0 10.10.10.153

네트워크 카드 IP 주소 대신 인터페이스 번호를 사용해야 합니다...

  • 표시기가 1이 됩니다. TTL 문제인가요...

sudo smcroutectl show routs

ROUTE (S,G)                        INBOUND          PACKETS    BYTES  OUTBOUND
(*, 239.255.100.100)               slan1                  0        0  olan1
(*, 239.255.100.100)               olan1                  0        0  slan1
(192.168.2.53, 239.255.255.250)    olan1                  4      776 
(10.10.10.153, 239.255.100.100)    slan1                  1       32  olan1

LAN Messenger 1.2.32 network preferences

  • 연결 시간 초과(초) - 최대 출력 값
  • 최대 재시도 횟수--최대 출력 값

Upstart를 사용하여 Ubuntu 14에서 smcroute를 데몬으로 설정

/etc/init/smcroute.conf

# Upstart for custom compiled smcroute
## jc 2017 08 24
description "SMCRoute, a static multicast router"
author      "jc"
# Stanzas
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
# start on runlevel [2345]
start on (local-filesystems and net-device-up IFACE!=lo) or runlevel [2345]
# When to stop the service
#stop on runlevel [016]
stop on runlevel [!2345]
# Automatically restart process if crashed
expect fork
respawn
exec /usr/local/sbin/smcrouted -N -f /usr/local/etc/smcroute.conf -d 10 -l notice

모든 것이 작동하는 것 같습니다. 무작위 재부팅과 간헐적인 네트워크 중단, 정상적인 작업을 포함하여 잠시 동안 작업을 실행하게 됩니다.

  • smcroute를 데몬으로 만들기
  • 지속적인 경로 만들기
  • iptables 규칙 확인...이 필요합니다.
  • Win7 컴퓨터에서 서브넷을 볼 수 있도록 허용

관련 정보