Jump to content

DennoN

Forum Members
  • Posts

    36
  • Joined

  • Last visited

Posts posted by DennoN

  1. @dsolo

    https://github.com/DennoN-RUS/Bird4Static/blob/master/etc/cron.daily/add-bird4_routes.sh
    вот в этом файле закоментируй пятую и пятнадцатую строку вот так:

    Скрытый текст
    
    #!/bin/sh
    
    ISP=eth3
    VPN=ppp0
    #URL0=https://antifilter.download/list/allyouneed.lst - вот в эту строку в начале поставить #
    
    ROUTE=/opt/etc/bird4-routes.list
    VPNTXT=/opt/etc/bird4-vpn.txt
    ISPTXT=/opt/etc/bird4-isp.txt
    
    [ -f "$ROUTE" ] && cat /dev/null > $ROUTE
    
    /opt/root/addip.sh $VPNTXT $VPN $ROUTE
    /opt/root/addip.sh $ISPTXT $ISP $ROUTE
    #curl -sf $URL0 | sed 's/^/route /' | sed  's/$/ via "'$VPN'";/' >> $ROUTE - вот тут тоже можно закрмментировать
    
    killall -s SIGHUP bird4

     

    все остальные файлы верни в изначальное состояние.

    Так же надо заполнить файл

    https://github.com/DennoN-RUS/Bird4Static/blob/master/etc/bird4-vpn.txt

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

    После этого запускай скрипт

    /opt/etc/cron.daily/add-bird4_routes.sh

  2. 2 часа назад, nurman сказал:

    Все работает, но непонятно в инструкции что значит "скрипт нужно перекачать с гитхаба", это про что?

    Это если кто-то ставил до внесения изменений. Сейчас там актуальная версия лежит

    https://github.com/LukyanovM/zapret/blob/master/init.d/keenetic/S99zapret

    Если ставили позднее 2018 года 😀, то ничего делать не нужно.

    2 часа назад, nurman сказал:

    не было таких моментов?

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

  3. 11 минуту назад, Konstantin Grande сказал:

    настройки автоматического запуска и собственно, перезагрузки,

    А если остановить адгуард, и вернуть родной днс, то точно все работает? Адрес белый или серый?

     

    Кстати, если пакет уже давно лежит в http://bin.entware.net/mipselsf-k3.4/test/ то может уже из теста его в общий репозиторий кинуть? Было бы удобно обновлять его просто opkg upgrade...

    • Upvote 2
  4. идешь на http://192.168.0.1/a

    где 192.168.0.1 - адрес роутера

    вводишь

    opkg dns-override
    system configuration save

    далее в ssh идешь в конфиг адгуадра

    vi /opt/etc/AdGuardHome/AdGuardHome.yaml

    Находишь строку port: (не bind_port:, а именно port:)

    меняешь на port: 53

    потом

    /opt/etc/init.d/S99adguardhome restart

    Все готово! теперь адгуард слушает запросы на 53 порту, так что все локальные клиенты идут к нему.

    4 часа назад, BACbKA сказал:

    Начитавшись статьи, воодушевился!

    А вообще тут можно гораздо проще все это поставить

    Уже есть готовые пакеты адгуарда

    Нужно всего-лишь в консоли выполнить

    opkg install http://bin.entware.net/mipssf-k3.4/test/adguardhome_0.102.0-1_mips-3.4.ipk
    /opt/etc/init.d/S99adguardhome start

    Вот и вся установка, вместо собирания пакета вручную.

    Но днс все равно надо будет отключать на роутере, как я описал выше

     

    • Thanks 1
    • Upvote 1
  5. Спасибо за инструкцию! Поставил правда не на роутер, а на NAS, в котором развернута entware, там памяти побольше будет)

    Пара замечаний:

    для работы rss надо выполнить:

    opkg install php7-mod-dom

    а для запуска задач в кроне надо написать

    */30 * * * * root php-cli /opt/share/www/tm/engine.php >> /opt/var/log/torrent_monitor_error.log 2>&1

    а не

    */30 * * * * php-cli /opt/share/www/tm/engine.php >> /opt/var/log/torrent_monitor_error.log 2>&1

    А то я понять не мог, что за пользователь такой php-cli и почему идет запуск не от рута.

    В остальном в связке NGINX SQLite PHP7 все отлично! Завелось с первого раза.

  6. 44 минуты назад, avn сказал:

    ip rule add table 1000 priority 2150

    Ага, отличная идея. Понял, переправлю.

    А по поводу грепа, в принципе одно и тоже получается. В моем варианте я еще пробовал предусмотрел момент, что будут писать 88.42.12.32 #описание что за адрес

    Поэтому добавил awk '{print $1}' перед всем этим безобразием. А сам запрос можно сократить, до '^([0-9]{1,3}\.){3}[0-9]{1,3}($|/[0-9]{1,2}$)'

    Согласен.

  7. 19 часов назад, avn сказал:

     У "автора" скриптов такие моменты были предусмотрены.

    А, так это ваш скрипт я взял как начальную идею по резолвингу доменов из файла. Наконец-то нашел оригинальный пост

    Говорю огромное спасибо, за идею чтения файла построчно и резолвинга каждой строки. Сам бы с нуля я долго бы мучался с реализацией.

  8. В итоге набросал такой скрипт:

    ~ # cat /opt/etc/init.d/S98mountSMB.sh
    #!/bin/sh
    
    if [ -z "$(lsmod | grep cifs)" ]; then
            insmod /lib/modules/$(uname -r)/cifs.ko
    fi
    
    if [ -z "$(mount | awk '/^\\\\192.168.10.5\\backups/')" ]; then
            mount \\\\192.168.10.5\\backups /opt/mnt/NAS -o username=user,password=password
    fi

    Если будут предложения получше, то я весь в внимании

    • Thanks 1
  9. так. частично разобрался

    нужно выполнить:

    insmod /lib/modules/4.9-ndm-4/cifs.ko
    mount \\\\192.168.10.5\\backups /opt/mnt/ -o username=user1,password=userpass

    Но при перезагрузке роутера монтирование исчезает (тут надо поковырять fstab  и я буду благодарен за подсказку, как его проверить без ребута роутера)

    А так же сам модуль cifs.ko не загружается сам, нужно каждый раз выполнять команду. Можно было бы его запускать при старте роутера, но путь может поменяться и вообще это плохая идея. Есть варианты, как загружать модуль автоматически?

    Список модулей для загрузки лежит в /etc/modules.autoload Но файл только на чтение, добавить туда cifs я не могу

  10. vi /opt/etc/ndm/ifstatechanged.d/010-add_antizapret_route.sh

    сам скрипт:

    #!/bin/sh
    
    [ "$1" == "hook" ] || exit
    [ "$id" == "L2TP0" ] || exit
    
    case ${change}-${connected}-${link}-${up} in
        link-no-down-down)
            ip rule del table 1000
            /opt/etc/init.d/S04bird1-ipv4 stop
        ;;
        link-yes-up-up)
    #НИЖЕ ИДЕТ ПРОВЕРКА
            if [ -z "$(ip rule | grep 1000)" ]; then
                    ip rule add table 1000
            fi
            /opt/etc/init.d/S04bird1-ipv4 start
        ;;
    esac

     

    по поводу резолва, отредактировал скрипт

    #!/bin/sh
    
    cut_local() {
            grep -vE 'localhost|^0\.|^127\.|^10\.|^172\.16\.|^192\.168\.|^::|^fc..:|^fd..:|^fe..:'
    }
    
    cat $1 | awk '{print $1}' | awk '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/' | sed 's/^/route /' | sed  's/$/\/32 via "'$2'";/' >> $3
    cat $1 | awk '{print $1}' | awk '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{1,2}$/' | sed 's/^/route /' | sed  's/$/ via "'$2'";/' >> $3
    echo 1
    until ADDRS=$(dig +short google.com @localhost -p 5533) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done
    echo 2
    ....

    запустил скрипт /opt/etc/cron.daily/add-bird4_routes.sh

    скрипт вывел цифру 1 и завис. Ждал 5 минут. Потом открыл вторую сессию ssh, отредактировал dnsmasq и повесил его на порт 5533, перезапустил днс и скрипт, который висел все это время вывел цифру 2

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

     

  11. в файле addip.sh есть строка с ожиданием резолва google.com

    until ADDRS=$(dig +short google.com @localhost -p 53) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done

    По поводу правила. Вы про какой скрипт? Если тот, который мониторит впн соединение, то там есть проверка на то, что бы не добавлять правило, если оно уже есть...

    На гитхабе обновление https://github.com/DennoN-RUS/Bird4Static

    сделал автоинсталяшку (кривую немного), добавил описание.

  12. ~ # dig A +short onlainfilm.co @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | awk '{print "route "$1"/32 via \"ppp0\";"}'
    route 34.196.125.115/32 via "ppp0";
    route 3.231.242.12/32 via "ppp0";
    route 50.19.199.106/32 via "ppp0";
    route 52.87.80.196/32 via "ppp0";
    ~ # dig A +short 4pda2.ru @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | awk '{print "route "$1"/32 via \"ppp0\";"}'
    ~ # dig A +short google.com @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | awk '{print "route "$1"/32 via \"ppp0\";"}'
    route 108.177.14.139/32 via "ppp0";
    route 108.177.14.102/32 via "ppp0";
    route 108.177.14.101/32 via "ppp0";
    route 108.177.14.138/32 via "ppp0";
    route 108.177.14.100/32 via "ppp0";
    route 108.177.14.113/32 via "ppp0";
    ~ # 

    Вообще я внес кое какие правки. Оказалось, что часть IP адресов (если после адреса стоит #комментарий) попадает в резолвинг. Ничего не происходит, они просто не отвечают, как несуществующий домен, так же как и 4pda2.ru в моем примере.

    Тут я свои старые сообщения редактировать не могу, так что создал "проект" на гитхабе

    https://github.com/DennoN-RUS/Bird4Static

    сам файл с правками https://github.com/DennoN-RUS/Bird4Static/blob/master/root/addip.sh

    Так же упрощается установка самих скриптов.

    opkg install git bird4 cron
    git clone https://github.com/DennoN-RUS/Bird4Static.git
    chmod +x Bird4Static/root/addip.sh
    chmod +x Bird4Static/etc/ndm/ifstatechanged.d/010-add_antizapret_route.sh
    chmod +x Bird4Static/etc/cron.daily/add-bird4_routes.sh
    cp -rf Bird4Static/etc/ /opt/
    cp -rf Bird4Static/root/ /opt/

    Остается править конфиги и можно запускать.

  13. Проверяли :)

    У меня все ок, строки без адреса не добавляются. Там греп отфильтровывает. Но конкретно эта строка не моя. Изначально скрипт был на форуме, но мне его просто скинули, так что кто автор я не знаю)

    dig A +short $line @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' 

    Может конечно еще можно как-нибудь изуродовать файл с входными данными, но у меня идеи закончились. Базовую "защиту от дурака" я вроде бы сделал. Ну а если есть желание все поломать, то тут уже никакая защита не поможет 😁

    По поводу крона, изначально я для себя сделал не 3 инклюда, а 5. в двух файлах указывал ip адреса для впн и исп, в два другие попадали адреса от доменов + общий от антифильтра.

    Но по итогу объединил все в одно. Не стал заморачиваться и решил пусть весь файл сразу читает и не проверяет, что уже было в нем, что нет.

    А так-то решение, которое я здесь выложил написано именно для моих нужд. То есть грузим весь список и добавляем пользовательские правила. Если кто-то не захочет грузить весь список, а использовать только свои адреса, то придется чуть чуть подправить крон комментированием строк 

    curl $URL0 | sed 's/^/route /' | sed  's/$/ via "'$VPN'";/' > $ROUTE
    /opt/root/addip.sh $ISPTXT $ISP $ISPLST

    и из конфига bird убрать это

            include "/opt/etc/bird4-routes.list";
            include "/opt/etc/bird4-isp.list";
  14. Нет, для меня первоисточником был https://keenetic-gi.ga/2019/01/22/bgp_routing.html

    Что можно через инклюд делать это я в мануале по берду углядел.

    По поводу оnслеживания впн, тут хорошо, если список не обобщенный. А если он с масками 24, 19 и тд, то часть ресурсов при падении впн просто перестанет открываться, хотя они через провайдера открываются нормально. А тут таблица грохается и маршруты идут просто через провайдера.

    Вот про killall -s SIGHUP bird4 спасибо, не знал, что так можно.

    Вот скрипт резолвинга доменов изначально был не мой, но в итоге он него осталось всего пара строк)

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

  15. Дополнение. Настроил резолвинг доменов и добавление в таблицу маршрутизации через bird

    Итак:

    1) Нужно создать скрипт:

    vi /opt/root/addip.sh

    Содержимое:

    #!/bin/sh
    
    cut_local() {
            grep -vE 'localhost|^0\.|^127\.|^10\.|^172\.16\.|^192\.168\.|^::|^fc..:|^fd..:|^fe..:'
    }
    
    #Добавляем адреса без масок
    cat $1 | awk '{print $1}' | awk '/^[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*$/' | sed 's/^/route /' | sed  's/$/\/32 via "'$2'";/' > $3
    #Добавляем адреса с масками
    cat $1 | awk '{print $1}' | awk '/^[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*[\/]/' | sed 's/^/route /' | sed  's/$/ via "'$2'";/' >> $3
    
    until ADDRS=$(dig +short google.com @localhost -p 53) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done
    
    #Узнаем адреса доменов
    echo "$(cat $1 | awk '!/^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[1-9][0-9]/ && !/^#/ && NF {print $1}')" | {
            while IFS= read -r line; do
                    dig A +short $line @localhost -p 53 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | cut_local | awk '{print "route "$1"/32 via \"'$2'\";"}' >> $3
            done
    }

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

    chmod +x /opt/root/addip.sh

    Скрипт получает на вход 3 аргумента: файл с доменами и адресами, название туннеля и конечный файл с маршрутами

    2) Редактируем скрипт автообновления адресов в кроне

    vi /opt/etc/cron.daily/add-bird4_routes.sh

    Приводим к такому виду:

    #!/bin/sh
    
    ISP=eth3
    VPN=ppp0
    URL0=https://antifilter.download/list/allyouneed.lst
    ROUTE=/opt/etc/bird4-routes.list
    VPNTXT=/opt/etc/bird4-vpn.txt
    VPNLST=/opt/etc/bird4-vpn.list
    ISPTXT=/opt/etc/bird4-isp.txt
    ISPLST=/opt/etc/bird4-isp.list
    
    #Скачиваем общий список
    curl $URL0 | sed 's/^/route /' | sed  's/$/ via "'$VPN'";/' > $ROUTE
    #Добавляем вручную добавленные адреса через впн
    /opt/root/addip.sh $VPNTXT $VPN $VPNLST
    #То же что и выше, но через провайдера
    /opt/root/addip.sh $ISPTXT $ISP $ISPLST
    
    /opt/etc/init.d/S04bird1-ipv4 reconfigure

    Тут нужно изменить:

    ISP - это имя интерфейса провайдера

    VPN - это имя интерфейса туннеля

    Остальное не трогаем. Файл в переменной VPNTXT /opt/etc/bird4-vpn.txt заполняем, если хотим что-то перенаправить на туннель принудительно.  Файл в переменной ISPTXT /opt/etc/bird4-isp.txt заполняем, если хотим направить что-то через провайдера принудительно. Пример заполнения:

    vi /opt/etc/bird4-isp.txt
    
    4pda.ru
    speedtest.net
    #msstore
    88.221.132.9
    88.221.132.42
    93.184.221.240
      
    vi /opt/etc/bird4-vpn.txt
      
    antifilter.download

    В принципе если вам не хотите скачивать весь список заблокированных доменов, а настроить точечный обход, то удаляете строку curl $URL0 | sed ..., далее просто заполняете файл bird4-vpn.txt теми ресурсами, на которые вы хотите попадать через туннель. Правила заполнения. Каждая запись в новой строке. Знаки # игнорируется, можно ставить комментарии. Так же игнорируются пустые строки. Поддерживается добавление адресов вида 123.123.123.123, а так же и с масками 123.123.123.0/24. Любые записи нужно записывать с первого символа строки, то есть никаких пробелов перед адресом ставить нельзя.

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

    /opt/etc/cron.daily/add-bird4_routes.sh

    Файлы с расширением list этого готовые файлы конфигурации для bird. Эти файлы нужно добавить в конфиг bird

    3) Редактируем конфиг bird

    vi /opt/etc/bird4.conf

    тут нужно секцию protocol static static_routes привести к виду:

    protocol static static_routes {
            import all;
            #route 192.168.X.Y/24 via 192.168.A.B;
            include "/opt/etc/bird4-routes.list";
            include "/opt/etc/bird4-vpn.list";
            include "/opt/etc/bird4-isp.list";
    }

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

    На этом все, осталось перезапустить птичку

    /opt/etc/init.d/S04bird1-ipv4 restart

    И готово!

  16. Так как у меня отвалился почему-то BGP, настроенный по инструкции https://keenetic-gi.ga/2019/01/22/bgp_routing.html

    То решил настроить обход через статические маршруты, через тот же самый bird4

     

    1) Нужно установить сам bird4

    opkg install bird1-ipv4

    далее меняем конфиг

    vi /opt/etc/bird4.conf

    сам конфиг:

    log syslog all;
    log stderr all;
    
    router id 123.123.123.123; # current external ip
    
    function martians()
    {
            return net ~ [
                    #104.20.41.23/32-,      #4pda.ru
                    100.64.0.0/10+,
                    169.254.0.0/16+,
                    172.16.0.0/12+,
                    192.168.0.0/16+,
                    10.0.0.0/8+,
                    127.0.0.0/8+,
                    224.0.0.0/4+,
                    240.0.0.0/4+,
                    0.0.0.0/32-,
                    0.0.0.0/0{0,7}
            ];
    }
    
    protocol device {
            scan time 15;
    }
    
    protocol kernel kernel_routes {
            scan time 60;
            import none;
            export all;
            kernel table 1000; # kernel routing table number
    }
    
    
    protocol static static_routes {
            import all;
            include "/opt/etc/bird4-routes.conf";
            #route 192.168.X.Y/24 via 192.168.A.B;
            route 104.20.41.23/32 via "eth3";       #4pda.ru
            route 104.20.42.23/32 via "eth3";
    }

    Пояснения 123.123.123.123 можно заменить на текущий адрес, но так как мы не используем BGP, то по сути роли не играет.

    Так же можно удалить строки route 104.20.41.23/32 и далее. У меня они в конфиге для исключения маршрутизации через тунель. Если хотите оставить, то убедитесь, что eth3 - это интерфейс провайдера. Для этого выполняем команду ifconfig и смотрим название интерфейса, которому присвоен адрес провайдера.

     

    2) Далее надо создать скрипт, который создает/удаляет таблицу и запускает/останавливает службу, если впн поднялся/упал

    vi /opt/etc/ndm/ifstatechanged.d/010-add_antizapret_route.sh

    сам скрипт:

    #!/bin/sh
    
    [ "$1" == "hook" ] || exit
    [ "$id" == "L2TP0" ] || exit
    
    case ${change}-${connected}-${link}-${up} in
        link-no-down-down)
            ip rule del table 1000
            /opt/etc/init.d/S04bird1-ipv4 stop
        ;;
        link-yes-up-up)
            if [ -z "$(ip rule | grep 1000)" ]; then
                    ip rule add table 1000
            fi
            /opt/etc/init.d/S04bird1-ipv4 start
        ;;
    esac

    Тут нужно поменять "$id" == "L2TP0" на то имя, которое у вас прописано кинетиком. Для этого выполняем:

    ndmc -c "show interface"

    Находим нужный интерфейс и смотрим на строку Interface, name = "L2TP0"

    В вашем случае это может быть не L2TP0, а что-то другое, соответственно в скрипте выше надо поменять название.

    Не забываем выполнить

    chmod +x /opt/etc/ndm/openvpn-route-up.d/010-add_antizapret_route.sh

     

    3) Создаем скрипт, который будет каждый день обновлять списки блокировки

    vi /opt/etc/cron.daily/add-bird4_routes.sh

    Если у вас нет папки cron.daily, то скорее всего у вас не установлен крон, выполняем:

    opkg install cron

    Содержимое самого скрипта:

    #!/bin/sh
    
    curl https://antifilter.download/list/allyouneed.lst | sed 's/^/route /' | sed 's/$/ via "ppp0";/' > /opt/etc/bird4-routes.conf
    
    /opt/etc/init.d/S04bird1-ipv4 reconfigure

    Здесь нужно поменять ppp0 на имя интерфейса вашего впн тунеля (не путать с названием, которое мы узнавали до этого!!!)

    Выполняем ifconfig и смотрим, какой интерфейс указан для впн по ip адресу.

    Не забываем выполнить:

    chmod +x /opt/etc/cron.daily/add-bird4_routes.sh

     

    4) Запуск. Выполняем только что созданный скрипт

    ip rule add table 1000
    /opt/etc/cron.daily/add-bird4_routes.sh
    /opt/etc/init.d/S04bird1-ipv4 start

    проверить, что все работает можно выполнив

    ip route list table 1000

    в выводе будет большой список адресов.

    Так же команда

    ip rule list

    Покажет, есть ли вообще таблица.

     

    На этом все! Спасибо Александру Рыжкову за изначальную инструкцию по настройке bird4, на основе которой и был сделан этот мануал.

    • Thanks 2
×
×
  • Create New...