udpxy + FreeBSD 9.0

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
k-nike
проходил мимо
Сообщения: 5
Зарегистрирован: 2012-01-15 15:04:58

udpxy + FreeBSD 9.0

Непрочитанное сообщение k-nike » 2012-01-15 15:18:40

Долгое время мучился с igmpproxy, но в итоге узнал про udpxy, поставил и сразу все заработало.
Пару дней назад обновил фряху до последнего релиза, udpxy тоже последний из портов. Заметил появившийся баг:
Если в локальной сети кто-то смотрит, к примеру, 1-ый канал, то другой пользователь этот канал уже не может смотреть, другие каналы - легко.
Полагаю, что проблема где-то в ядре или у провайдера (но это конечно, маловероятно), так как и с параметрами udpxy игрался, и PF вкючал/отключал, и перекомпилировал udpxy. Не знаю что еще смотреть.
Ошибка выходит такая:

Код: Выделить всё

udpxy[4325]: setup_mcast_listener: bind: Address already in use
Более подробная:

Код: Выделить всё

2012-01-15 16:14:53.196086 MSK	c(4386)	write_buf: write: Broken pipe
2012-01-15 16:14:53.196171 MSK	c(4386)	Exited relay loop: received=[1316], sent=[-1], quit=[0]
2012-01-15 16:14:53.196334 MSK	c(4386)	multicast-group [DROP]
2012-01-15 16:14:53.196469 MSK	c(4386)	Mcast listener socket=[2] closed
2012-01-15 16:14:53.196683 MSK	c(4386)	Child process=[4386] exits with rc=[0]
2012-01-15 16:14:53.197301 MSK	S(4317)	*** Caught SIGCHLD (20) ***
2012-01-15 16:14:53.197457 MSK	S(4317)	Waiting on exited children
2012-01-15 16:14:53.197551 MSK	S(4317)	Client [4386] has exited.
2012-01-15 16:14:53.197652 MSK	S(4317)	Deleted client: pid=[4386]
2012-01-15 16:14:53.197688 MSK	S(4317)	Cleaned up 1 children, 1 still running
2012-01-15 16:14:53.197788 MSK	S(4317)	INTERRUPTED, yet will continue.
2012-01-15 16:14:53.197869 MSK	S(4317)	Waiting for input from [2] fd's, NO timeout
2012-01-15 16:14:55.412925 MSK	S(4317)	No children exited since last check
2012-01-15 16:14:55.413012 MSK	S(4317)	Got 1 requests
2012-01-15 16:14:55.413048 MSK	S(4317)	Accepting new connection
2012-01-15 16:14:55.413169 MSK	S(4317)	Accepted socket=[6] from 192.168.1.30:36768 n=1/nmax=16
2012-01-15 16:14:55.413212 MSK	S(4317)	Accepting new connection
2012-01-15 16:14:55.413276 MSK	S(4317)	Nothing more to accept
2012-01-15 16:14:55.413312 MSK	S(4317)	accept_requests: Sockets accepted: [1]
2012-01-15 16:14:55.413361 MSK	S(4317)	Waiting for input from [3] fd's, with timeout
2012-01-15 16:14:55.414208 MSK	S(4317)	No children exited since last check
2012-01-15 16:14:55.414259 MSK	S(4317)	Got 1 requests
pre-process sockets [1]: 6
2012-01-15 16:14:55.414356 MSK	S(4317)	acting on accepted socket [6] (1/1)
2012-01-15 16:14:55.414397 MSK	S(4317)	Reading command from socket [6]
2012-01-15 16:14:55.414447 MSK	S(4317)	HTTP buffer [60 bytes] received
GET /udp/239.255.2.8:1234 HTTP/1.1
Host: 192.168.1.9:4022
2012-01-15 16:14:55.414513 MSK	S(4317)	Request=[udp/239.255.2.8:1234], length=[20]
2012-01-15 16:14:55.414545 MSK	S(4317)	Command [udp] with params [239.255.2.8:1234] read from socket=[6]
2012-01-15 16:14:55.414586 MSK	S(4317)	udp_relay : new_socket=[6] param=[239.255.2.8:1234]
2012-01-15 16:14:55.415040 MSK	S(4317)	Client process=[4387] started for socket=[6]
2012-01-15 16:14:55.415092 MSK	S(4317)	Added client: pid=[4387], maddr=[239.255.2.8], mport=[1234], saddr=[192.168.1.30], sport=[36768]
2012-01-15 16:14:55.415267 MSK	S(4317)	process_requests: closing accepted socket [6]
2012-01-15 16:14:55.415287 MSK	c(4387)	min socket buffer = [65536], max space to use = [1500], Rmsgs = [1]
2012-01-15 16:14:55.415336 MSK	c(4387)	Setting up multicast listener
2012-01-15 16:14:55.415347 MSK	S(4317)	Processed [1/1] accepted sockets
newly-accepted sockets [1]: -1
2012-01-15 16:14:55.415415 MSK	S(4317)	All accepted sockets processed
2012-01-15 16:14:55.415458 MSK	S(4317)	Waiting for input from [2] fd's, NO timeout
2012-01-15 16:14:55.415481 MSK	c(4387)	current receive buffer size is [42080] bytes for socket [2]
2012-01-15 16:14:55.415557 MSK	c(4387)	receive buffer size set to [65536] bytes for socket [2]
2012-01-15 16:14:55.416153 MSK	c(4387)	setup_mcast_listener: bind: Address already in use
2012-01-15 16:14:55.416379 MSK	c(4387)	Sent HTTP response code=[500], reason=[Service error] to socket=[6]
HTTP/1.1 500 Service error
Content-Type:application/octet-stream


2012-01-15 16:14:55.416743 MSK	c(4387)	Child process=[4387] exits with rc=[-1]
2012-01-15 16:14:55.417604 MSK	S(4317)	*** Caught SIGCHLD (20) ***
2012-01-15 16:14:55.417729 MSK	S(4317)	Waiting on exited children
2012-01-15 16:14:55.417852 MSK	S(4317)	Client [4387] has exited.
2012-01-15 16:14:55.417948 MSK	S(4317)	Deleted client: pid=[4387]
2012-01-15 16:14:55.418043 MSK	S(4317)	Cleaned up 1 children, 1 still running
2012-01-15 16:14:55.418137 MSK	S(4317)	INTERRUPTED, yet will continue.
2012-01-15 16:14:55.418225 MSK	S(4317)	Waiting for input from [2] fd's, NO timeout
2012-01-15 16:14:55.418329 MSK	S(4317)	No children exited since last check
2012-01-15 16:14:55.418439 MSK	S(4317)	Got 1 requests
2012-01-15 16:14:55.418493 MSK	S(4317)	Accepting new connection
2012-01-15 16:14:55.418574 MSK	S(4317)	Accepted socket=[6] from 192.168.1.30:36769 n=1/nmax=16
2012-01-15 16:14:55.418615 MSK	S(4317)	Accepting new connection
2012-01-15 16:14:55.418650 MSK	S(4317)	Nothing more to accept
2012-01-15 16:14:55.418683 MSK	S(4317)	accept_requests: Sockets accepted: [1]
2012-01-15 16:14:55.418732 MSK	S(4317)	Waiting for input from [3] fd's, with timeout
2012-01-15 16:14:55.418873 MSK	S(4317)	No children exited since last check
2012-01-15 16:14:55.418946 MSK	S(4317)	Got 1 requests
pre-process sockets [1]: 6
2012-01-15 16:14:55.419039 MSK	S(4317)	acting on accepted socket [6] (1/1)
2012-01-15 16:14:55.419094 MSK	S(4317)	Reading command from socket [6]
2012-01-15 16:14:55.419146 MSK	S(4317)	HTTP buffer [60 bytes] received
GET /udp/239.255.2.8:1234 HTTP/1.0
Host: 192.168.1.9:4022
2012-01-15 16:14:55.419223 MSK	S(4317)	Request=[udp/239.255.2.8:1234], length=[20]
2012-01-15 16:14:55.419278 MSK	S(4317)	Command [udp] with params [239.255.2.8:1234] read from socket=[6]
2012-01-15 16:14:55.419329 MSK	S(4317)	udp_relay : new_socket=[6] param=[239.255.2.8:1234]
2012-01-15 16:14:55.419803 MSK	S(4317)	Client process=[4388] started for socket=[6]
2012-01-15 16:14:55.419877 MSK	S(4317)	Added client: pid=[4388], maddr=[239.255.2.8], mport=[1234], saddr=[192.168.1.30], sport=[36769]
2012-01-15 16:14:55.420032 MSK	S(4317)	process_requests: closing accepted socket [6]
2012-01-15 16:14:55.420097 MSK	S(4317)	Processed [1/1] accepted sockets
2012-01-15 16:14:55.420095 MSK	c(4388)	min socket buffer = [65536], max space to use = [1500], Rmsgs = [1]
newly-accepted sockets [1]: -1
2012-01-15 16:14:55.420169 MSK	c(4388)	Setting up multicast listener
2012-01-15 16:14:55.420213 MSK	S(4317)	All accepted sockets processed
2012-01-15 16:14:55.420267 MSK	S(4317)	Waiting for input from [2] fd's, NO timeout
2012-01-15 16:14:55.420339 MSK	c(4388)	current receive buffer size is [42080] bytes for socket [2]
2012-01-15 16:14:55.420399 MSK	c(4388)	receive buffer size set to [65536] bytes for socket [2]
2012-01-15 16:14:55.421001 MSK	c(4388)	setup_mcast_listener: bind: Address already in use
2012-01-15 16:14:55.421183 MSK	c(4388)	Sent HTTP response code=[500], reason=[Service error] to socket=[6]
HTTP/1.1 500 Service error
Content-Type:application/octet-stream


2012-01-15 16:14:55.421488 MSK	c(4388)	Child process=[4388] exits with rc=[-1]
2012-01-15 16:14:55.422004 MSK	S(4317)	*** Caught SIGCHLD (20) ***
2012-01-15 16:14:55.422086 MSK	S(4317)	Waiting on exited children
2012-01-15 16:14:55.422155 MSK	S(4317)	Client [4388] has exited.
2012-01-15 16:14:55.422202 MSK	S(4317)	Deleted client: pid=[4388]
2012-01-15 16:14:55.422254 MSK	S(4317)	Cleaned up 1 children, 1 still running
2012-01-15 16:14:55.422301 MSK	S(4317)	INTERRUPTED, yet will continue.
2012-01-15 16:14:55.422346 MSK	S(4317)	Waiting for input from [2] fd's, NO timeout
2012-01-15 16:14:55.422620 MSK	S(4317)	No children exited since last check
2012-01-15 16:14:55.422662 MSK	S(4317)	Got 1 requests
2012-01-15 16:14:55.422694 MSK	S(4317)	Accepting new connection
2012-01-15 16:14:55.422759 MSK	S(4317)	Accepted socket=[6] from 192.168.1.30:36770 n=1/nmax=16
2012-01-15 16:14:55.422858 MSK	S(4317)	Accepting new connection
2012-01-15 16:14:55.422911 MSK	S(4317)	Nothing more to accept
2012-01-15 16:14:55.422956 MSK	S(4317)	accept_requests: Sockets accepted: [1]
2012-01-15 16:14:55.423004 MSK	S(4317)	Waiting for input from [3] fd's, with timeout
2012-01-15 16:14:55.423065 MSK	S(4317)	No children exited since last check
2012-01-15 16:14:55.423108 MSK	S(4317)	Got 1 requests
pre-process sockets [1]: 6
2012-01-15 16:14:55.423326 MSK	S(4317)	acting on accepted socket [6] (1/1)
2012-01-15 16:14:55.423383 MSK	S(4317)	Reading command from socket [6]
2012-01-15 16:14:55.423438 MSK	S(4317)	HTTP buffer [60 bytes] received
GET /udp/239.255.2.8:1234 HTTP/1.0
Host: 192.168.1.9:4022
2012-01-15 16:14:55.423605 MSK	S(4317)	Request=[udp/239.255.2.8:1234], length=[20]
2012-01-15 16:14:55.423678 MSK	S(4317)	Command [udp] with params [239.255.2.8:1234] read from socket=[6]
2012-01-15 16:14:55.423718 MSK	S(4317)	udp_relay : new_socket=[6] param=[239.255.2.8:1234]
2012-01-15 16:14:55.424085 MSK	S(4317)	Client process=[4389] started for socket=[6]
2012-01-15 16:14:55.424153 MSK	S(4317)	Added client: pid=[4389], maddr=[239.255.2.8], mport=[1234], saddr=[192.168.1.30], sport=[36770]
2012-01-15 16:14:55.424403 MSK	c(4389)	min socket buffer = [65536], max space to use = [1500], Rmsgs = [1]
2012-01-15 16:14:55.424429 MSK	S(4317)	process_requests: closing accepted socket [6]
2012-01-15 16:14:55.424515 MSK	c(4389)	Setting up multicast listener
2012-01-15 16:14:55.424586 MSK	S(4317)	Processed [1/1] accepted sockets
newly-accepted sockets [1]: -1
2012-01-15 16:14:55.424716 MSK	S(4317)	All accepted sockets processed
2012-01-15 16:14:55.424788 MSK	c(4389)	current receive buffer size is [42080] bytes for socket [2]
2012-01-15 16:14:55.424855 MSK	S(4317)	Waiting for input from [2] fd's, NO timeout
2012-01-15 16:14:55.424873 MSK	c(4389)	receive buffer size set to [65536] bytes for socket [2]
2012-01-15 16:14:55.425581 MSK	c(4389)	setup_mcast_listener: bind: Address already in use
2012-01-15 16:14:55.425885 MSK	c(4389)	Sent HTTP response code=[500], reason=[Service error] to socket=[6]
HTTP/1.1 500 Service error
Content-Type:application/octet-stream


2012-01-15 16:14:55.426212 MSK	c(4389)	Child process=[4389] exits with rc=[-1]
2012-01-15 16:14:55.426746 MSK	S(4317)	*** Caught SIGCHLD (20) ***
2012-01-15 16:14:55.426852 MSK	S(4317)	Waiting on exited children
2012-01-15 16:14:55.426922 MSK	S(4317)	Client [4389] has exited.
2012-01-15 16:14:55.426972 MSK	S(4317)	Deleted client: pid=[4389]
2012-01-15 16:14:55.427023 MSK	S(4317)	Cleaned up 1 children, 1 still running
2012-01-15 16:14:55.427071 MSK	S(4317)	INTERRUPTED, yet will continue.
2012-01-15 16:14:55.427115 MSK	S(4317)	Waiting for input from [2] fd's, NO timeout
Ytlkjlkj
Yt bvtz djpvj;yjcnb

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: udpxy + FreeBSD 9.0

Непрочитанное сообщение Alex Keda » 2012-03-08 21:13:36

а чё это такое?
Убей их всех! Бог потом рассортирует...

ivol
проходил мимо
Сообщения: 2
Зарегистрирован: 2011-02-10 15:14:21

Re: udpxy + FreeBSD 9.0

Непрочитанное сообщение ivol » 2012-06-05 10:37:09

Та же фигня. Пришлось установить FreeBSD 8, с ней таких проблем нет.
Но есть другая проблема. Если каналы смотрят много людей, то периодически прекращается ретрансляция некоторых каналов.
Выглядит это так: загружаю плэй-лист с каналами, выбираю канал из списка, смотрю, через несколько минут воспроизведение канала прекращается и плеер переходит к воспроизведению следующего в списке канала. Трансляция "заткнувшегося" канала возобновляется через минуту-две.
Пробовал и Gentoo+UDPXY, результат тот же.

_tpf
проходил мимо
Сообщения: 2
Зарегистрирован: 2012-06-12 13:42:05

Re: udpxy + FreeBSD 9.0

Непрочитанное сообщение _tpf » 2012-06-12 13:51:10

Была такая же проблема.

Решается вот так:

Код: Выделить всё

cd /usr/ports/net/udpxy
make patch
Открываем файл work/udpxy-1.0.21-2/netop.c (ну или смотря какая у вас версия порта) любимым редактором.
В коде находим функцию setup_mcast_listener, а в ней строки

Код: Выделить всё

rc = setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR,
                         &ON, sizeof(ON) );
Меняем это дело на вот такое:

Код: Выделить всё

rc = setsockopt( sockfd, SOL_SOCKET, SO_REUSEPORT,
                         &ON, sizeof(ON) );
Сохраняем.
Пишем

Код: Выделить всё

make && make install 
И будет работать как родной

_tpf
проходил мимо
Сообщения: 2
Зарегистрирован: 2012-06-12 13:42:05

Re: udpxy + FreeBSD 9.0

Непрочитанное сообщение _tpf » 2012-06-13 9:34:57

ivol писал(а):Та же фигня. Пришлось установить FreeBSD 8, с ней таких проблем нет.
Но есть другая проблема. Если каналы смотрят много людей, то периодически прекращается ретрансляция некоторых каналов.
Выглядит это так: загружаю плэй-лист с каналами, выбираю канал из списка, смотрю, через несколько минут воспроизведение канала прекращается и плеер переходит к воспроизведению следующего в списке канала. Трансляция "заткнувшегося" канала возобновляется через минуту-две.
Пробовал и Gentoo+UDPXY, результат тот же.
А много это сколько? больше 40 или меньше? (я сам на 40 проверял - работает нормально).

Вот что можно сделать для того, чтоб понять что происходит:
1. Посмотреть в момент когда у вас прерывается картинка в плеере - не прерывается ли мультикаст поток от провайдера.
2. Попробуйте проверить, поступает ли "All members query" запрос в тот же интерфейс куда потребляется мультикаст. Запрос этот на адрес 224.0.0.1 (или 224.0.0.22, если провайдер юзает igmp v3), должен периодически повторяться, всегда через одинаковое количество времени. В ответ ваша ФриБСД должна отправлять igmp join сообщения как минимум на все группы, которые на данный момент ретранслирует udpxy.
3. Я не знаю как у вас там это построено на физическом уровне (тоесть одна реальная сетевка, а все остальные разбросаны вланами, может быть две сетевки или еще какой вариант) - но.. убедитесь на 100% что не засоряется вся пропускная способность той сетевой карты через которую поступает мультикаст, возможно join мессиджам просто не хватает полосы. Просто вы говорите о большом количестве пользователей, а если учесть что восновном телевизор ганяют в мпег2, где до 5Мбит/с битрейт, и почти всегда трафик iptv приоритезируется, то вполне реально что 20 человек в хлам разорвут 100Мбит сетевку. (за время работы в провайдерах я понял что иногда приходится проверять чуть ли не расположение звезд...).

Kaspian
рядовой
Сообщения: 22
Зарегистрирован: 2008-12-08 20:00:10

Re: udpxy + FreeBSD 9.0

Непрочитанное сообщение Kaspian » 2012-06-13 21:48:18

Спасибо. Помогло!
:)
_tpf писал(а):Была такая же проблема.

Решается вот так:

Код: Выделить всё

cd /usr/ports/net/udpxy
make patch
Открываем файл work/udpxy-1.0.21-2/netop.c (ну или смотря какая у вас версия порта) любимым редактором.
В коде находим функцию setup_mcast_listener, а в ней строки

Код: Выделить всё

rc = setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR,
                         &ON, sizeof(ON) );
Меняем это дело на вот такое:

Код: Выделить всё

rc = setsockopt( sockfd, SOL_SOCKET, SO_REUSEPORT,
                         &ON, sizeof(ON) );
Сохраняем.
Пишем

Код: Выделить всё

make && make install 
И будет работать как родной