私はウェブに初めて触れました。 upnp が実行される 2 つの異なる物理インターフェイスに 2 つのクライアントが接続されています。 2人の人がお互いを見つけ合い、お互いにpingできるように、同じマルチキャストグループに追加したいと思います。それは可能ですか? smcrouteを使用してこれをどのように達成できますか?
私が試したことは次のとおりです。
2つのブリッジインターフェイス(要件)を作成し、それを対応する物理インターフェイスに接続しました。
smcroute.confに次のルールを追加しました。
mgroup from br1 group 239.255.255.250
mgroup from br2 group 239.255.255.250
mroute from br1 group 239.255.255.250 to br2
mroute from br2 group 239.255.255.250 to br1
ip -s mrouteはこれを示しています
# ip -s mroute
(x.x.x.x, 239.255.255.250) Iif: br2 Oifs: br1
242 packets, 46509 bytes
(x.x.x.x, 239.255.255.250) Iif: br1 Oifs: br2
243 packets, 46740 bytes
(x.x.x.x, 239.255.255.250) Iif: unresolved
#
しかし、私の顧客はお互いを見つけることができません。私がこれを間違っているのでしょうか?
/proc/net/ip_mr_vif は、br1 および br2 インターフェイスに入出力パケットがあることを示しています。
これは要件です。 2 つの物理インターフェイスがありますが、一部の組織的な制限により、同じブリッジにタグが付けられたくありません。これらのインターフェイスに接続されたいくつかのクライアントがあり、upnpスタックはこれらのインターフェイスで実行されます。私は彼らがお互いを見つけることを願っています。
ここで試した解決策は、arpプロキシとsmcrouteを使用することです。両方のクライアントが他のクライアントを検出できるようにarpプロキシを使用しています。私はsmcrouteを使用して両方のインターフェイスに接続されているすべてのクライアントをマルチキャストグループ239.255.255.250にタグ付けし、パケットを前後に転送しました。これは正しいアプローチですか?
私の設定図を追加します。
Device 1 Router Device 2
+-----------------+ +----------------------------+ +-----------------+
| | | | | |
| eth1 | | br2 br1 | | wlan0 |
| 169.254.10.10 |-----| 169.254.50.1 10.0.0.1 |----| 169.254.168.11 |
| (self assigned) | | | | (self assigned) |
+-----------------+ +----------------------------+ +-----------------+
プロキシarpを有効にするコマンド:
arp -i br2 -Ds 169.254.168.11 br1 pub
arp -i br1 -Ds 169.254.10.10 br2 pub
ip route add 169.254.168.0/24 dev br1
ip route add 169.254.10.0/24 dev br2
ip -s mrouteでパケットを見ることができますが、デバイスはお互いを見つけられません。
# ip -s mroute
(169.254.10.10, 239.255.255.250) Iif: br2 Oifs: br1
3 packets, 549 bytes
(169.254.168.11, 239.255.255.250) Iif: br1 Oifs: br2
12 packets, 2196 bytes
(169.254.168.11, 239.255.255.250) Iif: unresolved
(169.254.10.10, 239.255.255.250) Iif: unresolved
#
ルータのTcpdump:
# tcpdump -i br2 -vvv port 1900
tcpdump: listening on br2, link-type EN10MB (Ethernet), capture size 262144 bytes
21:29:20.867399 IP (tos 0x0, ttl 4, id 0, offset 0, flags [DF], proto UDP (17), length 183)
169.254.10.10.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
21:29:21.368865 IP (tos 0x0, ttl 4, id 0, offset 0, flags [DF], proto UDP (17), length 183)
169.254.10.10.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
21:29:21.869556 IP (tos 0x0, ttl 4, id 0, offset 0, flags [DF], proto UDP (17), length 183)
169.254.10.10.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
21:29:24.614276 IP (tos 0x50, ttl 3, id 6384, offset 0, flags [DF], proto UDP (17), length 183)
169.254.168.11.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
21:29:25.114268 IP (tos 0x50, ttl 3, id 6393, offset 0, flags [DF], proto UDP (17), length 183)
169.254.168.11.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
21:29:25.614997 IP (tos 0x50, ttl 3, id 6680, offset 0, flags [DF], proto UDP (17), length 183)
169.254.168.11.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
^C
6 packets captured
6 packets received by filter
0 packets dropped by kernel
# tcpdump -i br1 -vvv port 1900
tcpdump: listening on br1, link-type EN10MB (Ethernet), capture size 262144 bytes
21:29:40.869434 IP (tos 0x50, ttl 3, id 0, offset 0, flags [DF], proto UDP (17), length 183)
169.254.10.10.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
21:29:41.371016 IP (tos 0x50, ttl 3, id 0, offset 0, flags [DF], proto UDP (17), length 183)
169.254.10.10.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
21:29:41.871953 IP (tos 0x50, ttl 3, id 0, offset 0, flags [DF], proto UDP (17), length 183)
169.254.10.10.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
21:29:44.616742 IP (tos 0x0, ttl 4, id 17080, offset 0, flags [DF], proto UDP (17), length 183)
169.254.168.11.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
21:29:45.138486 IP (tos 0x0, ttl 4, id 17334, offset 0, flags [DF], proto UDP (17), length 183)
169.254.168.11.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
21:29:45.622226 IP (tos 0x0, ttl 4, id 17487, offset 0, flags [DF], proto UDP (17), length 183)
169.254.168.11.50759 > 239.255.255.250.1900: [udp sum ok] UDP, length 155
^C
6 packets captured
6 packets received by filter
0 packets dropped by kernel
#
コマンド出力:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 x.x.x.x 0.0.0.0 UG 0 0 0 erouter0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br1
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br2
169.254.168.0 0.0.0.0 255.255.255.0 U 0 0 0 br1
239.255.255.250 0.0.0.0 255.255.255.255 UH 0 0 0 br1
#
# ifconfig br2
br2 Link encap:Ethernet HWaddr xxxxxxxx
inet addr:169.254.50.1 Bcast:169.254.255.255 Mask:255.255.0.0
inet6 addr: fe80::d02d:5dff:fe68:8e60/64 Scope:Link
UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1
RX packets:24012 errors:0 dropped:0 overruns:0 frame:0
TX packets:23477 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4779091 (4.5 MiB) TX bytes:5154708 (4.9 MiB)
#
# ifconfig br1
br1 Link encap:Ethernet HWaddr xxxxxxxx
inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: xxxxxxxxxxxxxxxxxxxxxxxxxx/64 Scope:Global
inet6 addr: fe80::16b7:f8ff:fefe:faf6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:44444 errors:0 dropped:0 overruns:0 frame:0
TX packets:55860 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6780562 (6.4 MiB) TX bytes:11041592 (10.5 MiB)
#
ベストアンサー1
ネットワークABC:
LANネットワークの基本単位は部分。オリジナル10Base5イーサネット長い(通常黄色)同軸ケーブルと吸血鬼タブを使用すると、セクションは次のようになります。
... ----------------------------- ...
| | |
Client 1 Client 2 Client 3
構成に応じて、ネットワークセグメント内のすべてのデバイスはそのネットワークセグメント内のすべてのデバイス上のすべてのイーサネットパケットを表示でき、目的のパケットのみをフィルタリングできます。これを通して放送(セグメント内のすべてのデバイスについて)およびマルチキャスト(特定のネットワークセグメントの特定のデバイスの場合)したがって、LANセグメントとも呼ばれます。ブロードキャストドメイン。ネットワークセグメントには、次によって決定されるIPアドレス範囲が割り当てられます。ネットマスク。したがって、上記の例では、セグメントは192.168.1.0/24(つまり、「セグメント名」は24ビットであり、各クライアントの末尾に8ビットがあります)を持つことができ、クライアント1は192.168.1.1になり、クライアントは192.168です。することができます。 。 1.2など
イーサネットが吸血鬼タブの代わりにポイントツーポイント接続に変わると、変化セグメントを形成するために使用されます。
+-----------------------+
| Switch |
+-----------------------+
| | |
Client 1 Client 2 Client 3
概念的には、スイッチは単にあるポートで受信したパケットを他のすべてのポートに送信します。 (実際には最適化があります)。
したがって、2つのクライアントが互いにマルチキャストを送信できるように接続する最も簡単な方法は、上記の画像に示すようにスイッチを使用して同じネットワークセグメントに配置することです。
Linuxコンピュータに複数のイーサネットポートがあり、それをスイッチに入れるとスイッチとして機能できます。足:
+-------------- Linux PC---------------+
| |
| 192.168.1.4 |
| <------------ br0 ------------> |
| eth0 eth1 eth2 |
| | | | |
+--------------------------------------+
| | |
Client 1 Client 2 Client 3
192.168.1.1 192.168.1.2 192.168.1.3
ブリッジはもともとこの構造が2つのLANセグメントを接続するために使用されていたため、ブリッジと呼ばれますが、ここではスイッチとして使用されます。ブリッジはオプションの「内部」インタフェースを持つことができるため、概念的には次のようになります。
+------------------------------------------------+
| Switch |
+------------------------------------------------+
| | | |
Client 1 Client 2 Client 3 Linux PC
192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4
したがって、両方のクライアントがLinux PC上でお互いを見るためには、次のように使用できます。一つブリッジ(なぜ2つを使用したのか、なぜこれが必要なのかわかりません)。
クライアントが2つの異なるセグメントに存在する必要がある場合(組織の目的のために当社に通知しない)、ブリッジしないでください(OSIレベル2)。路線(OSIレベル3)。
作成(または起動時1
に展開の設定ファイルを/proc/sys/net/ipv4/ip_forward
それに対応するものに設定)すると、ルーティングが可能になり、ip route
自動的に追加されたパスが十分でない場合は、パスを確認して追加できます。
これはユニキャストトラフィックのためのものであり、マルチキャストトラフィックの場合は実際には同様のものが必要ですsmcroute
。
一つarpプロキシ何らかの理由でブリッジすることはできませんが(たとえば、トリプルアドレスモードのWLANおよびイーサネット)、ブリッジを望む非常に特定の場合の障害です。これはarpメッセージをなりすまし、異なるネットワークセグメントのデバイスが実際に同じネットワークセグメントにあるかのように各ネットワークセグメントを偽装し、ユニキャストトラフィックをルーティングするように機能します。ブロードキャスト(DHCP)やマルチキャストでは機能しません。
arpプロキシを使用するときに私たちに知らせていない特別なケースが発生しない場合は、おそらく間違っている可能性があります。ブリッジでarpプロキシを使用している場合は、私たちに話していない本当に話すことができない状況に直面しない限り、ほとんど間違いなく間違っています(すべてをブリッジできます)。
だから:
両方のクライアントを接続できるか(またはスイッチのみが使用可能か)を決定します。接続できない場合は、質問を更新して理由を説明してください。
ブリッジングが不可能な場合は、IP 転送をイネーブルにし、ルーティングを確認して動作するかどうかを
ping
テストします。それから設定できますsmcroute
。またはでssmping
テストasmping
いいえそしてping
。作業ssmping
後、asmping
定義に従ってローカルスコープがあるにもかかわらず、SSDPがルーティングされていることを確認してください(試していません)。そうしないと、より多くの混乱が発生する可能性があります。もしあなたが本当に持つarpプロキシを使用するには、質問を編集し、状況を完全かつ徹底的に説明して使用します。みんな詳細。
編集する
したがって、サーバーで次の設定を想定します。
- eth1および10.0.0.1/24
- eth2および10.0.1.1/24
- アドレス10.0.0.2のeth1の背後にあるクライアント1
- アドレス10.0.1.2のeth2の後ろのクライアント2
arpエージェントを殺します。
転送を有効にする:
echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward
方向を確認すると、方向が表示されますip route
。eth1
eth2
クライアント1で、、をping 10.0.0.1
順番に実行します。 3つの項目がすべて有効であることを確認してください。適切なアドレスを持つクライアント 2 にも同様に適用されます。ping 10.0.1.1
ping 10.0.1.2
それでも機能しない場合は、tcpdump -ni eth1
あるウィンドウで使用し、tcpdump -ni eth2
別のウィンドウでpingを実行して何が間違っているかを確認してください。
機能する場合は、ssmping
両方のクライアントにインストールします。sudo smcrouted -n
メッセージを表示できるように、新しいウィンドウでサーバーを起動します。私たちはテストにマルチキャストグループを使います226.1.1.234
。sudo smcroutectl add eth1 226.1.1.2 eth2
ない。ssmpingd
クライアント1で実行し、asmping -4 10.0.0.2 226.1.1.234
クライアント2で実行します。もう一度ssmpingd
クライアント2で実行し、asmping -4 10.0.1.2 226.1.1.234
クライアント1で実行します。それでもできない場合は、上記のようにデバッグしてみてください。
最後に、sudo smcroutectl add eth1 239.255.255.250 eth2
UPNP検索が機能しているかどうかをテストしてください。私は2つの追加のネットワークネームスペースを使ってこれをminidlna
テストしましたが、gupnp-universal-cp
ここではうまくいきました。
正常に動作したら、必要に応じて設定ファイルを設定します。
編集する
私は見上げるRFC3927と明確に言及
宛先アドレスが169.254/16プレフィックスにある場合、送信者はARPを介して宛先アドレスを検索し、そのパケットを同じ物理リンクの宛先に直接送信する必要があります。
ホストは転送のためにIPv4リンクローカル宛先アドレスを含むパケットをどのルータにも送信しないでください。
そして私が知っている限り、これは追加のARPルール(同じインターフェイスでなければなりません)を使用してLinuxカーネルで完全に強制されるため、169.254.*.*アドレスルーティングは不可能です。私たちがそれらをルーティングしようとするならば、私たちはLinuxカーネルと最後まで戦わなければなりません。たぶん可能かもしれませんが、私はそうではありません考える試してみてください。これはマルチキャストではなくユニキャストでのみ機能します。
169.254.*.*、UPNP、Apple Bonjourなどを含むデバイスは、同じLANセグメントで使用する必要があります。これは以下にも当てはまります。これを使用したいすべてのデバイス。これが完全な物語です。
次のオプションがあります。
デバイスをタッチして静的IPを設定するか、DHCPを受け入れるように説得します。私のすべてのメディアデバイスはこれを行うことができます。どのデバイスを持っているのか教えてくれなかったので、お手伝いできません。
一種のトンネル、VLAN、追加のSSID、または他のデバイスの後に1つまたは2つのメディアデバイスを配置すると、すべてのデバイスをブリッジする必要はありませんが、1つのLANセグメントでメディアデバイスを確認する必要があるすべてのデバイスを維持できます。 。何度もお問い合わせいただきましたが、ネットワーク設定について説明をしてくださって解決方法をお手伝いできませんね。
arp-proxyなどのユーザースペースで独自のネットワークスタックを実装し、RFCやネットワーク慣行を無視し、必要に応じて実行します。 ARPを通過する必要があるだけでなく、ブロードキャストとマルチキャストも通過する必要があるため、すでにほとんど自己実装されたNIHブリッジです。
実際にはすべてを接続しますが、
ebtables
管理上の問題に応じて強制的に分離するなどの方法を使用します。重複したお問い合わせにもかかわらず、行政上の問題について説明しないため、お手伝いできません。
これらのオプションのいずれも効果がなければ、望むことは不可能です。期間。