Присоединюсь к теме.
Ретрансляция через udpxy почему-то не работает. Имеется:
Код: Выделить всё
dog@euthanasic:~> uname -a
FreeBSD euthanasic 8.2-RELEASE-p2 FreeBSD 8.2-RELEASE-p2 #0: Sat May 28 17:38:41 EEST 2011 root@euthanasic:/usr/obj/usr/src/sys/EUTHANASIC i386
Ядро собрано с опцией
Код: Выделить всё
dog@euthanasic:~> grep MROUT /usr/src/sys/i386/conf/EUTHANASIC
options MROUTING # Multicast routing
updxy запущен и работает:
Код: Выделить всё
dog@euthanasic:~> sockstat | grep udpxy
root udpxy 31489 1 dgram -> /var/run/logpriv
root udpxy 31489 5 tcp4 172.31.0.1:4022 *:*
dog@euthanasic:~> ps ax | grep udpxy
31489 ?? I 0:00,18 /usr/local/sbin/udpxy -p 4022 -v -p 4022 -l /var/log/udpxy.log -a 172.31.0.1 -m AAA.BBB.CCC.DDD
В файрволе поставил вот такие правила:
Код: Выделить всё
pass quick proto igmp from any to any allow-opts
pass in on $ext_if proto udp to 239.0.0.0/8
pass in on $ext_if proto udp to 240.0.0.0/8
pass quick on $ext_if proto udp from any to any port 1234 allow-opts
pass quick on $int_if proto udp from $local_net to $int_if port 4022
Когда на локальном компе врубаю vlc и скармливаю ему плейлист со строками вида
http://172.31.0.1:4022/udp/239.0.0.x:yyyy, то он тупо проходится по списку каналов до конца, ничего не отображая. При этом в логах udpxy появляются сообщения вида:
Код: Выделить всё
2011-06-04 21:44:21.064570 EEST 31489 Accepted socket=[6]
2011-06-04 21:44:21.064672 EEST 31489 Reading command from socket [6]
2011-06-04 21:44:21.065416 EEST 31489 HTTP buffer [58 bytes] received
2011-06-04 21:44:21.065473 EEST 31489 Request=[udp/239.0.0.59:1234], length=[19]
2011-06-04 21:44:21.065496 EEST 31489 Command [udp] with params [239.0.0.59:1234] read from socket=[6]
2011-06-04 21:44:21.065518 EEST 31489 udp_relay : new_socket=[6] param=[239.0.0.59:1234]
2011-06-04 21:44:21.065785 EEST 31489 Added client: pid=[32016], maddr=[239.0.0.59], mport=[1234], saddr=[172.31.0.2], sport=[39664]
2011-06-04 21:44:21.065871 EEST 31489 Closed accepted socket [6]
2011-06-04 21:44:21.065892 EEST 31489 Server is waiting for input: socket=[5], pipe=[2]
2011-06-04 21:44:21.066014 EEST 31489 Client process=[32016] started for socket=[6]
2011-06-04 21:44:21.066371 EEST 32016 min socket buffer = [65536], max space to use = [1500], Rmsgs = [1]
2011-06-04 21:44:21.066402 EEST 32016 Setting up multicast listener
2011-06-04 21:44:21.066506 EEST 32016 current receive buffer size is [65536] bytes for socket [2]
2011-06-04 21:44:21.067291 EEST 32016 multicast-group [ADD]
2011-06-04 21:44:21.067344 EEST 32016 Mcast listener socket=[2] set up
2011-06-04 21:44:21.067366 EEST 32016 min socket buffer = [65536], max space to use = [1500], Rmsgs = [1]
2011-06-04 21:44:21.067387 EEST 32016 Data buffer will hold up to [1] messages
2011-06-04 21:44:21.067409 EEST 32016 UDP stream, RTP check enabled
2011-06-04 21:44:21.067495 EEST 32016 current send buffer size is [66608] bytes for socket [6]
2011-06-04 21:44:21.067519 EEST 32016 current receive buffer size is [65536] bytes for socket [2]
2011-06-04 21:44:21.067588 EEST 32016 Sent HTTP response code=[200], reason=[OK] to socket=[6]
2011-06-04 21:44:21.067644 EEST 32016 Relaying traffic from socket[2] to socket[6], buffer size=[2048], Rmsgs=[1], pauses=[0]
2011-06-04 21:44:26.068631 EEST 32016 read_buf: read: Resource temporarily unavailable
2011-06-04 21:44:26.068678 EEST 32016 read_data - EOF
2011-06-04 21:44:26.068699 EEST 32016 Exited relay loop: received=[-1], sent=[0], quit=[0]
2011-06-04 21:44:26.069329 EEST 32016 multicast-group [DROP]
2011-06-04 21:44:26.069391 EEST 32016 Mcast listener socket=[2] closed
2011-06-04 21:44:26.069529 EEST 32016 Child process=[32016] exits with rc=[0]
2011-06-04 21:44:26.070002 EEST 31489 *** Caught SIGCHLD in process=[31489] ***
2011-06-04 21:44:26.070082 EEST 31489 Client [32016] has exited.
2011-06-04 21:44:26.070116 EEST 31489 Deleted client: pid=[32016]
2011-06-04 21:44:26.070140 EEST 31489 Server is waiting for input: socket=[5], pipe=[2]
2011-06-04 21:44:26.099109 EEST 31489 Accepted socket=[6]
2011-06-04 21:44:26.099227 EEST 31489 Reading command from socket [6]
2011-06-04 21:44:26.099259 EEST 31489 HTTP buffer [58 bytes] received
2011-06-04 21:44:26.099281 EEST 31489 Request=[udp/239.0.0.60:1234], length=[19]
2011-06-04 21:44:26.099302 EEST 31489 Command [udp] with params [239.0.0.60:1234] read from socket=[6]
2011-06-04 21:44:26.099322 EEST 31489 udp_relay : new_socket=[6] param=[239.0.0.60:1234]
2011-06-04 21:44:26.099591 EEST 31489 Added client: pid=[32017], maddr=[239.0.0.60], mport=[1234], saddr=[172.31.0.2], sport=[55896]
2011-06-04 21:44:26.099681 EEST 31489 Closed accepted socket [6]
2011-06-04 21:44:26.099703 EEST 31489 Server is waiting for input: socket=[5], pipe=[2]
2011-06-04 21:44:26.099837 EEST 31489 Client process=[32017] started for socket=[6]
2011-06-04 21:44:26.099964 EEST 32017 min socket buffer = [65536], max space to use = [1500], Rmsgs = [1]
2011-06-04 21:44:26.099987 EEST 32017 Setting up multicast listener
2011-06-04 21:44:26.100083 EEST 32017 current receive buffer size is [65536] bytes for socket [2]
2011-06-04 21:44:26.101076 EEST 32017 multicast-group [ADD]
2011-06-04 21:44:26.101122 EEST 32017 Mcast listener socket=[2] set up
2011-06-04 21:44:26.101144 EEST 32017 min socket buffer = [65536], max space to use = [1500], Rmsgs = [1]
2011-06-04 21:44:26.101164 EEST 32017 Data buffer will hold up to [1] messages
2011-06-04 21:44:26.101185 EEST 32017 UDP stream, RTP check enabled
2011-06-04 21:44:26.101265 EEST 32017 current send buffer size is [66608] bytes for socket [6]
2011-06-04 21:44:26.101290 EEST 32017 current receive buffer size is [65536] bytes for socket [2]
2011-06-04 21:44:26.101360 EEST 32017 Sent HTTP response code=[200], reason=[OK] to socket=[6]
2011-06-04 21:44:26.101416 EEST 32017 Relaying traffic from socket[2] to socket[6], buffer size=[2048], Rmsgs=[1], pauses=[0]
2011-06-04 21:44:31.102106 EEST 32017 read_buf: read: Resource temporarily unavailable
2011-06-04 21:44:31.102152 EEST 32017 read_data - EOF
2011-06-04 21:44:31.102173 EEST 32017 Exited relay loop: received=[-1], sent=[0], quit=[0]
2011-06-04 21:44:31.102781 EEST 32017 multicast-group [DROP]
2011-06-04 21:44:31.102837 EEST 32017 Mcast listener socket=[2] closed
2011-06-04 21:44:31.102972 EEST 32017 Child process=[32017] exits with rc=[0]
2011-06-04 21:44:31.103425 EEST 31489 *** Caught SIGCHLD in process=[31489] ***
2011-06-04 21:44:31.103500 EEST 31489 Client [32017] has exited.
2011-06-04 21:44:31.103522 EEST 31489 Deleted client: pid=[32017]
2011-06-04 21:44:31.103543 EEST 31489 Server is waiting for input: socket=[5], pipe=[2]
tcpdump на внешнем интерфейсе показывает, что какие-то пакеты все же проходят:
Код: Выделить всё
dog@euthanasic:~> sudo tcpdump -n -i fxp0 port 1234 or igmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on fxp0, link-type EN10MB (Ethernet), capture size 96 bytes
21:46:04.420318 IP AAA.BBB.CCC.DDD > 239.0.0.59: igmp v2 report 239.0.0.59
21:46:09.421511 IP AAA.BBB.CCC.DDD > 224.0.0.2: igmp leave 239.0.0.59
21:46:09.458444 IP AAA.BBB.CCC.DDD > 239.0.0.60: igmp v2 report 239.0.0.60
21:46:14.459931 IP AAA.BBB.CCC.DDD > 224.0.0.2: igmp leave 239.0.0.60
21:46:14.472257 IP AAA.BBB.CCC.DDD > 239.0.0.58: igmp v2 report 239.0.0.58
21:46:19.473896 IP AAA.BBB.CCC.DDD > 224.0.0.2: igmp leave 239.0.0.58
^C
6 packets captured
3178 packets received by filter
0 packets dropped by kernel
а в логах vlc, если его запускать из консоли с ключиком
-v, валятся такие матюки:
Код: Выделить всё
[0x81e250670] main stream error: cannot pre fill buffer
[0x81e3e46f0] main input warning: cannot create a stream_t from access
*** Unable to locate valid config! Falling back to auto-detection...
*** Unable to locate PAC! Falling back to direct...
Таблица мультикаст-форвардинга при этом тоже пустая:
Код: Выделить всё
dog@euthanasic:~> sudo netstat -g | grep -A2 "IPv4 Multicast Forwarding Table"
IPv4 Multicast Forwarding Table is empty
Гуглил долго и упорно, но что-то пока безрезультатно. Пытался в файрволе играться с опциями сохранения состояния
modulate state/
no state, результат нулевой. Временный перевод файрвола в режим
pass all - ну, вы поняли. Чем можно побороть-то?