Исходные данные: роутер имеет адрес 192.168.1.1, tor и i2pd подняты на 192.168.1.10 (если роутер достаточно мощный, можно поднять их прямо на нём, соответственно скорректировав адреса)
В LEDE для загрузки списка заблокированных доменов проще всего использовать поставляемую по умолчанию утилиту uclient-fetch. Необходимо лишь добавить ей поддержку SSL:
opkg update
opkg install libustream-mbedtls
Впрочем, вы можете использовать wget или curl, если предпочитаете. Особенности wget см. ниже.
В OpenWrt какие-то проблемы с поддержкой SSL в uclient-fetch, поэтому предпочтительнее wget. Обратите внимание, что, как в OpenWrt, так в и LEDE, встроенный в BusyBox wget не подходит, поскольку не поддерживает SSL. Необходимо поставить полноценный wget из репозиториев + корневые сертификаты:
opkg update
opkg install wget ca-certificates
Необходимые настройки Tor:
SocksPort 0.0.0.0:9050 # чтобы socks-прокси был доступен другим машинам
SocksPolicy accept 192.168.0.0/16:* # разрешаем подключение к нему из локальной сети
SocksPolicy reject *:* # и запрещаем подключение из всех остальных мест
ExitRelay 0 # чтобы наш узел не был выходным
ExcludeExitNodes {am}, {az}, {by}, {ee}, {ge}, {kg}, {kz}, {lt}, {ly}, {md}, {ru}, {tj}, {tm}, {ua}, {uz} # чтобы исключить использование выходных узлов, расположенных в странах с государственной цензурой
Настройки i2pd:
[socksproxy]
enabled = true
address = 192.168.1.10
port = 4447
Скрипт и вспомогательные файлы будут размещены в /etc/wpad, временные файлы — в /tmp, чтобы лишний раз не изнашивать флеш-память устройства.
/etc/wpad/generate.sh: (сначала я написал свою реализацию, потом обнаружил, что всё уже сделано здесь, поэтому позаимствовал «более лучший» код):
#!/bin/sh
# Резервная копия текущего файла автонастройки
cp /www/wpad.dat /etc/wpad/wpad.dat.bak
# Получаем список доменов, заблокированных в РФ, а также список доменов, которые добровольно ограничивают доступ к некоторым страницам с российских IP-адресов
uclient-fetch -O - "https://api.antizapret.info/group.php?data=domain" | awk '{if ($1 != "") {print "\""$1"\","}}' > /tmp/domains
uclient-fetch -O - "https://bitbucket.org/ValdikSS/antizapret/raw/master/customhosts_hosts.txt" | awk '{if ($1 != "") {print "\""$1"\","}}' >> /tmp/domains
# Если вы собираетесь использовать wget, то
# wget -qO- "https://api.antizapret.info/group.php?data=domain" | awk '{if ($1 != "") {print "\""$1"\","}}' > /tmp/domains
# wget -qO- "https://bitbucket.org/ValdikSS/antizapret/raw/master/customhosts_hosts.txt" | awk '{if ($1 != "") {print "\""$1"\","}}' >> /tmp/domains
# Если вы собираетесь использовать curl, то
# curl -s -L "https://api.antizapret.info/group.php?data=domain" | awk '{if ($1 != "") {print "\""$1"\","}}' > /tmp/domains
# curl -s -L "https://bitbucket.org/ValdikSS/antizapret/raw/master/customhosts_hosts.txt" | awk '{if ($1 != "") {print "\""$1"\","}}' >> /tmp/domains
# Добавляем домены из чёрного списка, если он не пуст
if [ -s "/etc/wpad/domains.blacklist" ]
then
awk '{if ($1 != "") {print "\""$1"\","}}' /etc/wpad/domains.blacklist >> /tmp/domains
fi
echo "// Generated on $(date)
var domains = [" > /www/wpad.dat
cat /tmp/domains >> /www/wpad.dat
echo "];
function FindProxyForURL(url, host) {
host = host.replace(/(.+)\.([^.]+\.[^.]+\.[^.]+$)/, \"\$2\");
for (var i = 0; i < domains.length; i++) {if (host === domains[i]) {return \"SOCKS 192.168.1.10:9050\";}}
if (shExpMatch(host, \"*.onion\")) {return \"SOCKS 192.168.1.10:9050\";}
else if (shExpMatch(host, \"*.i2p\")) {return \"SOCKS 192.168.1.10:4447\";}
else {return \"DIRECT\";}
}" >> /www/wpad.dat
rm /tmp/domains
/etc/wpad/domains.blacklist: сюда добавляем (в столбик) любые сайты, которые вы хотите посещать через Tor.
Делаем скрипт исполняемым:
chmod +x /etc/wpad/generate.sh
Настраиваем запуск скрипта ежедневно в 6 утра:
echo "0 6 * * * /etc/wpad/generate.sh" >> /etc/crontabs/root
Готовый файл автонастройки прокси будет лежать в /www/wpad.dat и при настройках веб-сервера по умолчанию доступен по http://192.168.1.1/wpad.dat
Осталось прописать в настольных и мобильных браузерах использование http://192.168.1.1/wpad.dat в качестве автонастройки прокси (PAC). В настольных и мобильных Firefox для этого достаточно изменить три настройки в about:config:
network.proxy.type 2
network.proxy.socks_remote_dns true
network.proxy.autoconfig_url http://192.168.1.1/wpad.dat
Инструкции для других браузеров и мобильных ОС можно найти здесь.
После этого на сайты из Реестра + на сайты из domains.blacklist + на все сайты в домене .onion браузер будет ходить через Tor, а на сайты .i2p и .b32 (Base32 hostnames) — через I2P.
Можно автоматически выдавать настройки прокси клиентам, чтобы не приходилось вручную настраивать браузеры. DHCP для этой цели использовать не рекомендуется, поскольку Mac OS и Firefox (до версии 63) проигнорируют соответствующую директиву. Лучше воспользоваться DNS-сервером (в OpenWrt/LEDE это dnsmasq). Для этого нужно добавить в файл /etc/config/dhcp следующую секцию:
config 'domain'
option 'name' 'wpad'
option 'ip' '192.168.1.1'
Кроме того, возможно, потребуется указать веб-серверу, что файлы .dat должны отдаваться с MIME-типом application/x-ns-proxy-autoconfig. Предустановленный в OpenWrt/LEDE веб-сервер uhttpd, уже поддерживает необходимые MIME-типы для файлов .pac и wpad.dat.
Обратите внимание, что автоматическое определение настроек сети вообще небезопасно и лучше его отключить во всех браузерах, при этом, жёстко задав в настройках браузеров путь к wpad.dat.
Если вы настраивали uhttpd (предустановленный в OpenWrt/LEDE веб-сервер) на работу по протоколу https (при этом используется самоподписанный сертификат) и указали браузерам брать файл автонастройки с https://192.168.1.1/wpad.dat, то необходимо сперва добавить ваш самоподписанный сертификат в доверенные в каждом браузере. Либо убедиться, что веб-сервер может отдавать файлы по незащищённому http:
- в файле /etc/config/uhttpd должна присутствовать опция list listen_http
- опция redirect_https должна иметь значение '0'
В случае успешной настройки (не забудьте перезагрузить роутер для применения изменений), файл автоматической настройки сети должен быть доступен по адресу http://wpad/wpad.dat.
Если нужен выборочный обход блокировок (только сайты, которые требуются лично вам), то читаем тут.