最初に、私はネットワーキングとUnix/Ubuntu/Linuxディストリビューションの両方で非常に新しいです。単なる警告です。セットアップ/コードは少し見苦しいかもしれません。
基本的に、私の最終目標は、別のwifiネットワークまたはLTE上のiPhoneからリモートUbuntuサーバーへのAirPlayミラーを正常に実行することです。
TL; DR:mdns-repeater/avahi-daemonとOpenVPNを使用しても、mDNS要求をeth0からtun0に渡すことができません。
はじめに、ミラーリングをサポートするUbuntu/Linux/UnixベースのOS用のAirPlayレシーバーが必要であることを知っていました(そして、できればオープンソース)。ほとんどがMac OS/Windows用のカップルを見つけたか、ミラーリングをまったくサポートしていませんでした。もう少し検索したところ、マジックミラーのスレーブが見つかりました[下のリンク1]。実行して動作するオープンソースのLinux AirPlayサーバー/レシーバー(私が実行したサーバーに物理的にアクセスできないため、デバッグに基づいています。
さて、AirPlayがLAN上でのみ実行されることを知っていたため(Bonjourが同じサブネット上でのみ機能する方法を理解していなかったため)、いくつかのVPNオプションを調べました。 OpenVPNは、最も柔軟でセットアップが簡単なようです。速度を上げ、OpenVPNの設定を間違えないことを保証するために、ここから作成されたスクリプトを使用しました[下のリンク2] 。テストされ、問題なく動作したVPNは、DNSリークなしで接続し、すべてのトラフィックはVPN経由で正常にルーティングされます。
私のVPNは、デバイスがサーバーのLAN上にあるかのように動作し、マジックミラーのスレーブ(AirPlayサーバー)が正常に実行されています。それで今はうまくいくはずですよね?当然のことですが、AirPlayサーバーが実際にmDNS/Bonjourリクエスト(またはプローブ)を送信していることを理解していなかったので、実際にはそうではありませんでした。在宅の従来のユーザーとして、これらのmDNS要求はzeroconf(ゼロ構成)であるため、これは驚くべきことです!しかし、エンタープライズまたはビジネスユーザーとして、これをVLAN間で機能させることは困難です。
調査の結果、ある種のmDNSリピーター/プロキシ/ブリッジタイプのセットアップが必要になるという最終結果が思い付きました。結局、mDNSリピーターになりました。使用しようとしたプログラムは2つありました。
Avahi-Daemon [下のリンク3]Avahiが最も話題になり、最も文書化されているようだったので、それを使用することにしました。設定ファイルを編集して許可しましたConfig location /etc/avahi/avahi-daemon.conf
[reflector]
enable-reflector=yes
そして
[server]
allow-point-to-point=yes
説明されているようにここ[リンク4下]およびここ[リンク5下]。
Avahiデーモンをデバッグモード(avahi-daemon --debug)で実行すると一見すると機能しているように見えましたが、マジックミラーのスレーブ(eth0インターフェイスで実行され、tun0インターフェイスで実行されているOpenVPN)が実行されるとすぐに、mDNSパケットが何らかの形で表示されますしかし常にこれらの束を出力します:
Received packet from invalid interface.
Received packet from invalid interface.
Received packet from invalid interface.
Received packet from invalid interface.
Avahiにeth0とtun0のみを使用するように強制すると、他の多くの変更や設定ではalwaysがこれを出力します。
それが単なる出力バグではないことを確認するために実行しました
tcpdump -i eth0 udp port 5353
およびtcpdump -i tun0 udp port 5353
(mDNS要求が通過するポート)eth0はフィルターからパケットを正常に受信しますが、tun0は何も受信しません。したがって、出力バグではありません。私はポート7000(AirPlayサーバーがミラーリングをリッスンするポート)でも試しました
Avahiで成功しなかったので、それは2011年以降更新されていないためと考えられます。
mdns-repeater [下のリンク6]構成ファイルもセットアップも必要ないので、これは私が取った次のオプションです。そして、これは正しく機能しているようです。 mdns-repeaterを実行
mdns-repeater eth0 tun0 -f
リクエストを繰り返すインターフェースと、フォアグラウンド/デバッグ用の-fを追加するだけです。それでおしまい!私はマジックミラーでスレーブを実行し、mdns-repeaterはリクエストを正常に検出して繰り返しました(少なくともそのログによると)。しかし残念なことに、上記と同じtcpdump
コマンドを実行しても、リクエストはまだトンネル(tun0)を通過していません。
私のデバッグからは、それがiptables/firewallの原因であるか、OpenVPNが何らかの方法でポートまたはリクエストをフィルタリングしていることが原因であると結論付けることができるだけです。 OpenVPNのフィルタリングに関連する構成に何も見つからなかったので、私はiptables理論に進みました。しかしiptables -L
は何ももたらしません。文字通り、iptablesにルールはありません。
Iptablesについてほとんど知らないので、これが原因かどうかはわかりません。私自身のデバッグのために、mDNS/Bonjour/AirPlayを許可することで、何にでも関連するすべてのiptablesルールを追加しました。何も役に立たないようです。
どんな助けもありがたいです!私はこれが長い読み物だったことを知っています、私は小さな問題が抜け落ちることを望んでいませんでした。
TL; DR:mdns-repeater/avahi-daemonとOpenVPNを使用しても、mDNS要求をeth0からtun0に渡すことができません。
ここにあるソースへのすべてのリンク:http://Pastebin.com/mVkpZwRY申し訳ありませんが、現時点では2つを超えるリンクについて十分な評判がありません。
答えはわかりませんが、最初のtunインターフェースはブロードキャストをサポートしていません。あなたがタップを使用する場合、彼らはそうします。 Tho TapはOVPNのドキュメントでブリッジに使用されているようですが、tunを使用する構成でそれらを使用できます。それらはほぼ同じように動作しますが、ifconfigの際にサポートされているオプションとしてBROADCASTを示します。