Iptables

如何使用 iptables 在 2 個不同的 LAN 之間轉發多播流量?

  • December 31, 2021

目標:

需要 lmc 或“LAN Messenger”才能使用 iptables 在由 Linux 網關分隔的 2 個 LAN 上工作。

資訊:

  • 一定是這個程序“LAN Messenger”。
  • Lmc 使用組播地址 239.255.100.100:50000 來查看使用者,然後創建一個 tcp 連接進行聊天。
  • lan1 = olan1 = 192.168.2.0/24:網關是智能交換機“Linksys Etherfast 路由器”,過濾器組播已禁用。
  • lan2 = slan1 = 10.10.10.0/24:網關是linux盒子
  • 網關 pc = Ubuntu 14 伺服器。iptables 在區域網路之間轉發一些流量。

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 會轉發多播流量嗎?

我是否需要使用多播路由守護程序或代理,例如pimdor smcroute

我剛剛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

Debiansmcroute軟體包是 2.0.0 版,似乎不支持虛擬 eth,所以我從smcroute 首頁安裝了 2.3.1 版。多播路由howtosmcroute很有幫助。

我用這個ssmping包來測試多播。我ssmpingd在 ns2 中執行,同時ssmping -4 -I veth0b 10.0.1.1從 ns1 ping。這些是使用 group 的源特定多播 (SSM) 232.43.211.234,您還可以使用asmping. 我不知道 LAN Messenger 使用什麼。

我在主命名空間中啟用了轉發以允許單播 ping 請求通過,然後做了

smcroutectl add veth1a 10.0.1.1 232.43.211.234 veth0a

一切正常。我希望它也可以工作,根據您的設置進行調整,儘管您可能還必須smcroutectl join告訴您的交換機它們應該正確轉發多播。所有相關界面上的多個tcpdump終端視窗極大地幫助了調試。

我發現以下資訊很有趣:

為了能夠設置多播路由,程序必須連接到核心中的多播路由套接字,當該套接字關閉時,這是在 UNIX 程序結束時自動完成的,核心會清除所有路由。

這意味著如果您打算使用核心的多播路由功能,您必須使用惡魔,而不是命令行工具。

對於靜態與動態路由,它說:

smcroute 的預期目的是在動態多播路由無法正常工作的情況下提供幫助。然而,動態多播路由協議幾乎在所有情況下都是首選解決方案。原因是它們能夠將第 3 層信令轉換為第 2 層,反之亦然(IGMP 或 MLD)。

最後,密切關注 LAN Messenger 生成的 TTL,請參閱最後的多播常見問題解答

引用自:https://unix.stackexchange.com/questions/386490