Выборочный обход блокировок на прошивке padavan

Выборочный обход блокировок на прошивке padavan

dimonb@gmail.com

Заимствовано у https://habr.com/ru/post/428992/. Творчески переработано.

Зайдите на вкладку Персонализация/Скрипты/Выполнить перед инициализацией маршрутизатора и добавьте в конец скрипта загрузку модулей ipset

### load ipset modules
logger -t init_router load ip_set modules
modprobe ip_set
modprobe ip_set_hash_ip
modprobe ip_set_hash_net
modprobe ip_set_bitmap_ip
modprobe ip_set_list_set
modprobe xt_set

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

Зайдите на вкладку Персонализация/Скрипты/Выполнить после перезапуска правил брандмауэра

И поправьте скрипт на этот:

#!/bin/sh

### Custom user script
### Called after internal iptables reconfig (firewall update)

function unblock_list {
cat <<'EOF'
### paste unblock list here

###Торрент-трекеры
rutracker.org
rutor.info
rutor.is
mega-tor.org
kinozal.tv
nnm-club.me
nnm-club.ws
tfile.me
tfile-home.org
tfile1.cc
megatfile.cc
megapeer.org
megapeer.ru
tapochek.net
tparser.org
tparser.me
rustorka.com
uniongang.tv
fast-torrent.ru
bt2.t-ru.org
bt.t-ru.org

###Каталоги медиаконтента для программ
rezka.ag
hdrezka.ag
hdrezka.me
filmix.co
filmix.cc
seasonvar.ru

###Книги
lib.rus.ec
flibusta.is
flibs.me
flisland.net
flibusta.site

###Телеграмg
telegram.org
tdesktop.com
tdesktop.org
tdesktop.info
tdesktop.net
telesco.pe
telegram.dog
telegram.me
t.me
telegra.ph
web.telegram.org
desktop.telegram.org
updates.tdesktop.com
venus.web.telegram.org
flora.web.telegram.org
vesta.web.telegram.org
pluto.web.telegram.org
aurora.web.telegram.org
149.154.160.0/20
91.108.4.0/22
91.108.8.0/22
91.108.12.0/22
91.108.16.0/22
91.108.56.0/22
109.239.140.0/24
67.198.55.0/24

###Разное
7-zip.org
edem.tv
4pna.com
2019.vote
protonmail.com
api.protonmail.ch

###Проверка Tor
check.torproject.org

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

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

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

### before this line
EOF
}
### function to resolve dns names
function xdig {
  nslookup $1 localhost | sed -n -e '/^Name:/,$p' | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
}

### update ipset 
function update_ipset {
  logger -t unblock starting update ipset list
  # wait dns is up and ready
  until ADDRS=$(xdig google.com) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done

  # get list of adresses from unblock_list
  unblock_list | while read line || [ -n "$line" ]; do

  [ -z "$line" ] && continue
  [ "${line:0:1}" = "#" ] && continue
   
  cidr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}')

  if [ ! -z "$cidr" ]; then
    ipset -exist add unblock $cidr
    continue
  fi
  
  range=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}-[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
   
  if [ ! -z "$range" ]; then
    ipset -exist add unblock $range
    continue
  fi

  addr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')

  if [ ! -z "$addr" ]; then
    ipset -exist add unblock $addr
    continue
  fi

  xdig $line | awk '{system("ipset -exist add unblock "$1)}'
  done
  logger -t unblock finished update ipset list
}

### update dnsmasq
function update_dnsmasq {
  unblock_list | grep -vE '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})|(^#)|(^$)' | awk '{print "ipset=/"$1"/unblock\nserver=/"$1"/127.0.0.1#9053"}' > /etc/storage/dnsmasq/unblock.dnsmasq
}

### execute function passed in parameter and exit
if [ ! -z $1 ]; then
  $1
  exit
fi

## do here all we need after iptables rules restart

## init ipset table
ipset -q create unblock hash:net

## redirect all traffic to ipset ips to tor network
iptables -t nat -A PREROUTING -i br0 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 9040

update_dnsmasq
restart_dhcpd
update_ipset &

Обратите внимание, что при изменении скрипта, и нажатии кнопки Применить, нужно подождать некоторое время пока список доменов разрезолвится в ip-адреса и пропишется в ipset. Занимает это около полминуты.

В системном журнале должна появиться строчка "unblock: finished update ipset list"

Какие-то свои дополнительные команды лучше добавлять в конец скрипта.

Нажимаем Применить.

Дальше идём во вкладку Администрирование/Сервисы. Тыкаем Анонимизирующий делегирующий сервер TOR и нажимаем Применить (нельзя сразу поправить файл конфигурации, почему-то). Далее, нажимаем Пользовательский файл конфигурации "torrc" и заменяем содержимое на:

## See https://www.torproject.org/docs/tor-manual.html,
## for more options you can use in this file.
VirtualAddrNetworkIPv4 172.16.0.0/12
AutomapHostsOnResolve 1
SocksPort 127.0.0.1:9050
SocksPort 192.168.1.1:9050
TransPort 192.168.1.1:9040 IsolateClientAddr IsolateClientProtocol IsolateDestAddr IsolateDestPort
DNSPort 127.0.0.1:9053
User admin
Log notice syslog
ExitPolicy reject *:*
ExitPolicy reject6 *:*
ExcludeExitNodes {RU}, {UA}, {BY}, {KZ}, {MD}, {AZ}, {AM}, {GE}, {LY}, {LT}, {TM}, {UZ}, {EE}
StrictNodes 1
ExitRelay 0

Важно! Вместо ip-адреса 192.168.1.1 нужно подставить адрес вашего маршрутизатора (можно посмотреть в настройках роутера LAN/IP-адрес). Вместо строчки User admin нужно написать User пользователем_которым_логинетесь_на_роутер.

И опять нажимаем Применить.

Далее, идем по пути LAN/DHCP-сервер/Пользовательский файл конфигурации "dnsmasq.conf" и добавляем в конец:

conf-file=/etc/storage/dnsmasq/unblock.dnsmasq

Если вы хотите чтобы резолвились домены .onion, то добавьте ещё в этот файл. (Имейте в виду что не все браузеры разрешают переходить по адресам в домене .onion)

server=/onion/127.0.0.1#9053
ipset=/onion/unblock

Ну и вишенкой на торте включаем ежедневное обновление таблицы ipset (на случай, если ip-адрес сервиса изменился). Идем в Администрирование/Сервисы/Сервис Cron (планировщик) включаем. Тыкаем на Задания планировщика (Crontab), вставляем:

00 06 * * *  /etc/storage/post_iptables_script.sh update_ipset

Нажимаем Применить.

Дождитесь пока tor стартанёт. Обычно на это уходит несколько минут. Посмотреть можно в журнале событий, там должна появиться надпись: "Bootstrapped 100%"

Зайдите на https://check.torproject.org, вы должны увидеть надпись что ваш браузер использует TOR.


Диагностика проблем

Если в логах вы видите строчку "tor: Start TOR" и больше ничего относящегося к tor-у, то скорее всего проблема с конфигом. Идём в Администрирование/Консоль и выполняем команду:

/usr/sbin/tor --RunAsDaemon 1 --PidFile /var/run/tor.pid --DataDirectory /tmp/tor

Читаем лог. Пытаемся понять что не так.

Если есть замечания, предложения или что-то не получается, пишите мне в тележку https://telegram.me/dimonb или на почту dimonb@gmail.com

Если хотите отблагодарить: на пиво

Report Page