LinuxForum.Fans
Тема

Vlc в linux не принимает пакеты

Автор: vlcusr34 9 сообщений 13200 просмотров
#148921

Проблема в следующем:
У провайдера имеется IPTV, однако vlc отказывается его показывать.
Чтобы настроить iptv решил сначала настроить его в винде (vlc 1.1.7 и vlc 1.1.8), в винде заработало, хотя не сразу.
Далее посмотрел через wireshark что-же происходит в сети, долгое время парился, однако потом догадался и изменил в Линуксе параметр ядра: sysctl net.ipv4.conf.all.force_igmp_fersion=2 , после этого пакеты с видео и udp повалили на мою систему как в винде, однако vlc в Линуксе (vlc 1.1.3 и vlc 1.1.8 (собрал из исходников)) как не работал так ничего и не изменилось, проверил висит ли vlc на нужном порте (1234) (висит), приходят ли на этот порт пакеты (приходят).
Решил проверить не в плагинах ли vlc дело, удалил из папки виндовой vlc все плагины без которых vlc хоть как-то показывало, потом попробовал по одному удалять оставшиеся, однако мне не удалось воссоздать проблемы подобной в linux.
В общем сейчас я в тупике, google не помогает, вот решил обратиться в форумы...
Да замечу что настройку vlc в обоих системах произвожу при отключённом PPPoE.

Linux debian 2.6.32-5-686 #1 SMP Tue Mar 8 21:36:00 UTC 2011 i686 GNU/Linux

лог vlc 1.1.3 Linux:

text

main debug: processing request item udp://238.1.1.1 node Плейлист skip 0
main debug: resyncing on udp://238.1.1.1
main debug: udp://238.1.1.1 is at 0
main debug: starting new item
main debug: creating new input thread
main debug: Creating an input for 'udp://238.1.1.1'
main debug: thread (input) created at priority 10 (input/input.c:214)
main debug: TIMER input launching for 'udp://238.1.1.1' : 42769.664 ms - Total 42769.664 ms / 1 intvls (Avg 42769.662 ms)
main debug: thread started
main debug: using timeshift granularity of 50 MiB
main debug: using timeshift path '/tmp'
main debug: `udp://@238.1.1.1' gives access `udp' demux `' path `@238.1.1.1'
main debug: creating demux: access='udp' demux='' path='@238.1.1.1'
main debug: looking for access_demux module: 0 candidates
main debug: no access_demux module matched "udp"
main debug: TIMER module_need() : 0.231 ms - Total 0.231 ms / 1 intvls (Avg 0.231 ms)
main debug: creating access 'udp' path='@238.1.1.1'
main debug: looking for access module: 1 candidate
access_udp debug: opening server=:0 local=238.1.1.1:1234
main debug: net: opening 238.1.1.1 datagram port 1234
main debug: Multicast group join request
main debug: IP_ADD_MEMBERSHIP multicast request
main debug: using access module "access_udp"
main debug: TIMER module_need() : 0.351 ms - Total 0.351 ms / 1 intvls (Avg 0.351 ms)
main debug: Using AStream*Block
main debug: pre buffering
qt4 debug: IM: Setting an input
//здесь жду и жму кнопку стоп
main debug: incoming request - stopping current input
main debug: waitpipe: object killed
main debug: dying input
main debug: socket 11 polling interrupted
main debug: prebuffering done 0 bytes in 5s - 0 KiB/s
main error: cannot pre fill buffer
main warning: cannot create a stream_t from access
main debug: removing module "access_udp"
main debug: thread ended
main debug: dead input
qt4 debug: IM: Deleting the input

лог vlc 1.1.7 win:
http://vlcusr34.pochta.ru/vlc1.1.7winlog.txt

конфиг vlc 1.1.3 (файл vlcrc) Linux:
http://vlcusr34.pochta.ru/vlcrclinux.txt

конфиг vlc 1.1.7 (файл vlcrc) win:
http://vlcusr34.pochta.ru/vlcrcwin.txt

Из лога следует что vlc не получает никаких данных, однако пакеты идут на порт на котором он висит!
Вобщем у меня 2 вопроса: как сделать чтоб работало в Линуксе или как воссоздать проблему в винде.

P. S. Файрволл отключал.

#148959

Делаем такс :)
Пишем маршруты
route add -net 238.1.0.0 netmask 255.255.0.0 dev eth0
Сохраняем.
Теперь отключаем фильтрацию. Самый лёгкий способ это так:
nano /etc/sysctl.conf
Ищем строку "net.ipv4.conf.all.rp_filter = 1" если комментированный тогда снимите комментарий (точнее в начале строки удалите знак #). И замените 1 на 0.
И то же самое для строки "net.ipv4.conf.default.rp_filter=1" надо поменять на 0 и снять комментарий.
Должно получиться так "net.ipv4.conf.all.rp_filter = 0" и "net.ipv4.conf.default.rp_filter=0".
Теперь REBOOT
Vlc выбираем интерфейс и всё должно работать.
Почему всё так и этак разжевывать не буду. Если какие то проблемы пишите помогу.

P.S Если не прописывать маршрут тогда IP-TV тоже не наблюдается. Всё проверенно на ubuntu 10.xx

Делаем команду sudo sysctl -p для применения на лету.

#149037

Огромное спасибо!
Удалось добиться показа с отключённым файрволом!
Зайдите ещё раз в эту тему, я хочу задать вам вопрос по tcpdump (немного разберусь с текущим).

#149063

Разобрался в чём был мой камень преткновения: net.ipv4.conf.all.rp_filter
Собственно вопрос:
в двух словах что означают
packets captured
packets received by filter
packets droped by kernel

в утилите tcpdump?

Дело в том что при настройке я не думал о фильтрах в ядре, потому что значение отброшенных ядром пакетов равнялось нулю.
Получается пакеты отброшенные rp фильтром не отображаются в статистике tcpdump?
Раньше я считал что первое, это число пакетов дошедших до портов.
Второе число пакетов попавших на рассмотрение файрволу.
А третее это отброшенные пакеты (rp фильтры и т.д.), я думал все пакеты пришедшие на сетевуху попадают в эту статистику.

#149116

Для начала поймите что такое rp_filter а ответ поймёте сами на свой вопрос

#149120

Проблема полностью решена!

Настройка IPTV в Debian 6.0.x

1. Настроить файрволл:
открыть UDP 1234 (обязательно)
разрешить протокол IGMP (иначе видео будет прерываться)
отключить rp_filter (обязательно)
2. Сконфигурировать ядро (зависит от провайдера)
3. Настроить маршрутизацию
4. Запустить плеер vlc (настройка не требуется, достаточно указать адрес канала)

1.
В качестве файрвола использовать пакет arno-iptables-firewall
после установки выполнить команду:
dpkg-reconfigure arno-iptables-firewall
ответить на вопросы конфигуратора (указать порт UDP 1234)

Добавить в файл "/etc/arno-iptables-firewall/custom-rules" строку:
iptables -t filter -I INPUT -p igmp -j ACCEPT

Теперь нужно разобраться с rp_filter, который управляется в нашем случае через net.ipv4.conf.default.rp_filter и net.ipv4.conf.all.rp_filter (параметры ядра).
В моём случае я решил настроить их через файл:
/etc/arno-iptables-firewall/firewall.conf
необходимо чтобы он содержал строку:
RP_FILTER=0

2. В связи с тем что мой провайдер непонимал (видимо) протокола IGMP выше 2 версии, мне пришлось изменить параметры ядра и добавить в файл:
/etc/sysctl.conf
строку:
net.ipv4.conf.all.force_igmp_version=2

3. Для того чтоб vlc работал при активном PPPoE соединении, необходимо добавить статический маршрут, для этого необходимо отредактировать файл:
/etc/network/interfaces
содержимое до:
---------------------------------------------------------------------
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

auto dsl-provider
iface dsl-provider inet ppp
pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf
provider dsl-provider

auto eth0
iface eth0 inet manual
-------------------------------------------------------------------------
Содержимое после:
----------------------------------------------------------------------
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

auto dsl-provider
iface dsl-provider inet ppp
pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf
provider dsl-provider

auto eth0
iface eth0 inet manual
up route add -net 238.1.0.0 netmask 255.255.0.0 dev eth0
------------------------------------------------------------------------
Отмечу что "up route add -net 238.1.0.0 netmask 255.255.0.0 dev eth0" не идеальный вариант, т.к. она срабатывает даже если интерфейс уже поднят (и выдаёт ошибку)
4. Запустить vlc

#149124

Не перевариваю arno)
на счёт firewall дело самих утопающих.
Про маршрут при vpn хотел написать но подумал что у вас прямой.
Щас не найду тему где у меня был спор с провайдером на счёт маршрутов :D он меня допилил просто.
Поидее на multicast маршруты не надо а так вышло что надо.

#298783

У провайдера имеется IPTV, которое vlc прекрасно показывает напрямую. Но при подключении через шлюз не подаёт ни каких признаков жизни
Провайдер "Электронный Город"
На шлюзе стоит Debian 6.0.4 32-bit

/etc/network/interfaces:

text
#eth0 смотрит в интернет с динамическим IP
auto eth0
iface eth0 inet dhcp
    hwaddress ether 00:11:22:33:44:55
    up route add -net 239.1.0.0 netmask 255.255.0.0 dev eth0
#eth1 смотрит в локальную сеть
auto eth1
iface eth1 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255

/etc/sysctl.conf:

text
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.eth0.rp_filter=0
net.ipv4.ip_forward=1
net.ipv4.conf.all.force_igmp_version=2

iptables

сначала было

text
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

потом дописал

text
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
iptables -A FORWARD -p igmp -i eth0 -o eth1 -j ACCEPT
iptables -I INPUT -d 239.0.0.0/4 -j ACCEPT
iptables -I FORWARD -d 239.0.0.0/4 -j ACCEPT
iptables -A FORWARD -d 239.0.0.0/4 -i eth0 -p udp -m udp --dport 1234 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT

ifconfig+route

Показать
root@kostilo:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:11:22:33:44:55
inet addr:XXX.XXX.XXX.30 Bcast:XXX.XXX.XXX.63 Mask:255.255.255.192
inet6 addr: fe80::215:f2ff:fe34:fa02/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8552 errors:0 dropped:0 overruns:0 frame:0
TX packets:3644 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2399562 (2.2 MiB) TX bytes:481962 (470.6 KiB)

eth1 Link encap:Ethernet HWaddr 00:40:63:d9:a9:a6
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::240:63ff:fed9:a9a6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2823 errors:0 dropped:15 overruns:0 frame:0
TX packets:2547 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:402869 (393.4 KiB) TX bytes:2228789 (2.1 MiB)
Interrupt:10 Base address:0xe800

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:560 (560.0 B) TX bytes:560 (560.0 B)

root@kostilo:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
XXX.XXX.XXX.0 0.0.0.0 255.255.255.192 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
239.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 178.49.209.1 0.0.0.0 UG 0 0 0 eth0
root@kostilo:~#

Адреса в плейлисте имеют следующий вид

text
<track>
            <location>udp://@239.1.15.2:1234</location>
            <title>Россия 1</title>
            <image>http://www.cn.ru/data/tv/channels/rossija.png?m=20120807165124</image>
            <extension application="http://www.videolan.org/vlc/playlist/0">
                <vlc:id>1</vlc:id>
            </extension>
        </track>

при запуске в консоли VLC ругается

Показать
kst@debian:~$ vlc udp://@239.1.15.1:1234
VLC media player 1.1.3 The Luggage (revision exported)
Blocked: call to unsetenv("DBUS_ACTIVATION_ADDRESS")
Blocked: call to unsetenv("DBUS_ACTIVATION_BUS_TYPE")
Warning: call to signal(13, 0x1)
Warning: call to srand(1359193707)
Warning: call to rand()
Blocked: call to setlocale(6, "")
Blocked: call to sigaction(17, 0x7fa5a2111b50, 0x7fa5a2111ab0)
Warning: call to srand(1359193708)
Warning: call to rand()
Warning: call to srand(1359193708)
Warning: call to rand()
Warning: call to srand(1359193708)
Warning: call to rand()
Warning: call to srand(1359193708)
Warning: call to rand()
Warning: call to signal(13, 0x1)
Blocked: call to setlocale(6, "")

(process:4268): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Warning: call to signal(13, 0x1)
[0x1ff9e10] main stream error: cannot pre fill buffer

Есть мнение что маршруты не все прописаны.Ещё подозреваю версию протокола igmp. Куда копать?
Подскажите кто может...

#298811

Вот вывод файервола:

text
root@kostilo:~# iptables -L -v
Chain INPUT (policy ACCEPT 6916 packets, 564K bytes)
 pkts bytes target     prot opt in     out     source               destination         
  207  5796 ACCEPT     all  --  any    any     anywhere             base-address.mcast.net/4 

Chain FORWARD (policy ACCEPT 45960 packets, 53M bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- any any anywhere base-address.mcast.net/4 0 0 ACCEPT igmp -- eth0 eth1 anywhere anywhere 0 0 ACCEPT udp -- eth0 any anywhere base-address.mcast.net/4 udp dpt:1234 34945 5067K ACCEPT all -- eth1 any anywhere anywhere

Chain OUTPUT (policy ACCEPT 3391 packets, 246K bytes) pkts bytes target prot opt in out source destination root@kostilo:~#

Войдите или зарегистрируйтесь, чтобы ответить.