Для начала, я новичок как в работе с сетями, так и в дистрибутивах Unix / Ubuntu / Linux. Просто предупреждение, так как любая установка / код может выглядеть немного некрасиво.
По сути, моя конечная цель - успешно передать AirPlay Mirror на удаленный сервер Ubuntu с моего iPhone в другой сети Wi-Fi или в LTE.
TL; DR: с mdns-Repeater / avahi-daemon и OpenVPN я все еще не могу передавать запросы mDNS от eth0 к tun0.
Для начала я знал, что мне нужен приемник AirPlay для ОС на базе Ubuntu / Linux / Unix, который поддерживает зеркалирование (и, надеюсь, с открытым исходным кодом). Я нашел пару, большинство для Mac OS / Windows, или вообще не поддерживали зеркалирование. После небольшого поиска я нашел Раб в волшебном зеркале [ссылка 1 ниже], сервер / приемник Linux AirPlay с открытым исходным кодом, который запускается и работает (на основе моей отладки, поскольку у меня нет физического доступа к серверу, на котором я его запускал).
Теперь я знал, что AirPlay работает только по локальной сети (в то время я не понимал, как Bonjour работает только в той же подсети), поэтому я изучил некоторые варианты VPN. OpenVPN казался самым гибким и простым в настройке. Чтобы ускорить процесс и гарантировать, что я не сделаю ошибок при настройке OpenVPN, я использовал готовый скрипт из здесь [ссылка 2 ниже]. Протестировано и работает безупречно, VPN подключается без утечек DNS, и весь трафик успешно проходит через VPN.
У меня есть VPN, которая действует так, как будто мое устройство сейчас находится в локальной сети моего сервера, и у меня успешно работает Slave в Magic Mirror (сервер AirPlay). Так что это должно работать сейчас, не так ли? Не удивительно, что это не так, поскольку я не понимал, что сервер AirPlay на самом деле отправляет запросы mDNS / Bonjour (или зонды? Настоящий термин сейчас ускользает от меня ...). Для обычного пользователя, поскольку эти запросы mDNS являются zeroconf (нулевая конфигурация), это потрясающе! Но как корпоративному или бизнес-пользователю это сложно заставить работать через VLAN.
В результате исследований я пришел к выводу, что мне нужен какой-то тип репитера / прокси / моста mDNS. Я остановился на репитере mDNS. Я пытался использовать две программы.
Avahi-Daemon [ссылка 3 ниже] Похоже, об Авахи больше всего говорили и больше всего документировали, поэтому я решил использовать это. Я отредактировал файл конфигурации, чтобы разрешить Расположение конфигурации /etc/avahi/avahi-daemon.conf
[reflector]
enable-reflector=yes
и
[server]
allow-point-to-point=yes
Как объяснено здесь [ссылка 4 ниже] и здесь [ссылка 5 ниже].
Запуск Avahi Daemon в режиме отладки (avahi-daemon --debug) на первый взгляд казался работающим, но как только Slave в Magic Mirror (работающий на интерфейсе eth0, OpenVPN на интерфейсе tun0) запускается, он каким-то образом видит пакеты mDNS но всегда выводит кучу таких:
Received packet from invalid interface.
Received packet from invalid interface.
Received packet from invalid interface.
Received packet from invalid interface.
Принуждение Avahi к использованию только eth0 и tun0, после многих других изменений и настроек будет всегда выведите это.
Чтобы убедиться, что это не просто ошибка вывода, я запустил
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 для переднего плана / отладки. Это оно! Я запустил Slave в Magic Mirror, и mdns-Repeater успешно обнаружил и повторил запросы (по крайней мере, согласно его журналам). Но, к сожалению, работает то же самое tcpdump
Как видно выше, запросы все еще не проходят через туннель (tun0).
Теперь из моей отладки я могу только сделать вывод, что это либо причина того, что iptables / firewall или OpenVPN каким-то образом фильтруют порты или запросы. Не найдя в конфиге ничего, связанного с фильтрацией в OpenVPN, я перешел к своей теории iptables. Но бег iptables -L
ничего не приносит, буквально никаких правил в iptables нет.
Немного зная об iptables, я не знаю, является ли это причиной. Для собственной отладки я добавил все правила iptables, которые я мог найти, связанные с чем угодно, с разрешением mDNS / Bonjour / AirPlay. Кажется, ничего не помогает.
Любая помощь приветствуется! Я знаю, что это было долгое чтение, я не хотел, чтобы какая-то мелочь провалилась.
TL; DR: с mdns-Repeater / avahi-daemon и OpenVPN я все еще не могу передавать запросы mDNS от eth0 к tun0.
Все ссылки на источники здесь: http://pastebin.com/mVkpZwRY Извините, на данный момент мне не хватает репутации более чем на 2 ссылки.
Не знаю ответов, но для начала интерфейсы tun не поддерживают трансляцию. Если вы используете кран, они это делают. Похоже, что tap используется для моста в документации OVPN, вы можете использовать их в конфигурациях, которые используют tun. Они будут вести себя почти одинаково, но укажут BROADCAST как поддерживаемую опцию, когда вы их настроите.