Sebagai permulaan, saya cukup baru di kedua jaringan dan distro Unix / Ubuntu / Linux. Hanya peringatan, untuk pengaturan / kode apa pun mungkin terlihat agak jelek.
Pada dasarnya, tujuan akhir saya adalah berhasil AirPlay Mirror ke server remote Ubuntu dari iPhone saya di jaringan wifi yang berbeda atau di LTE.
TL; DR: Dengan mdns-repeater / avahi-daemon dan OpenVPN, saya masih tidak bisa meneruskan permintaan mDNS dari eth0 ke tun0.
Untuk memulai, saya tahu saya membutuhkan penerima AirPlay untuk OS berbasis Ubuntu / Linux / Unix yang mendukung mirroring (dan semoga open-source). Saya menemukan pasangan, kebanyakan untuk Mac OS / Windows, atau tidak mendukung mirroring sama sekali. Setelah sedikit pencarian, saya menemukan Slave di Magic Mirror , server / receiver Linux open-source open source yang beroperasi dan berfungsi (berdasarkan debugging saya, karena saya tidak memiliki akses fisik ke server tempat saya menjalankannya).
Sekarang, saya tahu AirPlay hanya berlari di LAN (pada saat itu tidak mengerti bagaimana Bonjour hanya bekerja pada subnet yang sama) jadi saya melihat ke beberapa opsi VPN. OpenVPN tampaknya paling fleksibel dan termudah untuk diatur. Untuk mempercepat dan menjamin bahwa saya tidak membuat kesalahan dengan mengatur OpenVPN, saya menggunakan skrip yang sudah dibuat sebelumnya dari sini . Diuji dan berfungsi dengan sempurna, VPN terhubung tanpa kebocoran DNS dan semua rute lalu lintas berhasil melalui VPN.
Saya memiliki VPN untuk bertindak seolah-olah perangkat saya ada di LAN server saya sekarang, dan Slave in the Mirror Mirror (AirPlay server) berjalan dengan sukses. Jadi itu seharusnya hanya berfungsi sekarang, kan? Tidak mengherankan, ternyata tidak, karena saya tidak mengerti server AirPlay benar-benar mengirimkan permintaan mDNS / Bonjour (atau probe? Istilah sebenarnya menyelinap di pikiran saya sekarang ..). Sebagai rumah, pengguna konvensional, karena permintaan mDNS ini adalah zeroconf (konfigurasi nol), ini luar biasa! Tetapi sebagai pengguna perusahaan atau bisnis, ini sulit untuk bekerja di VLAN.
Melalui penelitian saya menemukan hasil akhir bahwa saya memerlukan semacam setup tipe repeater / proxy / bridge mDNS. Saya berakhir dengan repeater mDNS. Ada dua program yang saya coba gunakan.
avahi-daemon
Avahi tampaknya yang paling banyak dibicarakan dan paling banyak didokumentasikan, jadi saya memutuskan untuk menggunakannya. Saya mengedit file config untuk mengizinkan Config location /etc/avahi/avahi-daemon.conf
[reflector]
enable-reflector=yes
dan
[server]
allow-point-to-point=yes
Seperti yang dijelaskan di sini dan di sini .
Menjalankan Avahi Daemon dalam mode debug (avahi-daemon --debug) tampaknya berfungsi pada pandangan pertama tetapi segera setelah Slave di Cermin Ajaib (berjalan pada antarmuka eth0, OpenVPN berjalan pada antarmuka tun0) dijalankan melihat paket mDNS entah bagaimana tetapi selalu menghasilkan banyak dari ini:
Received packet from invalid interface.
Received packet from invalid interface.
Received packet from invalid interface.
Received packet from invalid interface.
Memaksa Avahi untuk menggunakan hanya eth0 dan tun0, setelah banyak perubahan dan pengaturan lainnya akan selalu menghasilkan ini.
Untuk memverifikasi itu bukan hanya bug yang saya jalankan
tcpdump -i eth0 udp port 5353
dan
tcpdump -i tun0 udp port 5353
(port tempat permintaan mDNS melalui) eth0 berhasil menerima paket dari filter sementara tun0 tidak menerima. Jadi bukan bug keluaran. Saya bahkan mencobanya pada port 7000 (port yang didengarkan AirPlay server untuk Mirroring)
Tanpa keberhasilan dengan Avahi, saya menduga itu mungkin karena belum diperbarui sejak 2011.
repeater mdns
Tanpa file konfigurasi atau pengaturan yang diperlukan, mdns-repeater adalah opsi berikutnya yang saya ambil. Dan sepertinya ini berfungsi dengan benar. Jalankan mdns-repeater dengan
mdns-repeater eth0 tun0 -f
Tambahkan saja antarmuka yang Anda inginkan agar permintaan berulang dan -f untuk foreground / debugging. Itu dia! Saya menjalankan Slave di Magic Mirror dan mdns-repeater berhasil mendeteksi dan mengulangi permintaan (setidaknya sesuai dengan log-nya). Namun sayangnya, menjalankan tcpdump
perintah yang sama seperti yang terlihat di atas, permintaan masih belum melewati terowongan (tun0).
Sekarang dari debugging saya, saya hanya bisa menyimpulkan itu adalah penyebab iptables / firewall atau OpenVPN memfilter port atau permintaan entah bagaimana. Tidak menemukan apa pun di konfigurasi yang terkait dengan pemfilteran di OpenVPN, saya beralih ke teori iptables saya. Tetapi berlari iptables -L
tidak membawa apa-apa, secara harfiah tidak ada aturan di iptables.
Mengetahui sedikit tentang iptables, saya tidak tahu apakah ini penyebabnya. Untuk debugging saya sendiri, saya menambahkan setiap aturan iptables yang berbeda yang dapat saya temukan terkait dengan apa pun dengan mengizinkan mDNS / Bonjour / AirPlay. Sepertinya tidak ada yang bisa membantu.
Setiap dan semua bantuan sangat dihargai! Saya tahu ini sudah lama dibaca, saya tidak ingin ada masalah kecil yang gagal.
TL; DR: Dengan mdns-repeater / avahi-daemon dan OpenVPN, saya masih tidak bisa meneruskan permintaan mDNS dari eth0 ke tun0.
Jawaban:
Anda bisa, alih-alih mengulangi permintaan mDNS, gunakan
dns-sd
untuk membuat catatan layanan proxy. Jika Anda menjalankandns-sd -Z _raop._tcp
di jaringan dengan catatan mDNS tersedia, Anda harus mendapatkan sesuatu seperti ini:Anda dapat menggunakan ini untuk membuat catatan proxy untuk mengarahkan klien AirPlay ke server Anda. Untuk koneksi contoh saya, saya akan menggunakan ...
... di mana
192.0.2.23
diganti dengan alamat IP server airplay Anda dan yang lainnya disalin dari apa yang Anda dapatkandns-sd -Z
. Dengan ini, klien AirPlay harus dapat melihat server Anda.Catatan:
dns-sd
perintah yang saya gunakan di sini datang dengan macOS. Sejauh yang saya tahu itu tidak tersedia untuk linux, tetapi Anda mungkin bisa melakukan sesuatu yang mirip dengan avahi.sumber