Comments
А настройку блокировки рекламы не пробовали? сколько ни пытался-то вообще пропадает интернет, то ничего не блокирует.приходится pi-hole+vpn использовать. Прошивал падаван на xiaomi mi router, который с четырьмя антенами. Уже около года работает. Из всех моих роутеров, доволен этим больше всего
no-resolv
server=176.103.130.130
server=176.103.130.131
Удаляете все другие записи server в файле, если они есть. Всё. В роли серверов DNS будет использоваться AdGuard 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
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.
перепробовал множество вариантов обхода блокировок прямо на маршрутизаторе, но в итоге остановился на варианте Shadowsocks на конечных устройствах. Весь трафик по умолчанию в браузере гоняю через SS, а исключения контролируются через расширение SwitchyOmega. На смартфонах SS тоже настроен и включается в случае необходимости, оно просто работает и удобно вполне.
В случае, если чему-то кроме браузера требуется доступ к заблокированным ресурсам, в SS просто включается режим System Proxy и можно спокойно работать дальше.
В итоге, получил 2-в-1: обход блокировок и хотя бы какая-то «анонимность» в сети.
Точечный обход для себя я признал малоэффективным и слишком затратным по соотношению к результату.
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 появится.
Прошивку, видимо, руками нужно собирать обновлённую?
У Padavan-а на официальной странице последнее обновление аж в 2016.
https://bitbucket.org/padavan/rt-n56u/wiki/Home
Затем форматируете (чтобы избавиться от старой версии Entware-ng) раздел/диск/внутреннюю память под Entware для установки свежей версии.
Возможно, стоит добавить ссылку на процедуры сборки прошивки в статью? Или указать, что работа с dnscrypt-proxy2 возможно только на свежесобранных образах.
Вопрос не по теме — подскажите, пожалуйста, где поискать скрипт автоматического переключения между Wi-Fi сетями в режиме AP-Client (WISP)? Нашёл множество статей по автоматическому переключению между WAN<->3G модемом, а по перебору Wi-Fi сетей ничего толкового нет.
По второму вопросу не подскажу.
Самая свежая версия от 05.11.2018 (commit 32a93db).
Если хочется ещё свежее — есть форк. Там обновлён некоторый софт, добавлена поддержка SMB 3, исправлены некоторые мелкие ошибки…
Собирается всё тем же PROMETHEUS, только тестовой версией и на свежих дистрибутивах Linux, в отличие от Padavan.
Но всё чаще я натыкаюсь на ситуации, когда провайдер, не умеющий обнюхать 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.
На Xiaomi R3G прекрасно работает OpenWrt, где всё вообще можно буквально мышкой настроить. В отличие от Padavan там используется свежее upstream ядро с нормально написанными драйверами, а не китайские утекшие поделки через ndiswrapper.
Поднимаете сервер с 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 и радуетесь интернету.
А что вы будете делать с сайтами, которые меняют свой IP (и вы их заведомо не знаете)?
Регулярно обновлять список IP, у LuCi (веб интерфейс OpenWrt) есть прекрасный API для всего, чего можно сделать "мышкой". Не вижу смысла резолвить баш скриптами на встроенной системе (роутере), когда это можно без ограничений на используемые инструменты делать на сервере (этакий SDN-way). Да и всё уже зарезолвили, конвертируйте из csv и пользуйтесь. Для пущей подстраховки есть автодобоваление айпишников в ipset по многократному tcp rst (что делают провайдеры для https).
Есть ещё вариант по публичным данным один раз в полгода генерировать таблицу всех нероссийских IP — в любом случае трафик пойдёт через европу, в азии мало полезного контента для нас. Скрипты есть на гитхабе.
Для прокси достаточно самого слабого инстанса, который стоит копейки. И даже их можно без ущерба разделить на знакомых, есть даже готовый набор ansible рецептов для поднятие всех мыслимых сервисов сразу с порталом раздачи доступов для знакомых. У Tor низкая скорость и высокая задержка by design, для ежедневного неосознанного использования это не годится. Учитывая, что скоро гуглить придётся тоже через прокси для нормальной выдачи — tor не вариант. Кстати, как с ним рекапча дружит?
Ах, да, совсем забыл. Китайцы уже давно придумали технические решения для автоматического распространения списков блокировки — гуглится по слову gfwlist. Например в клиенте shadowsocks для macos достаточно просто указать url, для openwrt наверняка тоже есть готовый пакет. Нужно просто нам тоже взять и адаптировать это к РКН.
no-resolv
server=127.0.0.1#9153
Перезапустите dnsmasq.
На Padavan:
restart_dhcpd
На Keenetic:
/opt/etc/init.d/S56dnsmasq restart
dnsmasq начнёт использовать только dnscrypt для резолвинга.
Сами скрипты находятся здесь: 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.
ssh: connect to host 192.168.1.1 port 222: Connection refused
Сначала грешил на то, что dig крайне неспешен и Entware застрял на инициализации, но нет, всё разблокировалось. Куда копать, чтобы привести в чувство Entware'ный ssh?
Во-вторых, с чего вы взяли что unblock_ipset завершил свою работу, разблокировка могла сработать через dnsmasq, а скрипт резолвинга доменов продолжает работать. Хоть он должен делать всё в фоне, но мало ли.
В-третьих, были случаи когда на Keenetic у dropbear в Entware слетает порт. Измените кофигурационный файл dropbear через SMB.
#!/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-трафик).
1). Добавили в unblock.txt сайт bbc.com.
2). Ввели unblock_update.sh.
не проще ли поменять оператора на того, у кого всё пашет? Ну, или сразу весь трафик зарулить через туннель...
Не проще.
Загрузите скрипт установки:
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.
После строки
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
А после строки
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
???
ipconfig /flushdns
и в браузере ctrl+f5 на нужном сайтетакая же проблема с гостевой сетью
совет выше годится как часть решения для обхода блокировок в гостевой сети, но сам по себе не лечит пропавший доступ к интернету в гостевой
для работы интернета в гостевой надо добавить в /opt/etc/dnsmasq.conf значение listen-address=ТУТ_IP_МАРШРУТИЗАТОРА_В_ГОСТЕВОЙ_СЕТИ
в моем случае это было 10.1.30.1
Всякие орботы и впн на телефоне не хотелось запускать.
И дай, думаю, загуглю, может есть какой-то годный мануал для обхода блокировок на кинетике. И попал сюда.
В общем — спасибо! Все отлично работает.
Как сделать доступными сайты доменной зоны .onion?
Как сделать обход блокировок для клиентов VPN-сервера, запущенного на маршрутизаторе?
~ # 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
Rutor пару недель назад включил фильтрацию выходных узлов Tor при доступе по основному домену. Ранее они уже это делали (зачем, спросите у них).
Используйте официальный домен в зоне onion, там фильтрация выключена — rutorc6mqdinc4cz.onion. Как включить доступ к .onion, написано в конце статьи.
В статье не идёт речь о блокировке рекламы. Только в комментарии. И там же уточнение:
Тут нужно быть аккуратным, потому что список рубит лишнее, и что-то нужное может перестать работать.
Статья актуальная. Инструкция полностью работоспособна на последней прошивке KeeneticOS 3.1 и последних прошивках Padavan (32a93db) и Padavan-linaro (56960f9).
Прочитал несколько восторженных отзывов о том, что 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 в большинстве случаев не повлияет на работу описанного в статье метода обхода блокировок.
В нашем варианте с этим возможно столкнуться?
В 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).
Если вы решите использовать штатные 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", если она у вас была.
Если вы живёте на Урале и на вас Роскомнадзор тестирует новую систему DPI (способную выявлять сигнатуры MTProxy), то с описанным методом обхода блокировок вы можете не беспокоиться, Telegram как работал, так и будет работать. Пока не заблокируют Tor (что невозможно в России при текущем режиме), всё у вас будет работать.
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 на новые? Или старые пути автоматом средиректятся в новые? Как быть в такой ситуации, надо корректировать скрипт?
Я задал на том форуме этот вопрос, но конкретного ответа не получил.
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 в роутер и запускать руками. Что я сделал не так?
LostFilm.TV заблокирован по решению суда. Вы знаете, что делать — вам лишь нужно внести lostfilm.tv в список unblock.txt, и вы опять на коне.
Позавчера ФСБ распорядилась заблокировать сервис StartMail (там бред на бреде в обосновании и бредом погоняется). У многих провайдеров доступ к сервису прекратился.
Если вам нужен этот сервис, то вы знаете, что делать — добавляете startmail.com в список unblock.txt и продолжаете им спокойно пользоваться.
Идея в обходе сайтов для клиентов, подключенных к 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
Но к сожалению не сработало.
Было замечено лично, что при своей работе активность 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
Для тех, у кого перестал работать обход блокировок на маршрутизаторе 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]
Т.е. нет поддержки данной конфигурации, тогда что указывать взамен?
А как лучше переконфигурировать скрипты, если 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):
перед запуском проверяем что уже записано в 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создаём правило, которое все исходящие запросы к заблокированным сайтам с текущего устройства отправит в Tor:
iptables -t nat -A OUTPUT -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9141проверяем что правило создалось:
~ # 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команда для удаления правила:
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 сервер на кинетике и подключаться к нему извне для обхода блокировок? Я попробовал - сайты не открываются.
По-моему тут два варианта:
1) Белый ip адрес от провайдера - тогда настройка VPN как обычно
2) Настройка keeneticdns
Я, наверное, не правильно выразился. 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
) идет речь. Но я так подозреваю, что он заполнен старыми данными, а новыми не заполняется.
У меня список заблокированных сайтов открывается(видимо т.к. он старый), но похоже, если в него добавить новый сайт, то он не откроется. Надо еще раз проверить.
Ничего не понятно.
Как сделать подмену user aget? Беда в том что в Турции блокирует некоторые сайты даже с Tor, помогает установка дополнения в тор браузер https://addons.mozilla.org/en-US/firefox/addon/user-agent-string-switcher/ , отсюда вопрос, как это сделать в кинетике
Выборочный обход блокировок на маршрутизаторах с прошивкой Padavan и Keenetic OS