Про opendns я слышал давно, как бы не лет 10 назад, изначально, как средства защиты детей от плохого контента и даже какое то время ими пользовался с целью блокировки определенных сайтов.
Решил я нынче, что в рабочее время, порой социальные сети отнимают через чур много времени, и надо их отключать. Ну и бывает вечером зайдёшь и сон провалился вон.
На уму у меня несколько путей решения проблемы:
- координальный, это снести с телефона все приложения, и на уровне /etc/hosts заблокировать vk.com, facebook.com, и повторить опыт великого поста, когда я старался не заходить в соц. сети и пользовался только instagram, но решил, что может позже и повторю данный опыт
- второй и где-то самый простой это плагины для хрома, которые по времени могут отключать определенные сайты, но, это немного не то, т.к. работает на телефоне, и эти плагины мне не очень понраились
- третий, это блокировка через opendns (думаю есть ещё другие dns сервисы, но гуглинг не дал вменяемых альтернатив), но в какой то степени это повторяет первый способ, но дополнительно решает вопрос с телефонами и вообще со всеми девайсами дома.
Подумал, и решил, что хочу третий способ почти мне подходит.
Через opendns можно отключить одной галкой все соц. сети, и прочие, у меня сейчас вне зависимости от текущего времени (об этом чуть ниже), не работают сайты из категорий:
- Adult Themes
- Adware (кстати отлично блокирует рекламу в бесплатных приложениях на телефоне)
- Alcohol
- Anime/Manga/Webcomic
- Dating
- Drugs
- Gambling
- Games
- Hate/Discrimination
- Lingerie/Bikini
- News/Media (ничего полезного я там не узнаю)
- Parked Domains
- Pornography
- Sexuality
- Tasteless
- Tobacco
- Weapons
- Web Spam
И появляется желание разрешить работу социальных сетей в следующих интервалах:
- В 7 утра не зависимо от дня недели соц. сети начинают работать
- в 12 часов с понедельника по пятницу перестают работать
- в 8 вечера начинают работать вновь
- в 11 вечера, не зависимо от дня — перестают работать (ибо надо спать)
Но opendns не позволяет делать подобные блокировки собственными средствами, нельзя даже в платных его версиях, и много желающих как я судя по их форуму (некоторые хотят блокировок чисто по дням неделям) и из того, что отвечают предствители opendns, вряд ли получится дождаться, что будет у них данный функционал.
Но ходить руками и включать/выключать галку соц. сетей, это плохая идея, которая очень быстро надоест.
Выход из ситуация решать проблему самому, но начинается новая проблема, или не проблема, но человеческих решений через API у opendns нет, через API можно в лучшем случае обновить только свой текущий IP адрес.
Тогда идём другим путём, будем эмулировать авторизацию по необходимости, и в случае успешной авторизации сторить куку на будущее и ходить с ней, после авторизации посылать наш post запрос на обновление данных (включать/выключать нужные галки).
Ушло наверное 2-3-4 часа на то, что бы накатать скрипт (уже не вспомню, как долго), причем больше всего времени на отладку, с авторизацией (какая то ерунда творилась), в итоге на выходе около 100 строк кода, залил на сервер и в cron дважды с интервалом в 5-7 минут запуск ежечасно (второй запуск, если первый не сработает). По итогам недели, работает без сбоев, изменения вступают в силу в течении 3-5 минут (это стандартно для opendns).
Конечно, всё это можно отключить через /etc/resolv.conf (а на днях пришлось так поступить, т.к. сайт s7 не работает с фильтрами opendns, подозреваю, связано с блокировкой рекламы), но цель больше, чтоб когда внезапно открыл страницу, чтоб тебя отправило куда нибудь прочь.
Результат увидеть можно на гитхабе https://github.com/sopov/opendns