Wchodzenie na stronę unblock.us i aktualizowanie bieżącego adresu IP zaczęło mnie naprawdę męczyć. Na szczęście można tego uniknąć dosyć prosto. Wystarczy prosty skrypt na routerze (czy dowolnym serwerze linuxowym jaki mamy w domu, chyba każdy ma coś na poziomie minimum rpi w dzisiejszych czasach ;), który będzie sprawdzał co jakiś czas adres zewnętrzny i aktualizował go w unblock.us.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
W miejscach adres_email
i hasło
trzeba podać swoje dane oraz dorzucić skrypt do crona.
*/2 * * * * /root/update_unblock.sh 2>&1 |logger
Skrypt będzie się wykonywał co dwie minuty.
Skrypt można również wykorzystać do innych serwisów, w przypadku darmowego tvunblock.com polecenie curl
z funkcji update_ip
należałoby zastąpić:
curl -s -o $IP_STATUS "https://activate.tvunblock.com/"
Zastąpienie odpytywania zewnętrznego serwisu o publiczny adres IP
Serwisów dostarczających za pomocą jakiegoś web api zewnętrzny adres ip jest dużo ale nie zawsze trzeba z nich korzystać. Jeśli router/modem pozwala na pobieranie z niego informacji o adresie WAN, dlaczego tego nie użyć? W przypadku Liveboxa/Funboxa zmienną CURRENT_IP
można ustawić w ten sposób:
CURRENT_IP=$(curl -silent -A "application/x-sah-ws-4-call+json" "http://192.168.1.1/sysbus/NMC:getWANStatus" -d"{\"parameters\":{}}" | sed -n -e 's/^.*\(IPAddress":"\)\([0-9]*.[0-9]*.[0-9]*.[0-9]*\)\(.*\)$/\2/p')
W praktyce (jak widać nie tylko adres ip portu WAN można podejrzeć):
Crontab tuning
Rozwiązania, które opierają się na crontabie i czesto są uruchamiane zaśmiecają sysloga:
Nov 8 16:49:01 bananapi /USR/SBIN/CRON[27209]: (root) CMD (/root/update_unblock.sh 2>&1 |logger)
Nov 8 16:51:01 bananapi /USR/SBIN/CRON[27221]: (root) CMD (/root/update_unblock.sh 2>&1 |logger)
Nov 8 16:53:01 bananapi /USR/SBIN/CRON[27233]: (root) CMD (/root/update_unblock.sh 2>&1 |logger)
Nov 8 16:55:01 bananapi /USR/SBIN/CRON[27244]: (root) CMD (/root/update_unblock.sh 2>&1 |logger)
Nov 8 16:57:01 bananapi /USR/SBIN/CRON[27255]: (root) CMD (/root/update_unblock.sh 2>&1 |logger)
Nov 8 16:59:01 bananapi /USR/SBIN/CRON[27266]: (root) CMD (/root/update_unblock.sh 2>&1 |logger)
Dlatego kiedy już wiadomo, że skrypt działa poprawnie można pokusić się o wyłączenie logowania crona. Na Debianie to modyfikacja pliku /etc/rsyslog.conf
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Dorzucenie cron.none
i restart usługi sudo /etc/init.d/rsyslog restart
wyciszy crontaba. Można również przekierować logi do osobnego pliku cron.log
ale szkoda karty SD. Od tej pory syslog nie jest floodowany z powodu skryptu i mamy tylko informacje kiedy faktcznie skrypt wykona jakąś pracę:
Nov 8 20:16:02 bananapi logger: [update_unblock.sh]: IP updated: 178.42.100.100; Response: active