自宅にIPTVソリューションがあり、ISPは10.4.4.5
ポートからポートに10
毎秒239.3.5.3
数百の大きなUDPデータグラムを送信します10
。つまり、マルチキャストを使用します。現在のiptables
着信トラフィックの設定は非常に簡単です。
~# iptables -L INPUT -v -n --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 19 845 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
2 1146 275K ACCEPT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED /* established/related connections */
#
ルールiptables-save
形式:
# iptables-save -c
# Generated by iptables-save v1.6.0 on Sun Aug 26 12:51:11 2018
*nat
:PREROUTING ACCEPT [44137:4586148]
:INPUT ACCEPT [6290:1120016]
:OUTPUT ACCEPT [419:75595]
:POSTROUTING ACCEPT [98:8415]
[26464:2006874] -A POSTROUTING -o eth0 -m comment --comment SNAT -j MASQUERADE
COMMIT
# Completed on Sun Aug 26 12:51:11 2018
# Generated by iptables-save v1.6.0 on Sun Aug 26 12:51:11 2018
*filter
:INPUT DROP [72447:97366152]
:FORWARD ACCEPT [77426:101131642]
:OUTPUT ACCEPT [148:17652]
[17:787] -A INPUT -i lo -j ACCEPT
[333:78556] -A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -m comment --comment "established/related connections" -j ACCEPT
COMMIT
# Completed on Sun Aug 26 12:51:11 2018
#
eth0
上の写真はISP用のNICです。奇妙なことに、このマルチキャストトラフィックはカウンタによって破棄されていますが(チェーンのデフォルトポリシーカウンタは数MB / sずつ増加します)、実際にはマルチキャストトラフィックがmplayer
原因であるようです。 netfilter接続追跡システムの抜け穴に問題があります。これを確認するために使用できますconntrack -L
。例:
# conntrack -L | grep --color 239.3.
udp 17 29 src=10.4.4.5 dst=239.3.5.3 sport=10 dport=10 [UNREPLIED] src=239.3.5.3 dst=10.4.4.5 sport=10 dport=10 mark=0 use=1
conntrack v1.4.4 (conntrack-tools): 130 flow entries have been shown.
#
を実行しても上記のconntrack -F
項目が再び表示され、からビデオストリームを見ることができますmplayer
。ただし、最終的に(約5分後)エントリが消え、ストリームがすぐに停止します。
ちなみに、このLinuxベースのルータには9つの物理インターフェイスがあります。
# ip -br link
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth2 DOWN 00:a0:c9:77:96:bd <NO-CARRIER,BROADCAST,MULTICAST,UP>
eth1 UP 00:14:bf:5f:de:71 <BROADCAST,MULTICAST,UP,LOWER_UP>
eth0 UNKNOWN 00:50:8d:d1:4f:ee <BROADCAST,MULTICAST,UP,LOWER_UP>
eth3 DOWN 00:a0:c9:4b:21:a0 <NO-CARRIER,BROADCAST,MULTICAST,UP>
eth4 UP 00:20:e2:1e:2e:64 <BROADCAST,MULTICAST,UP,LOWER_UP>
eth5 DOWN 00:20:fc:1e:2e:65 <NO-CARRIER,BROADCAST,MULTICAST,UP>
eth6 DOWN 00:20:fc:1e:2e:8e <NO-CARRIER,BROADCAST,MULTICAST,UP>
eth7 UP 00:20:fc:1e:2f:67 <BROADCAST,MULTICAST,UP,LOWER_UP>
wlan0 UP 00:21:91:e3:20:20 <BROADCAST,MULTICAST,UP,LOWER_UP>
br0 UP 00:14:bf:5e:da:71 <BROADCAST,MULTICAST,UP,LOWER_UP>
# ip -br address
lo UNKNOWN 127.0.0.1/8
eth2 DOWN
eth1 UP
eth0 UNKNOWN 192.0.2.79/24
eth3 DOWN
eth4 UP
eth5 DOWN
eth6 DOWN
eth7 UP
wlan0 UP
br0 UP 192.168.0.1/24
#
私が言ったように、eth0
ISPに接続しました。eth1
プラスは、eth7
名前wlan0
の付いたブリッジの一部ですbr0
。ルーティングテーブルは次のとおりです。
# ip -4 r
default via 192.0.2.1 dev eth0
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.79
192.168.0.0/24 dev br0 proto kernel scope link src 192.168.0.1
#
すべてのインターフェイスのさまざまなネットワークパラメータはここにあります。
# ip -4 netconf
ipv4 dev lo forwarding on rp_filter off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
ipv4 dev eth2 forwarding on rp_filter off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
ipv4 dev eth1 forwarding on rp_filter off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
ipv4 dev eth0 forwarding on rp_filter off mc_forwarding on proxy_neigh off ignore_routes_with_linkdown off
ipv4 dev eth3 forwarding on rp_filter off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
ipv4 dev eth4 forwarding on rp_filter off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
ipv4 dev eth5 forwarding on rp_filter off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
ipv4 dev eth6 forwarding on rp_filter off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
ipv4 dev eth7 forwarding on rp_filter off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
ipv4 dev wlan0 forwarding on rp_filter off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
ipv4 dev br0 forwarding on rp_filter off mc_forwarding on proxy_neigh off ignore_routes_with_linkdown off
ipv4 all forwarding on rp_filter off mc_forwarding on proxy_neigh off ignore_routes_with_linkdown off
ipv4 default forwarding on rp_filter off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
#
これが予想される動作ですか?私の最初の考えは、conntrackモジュールがIGMP "Membership Report"メッセージをチェックしてトラフィックが到着することを許可できるということ239.3.5.3
でしたが、それでもトラフィックがどのように許可されるかは説明されていませんconntrack -F
。
答え1
同様の設定を使用した後pimd
、私は次の結論を出すことができます。
filter/FORWARD
このフローに対してマルチキャストルーティングが有効になっている限り、汎用(データ)マルチキャストパケットが転送されます。 conntrackエントリudp 17 29 src=10.4.4.5 dst=239.3.5.3 sport=10 dport=10 [UNREPLIED] src=239.3.5.3 dst=10.4.4.5 sport=10 dport=10 mark=0 use=1
は転送されたフローであり、このコントラクトエントリをトリガする新しいパケットである1だけ合計nat/PREROUTING
カウンタをインクリメントします。nat/POSTROUTING
- リンクローカルマルチキャストパケット(224.0.0.{1,22}のIGMPパケットと224.0.0.13のPIMv2)が停止します
filter/INPUT
。 - フローが以前に有効になっている場合、マルチキャストルータは一定期間その特定のマルチキャスト宛先への転送を有効にします。設定されたタイムアウトが発生し、ファイアウォールが原因でLANからIGMPレポートを受信できない場合、またはファイアウォールがPIMv2を受信しない場合は、受信中のクライアントが存在しないか、有効なフローがないと見なされ、そのマルチキャスト配信を停止します。ストリーミング。
最後に、Linuxルーターが次のものを受け取ることを許可する必要があります。
ルータが受信しているマルチキャストクライアントを知ることができるLAN上のIGMPパケット:
iptables -A INPUT -i br0 -p igmp -j ACCEPT
私の特定の設定は
pimd
PIMv2を使用しています。そのプロトコルが常に使用されているかどうかはわかりませんが、ソースIPが192.0.0.1でない場合は、DROPポリシーを維持しながらPIMプロトコルが機能することを許可する必要があります。 2.1(ただし10.4.4.5):iptables -A INPUT -s 192.0.2.1 -i eth0 -p pim -j ACCEPT
ISPルーターでIGMPパケットを許可する必要があるかもしれませんが、私の特定の設定ではそれを必要としません。
iptables -A INPUT -s 192.0.2.1 -i eth0 -p igmp -j ACCEPT
修正する:
チェーンのDROPポリシーはfilter/INPUT
まだヒットを示しています。 Linuxルーターの独自のIGMPおよびPIMv2パケット(マルチキャスト)は、外部に送信されるとローカルシステムにループバックされるため、上記のNot Enabledルールによって(害を受けずに)破棄されます。適切なルールを追加した後、PIMv2で奇妙な動作が発生し、.naルールも制限するようにパケットを表示するfilter/OUTPUT
必要がありましたfilter/INPUT
。最後に、次の規則を使用すると、filter/INPUT
マルチキャストトラフィックを転送するときにDROPポリシーカウンタは常に[0:0]のままになります。
# Generated by iptables-save v1.6.2 on Mon Aug 27 01:01:48 2018
*nat
:PREROUTING ACCEPT [1:56]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [1:56]
[0:0] -A POSTROUTING -s 192.168.0.0/24 -o eth0 -m comment --comment SNAT -j MASQUERADE
COMMIT
# Completed on Mon Aug 27 01:01:48 2018
# Generated by iptables-save v1.6.2 on Mon Aug 27 01:01:48 2018
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [1533311:325676232]
:OUTPUT ACCEPT [75:3724]
[0:0] -A INPUT -i lo -j ACCEPT
[1:56] -A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[40:1800] -A INPUT -i br0 -p igmp -j ACCEPT
[14:774] -A INPUT -s 192.0.2.1/32 -i eth0 -p pim -j ACCEPT
[28:1288] -A INPUT -s 192.0.2.1/32 -i eth0 -p igmp -j ACCEPT
[17:932] -A INPUT -s 192.0.2.79/32 -i eth0 -p igmp -j ACCEPT
[28:1392] -A INPUT -m mark --mark 0x1 -j ACCEPT
[28:1392] -A OUTPUT -p pim -j MARK --set-xmark 0x1/0xffffffff
COMMIT
# Completed on Mon Aug 27 01:01:48 2018
マルチキャストクライアントをシミュレートして標準出力にダンプできます。socat
(複数のインタフェースがある場合はローカルIPを指定してください):
socat -u UDP4-RECV:10,ip-add-membership=239.3.5.3:0.0.0.0 -