Опять по поводу IPTV. Решил сделать как услугу.
Есть три пакета - TV "СОЦІАЛЬНИЙ", TV "УКРАЇНА", TV "ВСЕСВІТ". Первый безплатний, второй скажем 20гр, третий 30гр. Соответственно количество каналов по возростающей. Соответственно стримы(m3u4) проксируются на сервере с nginx на разных IP : 1. 192.168.20.1 2. 192.168.30.1 3. 192.168.31.1 Плейлист один, включает все стримы.
На серверах доступа написал скрипт для занесения абонентских IP в две таблицы, по крону.
#!/bin/sh
user="nas2"
pass="xxxxxxxxxxx"
db="nodeny"
/bin/cat /dev/null > /tmp/test.txt
sql1="SELECT INET_NTOA(ip) FROM ip_pool WHERE uid IN(SELECT uid FROM users_services WHERE service_id=18)" #18 у меня услуга TV "УКРАЇНА"
res1=`mysql -hXXX.XXX.XX.3 -u $user -p$pass $db -N -e "$sql1"`
printf "$res1" > /tmp/iptv-ukraina.txt
sql2="SELECT INET_NTOA(ip) FROM ip_pool WHERE uid IN(SELECT uid FROM users_services WHERE service_id=19)" #19 у меня услуга TV "ВСЕСВІТ"
res2=`mysql -hXXX.XXX.XX.3 -u $user -p$pass $db -N -e "$sql2"`
printf "$res2" > /tmp/iptv-vsesvit.txt
sed '/:[0-9]*$/ ! s:$:/32:' /tmp/iptv-ukraina.txt
/sbin/ipfw table 80 flush
for i in `cat /tmp/iptv-ukraina.txt`;
do /sbin/ipfw table 80 add $i;
done
sed '/:[0-9]*$/ ! s:$:/32:' /tmp/iptv-vsesvit.txt
/sbin/ipfw table 81 flush
for i in `cat /tmp/iptv-vsesvit.txt`;
do /sbin/ipfw table 81 add $i;
done
В фаерволе добавил два правила
fwd 127.0.0.1,84 tcp from not "table(80)" to 192.168.30.0/24
fwd 127.0.0.1,84 tcp from not "table(81)" to 192.168.31.0/24
В биллинге две базовые услуги до конца месяца.
Есть два нюанса. Первый, как настроить заглушку (nginx) , что бы на запрос типа h_t_t_p://192.168.30.1:8100/ch26/index.m3u8 получал демо-ролик?
И второй. Услуга без автопродления, не очень удобная. А если поставить автопродление, то каким образом клиент сможет потом самостоятельно отказаться от услуги на следующий месяц? Если сделать еще одну услугу(что бы с платного перейти на бесплатный пакет) - TV "СОЦІАЛЬНИЙ" за 0гр , то она не отображается.
Может кто сможет помочь, особенно по заглушке.