Site Tools


software:ssdpd:config

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
software:ssdpd:config [2022/02/04 18:43]
– removed - external edit (Unknown date) 127.0.0.1
software:ssdpd:config [2022/02/04 18:43] (current)
– ↷ Links adapted because of a move operation root
Line 1: Line 1:
 +В ssdpd.conf - файл конфигурации, подробнее ниже.\\
 +
 +ssdpd и веб сервер могут быть запущены на разных серверах, можно запускать ssdpd на нескольких серверах (резервирование), важно чтобы root.xml был везде одинаковый.\\
 +
 +SSDPd и nginx должны отдавать клиентам одинаковый XML файл с описанием UPnP устройства и его сервисов, далее везде root.xml\\
 +/upnp/ - положить/сделать симлинк в wwwroot веб сервера.\\
 +/upnp/control/ContentDirectory.php - отредактировать в начале файла переменные с путями и разрешить выполнение.\\
 +Нужен PHP с поддержкой SOAP.\\
 +
 +Если потребуется изменить пути то нужно редактировать следующие файлы:
 +  * ssdpd.conf
 +  * nginx.conf
 +  * /upnp/descr/root.xml
 +  * /upnp/control/ContentDirectory.php
 +
 +
 +====== Настройка сети ======
 +
 +===== IPv4 =====
 +  * разрешить IGMP с опциями на вход и на выход с адресом назначения: 224.0.0.0/4
 +  * разрешить UDP на вход с адресом назначения: 224.0.0.0/4, на выход с любым адресом
 +
 +<code>pass out quick inet proto udp to 224.0.0.0/4 no state allow-opts
 +pass out quick inet proto igmp to 224.0.0.0/4 no state allow-opts
 +pass in quick inet proto udp to 224.0.0.0/4 no state # Allow receive multicast
 +pass in quick inet proto igmp to 224.0.0.0/4 no state allow-opts
 +</code>
 +
 +===== IPv6 =====
 +  * разрешить icmp6 с опциями на вход и на выход
 +  * разрешить UDP на вход с адресом назначения: ff00::/8, на выход с любым адресом
 +
 +<code>pass out quick inet6 proto udp to ff00::/8 no state allow-opts # Allow send multicast
 +pass out quick inet6 proto icmp6 no state allow-opts # mld (igmp6) also here
 +pass in quick inet6 proto udp to ff00::/8 no state # Allow receive multicast
 +pass in quick inet6 proto icmp6 no state allow-opts # mld (igmp6) also here
 +</code>
 +
 +
 +
 +====== ssdpd.conf ======
 +
 +===== log =====
 +Лог файл.
 +
 +<code xml><log>
 + <file>/root/msd/msd.log</file>
 +</log></code>
 +
 +==== file ====
 +Имя файла. Запись производится если в командной строке не указан -v, иначе лог пишется в stdout.
 +
 +----
 +
 +
 +===== skt =====
 +Настройки сокета.
 +
 +<code xml><skt>
 + <rcvBuf>64</rcvBuf>
 + <sndBuf>64</sndBuf>
 + <ttl>2</ttl>
 + <hopLimit>5</hopLimit>
 +</skt></code>
 +
 +==== rcvBuf ====
 +Максимальный размер буфера для приёма (SO_RCVBUF).
 +
 +==== sndBuf ====
 +Максимальный размер буфера для отправки (SO_SNDBUF).
 +
 +==== ttl ====
 +TTL - Только для IPv4. IP_MULTICAST_TTL
 +
 +==== hopLimit ====
 +TTL - Только для IPv6. IPV6_MULTICAST_HOPS
 +
 +----
 +
 +
 +===== Общие настройки =====
 +
 +<code xml><flagEnableIPv4/>
 +<flagEnableIPv6/>
 +<httpServer></httpServer>
 +</code>
 +
 +==== flagEnableIPv4 ====
 +Включить IPv4.
 +
 +==== flagEnableIPv6 ====
 +Включить IPv6.
 +
 +==== httpServer ====
 +Если не задано или пустое то автоматически генерируется поле Server вида: 'OS/version UPnP/1.1 product/version'
 +
 +----
 +
 +
 +===== announceList =====
 +Список устройств для анонсирования.\\
 +
 +<code xml><announceList>
 + <announce>
 + <xmlDevDescr>/usr/local/www/upnp/descr/root.xml</xmlDevDescr>
 + <maxAge>1800</maxAge>
 + <interval>10</interval>
 + <ifList>
 + <if>
 + <ifName>vlan777</ifName>
 + <DevDescrURL4><![CDATA[http://0.0.0.0:80/upnp/descr/root.xml]]></DevDescrURL4>
 + <DevDescrURL6><![CDATA[http://[::]:80/upnp/descr/root.xml]]></DevDescrURL6>
 + </if>
 + </ifList>
 + </announce>
 +</announceList></code>
 +
 +==== announce ====
 +Описание UPnP устройства для анонсирования.
 +
 +=== xmlDevDescr ===
 +Путь к XML файлу с описанием устройства.\\
 +SSDPd загружает из этого файла описание устройства и его сервисов.\\
 +
 +=== maxAge ===
 +Время в секундах, используется клиентами для кеширования.\\
 +
 +=== interval ===
 +Время в секундах, указывает как часто SSDPd посылает анонс в сеть.\\
 +
 +=== ifList, if ===
 +Список сетевых интерфейсов для отсылки анонсов данного устройства.\\
 +
 +== ifName ==
 +Имя сетевого интерфейса для отсылки анонсов, так как его выдает ifconfig, например: eth0, re0, em1.\\
 +
 +== DevDescrURL4 ==
 +URL для IPv4 анонсов.\\
 +Адрес "0.0.0.0" автоматически заменяется на IPv4 адрес на данном интерфейсе.\\
 +URL должен указывать на файл с XML описанием UPnP устройства и его сервисов, это должен быть тот же самый файл что и [[software:ssdpd:config#xmlDevDescr|xmlDevDescr]] только доступный все по протоколу HTTP.
 +
 +== DevDescrURL6 ==
 +Аналогично DevDescrURL4.\\
 +Адрес "[::]" автоматически заменяется на IPv6 адрес на данном интерфейсе.\\
 +
 +----
 +
 +
 +
 +
 +
 +====== Настройка nginx ======
 +Здесь самый минимум настроек, всё что связано с безопасностью/доступом, логами удалено.
 +
 +Расшариваем папку с контентом:
 +<code>
 +# allow files listing: DataStore
 +location ^~ /DataStore/ {
 + root /usr/;
 + add_header TransferMode.DLNA.ORG 'Streaming';
 + add_header ContentFeatures.DLNA.ORG 'DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000';
 +}
 +</code>
 +Дополнительные заголовки часто требуются UPnP/DLNA клиентам для работы.
 +
 +Поддержка UPnP SUBSCRIBE/UNSUBSCRIBE (они нужны для VLC и WMP)
 +<code>
 +# UPnP SUBSCRIBE/UNSUBSCRIBE handle
 +location ^~ /upnp/subscribe/ {
 + if ($request_method = SUBSCRIBE) {
 + add_header Pragma "no-cache";
 + add_header SID "uuid:7CF21CB0-2266-47BE-A608-3CC1F5210BB4";
 + add_header Timeout "Second-1800";
 + return 200;
 + }
 + if ($request_method = UNSUBSCRIBE) {
 + add_header Pragma "no-cache";
 + return 200;
 + }
 +}</code>
 +Если потребуется обрабатывать эти запросы в скриптах, то можно превратить их в POST с дополнительным заголовком и передать в скрипт, пример описан здесь: http://serverfault.com/questions/347663/nginx-convert-head-to-get-requests\\
 +
 +Разрешаем PHP для UPnP скриптов:
 +<code>
 +# php for: UPnP
 +location ^~ /upnp/control/ {
 + root /usr/local/www/;
 +
 + try_files $fastcgi_script_name = 404;
 + #fastcgi_pass 127.0.0.1:54475;
 + fastcgi_pass unix:/var/run/spawn-fcgi.sock;
 + fastcgi_connect_timeout 30;
 + fastcgi_read_timeout 600;
 + fastcgi_send_timeout 600;
 + fastcgi_ignore_client_abort off;
 + #fastcgi_cache_valid any 10s;
 + fastcgi_intercept_errors off;
 + include fastcgi_params;
 + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 +}</code>
 +
 +
 +
 +====== Расширенная настройка и кастомизация под себя ======
 +В файле root.xml\\
 +**root/device**\\
 +friendlyName - отображаемое имя UPnP устройства;\\
 +UDN - UUID идетификатор устройства, его нужно изменять только если хотим больше одного устройства (или кто то уже его занял), длинна обязательно 36 символов;\\
 +presentationURL - можно указать там страничку с описанием или админкой.\\
 +
 +**root/device/iconList/icon**\\
 +url - URL на png иконку 48х48;\\
 +
 +**root/device/serviceList/service**\\
 +SCPDURL - URL до хмл файла с описанием;\\
 +controlURL - URL куда будут прилетать HTTP POST запросы к сервисам;\\
 +eventSubURL - URL куда будут идти HTTP SUBSCRIBE/UNSUBSCRIBE, можно оставить пустым.\\
 +
 +**root.xml описано ТРИ сервиса, нужно править для всех трёх!**\\
  
software/ssdpd/config.txt · Last modified: 2022/02/04 18:43 by root