PDA

Bekijk de volledige versie : Фильтрация нежелательного контента (dnsmasq+adsuck+dnscrypt)



ryzhov_al
30-01-2012, 09:44
Детки подрастают, а в современной школе, по моим отцовским наблюдениям, гуглить приходится с первого класса. Учитывая возможности роутера выбор средств для фильтрации не велик:
либо DNS-spoofing, отрезающий доступ к определённым доменам,
либо URL\content-filtering, режущий html-контент по ключевым словам и\или релевантности.
Далее расскажу про реализацию обоих способов программными средствами, которые мы пока в разговорах обходили.

Первый способ менее ресурсоёмок, но режет более топорно. Простое "замыкание" нежелательного хоста на 127.0.0.1 записями в /etc/hosts заставляет браузер искать на локальном компьютере web-серврер и ждать от него ответа. Решение напрашивается довольно простое, наткнулся (http://emdrone.livejournal.com/222792.html) на него в ЖЖ: при разрешении доменного имени DNS-сервер на роутере должен мгновенно давать ответ NXDOMAIN (http://it.toolbox.com/wiki/index.php/NXDOMAIN), т.е. ответ о том, что домен не существует. Учитывая, что ОС\браузер кэширует ответы DNS-сервера (в т.ч. негативные), браузер не будет ожидать ответа от заблокированного домена ни при первом, ни при дальнейших обращениях. Под выполнение этих нужд заточен adsuck (https://opensource.conformal.com/wiki/adsuck) - DNS сервер, которому достаточно подсунуть свои hosts-файлы. Причём если записи будут содержать разрешение доменного имени на 127.0.0.1, то сервер будет давать ответ NXDOMAIN, если же ip-адрес в записи будет отличен от 127.0.0.1, то будет подставлен указанный ip-адрес. Так авторы adsuck предлагают опциональную защиту от подмены DNS-адреса для наиболее распространённых банковских и других "денежных" сайтов. На роутере adsuck можно использовать автономно, "придушив" DNS-сервис dnsmasq, либо совместно с dnsmasq. Детали расскажу позже, если они будут кому-то интересны. Мне было интересно узнать, как adsuck в связке с dnsmasq будет тормозить или ускорять загрузку web-страниц. В части ожидания разрешения DNS-имён по бенчмарку (http://www.grc.com/dns/benchmark.htm) - никак. В части ускорения загрузки контента на канале в 20МБит/c субъективной разницы нет. Единственный минус - с помощью шквала DNS-запросов adsuck можно "завалить" так, что все его треды уйдут в <defunct>, а сам родительский процесс окажется через некоторое время в списках как zombie.

Ещё один интересный вариант DNS-спуфинга - это использование сторонних сервисов, самостоятельно ведущих списки нежелательных ресурсов. К примеру, сервис OpenDNS (http://www.opendns.com/), которым пользуется каждая третья школа в штатах. Сервис в варианте Home бесплатен, и, насколько я понял, достаточно прописать в /etc/resolv.conf общедоступные DNS-серверы сервиса для того, чтобы сервис начал работать. Этот вариант я самостоятельно не проверял, если у кого-то есть более развёрнутая информация - поделитесь.


Варианты фильтрации контента по релевантности реализованы функционалом squid, privoxy и ещё рядом проксиков, включая DansGuardian (http://dansguardian.org/), который рекомендован (http://www.linformatika.ru/content/dansguardian_ili_filtratsiya_kontenta) как СПО для использования в российском образовании. DansGuardian умеет отсевать контент по релевантности к эталонным "плохим" словам\фразам\картинкам, причём всё достаточно неплохо настраивается. В том числе, можно настраивать группы пользователей и применять к ним разную "силу" фильтрации. Всё это конечно здорово, но на роутере "летает" уже не так резво. Субъективно web-сёрфинг стал еле заментно подтормаживать, а фичу отсева "взрослых" картинок по цифровым подписям я вовсе не ощутил. Средства URL\content-фильтрации для роутера всё же тяжеловаты, но востребованы. Скажем, дома не десктопе в браузерах установлен всемогущий adBlock plus и все страницы выглядят красиво. Но на планшете после минуты созерцания странички на gismeteo.ru мои глаза начинают кровоточить - я уже успел позабыть о том, сколько там рекламы.


Последнее замечание: последствия добавления большого и чорного списка в /etc/hosts. Смотрим размер кучи памяти у dnsmasq без подгрузки доп.записей в /etc/hosts:

$ cat /proc/`pidof dnsmasq`/smaps | awk 'NR%8==1,NR%8==2'
...
00434000-00444000 rwxp 00434000 00:00 0 [heap]
Size: 64 kB
Перезапускаем dnsmasq, вгружая 130.000-строчный host-файл. Смотрим размер кучи:

$ wc -l /opt/etc/adsuck/Hosts.pub
130063 /opt/etc/adsuck/Hosts.pub
$ killall dnsmasq
$ dnsmasq --addn-hosts=/opt/etc/adsuck/Hosts.pub
$ cat /proc/`pidof dnsmasq`/smaps | awk 'NR%8==1,NR%8==2'
...
00434000-00cc8000 rwxp 00434000 00:00 0 [heap]
Size: 8784 kB

Приемлемо? И кстати, где надыбать качественный Hosts-файл для рунета? Желательно с вырезанием счётчиков\статистики.

ЗЫ Давайте опустим холивар по поводу дуализма брони и снаряда. Ясно, что proxy можно отключить, но ответной мерой можно завернуть весь TCP:80 трафик на прокси с помощью iptables. Ясно, что URL-filtering иногда можно обойти, вводя вместо доменного имени ip-адрес, или используя URL-encoding. Речь не об этом.

ЗЗЫ DansGuardian, adsuck, privoxy собраны для нового репозитория.

lly
06-03-2012, 07:21
стоит ли браться за портирования IPv6 CARE на наш роутер?
А ты можешь привести хоть одну open source прогу, которая принципиально не поддерживает и не будет поддерживать IPv6 и должна крутиться на роутере?
IMHO это больше для древних проприетарных приложений.

P.S. По-моему, более интересно иметь на роутере dnscrypt-proxy (http://www.opendns.com/technology/dnscrypt/)

ryzhov_al
08-03-2012, 05:33
P.S. По-моему, более интересно иметь на роутере dnscrypt-proxy (http://www.opendns.com/technology/dnscrypt/)Видимо, ты подумал слишком громко:) С сегодняшнего дня, цитирую: (http://freecode.com/projects/dnscrypt-proxy#release_342412)
DNSCrypt now supports uclibc-based systems, iOS, and Win32.

lly
08-03-2012, 06:14
Видимо, ты подумал слишком громко:) С сегодняшнего дня, цитирую: (http://freecode.com/projects/dnscrypt-proxy#release_342412)
DNSCrypt now supports uclibc-based systems, iOS, and Win32.

Добавишь 0.9.3 в свой репозиторий?

P.S. С этим обсуждением наверное надо переезжать в тему Переход на новый репозиторий OpenWRT с Optware (http://wl500g.info/showthread.php?t=28036)

ryzhov_al
12-03-2012, 18:08
DNSCrypt now supports uclibc-based systems, iOS, and Win32. Добавишь 0.9.3 в свой репозиторий?Готово, r386 (http://code.google.com/p/wl500g-repo/source/detail?r=386).

Для чего это нужно можно почитать здесь (http://techfeed.ru/2011/12/v-ramkax-proekta-dnscrypt-predstavlena-texnologiya-shifrovaniya-dns-trafika/). dnscrypt-proxy лучше использовать совместно с имеющимся в прошивке dnsmasq по двум причинам:

во-первых он не умеет кешировать DNS-запросы,
во-вторых, хочется оставить работоспособным весь имеющийся функционал по разрешению локальных DNS-имён.
Для того, чтобы dnsmasq не пользовался провайдерскими DNS-ами из /etc/resolv.conf, обращался исключительно к dnscrypt-proxy и при этом сохранил весь имеющийся функционал, необходимо перезапустить его с ключами:

$ killall dnsmasq && dnsmasq --no-resolv --server=127.0.0.1#65053
На что dnsmasq помурзится в логе:

22:06:12 12-03-2012 (warning|daemon|dnsmasq) dnsmasq[1111]: warning: ignoring resolv-file flag because no-resolv is set
На этом этапе можно проверить, что DNS-имена на компьютере разрешаться не будут, следовательно, перестали использоваться провайдерские DNS-серверы.
Далее необходимо запустить dnscrypt-proxy:

$ dnscrypt-proxy --local-port=65053 --user=nobody --daemonize
Признаком нормальной работы будут строчки syslog'а:

22:04:16 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: Generating a new key pair
22:04:16 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: Done
22:04:17 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: Server certificate #1323392947 received
22:04:17 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: This certificate looks valid
22:04:17 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: Server key fingerprint is E07C:5F90:03C2:D764:A9FC:9A1E:6633:632A:0FE0:B1C5: 5EF9:894A:FC7A:BA18:4A62:462E
22:04:17 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: dnscrypt-proxy is ready: proxying from [127.0.0.1] to [208.67.220.220]

и нормальное разрешение DNS-имён для компьютеров локалки.

Собранный бинарник весит 416К, зависит исключительно от библиотек uClibc и при работе занимает памяти:

$ pmap -d `pidof dnscrypt-proxy` | grep private
mapped: 1860K writeable/private: 460K shared: 0K
Из которой большая часть приходится на кучу:

$ cat /proc/`pidof dnscrypt-proxy`/smaps | awk 'NR%8==1,NR%8==3'
...
555c2000-556b1000 rwxp 555c2000 00:00 0 [heap]
Size: 956 kB
Rss: 120 kB
Я боялся, что от всех этих алгоритмов шифрования по эллиптическим кривым наш процессор стихами заговорит, но нет, даже при небольшом провокационном "шторме" DNS-запросов процесс dnscrypt-proxy потреблял не более 2% ресурсов CPU. Задержек в разрешении DNS-имён по первому попавшемуся (http://www.grc.com/dns/benchmark.htm) DNS-бенчмарку не выявлено.


Поправьте ссылку на "Buildroot tech.reference", там (http://code.google.com/p/wl500g-repo/wiki/Compiling):)Спасибо за внимательность.

MercuryV
12-03-2012, 20:23
На роутере adsuck можно использовать автономно, "придушив" DNS-сервис dnsmasq, либо совместно с dnsmasq. Детали расскажу позже, если они будут кому-то интересны.

Интересно про "совместно с dnsmasq" и, вероятно, с dnscrypt (как заработает)

ryzhov_al
13-03-2012, 04:44
Интересно про "совместно с dnsmasq" и, вероятно, с dnscrypt (как заработает)Абсолютно также (http://www.wl500g.info/showpost.php?p=246603&postcount=347): запускаем adsuck на нестандартном порту, например 65055, а dnsmasq перезапускаем:

$ killall dnsmasq && dnsmasq --no-resolv --server=127.0.0.1#65055
В случае тройной связки dnsmasq + adsuck + dnscrypt тоже аналогично. Выбор порядка соединения звеньев такой цепочки не велик: наружу должен "смотреть" dnscrypt, в локалку - dnsmasq, между ними - adsuck.

AndreyUA
13-03-2012, 05:10
Я на кинетике блокирую так

iptables -I FORWARD -s 192.168.1.34-192.168.1.254 -m string --string "vkontakte.ru" --algo kmp --to 65535 -j DROP
Можно прикрутить парсер к https://easylist-downloads.adblockplus.org/easylist.txt
DNS хорошо, но их обойти легко. В школе и организации - не вариант.

ryzhov_al
13-03-2012, 05:54
Я на кинетике блокирую так

iptables -I FORWARD -s 192.168.1.34-192.168.1.254 -m string --string "vkontakte.ru" --algo kmp --to 65535 -j DROP
Можно прикрутить парсер к https://easylist-downloads.adblockplus.org/easylist.txt

$ wget https://easylist-downloads.adblockplus.org/easylist.txt -O - | wc -l
1745617 тысяч строк в iptables? Боюсь, летать будет низенько.

DNS хорошо, но их обойти легко. В школе и организации - не вариант.Если на предприятии или в школе у всех есть администраторские права, то тогда да, легко.

dansguardian, напомню, как раз для пользования в школах рекомендован (http://www.linformatika.ru/content/dansguardian_ili_filtratsiya_kontenta).

AndreyUA
13-03-2012, 06:19
Ну с https://easylist-downloads.adblockplus.org/easylist.txt я, конечно, погорячился :) Но у решения c iptables есть несколько преимуществ: обойти намного сложнее, чем с DNS. Можно создать правило для определенного айпи или мак адреса.


Если на предприятии или в школе у всех есть администраторские права, то тогда да, легко.
Если на примере вконтакта, то проблема решается вот так (http://www.google.com.ua/#hl=ru&gs_nf=1&cp=12&gs_id=2b&xhr=t&q=%D0%B0%D0%BD%D0%BE%D0%BD%D0%B8%D0%BC%D0%B0%D0%B9 %D0%B7%D0%B5%D1%80+%D0%B2%D0%BA%D0%BE%D0%BD%D1%82% D0%B0%D0%BA%D1%82%D0%B5&pf=p&sclient=psy-ab&oq=%D0%B0%D0%BD%D0%BE%D0%BD%D0%B8%D0%BC%D0%B0%D0%B 9%D0%B7%D0%B5%D1%80+&aq=0&aqi=g4&aql=&gs_sm=&gs_upl=&gs_l=&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=c05e72deb7dd07dc&biw=1280&bih=909)

AlexeyS
13-03-2012, 08:17
Если на примере вконтакта, то проблема решается вот так (http://www.google.com.ua/#hl=ru&gs_nf=1&cp=12&gs_id=2b&xhr=t&q=%D0%B0%D0%BD%D0%BE%D0%BD%D0%B8%D0%BC%D0%B0%D0%B9 %D0%B7%D0%B5%D1%80+%D0%B2%D0%BA%D0%BE%D0%BD%D1%82% D0%B0%D0%BA%D1%82%D0%B5&pf=p&sclient=psy-ab&oq=%D0%B0%D0%BD%D0%BE%D0%BD%D0%B8%D0%BC%D0%B0%D0%B 9%D0%B7%D0%B5%D1%80+&aq=0&aqi=g4&aql=&gs_sm=&gs_upl=&gs_l=&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=c05e72deb7dd07dc&biw=1280&bih=909)

Угу, и, судя по отчёту касперского, в придачу можно ещё и лишиться своих паролей с этими анонимайзерами...

lly
13-03-2012, 08:36
Возможно еще помог бы вариант Transparent proxy (tproxy), но я сильно не уверен что наша коробочка потянет полноценный прокси-сервер.

MercuryV
13-03-2012, 21:04
В случае тройной связки dnsmasq + adsuck + dnscrypt тоже аналогично. Выбор порядка соединения звеньев такой цепочки не велик: наружу должен "смотреть" dnscrypt, в локалку - dnsmasq, между ними - adsuck.

Не смог найти, как заставить adsuck ресолвить через dnscrypt на нестандартном порту.
Согласно man (https://opensource.conformal.com/cgi-bin/man-cgi?adsuck) nameserver задается через -f resolv.conf , причем
Note: due to the way ldns works one can NOT specify a port in the resolv.conf file.

TReX
14-03-2012, 06:22
Угу, и, судя по отчёту касперского, в придачу можно ещё и лишиться своих паролей с этими анонимайзерами...

Так используйте TOR, любимое у школоло развлечение, особенно если родители любят закрывать "правильные" сайты )

AlexeyS
14-03-2012, 06:25
Так используйте TOR, любимое у школоло развлечение, особенно если родители любят закрывать "правильные" сайты )

Дык, мне это не надо, у меня и так всё открыто на рабочем месте. А для скрытия логов своих похождений использую ssh до домашнего роутера ;-)

ryzhov_al
23-03-2012, 09:37
Некий польский товарищ (http://www.openlinksys.info/forum/viewthread.php?thread_id=11624) регулярно собирает (http://tomato.groov.pl/index.php?dir=K26) сильно раскормленный клон TomatoUSB, в который включено стороннего софта чуть больше, чем дофига.

В репозитории (http://repo.or.cz/w/tomato.git/shortlog/refs/heads/tomato-shibby) попадаются интересные коммиты патчей и сторонних программ. Например, в последние версии прошивок включен dnscrypt-proxy (http://www.wl500g.info/showpost.php?p=246603&postcount=343).

ArCan
18-04-2012, 16:02
По крайней мере, у Shibby уже есть и Transmission 2.51, и DNScrypt, и другие апдейты, которых в последней прошивке от Toastman, как показалось, нет.
И плюс ко всему, когда смотритшь About, что в у одного, что у другого, честно указано, что и откуда надёргано...

ryzhov_al
28-04-2012, 17:54
DNSCrypt now supports uclibc-based systems, iOS, and Win32. Добавишь 0.9.3 в свой репозиторий?Ну вот, теперь из Entware в OpenWRT сделали бэкпорт (https://forum.openwrt.org/viewtopic.php?id=36380) DNSCrypt. Прикольно, ага, да.

потенциальная для включения в прошивку программа потребует во флеше следующий объём:

защита от DNS-спуфинга:

$ du -hs /opt/sbin/dnscrypt-proxy
396K /opt/sbin/dnscrypt-proxy
Да, и всё это при условии, если разработчики изменят философию прошивки и вдруг начнут начинять её сторонним софтом.

desper
28-05-2012, 05:42
Кто-нибудь пользуется dnscrypt-proxy?

Что-то он у меня после обновления при длительном простое (за ночь например) вылетать стал. Ручной запуск из терминала не помогает, вроде запустится, но в логе одна запись: "dnscrypt-proxy[418]: Generating a new key pair" и тишина, сообщения "Done" не появляется. Приходиться роутер перезагружать, после перезагрузки работает нормально.

MercuryV
28-05-2012, 08:01
Кто-нибудь пользуется dnscrypt-proxy?
Я пользуюсь

Что-то он у меня после обновления ...
Еще не обновлялся, пользуюсь пока 0.9.3-1
После обновления - отпишу.

desper
29-05-2012, 17:27
Еще не обновлялся, пользуюсь пока 0.9.3-1
После обновления - отпишу.

Не подскажите где можно взять dnscrypt-proxy версии 0.9.3-1? Или скиньте плз бинарник, хотелось бы проверить.

MercuryV
29-05-2012, 22:31
Не подскажите где можно взять dnscrypt-proxy версии 0.9.3-1?
Можете взять пакет из копилки DemonGloom
(http://demongloom.dyndns.info:81/entware/)

desper
30-05-2012, 09:02
Можете взять пакет из копилки DemonGloom
(http://demongloom.dyndns.info:81/entware/)

Спасибо, откатился на 0.9.3-1. Полет нормальный, больше не вылетает.

Значит dnscrypt-proxy версии 0.9.4-1 поламался, в OpenWrt кстати тоже откатили версию https://forum.openwrt.org/viewtopic.php?pid=168267#p168267

MercuryV
02-06-2012, 22:53
Спасибо, откатился на 0.9.3-1. Полет нормальный, больше не вылетает.
Значит dnscrypt-proxy версии 0.9.4-1 поламался
У меня подтвердить проблему с 0.9.4-1 не получилось. Работает без вылетов третьи сутки.
Корабли лавировали, лавировали, да не вылавировали.
Отвалилось на четвертые сутки и у меня.

staticroute
04-06-2012, 08:06
Сталкивался с подобной задачей.

Решал на базе squid с доп. скриптом фильтрации.

На стандартном WL500gP тянет, но очень медленно, если список большой и не активировать своп, то сквид просто отваливается.

Тем не менее фильтрует. По спискам есть http://www.shallalist.de/ и http://urlblacklist.com/

Также с помощью squid можно заблочить скайп, при условии, что весь трафик будет идти через прокси (т.е. нужно будет указывать прокси вручную в настройках соединения, иначе не работает, transparent для https не бывает).

Можно попробовать более легковесные демоны потестить, но вообще, если клиентов >5 я думаю смысла нету совершенно такую задачу решать средствами роутера.

ryzhov_al
05-06-2012, 10:43
Что-то он у меня после обновления при длительном простое (за ночь например) вылетать стал.
Отвалилось на четвертые сутки и у меня.Свежая версия 0.9.5 имеет тот же недостаток: через некоторое время просто вылетает.

В связи с тем, что мне просто не хватает знаний для диагностики проблемы, откатил в репозитории dnscrypt-proxy до стабильной версии 0.9.3.

lly
05-06-2012, 12:09
В связи с тем, что мне просто не хватает знаний для диагностики проблемы, откатил в репозитории dnscrypt-proxy до стабильной версии 0.9.3.
Это сильно зависит от того, сколько своего времени ты готов убить на расследование этой проблемы. Ну или автор может найдёт проблему через некоторое время.

Нормальный инструмент по утечкам это valgrind (тул memcheck), но для него нужен минимум RT-N16. Собрать подопытного с отладочной инфой ("-g3") и погонять некоторое время.

ryzhov_al
11-06-2012, 22:00
Забыть о рекламе в WEB'е при сёрфиге с ПК позволяет благословенный AdBlock plus, которого мне так не хватало на Android-планшете. Да, можно поставить на планшет Firefox, но он куда менее проворен встроенного браузера. Оказывается, блэк-листы AdBlock plus можно сконвертировать в формат privoxy вот этим скриптом (http://andrwe.org/scripting/bash/privoxy-blocklist"). Для фильтрации рекламы только на планшете необходимо:


Установить необходимые пакеты,

$ opkg install bash wget sed privoxy
Скачать готовый конфиг для privoxy и скрипт для конвертации правил AdBlock+ в правила privoxy:

$ cd /opt/etc/privoxy/
$ rm ./config
$ wget http://files.ryzhov-al.ru/Routers/adblock-plus/config
$ wget http://files.ryzhov-al.ru/Routers/adblock-plus/privoxy-blocklist_0.2.sh
$ chmod +x ./privoxy-blocklist_0.2.sh
Выбрать желаемые подписки (http://adblockplus.org/en/subscriptions) AdBlock+ и перечислить их в строке "URLS=" скрипта privoxy-blocklist_0.2.sh.
Сконвертировать правила запуском скрипта:

$ ./privoxy-blocklist_0.2.sh
задать статический IP-адрес планшета в настройках DHCP-сервера прошивки на странице IP Config > DHCP Server. MAC-адрес планшета можно подсмотреть на страниwе Status and Log > Wireless, в дальнейшем допустим, что ip-адрес планшета будет 192.168.0.101,
Осталось только перенаправить http-запросы от планшета на privoxy, добавив в /tmp/local/sbin/post-firewall:

iptables -t nat -A PREROUTING --source 192.168.0.101 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
и всё. Не важно какой у вас планшет - iOS или Android - с рекламой при сёрфинге покончено.

Если вам необходимо обновить существующие подписки, то выполните:

$ ./privoxy-blocklist_0.2.sh -r
и повторите п.п.3,4.

PS Оригинальный пост сильно устарел, здесь приведён перевод актуального варианта (http://forums.smallnetbuilder.com/showthread.php?t=9449).

ConstAntz
11-06-2012, 22:23
Забыть о рекламе в WEB'е при сёрфиге с ПК позволяет благословенный AdBlock plus


Спс, на ADb+ давно сижу, и детки довольны.

lly
12-06-2012, 07:47
Гоняем совместно с MercuryV не первый день. У меня valgrind после старта поругается на что-то из стандартных библиотек и затихает. MercuryV (без использования valgrind) за четыре дня зафиксировал два (http://pastebin.com/NLJYRCw7) факта роста кучи. Пока весь улов.
Тогда это смахивает больше не на утечку, а на бесконтрольное использование heap, как в Java - объекты создаём по поводу и без повода, а освобождением займётся добрый дядя(garbage collector).

А если прогу заставить выйти штатно - valgrind ничего не показывает?

AlexeyS
12-06-2012, 15:03
Гоняем совместно с MercuryV не первый день. У меня valgrind после старта поругается на что-то из стандартных библиотек и затихает. MercuryV (без использования valgrind) за четыре дня зафиксировал два (http://pastebin.com/NLJYRCw7) факта роста кучи. Пока весь улов.

Попробуйте откатить или обновить только libuv - других значительных изменений там не видно, видимо проблема именно в ней.

ryzhov_al
14-06-2012, 16:23
Попробуйте откатить или обновить только libuv - других значительных изменений там не видно, видимо проблема именно в ней.Да, вероятно. Проблема в том, что мы гадаем.

Сегодня выделил (http://code.google.com/p/wl500g-repo/source/detail?r=650) из исходников dnscrypt-proxy в отдельный пакет (http://code.google.com/p/wl500g-repo/source/detail?r=649) libuv. Теперь можно будет играться с версией библиотеки вплоть до достижения результата:)
Например, последний вариант dnscrypt-proxy 0.9.5 в репозитории сейчас включает libuv с сегодняшним коммитом (https://github.com/joyent/libuv/commit/2c983fb99489383e12b046a5682b5b12b00d9d19):

2c983fb994 unix: fix memory leak in libev
Но первая проверка пока не утешает:

[INFO] Generating a new key pair
[INFO] Done
[INFO] Server certificate #1323392947 received
[INFO] This certificate looks valid
[INFO] Server key fingerprint is E07C:5F90:03C2:D764:A9FC:9A1E:6633:632A:0FE0:B1C5: 5EF9:894A:FC7A:BA18:4A62:462E
[INFO] Proxying from [127.0.0.1 (60053)] to [208.67.220.220 (53)]
Thu Jun 14 16:10:02 UTC 2012 mapped: 2060K writeable/private: 524K shared: 0K Heap Size: 372 kB
Thu Jun 14 16:15:01 UTC 2012 mapped: 2060K writeable/private: 524K shared: 0K Heap Size: 372 kB
Thu Jun 14 16:20:01 UTC 2012 mapped: 2060K writeable/private: 524K shared: 0K Heap Size: 372 kB
Thu Jun 14 16:25:01 UTC 2012 mapped: 2060K writeable/private: 524K shared: 0K Heap Size: 372 kB
Thu Jun 14 16:30:01 UTC 2012 mapped: 2060K writeable/private: 524K shared: 0K Heap Size: 372 kB
Thu Jun 14 16:35:01 UTC 2012 mapped: 2060K writeable/private: 524K shared: 0K Heap Size: 372 kB
Thu Jun 14 16:40:02 UTC 2012 mapped: 2060K writeable/private: 524K shared: 0K Heap Size: 372 kB
Thu Jun 14 16:45:01 UTC 2012 mapped: 2060K writeable/private: 524K shared: 0K Heap Size: 372 kB
Thu Jun 14 16:50:01 UTC 2012 mapped: 2060K writeable/private: 524K shared: 0K Heap Size: 372 kB
[INFO] Refetching server certificates
[INFO] Server certificate #1323392947 received
[INFO] This certificate looks valid
[INFO] Server key fingerprint is E07C:5F90:03C2:D764:A9FC:9A1E:6633:632A:0FE0:B1C5: 5EF9:894A:FC7A:BA18:4A62:462E
Thu Jun 14 16:55:01 UTC 2012 mapped: 2124K writeable/private: 588K shared: 0K Heap Size: 436 kB
Thu Jun 14 17:00:01 UTC 2012 mapped: 2124K writeable/private: 588K shared: 0K Heap Size: 436 kB
Thu Jun 14 17:05:02 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 17:10:02 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 17:15:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 17:20:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 17:25:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 17:30:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 17:35:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 17:40:02 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 17:45:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 17:50:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
[INFO] Refetching server certificates
[INFO] Server certificate #1323392947 received
[INFO] This certificate looks valid
[INFO] Server key fingerprint is E07C:5F90:03C2:D764:A9FC:9A1E:6633:632A:0FE0:B1C5: 5EF9:894A:FC7A:BA18:4A62:462E
Thu Jun 14 17:55:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 18:00:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 18:05:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 18:10:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 18:15:02 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 18:20:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 18:25:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
Thu Jun 14 18:30:01 UTC 2012 mapped: 2768K writeable/private: 1232K shared: 0K Heap Size: 1080 kB
dnscrypt-proxy, напомню, DNS-имена не кэширует, поэтому рост кучи для меня по прежнему не объясним. Прошу заинтересованных погонять новый билд, нам никогда не поздно откатиться на более древнюю версию libuv, ту, что была в стабильном dnscrypt-proxy 0.9.3.


Тогда это смахивает больше не на утечку, а на бесконтрольное использование heap, как в Java - объекты создаём по поводу и без повода, а освобождением займётся добрый дядя(garbage collector).Вообще, эта libuv - platform layer для node.js (https://github.com/joyent/libuv#readme), причём изначально под Windows. Не исключено, что автор кода по привичке «воображает» присутствие garbage collector'а.

А если прогу заставить выйти штатно - valgrind ничего не показывает?Ничего. Только summary по нескольким потенциальным косякам uclibc, valgrind использовал как в большинстве HOW-TO'шек:

$ valgrind --tool=memcheck --leak-check=yes --leak-resolution=high --num-callers=40 --verbose --log-file=/opt/var/log/dnscrypt-proxy-debug.log --time-stamp=yes /tmp/mnt/DOWNLOAD/tmp/dnscrypt-proxy --local-port=60053...

lly
14-06-2012, 18:11
dnscrypt-proxy, напомню, DNS-имена не кэширует, поэтому рост кучи для меня по прежнему не объясним.
...
Только summary по нескольким потенциальным косякам uclibc, valgrind использовал как в большинстве HOW-TO'шек:
Значит придётся попробовать средства valgrind именно для анализа heap'а - massif или dhat

ryzhov_al
16-06-2012, 09:06
Значит придётся попробовать средства valgrind именно для анализа heap'а - massif или dhatМы совместно с MercuryV провели несколько тестов dnscrypt-proxy, собранного в разных вариациях:

нового 0.9.5 cо свежей libuv (результат (http://pastebin.com/jDQFRZNn)),
нового dnscrypt-proxy 0.9.5 со старой (мартовской, когда dnscrypt-proxy не имел утечек) версией libuv (результат (http://pastebin.com/uwv9whDa)),
старого (стабильного) dnscrypt-proxy 0.9.3 со старой libuv (результат (http://pastebin.com/XRVa4TBF)).

Причём мы «наваливались» на него совместно, одновременно с этим используя dnscrypt-proxy как основной DNS даже для одного небольшого офиса. Как видно, не течёт только старая версия dnscrypt-proxy, а libuv здесь, видимо, не причём. Странно, потому что код dnscrypt-proxy не подвергался значительным изменениям. Патч между стабильной 0.9.3 и потёкшей 0.9.4 составляет (http://pastebin.com/CHFbjK0E) ~4Кб и ничего подозрительного я в нём не увидел.

Сегодня автор ответил (https://github.com/opendns/dnscrypt-proxy/issues/8#issuecomment-6370928):

A memory leak has been recently fixed in libuv: https://github.com/joyent/libuv/commit/2c983fb99489383e12b046a5682b5b12b00d9d19

Looks like uclibc is the very environment it would happen in.

That said, I've had it with libuv. dnscrypt is being rewritten with the good ol' libevent, see the libevent branch, that will soon replace the master branch. Give it a shot a see if it fixes your issues on openwrt.
поэтому подождём выхода libevent-версии, дабы не делать лишнюю работу.

lly
16-06-2012, 12:35
Как видно, не течёт только старая версия dnscrypt-proxy, а libuv здесь, видимо, не причём. Странно, потому что код dnscrypt-proxy не подвергался значительным изменениям. Патч между стабильной 0.9.3 и потёкшей 0.9.4 составляет (http://pastebin.com/CHFbjK0E) ~4Кб и ничего подозрительного я в нём не увидел.
Надо смотреть/знать весь код - это всё-же к автору...


поэтому подождём выхода libevent-версии, дабы не делать лишнюю работу.
Если libevent лучше(меньше, быстрее), то конечно...

ryzhov_al
17-06-2012, 07:37
Надо смотреть/знать весь код - это всё-же к автору...


Если libevent лучше(меньше, быстрее), то конечно...
Тестируем новую libevent driven версию. Будет здорово, если кто-нибудь пожелает присоединиться. Пакет в репозитории.

Насчёт быстрее ничего не скажу, всё работает как и раньше мгновенно,
бинарник меньше на 20%,
потребление памяти тоже меньше:

в новой версии mapped: 1524K writeable/private: 152K shared: 0K Heap Size: 12 kB
против прежних mapped: 2060K writeable/private: 524K shared: 0K Heap Size: 372 kB


Пока утечек нет, но судить пока рано.

ConstAntz
17-06-2012, 10:37
Тестируем новую libevent driven версию. Будет здорово, если кто-нибудь пожелает присоединиться. Пакет в репозитории.


Если-б набросал краткую инструкцию - желающих и тестеров было-бы намного больше (метод "НТ" не всех устрайвает :D)
2MercuryV - не придерайси

ryzhov_al
18-06-2012, 13:31
Утечку памяти в dnscrypt-proxy 0.9.5 удалось победить (https://github.com/opendns/dnscrypt-proxy/issues/8#issuecomment-6393326).

Низкий поклон за участие MercuryV и black-roland@forum.openwrt.org.

Black Roland
18-06-2012, 15:17
Последняя сборка dnscrypt-proxy (1e7edae) только у меня с сегфолтом вылетает при попытке сбросить права (--user=nobody)?

# dnscrypt-proxy -P 2053 -n 64 -u nobody
[INFO] Generating a new key pair
[INFO] Stopping proxy
[INFO] TCP listener shut down
Segmentation fault
Компилил по разному, в том числе и из репов ryzhov_al.

ryzhov_al
18-06-2012, 16:07
Последняя сборка dnscrypt-proxy (1e7edae) только у меня с сегфолтом вылетает при попытке сбросить права (--user=nobody)?Какая домашняя директория у пользователя nobody? В стоковой прошивке Asus RT-N66u, например, это /dev/null. И любая попытка софта сделать chroot заканчивается крахом:

$ grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/dev/null:/dev/null
А вот пример из прошивки энтузиастов, где такой ситуации не возникает:

$ grep nobody /etc/passwd
nobody:x:99:99:nobody:/:/sbin/nologin

PS Я бы отломал от dnscrypt-proxy собственную libevent, но Frank Denis внёс в неё ряд правок (http://pastebin.com/sh1CAPYt), касающихся разрешения DNS-имён.

Black Roland
19-06-2012, 04:39
Какая домашняя директория у пользователя nobody?
Да не, с домашними папками все в порядке. Вот еще ошибку в сислоге нашел:

# dnscrypt-proxy -P 2053 -u nobody
[INFO] Generating a new key pair
[INFO] Stopping proxy
[INFO] TCP listener shut down
Segmentation fault
# dmesg | tail -1
110.370000 warning: process `dnscrypt-proxy' used the deprecated sysctl system call with 1.40.6.
А домашние папки вот такие (пробовал запускать на 2-ух разных пользователях):

# cat /etc/passwd | grep -E "(nobody|tun)"
nobody:*:65534:65534:nobody:/var:/bin/false
tun:*:1000:1000:tun:/home/tun:/bin/false
# ls -l / | grep -E "(var|tmp)" && ls -l /home | grep "tun"
drwxrwxrwt 10 root root 320 Jan 1 1970 tmp
lrwxrwxrwx 1 root root 4 Jun 9 21:58 var -> /tmp
drwxr-xr-x 3 tun tun 1024 Jun 19 02:25 tun


PS Я бы отломал от dnscrypt-proxy собственную libevent, но Frank Denis внёс в неё ряд правок (http://pastebin.com/sh1CAPYt), касающихся разрешения DNS-имён.
Было бы здорого конечно :)

UPD: Нашел какой-то старый закрытый баг в libevent: http://sourceforge.net/tracker/?func=detail&aid=2995453&group_id=50884&atid=461322 Вроде мой случай

Еще у одного пользователя все хорошо с понижением привелегий: https://forum.openwrt.org/viewtopic.php?pid=170388#p170388
Хз чем мой роутер отличается от его роутера, даже пакет и то один и тот же. Хотя [ERROR] Unable to bind: 127.0.0.1:2053 (TCP) не очень хорошо :D

ryzhov_al
20-06-2012, 12:51
Black Roland, поправил бы свою (https://forum.openwrt.org/viewtopic.php?pid=170495#p170495) новую сборку. А то у форумчан будут "засасываться" хостовые библиотеки и интерфейсы, ключи компиляции\линковки спорные бы убрал, smash stack protection до конца бы отключил. Забирай готовый патч (http://wl500g-repo.googlecode.com/svn/feeds/rtndev/dnscrypt-proxy/patches/), ничего адаптировать не придётся.

Да не, с домашними папками все в порядке. Вот еще ошибку в сислоге нашел:Может прошивка и dnscrypt-proxy собраны разными тулчейнами?

Black Roland
20-06-2012, 13:22
Black Roland, поправил бы свою (https://forum.openwrt.org/viewtopic.php?pid=170495#p170495) новую сборку. А то у форумчан будут "засасываться" хостовые библиотеки и интерфейсы, ключи компиляции\линковки спорные бы убрал, smash stack protection до конца бы отключил. Забирай готовый патч (http://wl500g-repo.googlecode.com/svn/feeds/rtndev/dnscrypt-proxy/patches/), ничего адаптировать не придётся.
Засасываться? Не понял кто и куда должен засосаться? :) Лишние зависимости чтоли?
А патч не хочу. Зачем этот непонятный костыль, если с опциями компилятора все прекрасно работает? А как известно, если что-то работает - не трогай. Думаю что отключать проверки не лучший способ их обойти.

Может прошивка и dnscrypt-proxy собраны разными тулчейнами?
Хз. Есть ли возможность для моего роутера (ar71xx, TP-LINK TL-MR3220) другой тулчейн собрать?

ryzhov_al
20-06-2012, 13:48
Для начала главное: я не собираюсь раскритиковать твою сборку, но есть моменты, на которые ты должен обратить внимание.

Засасываться? Не понял кто и куда должен засосаться? :) Лишние зависимости чтоли?Зря ты не заглядывал в configure.ac (https://github.com/opendns/dnscrypt-proxy/blob/master/configure.ac). Там, например, явно указывается использование интерфейсов библиотек хост-машины (-I/usr/include) и линковка с библиотеками хост-машины (-L/usr/lib).

Зачем этот непонятный костыль, если с опциями компилятора все прекрасно работает? А как известно, если что-то работает - не трогай. Это у тебя работает. И лишь потому, что в твоей хост-машине по путям /usr/include, /usr/lib не лежит ничего такого, что могло было бы быть использовано исходниками dnscrypt-proxy. Другие форумчане, использующий твои Makefile'ы могут оказаться не такими счастливыми и процесс кросс-компиляции завершится крахом.


Думаю что отключать проверки не лучший способ их обойти.Вот если бы посмотрел на проверку наличия ключа -fPIE в configure.ac, то не стал бы добавлять его второй раз в своём (https://forum.openwrt.org/viewtopic.php?pid=170495#p170495) Makefile. И так далее.


Хз. Есть ли возможность для моего роутера (ar71xx, TP-LINK TL-MR3220) другой тулчейн собрать?Приехали. Тебе же в логе система говорит об использовании недопустимых syscall'ов. Бинарник же у тебя не исполняется в вакууме, он использует те системные вызовы (via uclibc), что есть в твоей системе, например:

$ ldd /tmp/harddisk/backup/dnscrypt-proxy
libdl.so.0 => /lib/libdl.so.0 (0x7754e000)
libm.so.0 => /lib/libm.so.0 (0x77532000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x77511000)
libc.so.0 => /lib/libc.so.0 (0x7745f000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x77564000)

А у тебя судя по логу при сборке используются одни библиотеки (из тулчейна), а при работе - другие (из прошивки).

Уж если "хз", то найди родной тулчейн для своей прошивки и укажи пути для него в $ make menuconfig в среде OpenWRT Buildroot. Хотя бы будешь уверен, что dnscrypt-proxy будет "ожидать" ту же среду исполнения, как при кросс-компиляции.


Отлавливать глюки dnscrypt-proxy до выполнения этих пунктов - занятие не благодарное.

Black Roland
20-06-2012, 14:03
Вот если бы посмотрел на проверку наличия ключа -fPIE в configure.ac, то не стал бы добавлять его второй раз в своём (https://forum.openwrt.org/viewtopic.php?pid=170495#p170495) Makefile. И так далее.
libevent не хотел собираться без этих опций. В сообщении об ошибке было сказано что их нужно использовать :)
Остальное посмотрю на досуге, я пока не особо разбираюсь.

Уж если "хз", то найди родной тулчейн для своей прошивки и укажи пути для него в $ make menuconfig в среде OpenWRT Buildroot. Хотя бы будешь уверен, что dnscrypt-proxy будет "ожидать" ту же среду исполнения, как при кросс-компиляции.
Тулчейн родной - из репов openwrt собирал, из коробки так сказать.

ryzhov_al
20-07-2012, 09:45
Пакет обновлён (http://code.google.com/p/wl500g-repo/source/detail?r=759) до версии 1.0, но изменений с предыдущей версии 0.11, вышедшей три дня назад, не много (https://github.com/opendns/dnscrypt-proxy/commits/master).

Отдельным пакетом добавлена утилита hostip, которая поможет не допустить клинча на роутерах, где dnscrypt-proxy служит основным DNS-резолвером. Суть клинча:

роутер после включения ещё не получил актуальную дату от NTP-сервера и системная дата роутера находится в глубоком прошлом,
dnscrypt-proxy не может "взлететь", так как сертификаты для связи с OpenDNS не валидны из-за корявой даты в системе,
NTP-клиенту нужен рабочий DNS-резолвер (в лице dnscrypt-proxy), чтобы получить актуальную дату и поправить её на роутере.

В этом случае "помогите" NTP-клиенту разрешить DNS-имя сервера времени с помощью hostip.



2 Black Roland: посмотри, зависят ли у тебя последние версии dnscrypt-proxy от libpthread? У меня почему-то перестали, но я подозреваю в этом свой тулчейн.

$ ldd /opt/sbin/dnscrypt-proxy

Black Roland
20-07-2012, 11:47
2 Black Roland: посмотри, зависят ли у тебя последние версии dnscrypt-proxy от libpthread? У меня почему-то перестали, но я подозреваю в этом свой тулчейн.

$ ldd /opt/sbin/dnscrypt-proxy

[root@OpenWrt ~]# ldd /usr/sbin/dnscrypt-proxy
libdl.so.0 => /lib/libdl.so.0 (0x7718a000)
libm.so.0 => /lib/libm.so.0 (0x77165000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x77142000)
libc.so.0 => /lib/libc.so.0 (0x770d6000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x7719e000)
Тоже не зависят. Я вообще заметил что не так давно появились libc и libgcc (сами собираются). Видимо тогда и libpthread пропала.

Отдельным пакетом добавлена утилита hostip, которая поможет не допустить клинча на роутерах, где dnscrypt-proxy служит основным DNS-резолвером.
Странная утилита какая-то. На роутере из коробки команда nslookup работает прекрасно, у меня на компе еще host, dig есть. dnscrypt-proxy ее не использует даже, но и выкидывать жалко :)

ryzhov_al
20-07-2012, 12:00
Тоже не зависят. Я вообще заметил что не так давно появились libc и libgcc (сами собираются). Видимо тогда и libpthread пропала.Никакой связи скорее всего нет.
Спасибо за тест, dnscrypt-proxy от libpthread действительно больше не зависит, мой тулчейн в порядке. Не забудь поправить Makefile.


Странная утилита какая-то. На роутере из коробки команда nslookup работает прекрасно, у меня на компе еще host, dig есть. dnscrypt-proxy ее не использует даже, но и выкидывать жалко :)Как dnscrypt-proxy может решить: использовать её или нет? Попробуй представить.:) Утилита предназначена ровно для одного кейса, описанного выше, здесь (http://www.linksysinfo.org/index.php?threads/dnscrypt-preview.37031/page-4#post-185812) готовое решение по её применению. На практике кейс встречался дважды (раз (http://www.linksysinfo.org/index.php?threads/dnscrypt-preview.37031/page-4#post-185602), два (https://forum.openwrt.org/viewtopic.php?pid=172346#p172346)). Если утилиту жалко выбрасывать, то положи (http://wl500g-repo.googlecode.com/svn/feeds/rtndev/dnscrypt-proxy/) её в отдельный пакет.

Update 22/07
2 Black Roland: посмотри, зависят ли у тебя последние версии dnscrypt-proxy от libpthread? У меня почему-то перестали, но я подозреваю в этом свой тулчейн.Теперь точно спокоен. Цитирую (https://github.com/opendns/dnscrypt-proxy/commit/2036814dc592322dcec2b83515c8592bbd63d42d):

Threads? We don't need threads any more.

Black Roland
20-07-2012, 12:19
Не забудь поправить Makefile.
Подожду стабильной версии, той что бережно в Downloads упакуют.


Как dnscrypt-proxy может решить: использовать её или нет? Попробуй представить.:)
Да фиг его знает :)


Утилита предназначена ровно для одного кейса, описанного выше, здесь (http://www.linksysinfo.org/index.php?threads/dnscrypt-preview.37031/page-4#post-185812) готовое решение по её применению.
Скрипт вроде красивый, если другой возможности нет. А так по моему лучше или dnsmasq настроить или уже готовый ресолвер собрать.


Если утилиту жалко выбрасывать, то положи (http://wl500g-repo.googlecode.com/svn/feeds/rtndev/dnscrypt-proxy/) её в отдельный пакет.
Уже лежит :) Начиная с 0.11.

ryzhov_al
11-09-2012, 07:21
Видел (https://github.com/opendns/dnscrypt-proxy/commit/e9a19583bc81b47ebe9e03c4409310cab25e70f4) уже, наверное:)

Thank you, Black Roland!

Frank Denis убрал (https://github.com/opendns/dnscrypt-proxy/commit/ff5d476b012dae99b33ea906a91d575b57b698ab) опцию --local-port, но при этом оставил ли он возможность указать порт в опции --local-address=<ip>[:рort]? Проверь, пожалуйста.

Если убрал, то я обновлять пакет не буду, т.к. отсутствие --local-port сделает невозможным совместное использование (http://wl500g.info/showthread.php?28971-%D4%E8%EB%FC%F2%F0%E0%F6%E8%FF-%ED%E5%E6%E5%EB%E0%F2%E5%EB%FC%ED%EE%E3%EE-%EA%EE%ED%F2%E5%ED%F2%E0-(dnsmasq-adsuck-dnscrypt)&p=246603#post246603) dnscrypt-proxy и dnsmasq.

Black Roland
11-09-2012, 07:51
Видел (https://github.com/opendns/dnscrypt-proxy/commit/e9a19583bc81b47ebe9e03c4409310cab25e70f4) уже, наверное:)

Видел :) Странно как-то он спасибо раздает, но да ладно.


...но при этом оставил ли он возможность указать порт в опции --local-address=<ip>[:рort]? Проверь, пожалуйста.
--local-address=<ip>[:рort] работает. Я вот такой init кладу в пакеты: http://pastebin.com/5zqqn9v0


Если убрал, то я обновлять пакет не буду, т.к. отсутствие --local-port сделает невозможным совместное использование (http://wl500g.info/showthread.php?28971-%D4%E8%EB%FC%F2%F0%E0%F6%E8%FF-%ED%E5%E6%E5%EB%E0%F2%E5%EB%FC%ED%EE%E3%EE-%EA%EE%ED%F2%E5%ED%F2%E0-(dnsmasq-adsuck-dnscrypt)&p=246603#post246603) dnscrypt-proxy и dnsmasq.

root@OpenWrt:~# dnscrypt-proxy --local-port 2053
dnscrypt-proxy: unrecognized option `--local-port'
--local-port выпилен.

skuwakin
23-09-2012, 09:57
Доброго времени суток. Возникла тут одна проблемка... Нужно исходящий урл от одного из устройств, подключенных к роутеру, например такого типа
http://yandex.ru/yandsearch?text=nokia&lr=65

заменить на
http://yandex.ru/yandsearch?text=samsung&lr=65

Privoxy на роутере стоит и нормально работает. Но вот как подменить урл я что-то не могу найти, а единственный русский и классный форум по privoxy похоже админ забросил... В общем буду признателен за любые идеи.

capau
20-11-2012, 16:57
можно ли к этому аппарату прикрутить adblock
нашел про томато статью (http://jajaz.org/?p=215)
реально на 66м такое? подскажите где/что почитать
тут поиск ничего не находит

MercuryV
20-11-2012, 19:41
Privoxy на роутере стоит и нормально работает. Но вот как подменить урл я что-то не могу найти, а единственный русский и классный форум по privoxy похоже админ забросил... В общем буду признателен за любые идеи.
redirect action (http://www.privoxy.org/user-manual/actions-file.html#REDIRECT) пробовали? Это официальная документация, на языке вероятного противника, но с примерами.

можно ли к этому аппарату прикрутить adblock
нашел про томато статью (http://jajaz.org/?p=215)
реально на 66м такое? подскажите где/что почитать
тут поиск ничего не находит
если я правильно понял, то по ссылке предлагается блокирование через записи в hosts. Подобное разбиралось в первом сообщении этой темы. Посмотрите также вариант (http://wl500g.info/showthread.php?28971-%D4%E8%EB%FC%F2%F0%E0%F6%E8%FF-%ED%E5%E6%E5%EB%E0%F2%E5%EB%FC%ED%EE%E3%EE-%EA%EE%ED%F2%E5%ED%F2%E0-(dnsmasq-adsuck-dnscrypt)&p=251703#post251703) с использованием privoxy и списков adblock

capau
21-11-2012, 04:36
redirect action (http://www.privoxy.org/user-manual/actions-file.html#REDIRECT) пробовали? Это официальная документация, на языке вероятного противника, но с примерами.

если я правильно понял, то по ссылке предлагается блокирование через записи в hosts. Подобное разбиралось в первом сообщении этой темы. Посмотрите также вариант (http://wl500g.info/showthread.php?28971-%D4%E8%EB%FC%F2%F0%E0%F6%E8%FF-%ED%E5%E6%E5%EB%E0%F2%E5%EB%FC%ED%EE%E3%EE-%EA%EE%ED%F2%E5%ED%F2%E0-(dnsmasq-adsuck-dnscrypt)&p=251703#post251703) с использованием privoxy и списков adblock

от жеж. спросил, а не там
я имел ввиду asus RT-N66U
можно на нем с мерлиновской прошивкой поднять адблок
или нужно лучше сделать связку как тут описано dnsmasq+adsuck+dnscrypt
как я понимаю это через прокси
на сколько это повлияет на скорость?

capau
23-11-2012, 21:49
сделал по инструкции (http://wl500g.info/showthread.php?28971-%D4%E8%EB%FC%F2%F0%E0%F6%E8%FF-%ED%E5%E6%E5%EB%E0%F2%E5%EB%FC%ED%EE%E3%EE-%EA%EE%ED%F2%E5%ED%F2%E0-(dnsmasq-adsuck-dnscrypt)&p=251703#post251703)
по указанному пути /tmp/local/sbin/post-firewall - ничего не обнаружил, вообще такого файла не находит
как быть

и такой вопрос
если в сети несколько компьютеров, то в этот самый post-firewall под каждый прописывать форватинг или можно диапазон IP указать

ValeryFVV2002
20-12-2012, 22:42
Скрипт закачки adblock2privoxy.pl нашел тут https://www.dropbox.com/sh/9qxq5celng29jvb/pe4ha9tXUd
(https://sites.google.com/site/rpfteam/conf)

Только замените
$cfg = '/etc/privoxy';
на
$cfg = '/opt/etc/privoxy';

Dark
18-01-2013, 02:58
(Поиском уже пользовался).

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

Есть ли какой-то предел этого списка? И какой примерно?
Как можно его редактировать в текстовом редакторе, а потом просто "заливать"? (т.е. подразумевается, что список будет часто правиться и совершенствоваться).
Сильно ли пострадает скорость и отзывчивость роутера под нагрузкой (торренты в качестве стресс-теста)?

Есть ли какие-то спец символы или возможность использовать регулярные выражения? (Это совсем не обязательно, но если уже есть, то это интересно. Например, вместо блокировок banner1.jpg, banner2.jpg, banner3.jpg написать что-то вроде banner?.jpg )

ryzhov_al
28-08-2013, 07:01
Написал shell-скриптик (http://files.ryzhov-al.ru/Routers/dnmasq%20and%20Tunlr/), который получает по API актуальные DNS-серверы Tunlr (http://tunlr.net/) и подставляет их по списку указанных доменов в конфиг dnsmasq.

В результате вы можете смотреть Netflix, Hulu, MTV и т.д., находясь за пределами США.

Для прошивки asuswrt-merlin установка упрощена (https://github.com/RMerl/asuswrt-merlin/wiki/How-to-use-Tunlr-service), для энтузиасткой прошивки скрипт придётся подпилить.

ConstAntz
05-09-2013, 05:08
Третий раз во второй класс!

Задали младшему эту тему. А я, по своей неграмотности, и спросил у яндекса через "О".

Ответ искать в первых ссылках на видео.

И как фильтровать такой контент?

TReX
05-09-2013, 07:58
Третий раз во второй класс!

Задали младшему эту тему. А я, по своей неграмотности, и спросил у яндекса через "О".

Ответ искать в первых ссылках на видео.

И как фильтровать такой контент?

3 декабря Общественная палата РФ открыла горячую линию «Наши дети в Интернете» для сбора данных об электронных ресурсах, которые содержат опасную для детей и подростков информацию. По номеру 8-800-700-8-800 в ОП РФ можно сообщать адреса сайтов, содержание которых, по мнению граждан, может нанести вред несовершеннолетним (ссылки и обращения можно также присылать по электронной почте: hotline@oprf.ru Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript

Создан Единый реестр доменных имен, указателей страниц сайтов в сети "Интернет" и сетевых адресов, позволяющих идентифицировать сайты в сети "Интернет", содержащие информацию, распространение которойhttp://zapret-info.gov.ru/

Ссылки на сайты, куда можно отправить информацию о противоправном контенте:

Горячая линия | Лига безопасного интернета


http://www.ligainternet.ru/newhotline/



ФОНД «ДРУЖЕСТВЕННЫЙ РУНЕТ»


http://hotline.friendlyrunet.ru/



Недопусти.ру – Противоправный контент


http://nedopusti.ru/hotline/illegal/



Центр безопасного интернета в России. Горячая линия


http://saferinternetcenter.ru/post/hot_line.php

rss
08-10-2013, 15:33
А не добавить ли возможность выбора предопределенных DNS с фильтрацией нежелательных сайтов типа предложенного в http://dns.yandex.ru/ ?....

Vampik
08-10-2013, 16:16
С текущими тенденциями уж лучше бы I2P и OpenVPN.

rss
08-10-2013, 17:57
С текущими тенденциями уж лучше бы I2P и OpenVPN.

Это несколько другое. Кстати, cjdns, который у нас уже есть в Entware, позволяет создавать закрытые сети. В т.ч. туннели через них.

Здесь речь именно о том, чтобы изнутри ограничить доступ к нежелательным сайтам. Например детям. Или при заходе на сайт с сомнительным содержанием снизить вероятность открытия сайтов с еще более сомнительным содержанием.

theMIROn
08-10-2013, 18:12
А не добавить ли возможность выбора предопределенных DNS с фильтрацией нежелательных сайтов типа предложенного в http://dns.yandex.ru/ ?....

Добавлю, там достаточно просто все

rss
08-10-2013, 18:27
Добавлю, там достаточно просто все

Понятно, что по сути надо лишь вписать правильный адрес DNS, но если это делать как фичу, надо аккуратно приделать выбор DNS из списка. Причем желательно найти аналогичные иностранные сервисы, если они есть.

theMIROn
08-10-2013, 19:58
Понятно, что по сути надо лишь вписать правильный адрес DNS, но если это делать как фичу, надо аккуратно приделать выбор DNS из списка. Причем желательно найти аналогичные иностранные сервисы, если они есть.

opendns похожий сервис предлагает, но там по другому

Vampik
09-10-2013, 09:27
Надо учесть, еще вот что:
1) PPTP, L2TP - указанные DNS должны использоваться только для WAN (ppp), MAN должен использовать только DNS провайдера.
2) IPoE, PPPoE, USB-модемы - нужно использовать DNS провайдера в дополнение к указанным.

Иначе могут не резолвиться локальные сервисы провайдера (в т.ч. личный кабинет и т.п.), а в первом случае также VPN-сервер провайдера может не отрезолвиться или отрезолвиться во что-нибудь не то.

P.S. Именно по этим причинам я не понимаю как можно сделать нормальный мультиван, например, с двумя PPTP/L2TP-провайдерами - имеем 4 набора DNS (MAN-1, MAN-2, WAN-1, WAN-2).

theMIROn
09-10-2013, 10:42
Надо учесть, еще вот что:
1) PPTP, L2TP - указанные DNS должны использоваться только для WAN (ppp), MAN должен использовать только DNS провайдера.
2) IPoE, PPPoE, USB-модемы - нужно использовать DNS провайдера в дополнение к указанным.


слишком сложно, yandex.dns должны использоваться только для форвардинга, но не на роутере. и нет проблем.

ryzhov_al
09-10-2013, 10:51
Добавлю, там достаточно просто всеСтраничка с предупреждениями при использовании Яндекс.ДНС может отдаваться (http://forums.smallnetbuilder.com/showthread.php?t=13150) на русском или вражеском. Даже не знаю как лучше.

theMIROn
09-10-2013, 10:58
Страничка с предупреждениями при использовании Яндекс.ДНС может отдаваться (http://forums.smallnetbuilder.com/showthread.php?t=13150) на русском или вражеском. Даже не знаю как лучше.

это не контролируется, яндекс сам отдает тот язык, который посчитал нужным, на основании запроса браузера

ryzhov_al
09-10-2013, 11:14
это не контролируется, яндекс сам отдает тот язык, который посчитал нужным, на основании запроса браузераЭто ясно. Я показал случай, когда язык был определён неверно.

Vampik
09-10-2013, 12:44
слишком сложно, yandex.dns должны использоваться только для форвардинга, но не на роутере. и нет проблем.

Тогда ОК. Сейчас же, емнип, указанные в веб-морде dns прописываются в /etc/resolv.conf и используются как dnsmasq, так и самим роутером.

theMIROn
09-10-2013, 14:24
Тогда ОК. Сейчас же, емнип, указанные в веб-морде dns прописываются в /etc/resolv.conf и используются как dnsmasq, так и самим роутером.

да, это в основном legacy со времен, когда /etc был в ro

Omega
11-03-2014, 00:40
P2Partizan - mass IP blocking (http://www.linksysinfo.org/index.php?threads/p2partisan-mass-ip-blocking.69128/) ;)

ryzhov_al
29-05-2014, 17:26
Сделал скрипт выбора DNSCrypt-сервера. Выбор будет предложен при установке пакета:

admin@RT-N66U:/tmp/mnt/OPT/tmp# opkg install dnscrypt-proxy
Installing dnscrypt-proxy (1.4.0-2) to root...
Configuring dnscrypt-proxy.
By default, dnscrypt-proxy will use the OpenDNS dnscrypt server.
You may choose another one if you wish:
1) cloudns-can (CloudNS Canberra)
2) cloudns-syd (CloudNS Sydney)
3) d0wn-fr-ns1 (First d0wn server in France)
4) d0wn-fr-ns2 (Second d0wn server in France)
5) d0wn-im-ns1 (d0wn server in Isle of Man)
6) d0wn-li-ns1 (d0wn server in Lichtenstein)
7) d0wn-nl-ns1 (First d0wn server in Netherlands)
8) d0wn-nl-ns2 (Second d0wn server in Netherlands)
9) d0wn-ro-ns1 (First d0wn server in Romania)
10) d0wn-ro-ns2 (Second d0wn server in Romania)
11) d0wn-sg-ns1 (d0wn server in Singapore)
12) dnscrypt.eu-dk (DNSCrypt.eu Denmark)
13) dnscrypt.eu-dk-ipv6 (DNSCrypt.eu Denmark over IPv6)
14) dnscrypt.eu-nl (DNSCrypt.eu Holland)
15) dnscrypt.eu-nl-ipv6 (DNSCrypt.eu Holland over IPv6)
16) okturtles (okTurtles)
17) opendns (OpenDNS)
18) opendns-familyshield (OpenDNS with FamilyShield)
19) opendns-ipv6 (OpenDNS over IPv6)
20) opennic-ca-ns3 (OpenNIC server ns3.ca)
21) opennic-ca-ns3-ipv6 (OpenNIC server ns3.ca over IPv6)
22) opennic-ca-ns4 (OpenNIC server ns4.ca)
23) opennic-ca-ns4-ipv6 (OpenNIC server ns4.ca over IPv6)
24) opennic-jp-ns2 (OpenNIC server ns2.jp)
25) opennic-jp-ns3-ipv6 (OpenNIC server ns3.jp over IPv6)
26) opennic-uk-ns10 (OpenNIC server ns10.uk)
27) opennic-uk-ns10-ipv6 (OpenNIC server ns10.uk over IPv6)
28) opennic-uk-ns8 (OpenNIC server ns8.uk)
29) opennic-uk-ns8-ipv6 (OpenNIC server ns8.uk over IPv6)
30) opennic-uk-ns9 (OpenNIC server ns9.uk)
31) opennic-uk-ns9-ipv6 (OpenNIC server ns9.uk over IPv6)
32) opennic-us-ca-ns17 (OpenNIC server ns17.ca.us)
33) opennic-us-ca-ns17-ipv6 (OpenNIC server ns17.ca.us over IPv6)
34) soltysiak (Soltysiak)
Choose server from list or hit Enter to continue [1-34]:

ryzhov_al
01-07-2014, 10:19
Отсюда (http://russian.rt.com/article/38890):


Роскомнадзор разблокировал rutor.org, rutracker.ru, nnm-club.me…Используя второй год подряд dnscrypt-proxy даже не подозревал, что они были заблокированы.

don-pedro
01-07-2014, 10:32
Никогда не пользуясь первыми двумя ресурсами, вообще ни о чём не подозревал:)
А третий мои провайдеры почему-то не блокировали.

ryzhov_al
22-12-2014, 13:35
Это несколько другое. Кстати, cjdns, который у нас уже есть в Entware, позволяет создавать закрытые сети. В т.ч. туннели через них.Тов. Zyxmon убедил обновить cjdns до последней версии. Предыдущая была подвержена какой-то заметной уязвимости.

PS Кстати, здесь (http://habrahabr.ru/post/196646/) есть перевод интервью с автором cjdns.

egorart
22-01-2017, 09:28
Добрый день.
Инструкция из сообщения №5 ещё актуальна?

А то делаю с роутера:

# nslookup 92.255.241.100 127.0.0.1
Server: 127.0.0.1
Address 1: 127.0.0.1 localhost.localdomain

Name: 92.255.241.100
Address 1: 92.255.241.100 law.filter.ertelecom.ru
Это я "кривой" или провайдер как-то по другому теперь фильтрует?


388 nobody 976 S /usr/sbin/dnsmasq --no-resolv --server=127.0.0.1#65053
394 root 1928 S dnscrypt-proxy --local-address=127.0.0.1:65053 --daemonize -R cisco

dnscrypt ставил из репозитория