Исходные данные: роутер имеет адрес 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 * # и запрещаем подключение из всех остальных мест
ExitPolicy reject *:* # чтобы наш узел не был выходным
ExitPolicy reject6 *:*
ExcludeExitNodes {RU} # чтобы исключить использование выходных узлов, расположенных на территории РФ
Настройки 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)
function FindProxyForURL(url, host) {
domains = [" > /www/wpad.dat
cat /tmp/domains >> /www/wpad.dat
echo "];
if (/\.(ru|co|cu|com|info|net|org|gov|edu|int|mil|biz|pp|ne|msk|spb|nnov|od|in|ho|cc|dn|i|tut|v|dp|sl|ddns|livejournal|herokuapp|azurewebsites)\.[^.]+$/.test(host))
host = host.replace(/(.+)\.([^.]+\.[^.]+\.[^.]+$)/, \"$2\");
else
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|*.b32)\")) {
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 для этой цели использовать не рекомендуется, поскольку Firefox и Mac OS проигнорируют соответствующую директиву. Лучше воспользоваться 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.