PDA

Bekijk de volledige versie : Настройка доступа к Pandora и Netflix на роутере



TReX
08-10-2013, 03:56
Попробовав как-то в работе сервис http://www.pandora.com/ был приятно удивлен насколько он точно угадывает мои вкусы в музыке ) Достаточно ему было сказать трех четырех исполнителей которые мне нравятся, и вуаля, приятная подборка музыки на весь день ) Сервер смотрит не названия стилей, а анализирует исполнение и пытается найти похожее...

К сожалению русских этот сервер как и многие другие упорно не любит ) Вариант пользоваться тунелированием для потокового аудио/видео показался слишком грустным, да и денег за это хотят.

В сети был найден интересный сайт - http://tunlr.net/ прописав его в качестве DNS можно ходить в гости на несколько десятков сайтов упорно не любящих Россию, хорошо, да только сидеть на чужих DNS совершенно не хотелось, вдруг захочется на online.sberbank.ru?:cool: Благо роутер у нас совершенно умный поэтому

named.conf



zone "pandora.com" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };
zone "hulu.com" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };
zone "cbs.com" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };
zone "netflix.com" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };
zone "iheart.com" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };
zone "vh1.com" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };
zone "nhl.com" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };
zone "itv.com" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };
zone "bbc.co.uk" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };
zone "songza.com" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };
zone "mog.com" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };
zone "rdio.com" { type forward; forwarders {69.197.169.9; 192.95.16.109; }; };


Ну и так далее, там еще более десятка возможных источников )

ryzhov_al
08-10-2013, 06:59
Вот вариант (https://github.com/RMerl/asuswrt-merlin/wiki/How-to-use-Tunlr-service) с dnsmasq, без воодружения на роутер bind'а. Получает и обновляет список DNS tunlr'а через API.

TReX
08-10-2013, 13:59
Вот вариант (https://github.com/RMerl/asuswrt-merlin/wiki/How-to-use-Tunlr-service) с dnsmasq, без воодружения на роутер bind'а. Получает и обновляет список DNS tunlr'а через API.

А нельзя ли подобную прелесть в наш репозитарий? А то с гибелью ласт-фм как радиостанции совсем стало нечего слушать (

ryzhov_al
08-10-2013, 14:27
Вот адаптированный вариант для энтузиасткой прошивки, проверил в работе на DIR-320:
Файл /usr/local/sbin/domains.txt

abc.com
adnxs.com
adultswim.com
aertv.ie
atdmt.com
au.tv.yahoo.com
bbc.co.uk
blinkbox.com
blockbuster.com
brightcove.com
cbs.com
channel4.com
channel5.com
chartbeat.com
cinemanow.com
cpxadroit.com
cpxinteractive.com
crackle.com
ctv.ca
cwtv.com
demdex.net
diynetwork.com
elogua.com
foodnetwork.com
fox.com
fwmrm.net
nhl.com
go.com
hgtv.com
history.com
hulu.com
iheart.com
imrworldwide.com
inskinmedia.com
ip2location.com
itv.com
js.revsci.net
kidlet.tv
last.fm
lastfm.es
livepass.conviva.com
liverail.com
local.yahooapis.com
mlb.tv
mog.com
mtv.com
mtvnservices.com
mylifetime.com
mytv.taiseng.com
nbc.com
nbcsports.msnbc.com
nbcuni.com
netflix.com
netflix.net
nflxext.com
nflximg.com
nhl.com
pandora.com
pbs.com
pbs.org
quantserve.com
rdio.com
recaptcha.net
rhapsody.com
roku.com
rokulabs.com
rte.ie
rubiconproject.com
scorecardresearch.com
scrippscontroller.com
scrippsnetworks.com
sharethis.com
southparkstudios.com
sportsnet.ca
sony.net
tbs.com
theplatform.com
thewb.com
tnt.tv
trutv.com
turntable.fm
tv3.ie
tv.com
universalsports.com
usanetwork.com
vevo.com
vh1.com
video.uk.msn.com
vudu.com
zattoo.com

Скрипт /usr/local/sbin/post-firewall:

#!/bin/sh
PATH='/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin'

# Tunlr DNS updater for dnsmasq.
# Adapted For Oleg's firmware.

logger -t $(basename $0) "started [$@]"

DNSMASQ_CONF=/usr/local/etc/dnsmasq.conf
DOMAINS=$(cat /usr/local/sbin/domains.txt)
IPS=$(wget -q -O - \
"http://tunlr.net/tunapi.php?action=getdns&version=1&format=json" \
| sed "s/\"dns.\"://g" | sed "s/[{}]//g" | sed "s/,/\ /g" |sed "s/\"//g")
if [ -z "$IPS" ] || [ -n "$(echo $IPS | sed 's/[0-9\.\ ]//g')" ] ; then
echo "Tunlr DNS addresses not retrieved, exiting."
exit
fi
echo -n > $DNSMASQ_CONF
for domain in $DOMAINS
do
for dns in $IPS
do
echo "server=/${domain}/${dns}" >> $DNSMASQ_CONF
done
done

if [ -n "$(pidof dnsmasq)" ]
then
killall dnsmasq
sleep 1
fi
dnsmasq
Остаётся только сделать скрипт исполняемым, сохранить его и перегрузить роутер:

chmod +x /usr/local/sbin/post-firewall
flashfs save
flashfs commit
reboot


А нельзя ли подобную прелесть в наш репозитарий? А то с гибелью ласт-фм как радиостанции совсем стало нечего слушать (Это же просто shell-скрипт. Для него даже внешнего носителя не надо. Может имеется в виду консольный плеер Пандоры pianobar (http://www.engscope.com/pandorabar/)?

mbg
09-10-2013, 07:18
Остаётся только сделать скрипт исполняемым, сохранить его и перегрузить роутер:

chmod +x /usr/local/sbin/post-firewall
flashfs save
flashfs commit
reboot

А если я добавлю этот скрипт в существующий post-firewall ?

ryzhov_al
09-10-2013, 07:53
А если я добавлю этот скрипт в существующий post-firewall ?Всё будет отлично работать. Только надо из моего варианта откусить две первые строчки.

Уж если совсем на чистоту, то я бы не стал обновлять файл dnsmasq.conf и перезапускать dnsmasq при каждом переколбашивании файервола. Достаточно сохранить содержимое скрипта в /usr/local/sbin под каким-нибудь своим именем и запустить его однократно. После чего выполнить

flashfs save && flashfs commit
для того, чтобы обновлённый /etc/dnsmasq.conf навсегда поселился во флеше и мог «выживать» при перезагрузке. DNS'ы tunlr'а на моей памяти менялись лишь один раз.

Omega
09-10-2013, 12:00
А нельзя ли подобную прелесть в наш репозитарий? А то с гибелью ласт-фм как радиостанции совсем стало нечего слушать (

Угу, и на RT-N56U тоже уже запускали - работает: http://habrahabr.ru/post/159133/ ;)

З.Ы. Только там указаны еще старые айпишнеги, нужно будет изменить их на новые :)

TReX
09-10-2013, 19:47
Это же просто shell-скрипт. Для него даже внешнего носителя не надо. Может имеется в виду консольный плеер Пандоры pianobar (http://www.engscope.com/pandorabar/)?


Да, я понимаю что это простой скрипт, просто живи он в репозитарии, точно не потерялся бы ) Тема через пару дней уедет в подвал и потом ищи-свищи, а заточенная под себя радиостанция многим придется по душе )

Консольный плеер Пандоры тоже в репозитарии, было бы мегарульно, получается простой роутер-приемник играющий приятную именно вам музыку )

Кстати и скрипт и плеер реализовано в прошивке превращающей RasberyPi в Билайн роутер )))

tdaniil
18-01-2014, 23:36
На сервисе введена регистрация и привязка к ip, если он динамический, то после перезагрузки все ломается, нашел на гитхабе скриптик.
https://github.com/FriedZombie/tunlrUpdater

Сам скрипт -
https://raw.github.com/FriedZombie/tunlrUpdater/master/gatekeeper/gatekeeperUpdate

#!/bin/sh

####################
## -- Settings -- ##
####################

user='user@example.com' #user name to login into gatekeeper
password='pass12345' #password to login into gatekeeper

client='wget' #client to use, options: curl wget
agent='update-script' #user agent string send to the server
cookie='/tmp/tunlr-cookie.txt' #create cookie jar
insecure=1 #set insecure=1 to skip the cert validity check
wOpt='' #extra options for wget
cOpt='' #extra options for curl
logCmdErr='' #specify the command to pipe the error messages to, e.g. logger
logCmd='' #specify the commant to pipe the log messages to, e.g. logger


#############################
## -- Script start here -- ##
#############################

#function to echo to stderr and exit the script
errExit() {
if [ -z "${logCmdErr}" ]; then
echo "${1}" 1>&2
else
echo "${1}"
echo "${1}" | ${logCmdErr}
fi
exit 1
}

#function to log messages
msgLog() {
echo "${1}"
[ -z "${logCmd}" ] || echo "${1}" | ${logCmd}
}

#function to url encode for those pesky secure passwords :P
enc() {
echo "${1}" | sed \
-e 's/%/%25/g' -e 's/ /%20/g' -e 's/!/%21/g' -e 's/"/%22/g' -e 's/#/%23/g' \
-e 's/\$/%24/g' -e 's/\&/%26/g' -e 's/'\''/%27/g' -e 's/(/%28/g' -e 's/)/%29/g' \
-e 's/\*/%2a/g' -e 's/+/%2b/g' -e 's/,/%2c/g' -e 's/-/%2d/g' -e 's/\./%2e/g' \
-e 's/\//%2f/g' -e 's/:/%3a/g' -e 's/;/%3b/g' -e 's//%3e/g' -e 's/?/%3f/g' \
-e 's/@/%40/g' -e 's/\[/%5b/g' -e 's/\\/%5c/g' -e 's/\]/%5d/g' -e 's/\^/%5e/g' \
-e 's/_/%5f/g' -e 's/`/%60/g' -e 's/{/%7b/g' -e 's/|/%7c/g' -e 's/}/%7d/g' -e 's/~/%7e/g'
}

#function to get the needed web pages
gPage() {
if [ "$client" = "wget" ]; then
case $# in
3)
wget ${wOpt} --load-cookies "${cookie}" --save-cookies "${cookie}" --keep-session-cookies \
--user-agent "${agent}" --referer "${2}" --post-data "${3}" -O - "${1}"
ex=$?
;;
2)
wget ${wOpt} --load-cookies "${cookie}" --save-cookies "${cookie}" \
--keep-session-cookies --user-agent "${agent}" --referer "${2}" -O - "${1}"
ex=$?
;;
*)
wget ${wOpt} --load-cookies "${cookie}" --save-cookies "${cookie}" \
--keep-session-cookies --user-agent "${agent}" -O - "${1}"
ex=$?
esac
else
case $# in
3)
curl ${cOpt} --cookie "${cookie}" --cookie-jar "${cookie}" --location \
--user-agent "${agent}" --referer "${2}" --data "${3}" "${1}"
ex=$?
;;
2)
curl ${cOpt} --cookie "${cookie}" --cookie-jar "${cookie}" --location \
--user-agent "${agent}" --referer "${2}" "${1}"
ex=$?
;;
*)
curl ${cOpt} --cookie "${cookie}" --cookie-jar "${cookie}" --location \
--user-agent "${agent}" "${1}"
ex=$?
esac

fi
[ $ex -ne 0 ] && errExit "Getting the page has failed"
[ -s "${cookie}" ] || errExit "Cookies not stored, check script settings"
return 0
}

# Test if we have wget and see if we have a useable one
case $client in
"wget")
wgetInfo=`wget --no-check-certificate 2>&1`
[ $? -eq 127 ] && errExit "wget seems to be missing"
echo "${wgetInfo}" | grep 'BusyBox' > /dev/null && errExit "wget provided by BusyBox isn't sufficient"
echo "${wgetInfo}" | grep 'unrecognized option' > /dev/null && errExit "wget is compiled without HTTPS support"
;;
"curl")
curlInfo=`curl --version`
[ $? -eq 127 ] && errExit "curl seems to be missing"
echo "${curlInfo}" | grep 'https' > /dev/null || errExit "curl is compiled without HTTPS support"
echo "${curlInfo}" | grep 'zlib'> /dev/null && cOpt="${cOpt} --compressed"
;;
*)
errExit "Incorrect client specified in script"
esac

#openwrt doesn't have certs installed by default, hence the insecure option
if [ "${insecure}" = "1" ]; then
wOpt="${wOpt} --no-check-certificate"
cOpt="${cOpt} --insecure"
fi
msgLog "Getting tunlr status page"
statusP=`gPage "http://tunlr.net/status/" | tr '\n' ' '`
[ -z "${statusP}" ] && errExit "Getting the status page has failed"
echo "${statusP}" | grep -i 'update your IP address' > /dev/null
if [ $? -ne 0 ]; then
echo ""
msgLog "Nothing to update, everything is ok!"
exit 0
fi

msgLog "Getting gatekeeper cookies and form_token"
form=`gPage 'https://gatekeeper.tunlr.net' | sed -n '/<form/,/<\/form/p' | tr '\n' ' '`
[ -z "${form}" ] && errExit "Failed to retrieve the login form data"

form_token=`echo "${form}" | sed 's/.*form_token" value\="//;s/".*//'`
[ -z "${form_token}" ] && errExit "failed to retrieve the login form_token"

msgLog "Sending credentials to the gatekeeper login"
dashboard=`gPage "https://gatekeeper.tunlr.net/login" \
"https://gatekeeper.tunlr.net" \
"form_token=$(enc "${form_token}")&usermail=$(enc "${user}")&password=$(enc "${password}")"`

[ -z "${dashboard}" ] && errExit 'gatekeeper returned an empty page'
echo "${dashboard}" | grep -i 'password is incorrect' > /dev/null && errExit 'Your username/email or password is incorrect'
echo "${dashboard}" | grep 'name="chk_rememberme"' > /dev/null && errExit 'failed to login, credentials seems to be correct though'
echo "${dashboard}" | grep -i 'Account number' > /dev/null || errExit 'Failed to get the dashboard page'

msgLog "Login successful, checking the current status"
[ `echo "${dashboard}" | grep 'fa-check-square-o' | grep -Eoi 'Active|Valid' | wc -w` -lt 5 ] && errExit "Check the tunlr dashboard, something is wrong"

echo "${dashboard}" | grep '/dashboard/change_ip' > /dev/null
if [ $? -eq 0 ]; then
msgLog "ip has changed, going to update"
echo ""
dashboard=`gPage 'https://gatekeeper.tunlr.net/dashboard/change_ip' 'https://gatekeeper.tunlr.net/dashboard'`
echo "${dashboard}" | grep 'name="chk_rememberme"' > /dev/null && errExit "ip update has failed, we seemed to have been kicked out"
echo "${dashboard}" | grep '/dashboard/change_ip' > /dev/null && errExit "ip update has failed"
[ `echo "${dashboard}" | grep 'fa-check-square-o' | grep -Eoi 'Active|Valid' | wc -w` -lt 5 ] && errExit 'Check the tunlr dashboard, something is wrong'
msgLog "Ip address has been updated, everything is ok!"
else
echo ""
errExit "Updating has failed, check the tunlr dashboard"
fi


Надо добавить имя/пароль.

ryzhov_al
19-01-2014, 07:19
А толку-то? На бесплатных аккаунтах полоса пропускания зарезана так, что заглавная страница pandora.com грузится через раз. О нормальном прослушивании речь не идёт, поток постоянно рвётся с жалобой на низкую скорость интернет-соединения.

Кто-нибудь знает об альтернативе Tunlr? Есть плагин MediaHint для браузеров, но DNS-based решение мне кажется наиболее удачным. VPN не предлагать:)

MercuryV
19-01-2014, 12:40
Зарегился на https://gatekeeper.tunlr.net/. На бесплатном плане пока проблем с Pandora не испытываю. Посмотрим, что дальше будет.

TReX
21-04-2014, 02:47
Зарегился на https://gatekeeper.tunlr.net/. На бесплатном плане пока проблем с Pandora не испытываю. Посмотрим, что дальше будет.

Tunlr Has Left The Building...

http://tunlr.net/

the
02-05-2014, 22:30
Ну да, tunlr.net помер

А проект Portaller может кто настроил?

http://habrahabr.ru/post/215889/

Работает?

Теперь моя очередь говорить спасибо - работает через роутер через wifi на всех устройствах дома! Красота. А то гуглить я мастак, а вот настраивать...

На счет своего персонального сервиса и хостинга:

На том же http://habrahabr.ru/post/107631/ ранее описывалось, как натянуть теже медиа-сервисы через бесплатный VPN от Amazon.
Кроме того, что это тоже вариант, хочу предложить аудитории к рассмотрению подход, чтобы надыбать бесплатный сервер и для HAProxy for DNS unblocking. Ну это на ту перспективу, когда Portaller таки возможно нагнется к сожалению

ryzhov_al
03-05-2014, 16:56
the, спасибо за ссылку. Есть подозрение, что этот сервис, сделанный на коленке и хостящийся на копеечном VPS долго не прослужит, но пока он действует как надо. Для использования Portaller на энтузиасткой прошивке необходимо создать скрипт /usr/local/sbin/post-firewall со следующим содержимым:

#!/bin/sh
PATH='/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin'

# Portaller DNS updater for dnsmasq. Adapted For Oleg's firmware.

logger -t $(basename $0) "started [$@]"

DNSMASQ_CONF=/usr/local/etc/dnsmasq.conf
DOMAINS="pandora.com spotify.com"
DNS="107.170.15.247"

echo -n > $DNSMASQ_CONF
for domain in $DOMAINS
do
echo "server=/${domain}/${DNS}" >> $DNSMASQ_CONF
done

if [ -n "$(pidof dnsmasq)" ]
then
killall dnsmasq
sleep 1
fi
dnsmasq

Затем сделать его исполняемым, сохранить и перегрузить роутер:

chmod +x /usr/local/sbin/post-firewall
flashfs save
flashfs commit
reboot

PS В статье есть ссылка (http://trick77.com/2014/03/01/tunlr-style-dns-unblocking-pandora-netflix-hulu-et-al/) на то как сделать свой собственный Tunlr style сервер на VPS.

the
16-09-2015, 17:34
Привет всем
Если кому интересно, мне вот интересно, то https://tunlr.com/how-to-setup

Проверил на OSX - пандора работает!