DLNAリソース192.168.1.100を持つホームwifiネットワーク192.168.1.0/24があります。
イーサネット付きのテレビと、wifiとイーサネットの両方のインターフェイスを備えたネットブックがあります。
ノートブックをルーターのように動作させたい。つまり、ホームネットワークをwifi経由で取得し、イーサネットインターフェイスを介してテレビに転送します。
テレビにホームネットワークのdlnaリソースを認識させたい。
ネットブックのeth0インターフェイスに次のサブネットを使用してDHCPサーバーをセットアップしました。
subnet 10.0.0.1 netmask 255.255.255.0 {
range 10.0.0.5 10.0.0.10;
option routers 10.0.0.1;
}
ネットブックでeth0インターフェイスを次のように設定しました。
ifconfig eth0 10.0.0.1/24
転送を有効にしました:
echo 1 > /proc/sys/net/ipv4/ip_forward
Iptablesに転送ルールを追加しました:
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
これで、テレビは10.0.0.5のIPアドレスを取得し、インターネットを閲覧できますが、テレビはDLNAリソースを見つけることができません。
リソースの検出は10.0.0.1/24しか行われないと思うので、テレビは192.168.1.100のリソースを見つけることができません。どうすればなんらかのエイリアスを作成できるので、192.168.1.100は10.0.0.10のようなエイリアスになりました。
DLNAは放送のみです。そのため、10.0.0.0/24ネットワークから192.168.1.0/24ネットワークにブロードキャストパケットをルーティングすることはできません。
したがって、最善のアプローチは、ルーティングをまったく行わず、代わりにノートブックをブリッジとして使用し、DLNAリソースとTVを同じネットワークに配置することです。これらはステップです。
これは /etc/network/interfaces
:
auto lo br0
iface lo inet loopback
iface br0 inet static
bridge_ports eth0 wlan0
address 192.168.1.x
netmask 255.255.255.0
x
を現在のラップトップのIPアドレスに置き換えます。
3)DHCPを使用するようにテレビを設定します
そして、それで十分なはずです。ブリッジは、テレビからラップトップへの有線接続と、ラップトップからネットワークの他の部分へのWi-Fi接続に参加します。ブリッジであるため、DLNAブロードキャストはブリッジを介して転送され、応答が返されます。
また、ブリッジングは、テレビからのDHCPブロードキャストもラップトップを通過することを意味します。そのため、個別のDHCPサーバーは必要なく、ホームネットワーク上のDHCPサーバーを使用できます。
DHCPオプションにDNSサーバーを追加してみてください。テレビには、ドメイン名などの他の何かが必要な場合もあります。お使いのテレビが他のルーターで動作する場合は、DHCP監視ツール(片方のルーターはわかりません)を調べて、DHCPサーバーが配布したオプションを確認し、構成でそれらを模倣します。
また、echo 1 > /proc/sys/net/ipv4/ip_forward
しましたか?
第三に、range
スタンザが実際にrange 10.0.05 10.0.0.10
のように見える場合は、おそらくrange 10.0.0.5 10.0.0.10
に変更する必要があります。
さて、少し宿題をした後、DLNAは発見プロトコルとしてSSDPを使用しているようです。 「SimpleServiceDiscoveryProtocol」ウィキペディアのページから:
SSDPは、HTTPUに基づくテキストベースのプロトコルです。基盤となるトランスポートプロトコルとしてユーザーデータグラムプロトコル(UDP)を使用します。サービスは、ポート番号1900で特別に指定されたIPマルチキャストアドレスへのマルチキャストアドレス指定を使用してホスティングシステムによってアナウンスされます。IPv4では、マルチキャストアドレスは239.255.255.250 [3]であり、SSDP overIPv6はすべてのスコープにアドレスセットff0X :: cを使用します。 Xで示される範囲。[4]
Linuxでのマルチキャストトラフィックの経験はあまりありませんが、これを機能させるには、マルチキャストトラフィックの受信と転送を有効にする必要があるようです。