Pull to refresh

Comments

UFO just landed and posted this here
Полезненько, 7zip и еще куча ресурсов до сих пор блокированы.
7-zip.org действительно не работает. Добавил его в unblock.txt, заработал сразу.
git.openwrt.org — заблочен
nextcloud.com — заблочен
Если они вам нужны, используйте метод обхода блокировок из статьи и добавляйте эти и другие нужные именно вам домены в unblock.txt.
я просто привожу сам факт избыточной блокировки добропорядочных сайтов, все методы обхода я знаю.

А настройку блокировки рекламы не пробовали? сколько ни пытался-то вообще пропадает интернет, то ничего не блокирует.приходится pi-hole+vpn использовать. Прошивал падаван на xiaomi mi router, который с четырьмя антенами. Уже около года работает. Из всех моих роутеров, доволен этим больше всего

А что её пробовать? Берёте и блокируете. Самый идеальный вариант через дополнения для бразузере, в этом случае охватываются все нюансы и особенности, т.к. у блокировщика есть доступ к содержимому сайта. Если хотите на стороне маршрутизатора, то, применительно инструкции, на этапе 10 (редактирование конфигурационного файла dnsmasq) добавляете:

no-resolv
server=176.103.130.130
server=176.103.130.131


Удаляете все другие записи server в файле, если они есть. Всё. В роли серверов DNS будет использоваться AdGuard DNS с блокировокой рекламы.
Зачем использовать сторонние DNS, блокирующие рекламу, когда можно сделать то же самое локально, буквально одной строкой?
curl --compressed https://cdn.raletag.gq/rueasyhosts.txt https://adaway.org/hosts.txt \
| awk '{sub("\r$", ""); sub("^www\\.", "", $2); if ($0 && $0 !~ /^#/ && $2 && $2 !~ /^$/ && $2 != "localhost") print "server=/." $2 "/";}' \
| sort -u > /etc/dnsmasq-adblock-list.conf
Спасибо.

Вот вариант для тех, кто действует по инструкции из статьи (единый вариант для Padavan и Keenetic OS)
Выполните команды:

opkg update
opkg install curl ca-certificates ca-bundle
touch /opt/etc/adblock.dnsmasq

В 10-м шаге инструкции (уже после того, как вы проделаете все действия по инструкции и у вас всё работает, как нужно) добавьте в конфигурационный файл dnsmasq.conf строку:

conf-file=/opt/etc/adblock.dnsmasq

Создайте скрипт adblock_update.sh:

mcedit /opt/bin/adblock_update.sh

Вставьте (Shift+Insert) содержимое:

#!/bin/sh

curl --compressed https://cdn.raletag.gq/rueasyhosts.txt https://adaway.org/hosts.txt \
| awk '{sub("\r$", ""); sub("^www\\.", "", $2); if ($0 && $0 !~ /^#/ && $2 && $2 !~ /^$/ && $2 != "localhost") print "server=/." $2 "/";}' \
| sort -u > /opt/etc/adblock.dnsmasq

if [ ! -e "/opt/etc/init.d/S56dnsmasq" ]; then
  restart_dhcpd
else
  /opt/etc/init.d/S56dnsmasq restart
fi

Дайте права на исполнение:

chmod +x /opt/bin/adblock_update.sh

Запустите скрипт adblock_update.sh (вы можете запускать его при необходимости обновления списка доменов с рекламой):

adblock_update.sh

Чтобы отключить блокировку рекламных доменов, удалите строку conf-file=/opt/etc/adblock.dnsmasq из dnsmasq.conf.
Я же правильно понимаю, что сайты из списка: /opt/etc/adblock.dnsmasq не должны открываться?
Всё верно. Они перестанут работать (не будут резолвиться на стороне клиентов), как и реклама, которая на них ссылается.

Тут нужно быть аккуратным, потому что список рубит лишнее, и что-то нужное может перестать работать. Например, у меня kinozal.tv отвалился с таким подходом.
Немного личной практики, если кому интересно:

перепробовал множество вариантов обхода блокировок прямо на маршрутизаторе, но в итоге остановился на варианте Shadowsocks на конечных устройствах. Весь трафик по умолчанию в браузере гоняю через SS, а исключения контролируются через расширение SwitchyOmega. На смартфонах SS тоже настроен и включается в случае необходимости, оно просто работает и удобно вполне.

В случае, если чему-то кроме браузера требуется доступ к заблокированным ресурсам, в SS просто включается режим System Proxy и можно спокойно работать дальше.

В итоге, получил 2-в-1: обход блокировок и хотя бы какая-то «анонимность» в сети.

Точечный обход для себя я признал малоэффективным и слишком затратным по соотношению к результату.
UFO just landed and posted this here
Подобное уже было для MikroTik: habr.com/post/413049
P.S. Я так понял, кто-то промахнулся веткой для ответа.
Но если все же речь идет о Shadowsocks для RouterOS, то увы, его нет.
Единственный вариант (как я и сделал) — сменить прошивку на LEDE/OpenWrt 18, там есть поддержка SS.
Случайно нажал «Отклонить» на комментарии человека (автоматом воспринял кнопку, как «Ответить»). Прошу прощения у него.

У него всё заработло на Padavan, но был вопрос относительно dnscrypt-proxy2 — его нет в Entware. В чём дело?

У вас используется старая версия Entware-ng, в которой пакеты и их список уже не обновляются. И пакета dnscrypt-proxy2 там нет (только первая версия). Вам нужно обновить прошивку до последней (Entware-ng было переключено на Entware в прошивке от 10.05.2018, commit 8ec3a10) и заново настроить Entware, удалив предыдущую установку Entware-ng. Пакет dnscrypt-proxy2 появится.
Самая свежая версия от 05.11.2018 (commit 32a93db). Установка стандартная — запускаете PROMETHEUS, обновляете исходный код, собираете прошивку и устанавливаете её. Буквально несколько кликов и минуту времени (не считая несколько десятков минут, зависящие от мощности вашего компьютера, которые будут потрачены на компиляцию прошивки). Всё очень просто.

Затем форматируете (чтобы избавиться от старой версии Entware-ng) раздел/диск/внутреннюю память под Entware для установки свежей версии.
Спасибо, получилось, правда, не за 10 минут)
Возможно, стоит добавить ссылку на процедуры сборки прошивки в статью? Или указать, что работа с dnscrypt-proxy2 возможно только на свежесобранных образах.

Вопрос не по теме — подскажите, пожалуйста, где поискать скрипт автоматического переключения между Wi-Fi сетями в режиме AP-Client (WISP)? Нашёл множество статей по автоматическому переключению между WAN<->3G модемом, а по перебору Wi-Fi сетей ничего толкового нет.
Тема прошивки Padavan очень обширная, ещё есть особенности на разных устройствах, ещё есть особенности ранних версий. Все это напрямую не относится к самой статье. Тема Keenetic тоже обширная, и тоже в своё время была поддержка Entware-ng (и остаётся без переустановки). В общем, достаточно знать, что на свежих прошивках обоих типов устройств всё отрабатывается по инструкции идеально. Кто захочет, найдёт упоминание тут в комментариях.

По второму вопросу не подскажу.
Самая свежая версия от 05.11.2018 (commit 32a93db).

Если хочется ещё свежее — есть форк. Там обновлён некоторый софт, добавлена поддержка SMB 3, исправлены некоторые мелкие ошибки…

Собирается всё тем же PROMETHEUS, только тестовой версией и на свежих дистрибутивах Linux, в отличие от Padavan.
Слишком геморойно вручную списки наполнять, да и в текущих условиях полезнее весь трафик через vpn пропускать, а белые списки делать не для заблокированных ресурсов, а для тех, куда надо получать доступ напрямую через провайдера. Я так и сделал. Pfsense позволяет все это настроить вообще не заглядывая в консоль, но такие игрушечные роутеры для этого уже не подойдут, нужно железо посерьезнее.
Ещё стоит как-то обрабатывать обращения к адресам из заблокированных диапазонов. Это уберёт приличное количество случаев «домен не числится в реестре, но заблокирован».

Но всё чаще я натыкаюсь на ситуации, когда провайдер, не умеющий обнюхать HTTPS и прочитать в SNI, на какой домен обращается пользователь, рубит все HTTPS-соединения на IP-адрес, на котором кроме «запрещёнки» висит и непричастный ресурс. Руками добавлять откровенно лень, видимо, пора полностью обернуться в VPN.

Сейчас у меня комбинированная схема: заблокированные ресурсы пущены через VPN, заблокированные «за компанию» — через Tor, поднятый там же, на роутере, а реклама режется с помощью dnsmasq, список рекламных доменов формируется громадным bash-скриптом, который я всё никак не дополирую.

А на скрипт как-то можно взглянуть? сколько ни читал мануалов, не подтягиваются списки блокировки.точнее роутер их качает, но не видит что блокировать. Кстати насчет списков есть очень толковый ресурс- tspprs.com

Скрипт
sleep 9
PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 0.0.0.0 is defined as a non-routable meta-address used to designate an invalid, unknown, or non applicable target. Using 0.0.0.0 is empirically faster, possibly because there's no wait for a timeout resolution
ENDPOINT_IP4=0.0.0.0


# Download and process the files needed to make the lists (enable/add more, if you want)

# broad blocklist
wget -qO- "https://www.mvps.org/winhelp2002/hosts.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' > /tmp/block.build.list

# focus on ad related domains
wget -qO- "https://pgl.yoyo.org/as/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on malware
wget -qO- "https://www.malwaredomainlist.com/hostslist/hosts.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on mobile ads
wget -qO- "https://adaway.org/hosts.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# broad blocklist
wget -qO- "https://someonewhocares.org/hosts/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on malicious bitcoin mining sites
wget -qO- "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on zeus botnet by abuse.ch
wget -qO- "https://zeustracker.abuse.ch/blocklist.php?download=hostfile" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on malware
wget -qO- "https://mirror1.malwaredomains.com/files/justdomains" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on malvertising by disconnect.me
wget -qO- "https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on ad by disconnect.me
wget -qO- "https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on tracking by disconnect.me (Last-Modified: 31 Jul 2015)
# wget -qO- "https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on ransomware by abuse.ch
wget -qO- "https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on sites which have used DMCA takedowns to force removal from other blacklists (Last-Modified: 20 Aug 2017)
# wget -qO- "https://ssl.bblck.me/blacklists/domain-list.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# generic blocklist, fewer false positives down to the low sensitivity list with more false positives
wget -qO- "https://dshield.org/feeds/suspiciousdomains_High.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on ad related domains (Last-Modified: 14 Feb 2018)
# wget -qO- "https://hostsfile.mine.nu/Hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# broad blocklist
# wget -qO- "https://hosts-file.net/ad_servers.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# broad blocklist (Last-Modified: 18 Mar 2018)
# wget -qO- "http://sysctl.org/cameleon/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^127.0.0.1/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# generic blocklist
# wget -qO- "https://dshield.org/feeds/suspiciousdomains_Medium.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# generic blocklist
# wget -qO- "https://dshield.org/feeds/suspiciousdomains_Low.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on feodo botnet
# wget -qO- "https://feodotracker.abuse.ch/blocklist/?download=domainblocklist" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# generic blocklist (Last-Modified: 15 Apr 2018)
# wget -qO- "https://raw.githubusercontent.com/Dawsey21/Lists/master/main-blacklist.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on windows telemetry domains
# wget -qO- "https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on malware by disconnect.me
# wget -qO- "https://s3.amazonaws.com/lists.disconnect.me/simple_malware.txt" | grep -v -e ^# -e ^$ | awk -v r="$ENDPOINT_IP4 " '{sub(//, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on intrusive online consultants and callback widgets
# wget -qO- "https://raw.githubusercontent.com/pafnuty/onlineConsultantBlocker/master/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on malicious bitcoin mining sites
# wget -qO- "https://raw.githubusercontent.com/greatis/Anti-WebMiner/master/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on dead websites (against typos in URLs)
# wget -qO- "https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Dead/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on spam
# wget -qO- "https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Spam/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on malicious bitcoin mining sites
# wget -qO- "https://gitlab.com/ZeroDot1/CoinBlockerLists/raw/master/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# broad blocklist
# wget -qO- "https://raw.githubusercontent.com/mitchellkrogza/Badd-Boyz-Hosts/master/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on ads and tracking domains
# wget -qO- "https://raw.githubusercontent.com/lightswitch05/hosts/master/ads-and-tracking-extended.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on Windows installers ads sources
# wget -qO- "https://raw.githubusercontent.com/FadeMind/hosts.extras/master/UncheckyAds/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on 2o7 network tracking
# wget -qO- "https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.2o7Net/hosts" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# focus on 2o7 network tracking
# wget -qO- "https://raw.githubusercontent.com/azet12/KADhosts/master/KADhosts.txt" | awk -v r="$ENDPOINT_IP4" '{sub(/^0.0.0.0/, r)} $0 ~ "^"r' >> /tmp/block.build.list

# Add black list, if non-empty
if [ -s "/etc/storage/black.list" ]
then
    awk -v r="$ENDPOINT_IP4" '/^[^#]/ { print r,$1 }' /etc/storage/black.list >> /tmp/block.build.list
fi


# Sort the download/black lists
awk '{sub(/\r$/,"");print $1,$2}' /tmp/block.build.list | sort -u > /tmp/block.build.before


# Filter (if applicable)
if [ -s "/etc/storage/white.list" ]
then
    # Filter the blacklist, suppressing whitelist matches
    # This is relatively slow
    egrep -v "^[[:space:]]*$" /etc/storage/white.list | awk '/^[^#]/ {sub(/\r$/,"");print $1}' | grep -vf - /tmp/block.build.before > /tmp/block.hosts
else
    cat /tmp/block.build.before > /tmp/block.hosts
fi


# Delete files used to build list to free up the limited space
rm -f /tmp/block.build.list
rm -f /tmp/block.build.before


killall dnsmasq
/usr/sbin/dnsmasq


Advanced Settings → LAN → DHCP Server → Custom Configuration File «dnsmasq.conf»:
addn-hosts=/tmp/block.hosts

Скрипт закинуть, например, в Run After Router Started + придумать его периодический запуск, чтобы подтягивать обновления. Главное, не увлекаться количеством подписок, память не резиновая, да и процессору несладко.

Если busybox отказывается качать списки по HTTPS, придётся поставить из Entware полноценный wget и ca-certificates.

В OpenWrt, конечно, всё культурнее — там есть пакеты adblock и simple-adblock.
UFO just landed and posted this here
Инструкция заточена под IPv4 (под IPv6 требуется доработка). У rutracker есть адрес IPv6 2a02:4680:22::214. Если обратиться к нему, то запрос пойдёт мимо обхода блокировок и будет заблокирован провайдером (если провайдер умеет блокировать IPv6).

РКН уже поддерживает IPv6 в выгрузке, так что это не на долго.

На Xiaomi R3G прекрасно работает OpenWrt, где всё вообще можно буквально мышкой настроить. В отличие от Padavan там используется свежее upstream ядро с нормально написанными драйверами, а не китайские утекшие поделки через ndiswrapper.

Расскажите, пожалуйста, как реализовать указанный в статье (или подобный) метод выборочного обхода блокировок «буквально мышкой» в OpenWrt.

Поднимаете сервер с shadowsocks, устанавливаете OpenWrt (самая сложная часть), открываете 192.168.1.1, устанавливаете пакеты shadowsocks-libev-ss-redir и shadowsocks-libev-ss-rules, открываете вкладку Services->shadowsocks-libev, вводите адрес сервера и пароль, открываете вкладку "Redir rules", ставите политику "local-out default" в "checkdst", в destinantion settings заливаете файл со списком IP (можно с подсетями в формате ipset), dst default "bypass", для надёжности ставите галку в "forward recentrst" для автодобавления правил после получения нескольких TCP RST с одного адреса.
Готово, жмёте кнопку apply и радуетесь интернету.

Если не учитывать, что это банальный ввод в заблуждение, аналогично, можно сказать, что обход блокировок делается в два клика не любом маршрутизаторе вообще — покупаете быстрый VPN-сервер и добавляете его в настройки маршрутизатора и гоните весь трафик через него — готово.

А что вы будете делать с сайтами, которые меняют свой IP (и вы их заведомо не знаете)?

Регулярно обновлять список IP, у LuCi (веб интерфейс OpenWrt) есть прекрасный API для всего, чего можно сделать "мышкой". Не вижу смысла резолвить баш скриптами на встроенной системе (роутере), когда это можно без ограничений на используемые инструменты делать на сервере (этакий SDN-way). Да и всё уже зарезолвили, конвертируйте из csv и пользуйтесь. Для пущей подстраховки есть автодобоваление айпишников в ipset по многократному tcp rst (что делают провайдеры для https).
Есть ещё вариант по публичным данным один раз в полгода генерировать таблицу всех нероссийских IP — в любом случае трафик пойдёт через европу, в азии мало полезного контента для нас. Скрипты есть на гитхабе.

Т.е. это выльется в реальности в кучку скриптов и никаких «буквально настроить мышкой» там нет. В итоге, мы имеем, что человеку, у которого уже есть маршрутизатор Keenetic или с прошивкой Padavan, на свой маршрутизатор надо поставить OpenWrt, арендовать сервер с ежемесячной оплатой, настроить его, настроить маршрутизатора с OpwenWrt (по инструкции, которой по сути нет, при этом действий будет не меньше и не проще, чем описанное в статья, и не охватывает существенные частные случаи, т.к. из ваших же данных вы оперируете только IP, а не доменами, например нет внесения IP во множество при резолвинге). Вывод — ваши слова не соответствуют действительности, и OpenWrt никакой выгоды не несёт для конкретной реализации, описанной в статье (затрата большего количества усилий, времени, денег, и при этом получите результат по эффективности хуже или, как максимум, не лучше). Какое бы крутое ядро с upstream там не было, это не играет никакой роли для конкретной задачи. Скрипач не нужен.

Для прокси достаточно самого слабого инстанса, который стоит копейки. И даже их можно без ущерба разделить на знакомых, есть даже готовый набор ansible рецептов для поднятие всех мыслимых сервисов сразу с порталом раздачи доступов для знакомых. У Tor низкая скорость и высокая задержка by design, для ежедневного неосознанного использования это не годится. Учитывая, что скоро гуглить придётся тоже через прокси для нормальной выдачи — tor не вариант. Кстати, как с ним рекапча дружит?

Ах, да, совсем забыл. Китайцы уже давно придумали технические решения для автоматического распространения списков блокировки — гуглится по слову gfwlist. Например в клиенте shadowsocks для macos достаточно просто указать url, для openwrt наверняка тоже есть готовый пакет. Нужно просто нам тоже взять и адаптировать это к РКН.

Есть luci-app-unlocker, который можно и мышкой. Но я не уверен, допустимо ли ему скармливать домены вместо IP-адресов, поэтому всё же прикрутил ваши скрипты к OpenWrt.
А не подскажите, как сделать, что бы dnscrypt работал не только для адресов в unblock.txt, а вообще для всей системы?
После того, как настроите dnscrypt, выполните 10-й шаг настроек повторно. Только удалите поле «server=8.8.8.8» и добавьте:

no-resolv
server=127.0.0.1#9153

Перезапустите dnsmasq.

На Padavan:
restart_dhcpd

На Keenetic:
/opt/etc/init.d/S56dnsmasq restart

dnsmasq начнёт использовать только dnscrypt для резолвинга.
Работает! Спасибо.

PS: и главное — решение очевидное-то. :))
На форке Padavn от Linaro Tor уже включен в прошивку. Как это отражается на методике?
Используйте эту версию Tor с соответствующим конфигурационным файлом. Или выключите и используйте версию из Entware (как по инструкции).
Не знаю, может кому и пригодится — блокировка рекламы и нежелательного контента силами не dnsmasq а через dnscrypt-proxy2. Мне их списки для блокировки понравились.

Сами скрипты находятся здесь: github.com/jedisct1/dnscrypt-proxy/tree/master/utils/generate-domains-blacklists

Скачиваем 6 файлов допустим в папку /opt/etc/dnscrypt/

Для работы generate-domains-blacklist.py понадобиться поставить python и ca-certificates:

/opt/etc/cron.weekly/generate-blacklist

А дальше запускаем скрипт генерации черного списка для блокировки рекламы:

python generate-domains-blacklist.py -i > list.txt.tmp && mv -f list.txt.tmp domains-blacklist.txt

На выфходе получим файл domains-blacklist.txt со списком блокировок.

Далее открываем конфиг dnscrypt и указываем файл для блокировки:

blacklist_file = '/opt/etc/dnscrypt/domains-blacklist.txt'

Что бы иметь возможность отслеживать, что именно блокируем добавляем ещё два значения:

log_file = '/opt/var/log/blocked.log'
log_format = 'tsv


Так же можно и для белого списка:

whitelist_file = '/opt/etc/dnscrypt/domains-whitelist.txt'
log_file = '/opt/var/log/whitelisted.log'
log_format = 'tsv'


PS: Можно ещё автоматизировать процесс. Вместо ручного скачивания файлов и генерации списков.

mcedit /opt/etc/cron.weekly/generate-blacklist

Вставляем скрипт:
~ # cat get-dnscrypt-files.sh 
#!/opt/bin/sh

DIR="/opt/etc/dnscrypt"
FILE="generate-domains-blacklist.py"
URL="https://raw.githubusercontent.com/jedisct1/dnscrypt-proxy/master/utils/generate-domains-blacklists"

# check curl
if [ ! -f "/opt/bin/curl" ]; then
	opkg install curl --force-reinstall
fi

# check dir
if [ ! -d "$DIR" ]; then
	mkdir -p $DIR
fi

cd $DIR

# download files
curl -O $URL/domains-blacklist-all.conf \
	-O $URL/domains-blacklist-local-additions.txt \
	-O $URL/domains-blacklist.conf \
	-O $URL/domains-time-restricted.txt \
	-O $URL/domains-whitelist.txt \
	-O $URL/$FILE

# fix shebang & make executable
sed -i -e 's,#!.*,#!/opt/bin/python,' $FILE && chmod +x $FILE

# create blacklist
./$FILE -i > domains-blacklist.txt

# restart dnscrypt2
/opt/etc/init.d/S09dnscrypt-proxy2 restart


Автор скрипта — TheBB с форума [forum].[keenetic].[net]

Делаем его исполняемым:

chmod +x /opt/etc/cron.weekly/generate-blacklist

И запускаем:

/opt/etc/cron.weekly/generate-blacklist

Раз в неделю список файлов для блокировки будет сам создаваться с помощью задания в cron.
Привет! Настроил на своём Keenetic Giga II всё по инструкции, список сайтов взял из реестра, почистил скриптом от записей с кириллицей и убрал звёздочки: то есть, dig'у ничего мешать не должно. Сайты прекрасно открываются, но возник трабл вот в чём: ssh: connect to host 192.168.1.1 port 222: Connection refused
Сначала грешил на то, что dig крайне неспешен и Entware застрял на инициализации, но нет, всё разблокировалось. Куда копать, чтобы привести в чувство Entware'ный ssh?
Во-первых, этот метод не предназначен для того, чтобы взять список из тысяч доменов (например, весь список из реестра заблокированных ресурсов) и разблокировать его. Суть и назначение этого метода в другом. Используйте другой метод для вашей задачи, например, изначальный вариант от Zolg (который используется только dnsmasq и формирует список всех заблокированных ресурсов из реестра; например тут в конце статьи можно прочесть реализацию для Keenetic) или бесплатный OpenVPN АнтиЗапрет.

Во-вторых, с чего вы взяли что unblock_ipset завершил свою работу, разблокировка могла сработать через dnsmasq, а скрипт резолвинга доменов продолжает работать. Хоть он должен делать всё в фоне, но мало ли.

В-третьих, были случаи когда на Keenetic у dropbear в Entware слетает порт. Измените кофигурационный файл dropbear через SMB.
Так же словил такой глюк, после удаления из web gui пункта «доступ SSH» стало все на свои места. А именно доступ в busybox на порт 222.
Подскажите, как нужно изменить скрипт на 9 шаге для Keenetic, чтобы перенаправлять трафик не в Tor, а в VPN туннель (vpn соединение уже установлено).
Вам необходимо в шаге 9 пометить все пакеты с адресатами из unblock и немного подправить сам скрипт:

#!/bin/sh

[ "$type" == "ip6tables" ] && exit 0
[ "$table" != "mangle" ] && exit 0
[ -z "$(iptables -t mangle -L | grep unblock)" ] || exit 0

iptables -w -A PREROUTING -t mangle -m set --match-set unblock dst,src -j MARK --set-mark 1

exit 0


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

При поднятии интерфейса (нужно сделать скрипт на событие) выполнить команды ($IFNAME — имя интерфейса), которые завернут все пакеты с меткой в нужный интерфейс:

echo 0 > /proc/sys/net/ipv4/conf/$IFNAME/rp_filter
ip route flush table 1
ip rule del table 1
ip rule add fwmark 1 table 1 priority 1000
ip route add default dev $IFNAME table 1

Вот тут есть небольшой пример.

При подключении к VPN обязательно запретить роутить весь трафик через него и запретить получение маршрутов (route-noexec для OpenVPN).

Все ресурсы из unblock.txt будут маршрутизироваться через VPN. Остальные через основной канал. В unblock.txt можно добавить адреса DNS-серверов, чтобы DNS-трафик шёл через VPN, тогда можно не использовать dnscrypt (если провайдер фильтрует DNS-трафик).
Не понимаю, мозгов не хватает. Ни как не получается на VPN отправить. Через тор все идет нормально. А вот с этим засада. Сам скрипт должен полностью выглядить так как Вы указали выше, или надо какие-то строки от скрипта заворачивающего все в ТОР оставить? Где и как должен быть назван скрипт на событие при поднятии интерфейса? Можно вас попросить полностью указать его содержимое и где он должен находиться? Буду признателен. Извиняюсь за нубство.
Основное направление и ключевые изменения я подсказал. Вы просите детальный ответ с пошаговой инструкцией. Я не смогу, к сожалению, вам его дать, т.к. для этого нужно всё смоделировать у себя и вам описать (это требует времени, возможности и желания).
Понял. Буду пробовать дальше. Спасибо.
Роскомнадзор опять публично буянит и по распоряжению сверху, грозится заблокировать сайт BBC (обиделись). Но вы знаете, что делать, в час X, если этот сайт вам нужен:

1). Добавили в unblock.txt сайт bbc.com.
2). Ввели unblock_update.sh.

не проще ли поменять оператора на того, у кого всё пашет? Ну, или сразу весь трафик зарулить через туннель...

А что это за провайдеры, которые забили на требования РКН?

мелкие провайдеры, до которых ещё не добрались ручки. В своё время, живя в Мск, пользовался услугами небольшого локального провайдера — работало всё ровно и стабильно. Потом их купил крупный провайдер и через несколько месяцев всё перекрыли.

Для желающих сделал установку на Keenetic с помощью пары команд. ВНИМАНИЕ: Работу этого скрипта на реальном устройстве я пока не проверял (только написал его), не было времени. Если что-то не будет работать, я не виноват. Позже проверю и дополню комментарий.

Загрузите скрипт установки:
opkg install wget ca-certificates
wget --no-check-certificate -O /opt/bin/unblock_keenetic.sh https://raw.githubusercontent.com/Kyrie1965/unblock_keenetic/master/unblock_keenetic.sh
chmod +x /opt/bin/unblock_keenetic.sh

Установка (автоматическое выполнение шагов 1-12):
unblock_keenetic.sh

После автоматической перезагрузки маршрутизатора для реализации «Дополнительный обход фильтрации DNS-запросов провайдером» (если вам это нужно) выполните команду:
unblock_keenetic.sh dnscrypt

Удаление обхода блокировок:
unblock_keenetic.sh remove

Содержимое unblock_keenetic.sh.
Проверил ваш скрипт установки на KN-1010 — работает! Но автоматической перезагрузки после установки unblock_keenetic.sh не было. Или ее не должно было быть?
Должна быть. В конце есть команда:
ndmq -p 'system reboot'

Потом посмотрю, почему не перезагружается.
В процессе эксплуатации кинетика, заметил особенность работы данного скрипта. В домашнем сегменте (192.168.1.0/24) всё работает, а для клиентов гостевой — нет (создал гостевую сеть 192.168.2.0/24). Подскажите, пожалуйста, какие нужно внести изменения в скрипт, чтобы он заработал и для гостевой сети?
В файле /opt/etc/ndm/netfilter.d/100-redirect.sh
После строки
 iptables -w -t nat -A PREROUTING -i br0 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141
добавьте строку
 iptables -w -t nat -A PREROUTING -i br1 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141
Добавил. Перезапустил скрипт командой «unblock_update.sh». Безрезультатно. Может быть надо перезапускать другой командой или ребутнуть роутер?
А после строки
iptables -w -t nat -I PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 192.168.1.1

не надо добавлять
iptables -w -t nat -I PREROUTING -i br1 -p udp --dport 53 -j DNAT --to 192.168.1.1

???
В терминале введите ifconfig, там увидите сетевые адаптеры и соответствующие им ip, если br1 соответствует вашей гостевой сети(192.168.2.*), то введите прямо в терминале команду, которую добавляли. Результат должен быть сразу
ip соответствующие гостевой сети, команду вводил. Не фурычит.
Проверяете с пк/ноута? Если да, то в командной строке ipconfig /flushdns и в браузере ctrl+f5 на нужном сайте
И с пк и с ноута и с ведроида. ipconfig /flushdns сразу пробовал, после редактирования файла и потом тоже. Толку 0. Ладно, оставлю вопрос до завтра. Пойду спать.

такая же проблема с гостевой сетью
совет выше годится как часть решения для обхода блокировок в гостевой сети, но сам по себе не лечит пропавший доступ к интернету в гостевой

для работы интернета в гостевой надо добавить в /opt/etc/dnsmasq.conf значение listen-address=ТУТ_IP_МАРШРУТИЗАТОРА_В_ГОСТЕВОЙ_СЕТИ

в моем случае это было 10.1.30.1

В очередной раз полез с телефона в домашней сети на кинозал.тв и получил РКН)
Всякие орботы и впн на телефоне не хотелось запускать.
И дай, думаю, загуглю, может есть какой-то годный мануал для обхода блокировок на кинетике. И попал сюда.
В общем — спасибо! Все отлично работает.
Добавил в конце поста ответы на два самых распространённых вопроса, которые приходят через личные сообщения:
Как сделать доступными сайты доменной зоны .onion?
Как сделать обход блокировок для клиентов VPN-сервера, запущенного на маршрутизаторе?
UFO just landed and posted this here
Какие-то проблемы доступа к /dev/null. Это плохо и это проблемы прошивки.
Проблема в следующем — после установки данного скрипта, меняется владелец /dev/null с root на nobody:
~ # ls -l /dev/null
crw-rw-rw-    1 nobody   root        1,   3 Jan  1  1970 /dev/null

Я решил проблему так:
1. Открыл в текстовом редакторе файл /opt/etc/dnsmasq.conf:
~ # mcedit /opt/etc/dnsmasq.conf

2. Изменил строку user=nobody на user=root, сохранил(нажал F2) и закрыл файл(нажал F10).
3. Вернул владельца на root:
~ # chown -R root:root /dev/null

4. Перезапустил dnsmasq:
~ # /opt/etc/init.d/S56dnsmasq restart

~ # ps | grep dnsmasq
 7469 root      3096 S    dnsmasq
 9000 root      4788 S    grep dnsmasq

Ошибок пока не наблюдается. Подробнее разбирается на форуме Кинетика, в соответствующей теме:
forum.keenetic.net/topic/6500-ошибка-devnull-permission-denied/#comment-74798
UFO just landed and posted this here
Товарищи, в чем может быть проблема и куда смотреть. Все адреса из белого списка, при обращении отдают 403 Forbidden nginx/1.6.2. С чем может быть связано? Роутер (Xiaomi Mi Router 3G прошивка Padavan)

Скорее всего, фильтрация DNS провайдером.

Это же все по идее гоняется через TOR как я понял из поста. Если нет, то возможно это как-то обойти?

В статье как раз об этом написано. Посмотрите раздел "Основные методы диагностики ошибок после настройки" и "Дополнительный обход фильтрации DNS-запросов провайдером".

Да, спасибо. Помогло. Все работает)
UFO just landed and posted this here

Rutor пару недель назад включил фильтрацию выходных узлов Tor при доступе по основному домену. Ранее они уже это делали (зачем, спросите у них).


Используйте официальный домен в зоне onion, там фильтрация выключена — rutorc6mqdinc4cz.onion. Как включить доступ к .onion, написано в конце статьи.

UFO just landed and posted this here

Где-то допустили ошибку (другого варианта нет).

UFO just landed and posted this here

В Firefox по умолчанию включен параметр "network.dns.blockDotOnion" — блокировка onion-доменов. Его можно отключить (в about:config).

UFO just landed and posted this here
Настройки на устройстве не менялись. Но в один прекрасный момент при попытке получить к доступ к ресурсам из списка получаю DNS_PROBE_FINISHED_NXDOMAIN. Подскажите пожалуйста в чем может быть проблема? Все настройки перепроверены.

Могли быть с dnsmasq проблемы, если настраивали давно и обновляли прошивку на Keenetic. Просто переделайте пункт 10, он несколько месяцев назад был подправлен.

Спасибо большое. В итоге помогло обновление прошивки и системы через opkg (update/upgrade).
UFO just landed and posted this here

В статье не идёт речь о блокировке рекламы. Только в комментарии. И там же уточнение:


Тут нужно быть аккуратным, потому что список рубит лишнее, и что-то нужное может перестать работать.
UFO just landed and posted this here

Статья актуальная. Инструкция полностью работоспособна на последней прошивке KeeneticOS 3.1 и последних прошивках Padavan (32a93db) и Padavan-linaro (56960f9).

Юрий, добрый день!

Спасибо большое за статью. Все сделал, все работает на Keenetic.

Вопрос с VPN.

Где и как можно узнать интерфейс VPN и куда добавлять дополнительный редирект?

Здравствуйте.


Список всех интерфейсов:
ifconfig -a


Редирект добавлять в шаге 9.

Получилось у вас найти название интерфейса vpn сервера? У меня нет его, как я понимаю, что странно.

Прочитал несколько восторженных отзывов о том, что Mozilla в конце месяца начнёт постепенное и плановое включение по умолчанию DNS-over-HTTPS (DoH) и Encrypted SNI (в TLS 1.3). Первая волна будет у части пользователей в США, потому будет распространяться дальше, зависимо от результатов работы.


Google тоже обещает начать внедрение DoH и ESNI в Chrome по умолчанию до конца года.


Если вы не поняли, что это значит, кратко расшифрую. Браузер теперь самостоятельно через DoH будет резолвить доменные имена по зашифрованному каналу. Т.е. никто со стороны не сможет узнать, IP-адрес какого домена вы хотите уточнить. ESNI (Encrypted Server Name Indication) — это расширение протокола TLS для передачи имени хоста в зашифрованном виде. Т.е. никто со стороны не сможет узнать, к какому именно домену вы обращаетесь, только его IP.


В реальности всё это классно. Но суть восторженных российских отзывов заключается в том, что Роскомнадзор теперь "не сможет блокировать ресурсы". Это в корне неверно, потому что у российских пользователей теперь появится больше проблем.


Если сейчас провайдеры через DPI могут выявлять обращение к заблокированному домену, анализируя SNI. То с ESNI этот фокус не пройдёт. И провайдерам для исполнения требований Роскомнадзора придётся блокировать IP-адрес полностью (а не обращения к конкретному хосту), на котором находится домен. Это значит, что будут заблокированы все хосты (домены), которые находятся на этом IP-адресе. Это значит, что все хосты, которым будет присвоен этот IP-адрес (если он принадлежит CDN) автоматически будут заблокированы.


Т.е. существенно вырастет количество ресурсов, которые перестанут работать, хоть они и не заблокированы Роскомнадзором — побочные жертвы. Их количество будет расти. При этом ранее заблокированные ресурсы так и будут заблокированы, если вы не используете методы обхода блокировок.



Внедрение DoH и ESNI в большинстве случаев не повлияет на работу описанного в статье метода обхода блокировок.

Юрий, еще вопрос по статье «Издержки tor-relay» — habr.com/ru/post/467495

В нашем варианте с этим возможно столкнуться?

После одного прочтения, я не понял, какую суть хотел донести автор. В любом случае, настройки Tor в описанном методе обхода блокировок не позволяют Tor выступать ни в качестве выходного узла, ни в качестве промежуточного узла. Только клиент.

В KeeneticOS версии 3.1 появилась поддержка DNS-over-TLS и DNS-over-HTTPS. Работают они в виде прокси-сервиса. И продолжают работать после применения dns-override. Это значит, что в разделе "Дополнительный обход фильтрации DNS-запросов провайдером" (если провайдер фильтрует DNS) вы можете отказаться от dnscrypt.



Посмотреть, на какие порты назначены DNS-прокси, можно с помощью команды:


cat /tmp/ndnproxymain.stat

Вот пример:


~ # cat /tmp/ndnproxymain.stat
# ndnproxy statistics file

Total incoming requests: 5059
Proxy requests sent:     5059
Cache hits ratio:        0.000 (0)
Memory usage:            3.24K

DNS Servers

                      Ip   Port  R.Sent  A.Rcvd  NX.Rcvd  Med.Resp  Avg.Resp  Rank
               127.0.0.1  40500       1       1        0      32ms      32ms     4
               127.0.0.1  40508    5058    5058        0      33ms      33ms     4
~ #

В моём случае прокси для DNS-over-TLS висит на порте 40500, а DNS-over-HTTPS на 40508.


Вы теперь легко можете использовать 127.0.0.1:40500 или 127.0.0.1:40508 вместо 127.0.0.1:9153 (dnscrypt).

UFO just landed and posted this here

Если вы решите использовать штатные DoH или DoT, то в разделе «Дополнительный обход фильтрации DNS-запросов провайдером» вы пропускаете всё, что касается dnscrypt (до строки "Откройте в редакторе скрипт /opt/bin/unblock_ipset.sh:"). А во всех скриптах этого раздела меняете порт 9153 на необходимый (например, 40500).


Или если хотите, чтобы все запросы шли через штатные DoH или DoT (а не только для ресурсов из unblock.txt), то раздел «Дополнительный обход фильтрации DNS-запросов провайдером» вообще не делаете.


В 10-м шаге (редактирование файла dnsmasq.conf) добавляете все ваши прокси DoH и DoT. Вот пример моих:


no-resolv
server=127.0.0.1#40500
server=127.0.0.1#40508

Не забудьте удалить строку "server=8.8.8.8", если она у вас была.

UFO just landed and posted this here

Если вы живёте на Урале и на вас Роскомнадзор тестирует новую систему DPI (способную выявлять сигнатуры MTProxy), то с описанным методом обхода блокировок вы можете не беспокоиться, Telegram как работал, так и будет работать. Пока не заблокируют Tor (что невозможно в России при текущем режиме), всё у вас будет работать.

На форуме кинетика, вот тут, при обновлении entware (`opkg upgrade`) предлагают ставить пакет «poorbox», для того, чтобы «сделать систему более устойчивой при обновлении». Я поставил poorbox и сделал Upgrade — конце выдало следующее:
Collected errors:
* resolve_conffiles: Existing conffile /opt/etc/passwd is different from the conffile in the new package. The new conffile will be placed at /opt/etc/passwd-opkg.
* resolve_conffiles: Existing conffile /opt/etc/tor/torrc is different from the conffile in the new package. The new conffile will be placed at /opt/etc/tor/torrc-opkg.
* resolve_conffiles: Existing conffile /opt/etc/dnsmasq.conf is different from the conffile in the new package. The new conffile will be placed at /opt/etc/dnsmasq.conf-opkg.

Вопрос к автору. Если я, допустим, решу установить/переустановить ваш скрипт после установки пакета poorbox или после новой установки entware(в которой poorbox уже встроен), надо ли менять старые пути /opt/etc/tor/torrc, /opt/etc/dnsmasq.conf на новые? Или старые пути автоматом средиректятся в новые? Как быть в такой ситуации, надо корректировать скрипт?
Я задал на том форуме этот вопрос, но конкретного ответа не получил.

Все файлы конфигураций остаются на прежних местах, менять пути не надо.

Адаптировал эту инструкцию под OpenWrt. Попутно избавился от bind-dig (лишняя зависимость) и все скрипты свёл в один init.
Товарищи, переодически проскакивает проблема
1.
dnsmasq[3778]: nameserver 176.103.130.131 refused to do a recursive query
dnsmasq[3778]: nameserver 176.103.130.130 refused to do a recursive query
Кто с таким сталкивался?

2. И ещё один момент, не получается настроить автозапуск dnscrypt-proxy…
Пытался добавить в /opt/bin/unblock_update.sh -> /opt/etc/init.d/S09dnscrypt-proxy2 start, но при старте все равно не запускает автоматом, приходится заходить через ssh в роутер и запускать руками. Что я сделал не так?
Если Entware развёрнут во внутренней памяти и не срабатывает автозапуск init-скриптов, то развёрнут он криво.

Если он развёрнут на внешнем накопителе, то проблема в чём-то ещё.

LostFilm.TV заблокирован по решению суда. Вы знаете, что делать — вам лишь нужно внести lostfilm.tv в список unblock.txt, и вы опять на коне.

Позавчера ФСБ распорядилась заблокировать сервис StartMail (там бред на бреде в обосновании и бредом погоняется). У многих провайдеров доступ к сервису прекратился.


Если вам нужен этот сервис, то вы знаете, что делать — добавляете startmail.com в список unblock.txt и продолжаете им спокойно пользоваться.

Если ещё заблокированы и адреса MX-серверов, то почта между такими сервисами и российскими (типа mail.ru, yandex.ru) всё равно ходить не будет (потому что между собой почтовые сервисы взаимодействуют сами, без вашего участия).
Kyrie1965 спасибо за вашу инструкцию! Подскажите пожалуйста, возможно вы или кто нибудь знает: имею keenetic ultra 1810, настроил по инструкции. Установил Wireguard в качестве сервера на keenetic, локальные диски и роутер 192.168.1.1 клиенты видят.
Идея в обходе сайтов для клиентов, подключенных к Wireguard.

Я думал будет работать добавив в 9 пункте /opt/etc/ndm/netfilter.d/100-redirect.sh:
iptables -w -t nat -A PREROUTING -i nwg0 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141

nwg0 как раз интерфейс wireguard

У клиента указал
DNS = 192.168.1.1
AllowedIPs = 0.0.0.0/0

Но к сожалению не сработало.
Добавлю свои «5 копеек» в части оптимизации настройки tor в этой статье, а именно рекомендую заменить в конфиге /opt/etc/tor/torrc параметр DataDirectory на /tmp/var/lib/tor дабы продлить срок службы внешнего flash-накопителя, на который, как правило, устанавливается Entware.
Было замечено лично, что при своей работе активность flash-накопителя весьма высокая (ибо tor крайне активно пишет в DataDirectory при своей работе) и лучше уж этот временный каталог хранить в ОЗУ роутера.
Сделал, в результате сайты перестало открывать, вот мой конфиг
User root
PidFile /opt/var/run/tor.pid
ExcludeExitNodes {AM},{AZ},{BY},{EE},{GE},{KG},{KZ},{LT},{LY},{MD},{RU},{TJ},{TM},{UA},{UZ}
StrictNodes 1
TransPort 0.0.0.0:9141
ExitRelay 0
ExitPolicy reject *:*
ExitPolicy reject6 *:*
GeoIPFile /opt/share/tor/geoip
GeoIPv6File /opt/share/tor/geoip6
DataDirectory /tmp/var/lib/tor
VirtualAddrNetwork 10.254.0.0/16
DNSPort 127.0.0.1:9053
AutomapHostsOnResolve 1
сам себе отвечу:
нужно создать папку tor
cd / && cd /tmp && mkdir tor
и теперь меняем в конфиге параметр DataDirectory на /tmp/tor
Или для простых смертных, не привыкшим к консоли взять WinSCP и создать нужную папку в пару кликов.
UFO just landed and posted this here

Для тех, у кого перестал работать обход блокировок на маршрутизаторе Keenetic или Padavan по инструкции с Хабра (после начала блокировок Tor в России), вот краткая инструкция.

Устанавливаете обфускатор:

opkg update

opkg install obfs4

Заходите на специальный сайт и получаете свой список мостов: https://bridges.torproject.org/bridges?transport=obfs4

Выглядеть будет он так (для примера):

obfs4 99.242.105.218:80 7BF9B5860BBE4E91E43F03673FE7AB43E72CE353 cert=2qY6IX82EvY2B6e5ahOJj4Unn7Bg0hssx6a+3iUhj2K5MXWT7i052DjqLyJKG7iD5dj/Ig iat-mode=0 obfs4 78.47.76.79:30030 C03B101F99390CABB58A0D1B04E35470E7F472F9 cert=nR4HkZtXhsutdJla5qAy3cGfJKSn/RgMloA26V72UeNlrpO65+prJ28J4w6XNRgLVBX0EQ iat-mode=0 obfs4 52.137.33.229:44108 344031A97BE7132F6621B77353FED64C09C8A46B cert=XW8N4lh0TmOck12PDZ0Ykb3MFLcODdOobfJPUnVA1jEaw3NyX4FInPjJ916c+KQu/kBDaA iat-mode=0

Открываете в редакторе файл torrc:

mcedit /opt/etc/tor/torrc

Добавляете туда строки:

UseBridges 1

ClientTransportPlugin obfs4 exec /opt/sbin/obfs4proxy managed

Добавляете туда строки полученных мостов (со словом Bridge в начале строки):

Bridge obfs4 99.242.105.218:80 7BF9B5860BBE4E91E43F03673FE7AB43E72CE353 cert=2qY6IX82EvY2B6e5ahOJj4Unn7Bg0hssx6a+3iUhj2K5MXWT7i052DjqLyJKG7iD5dj/Ig iat-mode=0

Bridge obfs4 78.47.76.79:30030 C03B101F99390CABB58A0D1B04E35470E7F472F9 cert=nR4HkZtXhsutdJla5qAy3cGfJKSn/RgMloA26V72UeNlrpO65+prJ28J4w6XNRgLVBX0EQ iat-mode=0

Bridge obfs4 52.137.33.229:44108 344031A97BE7132F6621B77353FED64C09C8A46B cert=XW8N4lh0TmOck12PDZ0Ykb3MFLcODdOobfJPUnVA1jEaw3NyX4FInPjJ916c+KQu/kBDaA iat-mode=0

Сохраняете torrc.

Перезагружаете tor:

/opt/etc/init.d/S35tor restart

Готово.

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

Может быть упущен какой-то момент в инструкции?

Не должно слетать. Надо смотреть логи, чтобы понять суть проблемы (я тут не смогу помочь).

Мосты можно получить и без VPN, если сайт Tor заблокирован. Просто отправляете письмо с ящика Gmail на bridges@torproject.org. В ответ получите список мостов.

Я боюсь что без вас я не смогу разобраться, я просмотрел логи в KeeneticOS, но не увидел ничего. Сделал 2 журнала log1: вкл роутера -> https://check.torproject.org/ - не работает -> добавляю мосты -> перезапускаю тор -> сайт проверки загружает -> перезагружаю роутер -> log2

Логи на MEGA https://mega.nz/folder/8NFFlYoB#l3hF502PLQWLTmU8ik_d8A

Та же проблема происходит - "свежие" записи работают, через какое-то время перестаёт, иногда помогает просто рестарт тора, но периодически приходится менять бриджи. Или это так и задумано? При этом рестарт через крон то ли не работает, то ли не помогает.

Кинетик умеет в openvpn клиент. Может заворачивать тор в openvpn туннель? Зачем тогда тор правда.

Почему при внесении в dnscrypt-proxy.toml

fallback_resolver = '77.88.8.8:1253'

старт не происходит

[2022-02-10 06:21:36] [NOTICE] dnscrypt-proxy 2.1.1
[2022-02-10 06:21:36] [FATAL] Unsupported key in configuration file: [fallback_resolver]

Т.е. нет поддержки данной конфигурации, тогда что указывать взамен?

В новых версиях dnscrypt убран этот параметр. Не указывайте его или (если есть навыки) используйте stubby вместо dnscrypt.

Оказывается с версии 2.1.0, fallback_resolver переименовали в bootstrap_resolvers

bootstrap_resolvers = ['77.88.8.8:1253']

А как лучше переконфигурировать скрипты, если Keenetic работает в домашней сети как точка доступа Wi-Fi (например, на 192.168.1.99), а шлюз по-умолчанию 192.168.1.1 - не Keenetic?

Большое спасибо за статью!

Хотелось бы знать - есть ли решение для того чтобы разблокировать не только корневой домен, но и все его поддомены? Что то типа правила *.domain.com . Сейчас приходится добавлять каждый поддомен вручную. Извиняюсь, если вопрос поднимался ранее.

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

Реализовал эту схему через socks5 прокси. Использовать redsocks в качестве клиента.
Работает отлично.

спасибо за подробную инструкцию, всё работает )

отмечу, что всё описанное работает только для клиентов, которые подключаются к роутеру, если на самом Keenetic крутится какой-то скрипт, то он ходит не через Tor, чтобы скрипты запущенные локально на самом Keenetic тоже ходили по этому же списку через Tor надо в iptables дописать правило (проверено только на Keenetic Ultra KN-1810):

  1. перед запуском проверяем что уже записано в iptables:
    iptables -L OUTPUT -t nat

    у меня вот такой результат:
    ~ # iptables -L OUTPUT -t nat
    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination
    _NDM_DNAT all -- anywhere anywhere

  2. создаём правило, которое все исходящие запросы к заблокированным сайтам с текущего устройства отправит в Tor:
    iptables -t nat -A OUTPUT -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141

  3. проверяем что правило создалось:
    ~ # iptables -L OUTPUT -t nat
    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination
    _NDM_DNAT all -- anywhere anywhere
    REDIRECT tcp -- anywhere anywhere match-set unblock dst redir ports 9141

  4. команда для удаления правила:
    iptables -t nat -D OUTPUT -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141

в 2 и 3 смущает source=anywhere, но с -s 127.0.0.1 у меня не заработало, может кто-то подскажет как правильнее дописать, неработающую команду привожу ниже:
iptables -t nat -A OUTPUT -s 127.0.0.1 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141
при удалении она ещё и почему-то ошибку выводит:
~ # iptables -t nat -D OUTPUT -s 127.0.0.1 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141
iptables: No chain/target/match by that name.

про source=anywhere и ключик -s 127.0.0.1 знающие люди меня поправили - это не нужно, т.к. в цепочке OUTPUT обрабатываются только пакеты исходящие с самого устройства, но не транзитные

и ещё одно дополнение, интерфейсы периодически перезагружаются (не только при перезагрузке устройства) и чтобы правило не пропадало его надо прописать в /opt/etc/ndm/netfilter.d/100-redirect.sh в блок if [ -z "$(iptables-save 2>/dev/null | grep unblock)" ]; then в самый конец (за блоком для VPN клиентов если он есть), у меня в итоге файл 100-redirect.sh вот такой:

#!/bin/sh

[ "$type" == "ip6tables" ] && exit 0

if [ -z "$(iptables-save 2>/dev/null | grep unblock)" ]; then
    ipset create unblock hash:net -exist
    iptables -w -t nat -A PREROUTING -i br0 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141
    
    iptables -w -t nat -A PREROUTING -i sstp0 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141

    iptables -t nat -A OUTPUT -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141
fi

if [ -z "$(iptables-save 2>/dev/null | grep "udp \-\-dport 53 \-j DNAT")" ]; then
    iptables -w -t nat -I PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 192.168.1.1
fi

if [ -z "$(iptables-save 2>/dev/null | grep "tcp \-\-dport 53 \-j DNAT")" ]; then
    iptables -w -t nat -I PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to 192.168.1.1
fi

exit 0

А можно ли поднять vpn сервер на кинетике и подключаться к нему извне для обхода блокировок? Я попробовал - сайты не открываются.

Я, наверное, не правильно выразился. VPN то я настроил, все хорошо. До этого я настроил обход блокировок по мануалу в статье. И я подумал, что при подключении откуда-то далеко к VPN серверу роутера у меня заблокированные сайты будут открываться через TOR, что настроил по мануалу. Но нет, они блокируются.

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

Поможет ли способ при блокировке доступа самими сайтами по IP диапазонам в связи с санкциями? Например, lenovo драйвера не даёт скачивать, vagrant нельзя образы скачать, в vmware тоже и ещё куча нужного всего есть. Хотелось бы как-то без установки своего или использования чужого VPN сервера обойтись.

там же в файле unblock.txt внизу есть закомментированные строки

###Пример разблокировки по IP (убрать # в начале строки) #195.82.146.214

###Пример разблокировки по CIDR (убрать # в начале строки)
#103.21.244.0/22

###Пример разблокировки по диапазону (убрать # в начале строки)
#100.100.100.200-100.100.100.210

У меня вопрос к уважаемому автору статьи. Скажите, а нет в этом фрагменте "\-\-dport 53 \-j DNAT" ошибки с обратными слэшами? Мой роутер начал выдавать в логе такое:

Opkg::Manager: /opt/etc/ndm/netfilter.d/100-redirect.sh: grep: warning: stray \ before -.

Проверил. У себя вижу аналогичную историю. Но при этом всё работает.

Может и работает. Но раздражает, когда лог забит на половину такой фигней. И тем не менее, хотелось бы услышать "начальника транспортного цеха" )))

Добрый день! Хоть статья и довольно старая, но до сих пор актуальная и рабочая. Спасибо! Доступ в инсту починил именно таким образом.

Но возник вопрос - что делать с блокировкой на уровне DNS? Т.е. когда в dns сервер для российских адресов указывается адрес 127.0.0.1 и соответственно ничего не работает.

Использую Keenetic OS. На всякий случай прописал на шаге 9 перенаправление DNS, как указано. Но что и как дальше делать - пока не разобрался. Т.е. нужно чтобы для конкретного адреса обращение к DNS гугла 8.8.8.8 тоже шло через тор, чтобы получить реальный адрес. Или как вариант часть адресов резолвить не через днс 8.8.8.8, но тогда надо понять, как разделить это дело. Продолжаю изучать, но если вдруг автор или кто-то ещё заглянет сюда и поделится полезной информацией - буду очень благодарен.

С недавнего времени стали появляться ошибки в логе кинетика:

failed to load names from /opt/etc/hosts: No such file or directory

Opkg::Manager: /opt/etc/init.d/S99unblock: ipset v7.17: The set with the given name

does not exist.

Уважаемая публика, подскажите как решить?

А указанные пути то открываются?

У меня в логе всё ок, но перестал весь список заблокированных сайтов открываться.

Файла hosts в /opt/etc/ нет. Понятно почему появляется ошибка. А для чего он нужен и нужен ли в нашем случае? Если его создать вручную, не будет ли проблем? И откуда брать его содержание?

Файл S99unblock есть. Но непонятно про какой набор(set ) идет речь. Но я так подозреваю, что он заполнен старыми данными, а новыми не заполняется.

У меня список заблокированных сайтов открывается(видимо т.к. он старый), но похоже, если в него добавить новый сайт, то он не откроется. Надо еще раз проверить.

Ничего не понятно.

Посмотрел у себя. Hosts файла тоже нет.

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

Sign up to leave a comment.

Articles