Добрые люди, помогите пожалуйста!
Уже добрую неделю бьюсь с этой проблемой, но пока безрезультатно :(
Ситуация классическая: есть сервер FreeBSD 9.1, в него заходит кабель от провайдера (первая сетевуха) с городской сетью. Через него идет L2TP тунель в инет. Также к нему подключена моя локальная домашняя сеть (вторая сетевуха), в которой стоит NAS и WiFi роутер. На базе MPD5 сделана также возможность подключения по протоколу PPTP к локальной сети извне. На сервере NAS крутится TwonkyServer, который раздает контент по DLNA.Задача: получить DLNA контент на устройствах, подключенных через PPTP (через инет) к домашней сети.
В интернете такого рода проблема активно обсуждается, но тут просто напасть какая-то! Перепробовал все, скрипты, igmpproxy, udpxy, mrouted и тд и тп. Не работает :(
Если более конкретно:
- Интерфейсы
bge0: Городская сеть, шнур к провайдеру
em0: Локальная сеть
ng0: L2TP туннель в интернет
ng1...ngN: Подключения по PPTP в локальную сеть снаружи
root@home-da:/root # ifconfig
em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=4019b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,VLAN_HWTSO>
ether 2c:27:d7:14:f1:ec
inet 172.17.3.1 netmask 0xffff0000 broadcast 172.17.255.255
inet6 fe80::XXXX:d7ff:XXXX:f1ec%em0 prefixlen 64 scopeid 0x1
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=c019b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,VLAN_HWTSO,LINKSTATE>
ether a0:b3:cc:e9:51:76
inet 10.7.X.X netmask 0xffffffc0 broadcast 10.7.X.X
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x9
inet 127.0.0.1 netmask 0xff000000
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33152
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1400
inet 46.164.X.X --> 217.25.X.X netmask 0xffffffff
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
ng1: flags=89d1<UP,POINTOPOINT,RUNNING,NOARP,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1396
inet 172.17.3.1 --> 172.17.200.10 netmask 0xffffffff
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>cat /boot/loader.conf
ip_mroute_load="YES"pf:
...
pass in all
pass out all
pass in proto igmp all allow-opts
pass out proto igmp all allow-opts
...Я теперь и не уверен, а вообще это возможно? Скажите, какая дополнительная информация нужна? Логи там конфиги - все сразу предоставлю!
> Я теперь и не уверен, а вообще это возможно?Думаю, что скорее да, чем нет. ))
Попробуйте /usr/ports/net/xorp
>> Я теперь и не уверен, а вообще это возможно?
> Думаю, что скорее да, чем нет. ))
> Попробуйте /usr/ports/net/xorpСпасибо за совет, сейчас буду разбираться. Меня не покидает ощущение, что я упускаю что-то важное, что на поверхности лежит. Ведь теоретически все должно было бы сразу заработать, безо всяких прилуд сторонних. Ведь все отлично работает, если я присоединяюсь по вай-фаю к вай-фай роутеру. А это совершенно простая железка, безо всяких там smart-функций. М.б. PPTP вообще не поддерживает IGMP? IGMP - это ж вроде уровень L2, а NG-устройство PPTP туннеля - это уровень L3
updxy - это unicast, должно работать поверх соединений точка-точка без проблем.
> updxy - это unicast, должно работать поверх соединений точка-точка без проблем.К сожалению, не работает :( Проверял подключившись с iPad через программы AirAV и 8player. Без туннеля работает все отлично.
>> updxy - это unicast, должно работать поверх соединений точка-точка без проблем.
> К сожалению, не работает :( Проверял подключившись с iPad через программы AirAV
> и 8player. Без туннеля работает все отлично.А мануал читать к софту ?
Еще раз, медленно. Udpxy - это прокси из мультикаста в http unicast. Для него нужно соответственно плейлист отдавать иной. Для DLNA не подойдет. Тут, скорее, сработает OpenVPN в на tap интерфейсе, которым на IOS и не пахнет особо.
>>> updxy - это unicast, должно работать поверх соединений точка-точка без проблем.
>> К сожалению, не работает :( Проверял подключившись с iPad через программы AirAV
>> и 8player. Без туннеля работает все отлично.
> А мануал читать к софту ?
> Еще раз, медленно. Udpxy - это прокси из мультикаста в http unicast.
> Для него нужно соответственно плейлист отдавать иной. Для DLNA не подойдет.
> Тут, скорее, сработает OpenVPN в на tap интерфейсе, которым на IOS
> и не пахнет особо.Задача стоит:
>получить DLNA контент на устройствах, подключенных через PPTP (через инет) к домашней сети.Я понимаю, что есть иные способы доставки контента. Но интересует именно этот. К сожалению, tap действительно не работает в iOS, соотв. мост не получилось сделать с OpenVPN.
Прошу игнорировать мой коммент про udpxy как вредный. Все Вами написанное - для iptv годится, но не для DLNA.
Можно попробовать if-up/if-down скриптом передергивать Twonky с привязкой к ng* интерфейсу, может и сработает малой кровью. Самому пробовать - лень :)
> Можно попробовать if-up/if-down скриптом передергивать Twonky с привязкой к ng* интерфейсу,
> может и сработает малой кровью. Самому пробовать - лень :)Twonky же крутится на другом сервере физически, на Qnap TurboNAS. Там нет ng интерфейсов, только сетевуха, которая смотрит в локальную домашнюю сеть. Я думаю над тем, что поставить на фряхе DLNA-сервер, а на NASе отключить. Но пока хотелось бы запустить именно в такой конфигурации, если это конечно вообще возможно.
Еще не совсем понимаю, почему не проходит IGMP трафик между ng1 <-> em0, если PPTP интерфейс ng1 имеет туже подсеть, что и интерфейс локальной домашней сети em0? Вроде как тут даже никакая дополнительная маршрутизация не нужна, сеть то - одна.
> Еще не совсем понимаю, почему не проходит IGMP трафик между ng1 <->
> em0, если PPTP интерфейс ng1 имеет туже подсеть, что и интерфейс
> локальной домашней сети em0? Вроде как тут даже никакая дополнительная маршрутизация
> не нужна, сеть то - одна.*поскипано цензурой*,
172.17.200.10 netmask 0xffffffff != 172.17.3.0 netmask 0xffff0000 - это раз.
Два - ну прочитайте, пожалуйста, документацию, что такое IGMP и уясните, что к DLNA он имеет совсем никакого отношения, а также погуглите на предмет Dial-to-Connect VPN System for Remote DLNA Communication.
*поскипано цензурой*!
> 172.17.200.10 netmask 0xffffffff != 172.17.3.0 netmask 0xffff0000 - это раз.Разумеется я пробовал с маской 172.17/16 (устанавливал через ifconfig ng1 netmask 255.255.0.0) Просто невозможно выложить все пройденные попытки в этот пост, это тогда книга получится :)
> Два - ну прочитайте, пожалуйста, документацию, что такое IGMP и уясните,
> что к DLNA он имеет совсем никакого отношения,DLNA реализован на протоколе UPnP. На вики говорят, что для обнаружения UPnP-сети используется Simple Service Discovery Protocol (SSDP):
>SSDP is a text-based protocol based on HTTPU. It uses the User Datagram Protocol (UDP) as the underlying transport protocol. Services are announced by the hosting system with multicast addressing to a specifically designated IP multicast address at UDP port number 1900. In IPv4, the multicast address is 239.255.255.250
Насколько я понимаю, это протокол IGMP. Да и tcpdump показывает наличие этих пакетов на интерфейсах.
> а также погуглите на предмет Dial-to-Connect VPN System for Remote DLNA Communication.Погуглил, прямых ссылок по такому запросу 5 штук, к сожалению ничего полезного. Мб у тебя есть подходящаю ссылка? Я конечно еще попробую с таким запросом повозиться, но с наскока ничего не находится, что можно бы на практике применить.
Нашелся некоторый обходной путь!
Если запустить DLNA сервер (MediaTomb) на интерфейсе PPTP (ngN), то плейер с другой стороны туннеля видит его! Соответственно можно запускать копии сервера при создании туннеля. Ну и один на домашнюю сеть (на интерфейсе em0).Вопрос, что мешает DLNA траффику (похоже, пакетам IGMP) пройти с интерфейса em0 на интерфейс ng1 (оба в одной подсети) на FreeBSD - остается открытым.
> Вопрос, что мешает DLNA траффику (похоже, пакетам IGMP) пройти с интерфейса em0
> на интерфейс ng1 (оба в одной подсети) на FreeBSD - остается
> открытым.Здравствуйте, Вам правильно подсказали, не стоит искать никакого соотношения между DLNA и IGMP это разные вещи, если DLNA использует мультикаст адрес для оповещения клиентов о наличии сервера, это не значит что используется IGMP, как вариант возможно следует проверить открытость портов используемых сервисами, ну или пересмотреть метод подключения, на сколько знаю через pptp можно юзать мультикаст, внутри сети раздавать его вам ничто не мешает вне зависимости от того как настроена ваша локальная сеть, если только это не режется где то на роутере либо сервере. Для начала опишите Вашу сеть, какой трафик откуда идет и куда вы его хотите запихнуть, из выше сказанного по крайней мере мне мало что понятно.
Здравствуйте!Я нарисовал сеть: http://www.flickr.com/photos/96954350@N02/8947478900/
Трафик идет так. Физически мой сервер FreeBSD имеет 2 сетевые карты: bge0 и em0. Интерфейс bge0 подключен шнурком к городской сети. К интерфейсу em0 (домашняя сеть) подключен wifi-router в режиме моста. К wifi-router подключен NAS, на котором крутится DLNA сервер. На сервере запущен mpd5 l2tp клиент, который соединен по l2tp с провайдером (физически, через bge0). Ему соответствует виртуальный интерфейс ng0. С него в сервер заходит интернет. Также на сервере запущен mpd5 pptp сервер. Если к нему подключиться, то будет создан виртуальный интерфейс ng1(2,3,...)Для тестирования работы DLNA используется iPad. Результат такой:
1) Если iPad находится дома и подключен через wifi-router -> dlna работает корректно
2) Если iPad находится дома, подключен через wifi-router _и_ включен PPTP-тунель -> dlna работает корректно
3) Если iPad находится в инете и включен PPTP-тунель -> dlna сервер не виден. Остальные ресурсы сети работают корректно.Нигде ничего не режется, все порты открыты, pf имеет только правила nat и pass all.
Если я что-то непонятно описал, с удовольствием отвечу на вопросы. Также могу выложить любые логи.Заранее спасибо за помощь!
> Нигде ничего не режется, все порты открыты, pf имеет только правила nat
> и pass all.
> Если я что-то непонятно описал, с удовольствием отвечу на вопросы. Также могу
> выложить любые логи.
> Заранее спасибо за помощь!Здравствуйте.
Если соединение pptp происходит через freebsd и на нем же поднят nat, может быть стоит поковырять именно nat? Переадресацию маршрутов и тд.