Jump to content

Mr.Scayger

Forum Members
  • Posts

    48
  • Joined

  • Last visited

Posts posted by Mr.Scayger

  1. Всем доброго времени суток)

    Вопрос знающим - как осуществить редактирование конфигурации скриптами? Суть задачи в следующем. В конфигурации подключения указано множество серверов, выбираемых рандомно. Хочу сделать скрипт, ведущий статистику подключения к серверам и при нескольких неудачных попытках удалять сервер из конфигурации. Если такое возможно, прошу намекнуть, в какую сторону копать.

  2. На самом деле прошу подсказать по синтаксису, из хелпа по bird непонятно.

    Если пишу так

    protocol static {
        route 195.201.201.32/32 multipath
         via 10.84.0.28 weight 2
         via 10.80.0.2  weight 1
         ;
    }

    ошибок нет
    Если так

    protocol static {
        route 195.201.201.32/32
         via "ovpn_br0" 
         ;
    }

    тоже ошибок нет

    Если так

    protocol static {
        route 195.201.201.32/32 multipath
         via "ovpn_br0" 

         via "ovpn_br1" 
         ;
    }

    то ошибки. Как сделать правильно???

  3. Всем доброго времени суток и с наступившим )))

    В Linux && Bird новичок, поэтому прошу помощи. Есть текстовый файл с префиксами сетей вида х.х.х.х/32, для примера взял список торрентов из TorrentMonitor и добавил 2ip.ru для проверки. На роутере подняты несколько vpn-интерфейсов. Необходимо  маршрутизировать трафик до этих сетей через все vpn интерфейсы, используя bird и route multipath. Почти всё, что находил в интернете, касалось bgp и других протоколов, про статическую маршрутизацию почти ничего. Сделал тестовую конфигурацию. Если в ней всё прописывать руками (каждый маршрут), то работает. Если попытаться обобщить, используя фильтр и маршрут по умолчанию, соответственно нет. Ошибка и в том, и в другом. Прикладываю неработающую конфигурацию с тестовыми сетями. Прошу наставить на путь истинный))) Если это возможно вообще, требуется импортировать список сетей из файла в конфиг и прописывать маршруты через имена интерфейсов, т.к. ip vpn всегда меняются. Таблица 1000 создана руками и заполняется только при ручном прописывании маршрутов. 

    Последняя тестовая конфигурация :

    Скрытый текст

    protocol direct {
        interface "*";
    }

    table enemy; 

    protocol device {
        scan time 60;
    }

    function martians ()
    {       return net ~ [ 195.201.201.32/32,
                        104.21.234.178/32,
                        104.21.234.179/32,
                        104.21.63.9/32,
                        104.21.84.130/32,
                        172.67.142.12/32,
                        172.67.193.9/32,
                        179.43.141.93/32,
                        196.245.156.22/32,
                        45.132.105.85/32,
                        46.175.146.105/32,
                        46.19.139.195/32,
                        5.45.74.149/32
                     ];
    }

    protocol static {
        table enemy;

        import filter {
        if martians() then accept;
        reject;
        };
            route 0.0.0.0/0  multipath
             via 10.85.0.1
             via 10.80.0.1
             via 10.84.0.1;
        preference 1;
    }

    protocol kernel {
            table enemy;
            persist;
            learn;
            scan time 60;
            kernel table 1000;
            export all;
    #        debug all;
    }
     

     

  4. Судя по записи 

    Server started on 0.0.0.0:6687

    он запускается. Не надо нажимать ^C, достаточно Enter

    По предыдущим опытам установки составил себе немного другую инструкцию, которую перепроверил на днях. Установка удачно проходит, кроме новых косяков Питона 3.10. Список изменений и дополнений.

    Необходимые пакеты:

    opkg install python3-base python3 python3-pip gcc make patch coreutils-install wget-nossl unzip dos2unix --force-depends

    Для Питона:

    pip3 install –upgrade "setuptools<58" - в более новых другие косяки лезут
    pip3 install --upgrade pip
    pip3 install wheel pyparsing 

    Обязательно преобразовать файлы дистрибутива в Unix кодировку:

    find /opt/monitorrent -depth -type f -name "*.py" -exec dos2unix -u {} \;
     

    Скрипт запуска (/opt/etc/init.d/S95tormon) сделал из шаблона, чтобы параметры свои передавать:

    Скрытый текст

    #!/bin/sh

    ENABLED=yes
    PROCS=python3
    ARGS="/opt/monitorrent/server.py --db-path /opt/monitorrent/monitorrent.db"
    PREARGS=""
    DESC=$PROCS
    PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

    . /opt/etc/init.d/rc.func

    Запуск командой:

    sh /opt/etc/init.d/S95tormon start

     

  5. Всем доброго времени суток)

    В связи с недавней поломкой monitorrent из-за обновления Python3 до 3.10 возник закономерный вопрос - можно ли выборочно запретить обновление пакетов через OPKG? Чтобы не обновлять все остальные поштучно. На Малинке это делается так:

    sudo echo 'kodi hold' | sudo dpkg --set-selections
    sudo echo 'kodi-bin hold' | sudo dpkg --set-selections

    Есть ли тут такая возможность?

  6. Поменял collections на collections.abc во всех пакетах, выдающих ошибку при запуске. Вроде запустился. Осталось одно предупреждение:

    Скрытый текст

    /opt/lib/python3.10/site-packages/alembic/util/messaging.py:73: UserWarning: 'connection' argument to configure() is expected to be a sqlalchemy.engine.Connection instance, got <sqlalchemy.orm.session.ContextSession object at 0x23faaa0>
      warnings.warn(msg)
     

    С ним что делать? Игнорировать?? 

  7. Поставил Entware с нуля на другую флешку. Установил monitorrent. Не работает. Куча ошибок.

    Скрытый текст

     File "/opt/monitorrent/server.py", line 19, in <module>
        from monitorrent.rest.notifiers import NotifierCollection, Notifier, NotifierCheck, NotifierEnabled
      File "/opt/monitorrent/monitorrent/rest/__init__.py", line 6, in <module>
        import falcon
      File "/opt/lib/python3.10/site-packages/falcon/__init__.py", line 30, in <module>
        from falcon.api import API  # NOQA
      File "/opt/lib/python3.10/site-packages/falcon/api.py", line 21, in <module>
        from falcon import api_helpers as helpers, DEFAULT_MEDIA_TYPE, routing
      File "/opt/lib/python3.10/site-packages/falcon/api_helpers.py", line 21, in <module>
        from falcon import util
      File "/opt/lib/python3.10/site-packages/falcon/util/__init__.py", line 29, in <module>
        from falcon.util import structures
      File "/opt/lib/python3.10/site-packages/falcon/util/structures.py", line 35, in <module>
        class CaseInsensitiveDict(collections.MutableMapping):  # pragma: no cover
    AttributeError: module 'collections' has no attribute 'MutableMapping'
     

     

  8. Это на крайний случай, когда совсем помрёт. Тем более на 3.7.1 какие-то проблемы с установкой, не вникал пока.

    По ответам в инете это проблемы с переменными окружения в питоне и отсутствие некоторых линков. Пока поразбираюсь. Очень уж переставлять неохота...

  9. Пытался. Даже питон 3й подчистую сдуру снёс) Как я понимаю теперь, достаточно было даунгрейдить pip3  до версии <58. Теперь и питон как-то криво стоит. При запуске команды pip3 install -r requirements.txt или pip3 install <имя модуля> выдаёт одну и ту же ошибку:

    Скрытый текст

    Could not find platform dependent libraries <exec_prefix>
    Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
    Traceback (most recent call last):
      File "/opt/bin/pip3", line 3, in <module>
        import re
    ModuleNotFoundError: No module named 're'
    /opt/monitorrent # pip3 install -r re
    Could not find platform dependent libraries <exec_prefix>
    Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
    Traceback (most recent call last):
      File "/opt/bin/pip3", line 3, in <module>
        import re
    ModuleNotFoundError: No module named 're'
     

     

  10. On 2/21/2021 at 2:04 AM, dsolo said:

    Подскажите что мне сделать, чтобы просто обходить несколько сайтов, без всяких там BGP.

    Удалить все скрипты, настроить VPN, в админке кинетика "Сетевые правила/Маршрутизация" добавить вручную нужные маршруты по типу:

    35.184.0.0/13
     
    vpn-интерфейс
    Да
    Google LLC (Spotify)
    208.85.40.0/21
     
    vpn-интерфейс
    Да
    www.pandora.com
    • Thanks 1
  11. Важное дополнение - если на роутере включены ПРИОРИТЕТЫ ПОДКЛЮЧЕНИЙ и настроена ПРИВЯЗКА УСТРОЙСТВ К ПРОФИЛЯМ, то устройство, с которого производится проверка, должно находиться в ОСНОВНОМ ПРОФИЛЕ. Убил на это кучу времени, пока понял. Возможно, что если поиграть настройками дополнительных профилей, то заработает и с ними, но я не стал экспериментировать.

  12. Диагностика ошибок для моего метода

    Открыть сайт 2ip.ru и посмотреть, какой ip показывает. Если с ovpn_br2, то работает. Если нет, искать ошибки.

    Всем скриптам естественно должны были быть даны права на выполнение командой "chmod +x".

    1.Командой ps | grep bird проверить, запущен ли bird. В выводе будет строка типа "4413 root     52372 S    bird4 -c /opt/etc/bird4.conf". Если не запущен, искать причины. Смотреть в логе ошибки, либо воспользоваться командой "bird4 -p -c /opt/etc/bird4.conf".

    2.Командой "ip rule list" убедиться в наличии таблиц с номерами 1001,1002,1003. В выводе будут строки:

    30001:  from all lookup 1001
    30002:  from all lookup 1002
    30003:  from all lookup 1003

    Если их нет, ошибка в скрипте /opt/etc/init.d/S02bird-table. Запустить его вручную "sh  /opt/etc/init.d/S02bird-table start" и разобраться в ошибках, если есть.

    3.В /opt/etc должны появиться файлы bird4-nl.list, bird4-us.list и созданный в п.2 bird4-us-force.list. В /opt/etc/blacklist файлы ip.lst и md5.txt. Если их нет, то ошибка в скрипте, созданном в п.4

     

     

    • Thanks 1
  13. Прелюдию (установку пакетов, настройку pingcheck на vpn интерфейсах, методики проверки конфигов на ошибки и т.п.) опускаю, т.к. это достаточно описано выше.

    Реализован следующий алгоритм работы. Есть два VPN интерфейса, ovpn_br1 основной и ovpn_br2 резервный. На IP, прописанные в файле /opt/etc/bird4-us-force.list, трафик идёт через ovpn_br2. На адреса из общего списка ip.lst через основной, если он недоступен, то через резервный. 

    1.Создать папку /opt/etc/blacklist

    2.Остановить или установить bird, заменить файл конфигурации /opt/etc/bird4.conf следующим

    Spoiler

    #log syslog all;
    #log stderr all;

    router id 192.168.1.1;

    protocol direct {
            interface "ovpn_br1", "ovpn_br2";
    }

    table nl_free;
    table us_free;
    table us_backup;

    protocol device {
        scan time 15;
    }

    protocol kernel {
        table us_free;
        persist;
        learn;
        scan time 900;
        import none;
        export all;
        kernel table 1001; # kernel routing table number
    }

    protocol kernel {
        table nl_free;
        persist;
        learn;
        scan time 900;
        import none;
        export all;
        kernel table 1002; # kernel routing table number
    }

    protocol kernel {
        table us_backup;
        persist;
        learn;
        scan time 900;
        import none;
        export all;
        kernel table 1003; # kernel routing table number
    }

    protocol static {
        table us_free;
        include "/opt/etc/bird4-us-force.list";
        check link on;
        preference 50;
    }

    protocol static {
        table nl_free;
        include "/opt/etc/bird4-nl.list";
        check link on;
        preference 250;
    }

    protocol static {
        table us_backup;
        include "/opt/etc/bird4-us.list";
        check link on;
        preference 500;
    }

     

    Создать файл /opt/etc/bird4-us-force.list. Пример ниже, 2ip внесён для проверки работы.

    Spoiler

    route 185.85.121.0/24 via "ovpn_br2";           #Lostfilm.TV
    route 195.201.201.32/32 via "ovpn_br2";         #2ip.ru
    route 3.0.0.0/8 via "ovpn_br2";                 #Amazon
    route 52.32.0.0/11 via "ovpn_br2";              #Amazon
    route 207.171.160.0/19 via "ovpn_br2";          #Amazon
     

    3.Создать скрипт /opt/etc/init.d/S02bird-table для инициализации таблиц при незапланированных перезагрузках

    Spoiler

    #!/bin/sh

    PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin

    start()
    {
            if [ -z "$(ip rule | awk '/^30001/' )" ]; then
                    ip rule add table 1001 priority 30001
            fi
            if [ -z "$(ip rule | awk '/^30002/' )" ]; then
                    ip rule add table 1002 priority 30002
            fi
            if [ -z "$(ip rule | awk '/^30003/' )" ]; then
                    ip rule add table 1003 priority 30003
            fi
    }

    stop()
    {
        ip rule del table 1001
        ip rule del table 1002
        ip rule del table 1003
    }

    case "$1" in
            start)
            start
            ;;

            stop | kill)
            stop
            ;;

            restart)
            stop
            sleep 5
            start
            ;;
            *)
            echo "Usage: $0 {start|stop|kill|restart}"
            ;;
    esac

     

    4.В папку cron.daily или cron.hourly поместить скрипт (автору ветки респект 👍) парсинга списка ip.lst и выполнить его вручную первый раз

    Spoiler

    #!/bin/sh

    VPN1=ovpn_br1
    VPN2=ovpn_br2
    URL0=https://antifilter.download/list/ip.lst

    ROUTE1=/opt/etc/bird4-nl.list
    ROUTE2=/opt/etc/bird4-us.list

    logger "Entering ${0##*/}."

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

    cd /opt/etc/blacklist
    wget -N $URL0

    old=$(cat /opt/etc/blacklist/md5.txt)
    new=$(cat /opt/etc/blacklist/*.lst | md5sum | head -c 32)

    if [ "$old" != "$new" ]
    then

    /opt/etc/init.d/S04bird1-ipv4 kill
    /opt/etc/init.d/S02bird-table kill

    cat /opt/etc/blacklist/ip.lst | sed 's/^/route /' | sed  's/$/\/32 via "'$VPN1'";/' > $ROUTE1
    cat /opt/etc/blacklist/ip.lst | sed 's/^/route /' | sed  's/$/\/32 via "'$VPN2'";/' > $ROUTE2

    echo $new > /opt/etc/blacklist/md5.txt

    /opt/etc/init.d/S02bird-table start
    /opt/etc/init.d/S04bird1-ipv4 start

    logger "RKN list reconfigured"

    fi

    logger "Leaving ${0##*/}."

     

    5.Если всё прошло без ошибок, то можно пользоваться. Только подождать немного, пока bird переварит таблицы 🙂

    С одним vpn подключением всё упрощается до примитивности.

    • Thanks 1
  14. Всё оказалось просто)

    Есть Keenetic Giga KN-1010, прошивка 3.4.6. На более ранних прошивках со старой версией Open VPN скорее всего не заработает, там переменные окружения и параметры другие. Пример привожу для VPN-подключения с именем "OpenVPN4".

    1. Добавляем параметр "verb 3" в настройки VPN-подключения.
    2. Включаем, после подключения в системном журнале ищем строку вида: PUSH: Received control message: 'PUSH_REPLY,dhcp-option DNS х.х.х.х, redirect-gateway def1,...,route-gateway A.B.C.D, topology subnet,ping 10,ping-restart 60,...
    3. Настраиваем роутер по статье https://keenetic-gi.ga/2019/01/22/bgp_routing.html, используя IP A.B.C.D как IP адрес удалённого конца VPN-соединения. Убеждаемся, что работает.
    4. В /opt/etc/ndm/openvpn-route-up.d добавляем ещё один скрипт 020-bird_restart.sh и делаем его исполняемым. Скрипт меняет 40-ю строку конфигурации bird на новую, с новым gw. Строку желательно проверить 🙂
    Spoiler

    #!/bin/sh

    [ "$ndm_opkg_id" != "OpenVPN4" ] && exit 0

    sed  -i[SFX] '40c\      gw = '$route_vpn_gateway';' /opt/etc/bird4.conf

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

    Вуаля

    В линуксе новичок, слепил на коленке, возможно есть и другой путь. Главное - работает)

    • Thanks 2
  15. 21 hours ago, Владимир Подстречный said:

    Кто-нибудь может подсказать, можно ли в конфиге bird использовать имя интерфейса вместо gw=ip ???

    Разобрался. Заодно и решил проблему с динамическим gw при смене подключения.

×
×
  • Create New...