Jump to content

aleeko

Forum Members
  • Posts

    47
  • Joined

  • Last visited

Posts posted by aleeko

  1. Спасибо за советы и уделенное время. Вторая версия моей поделки.
    Было принято решение сделать отдельные скрипты для каждого моего перенаправления трафика.

    Так как КРОН опрашивает наличие соединения не чаще одного раза в минуту.
    А в случае недоступности выходного нужного мне интерфейса трафик пойдет все равно по умолчанию в интерфейс провайдера.
    /rci  - это безусловно прогресс в работе и управления роутером, кое что удалось найти на форуме, как с ним работать, но очень любопытно где находится полная информация о функционале.

    Мой код который работает сейчас через автозапуск.
     

    Скрытый текст
    #!/bin/sh
    
    # Предопределяем интерфейс и переменные
    out_iface="nwg2" 					#выходой интерфейс в интерпретации Entware
    out_iface_description="p_vpn" 			#название интерфейса для понимания в отчетах в телеграм боте
    table="43"								#таблица из policy выходного интерфейса
    
    in_iface="Wireguard1" 						#интерфейс принимающий клиентов
    in_iface_description="wg_home_p_vpn"		#название принимающего для бота телеграм
    subnet="172.16.81.0/24"						#подсеть принимающего интерфейса для правила
    ip_to_ping="8.8.8.8"						#адрес для првоерки соединения 
    timer="0"									#переменная заменяющая мне CRON- регулирует раз в час отправку уведомления о текущем IP на выходе
    #все эти переменные вероятно в будущем потребуется вынимать автоматически, так как тестировал девелоперскую прошивку, и таблицы там начинались с 10 а не с 42 (аккуратно с автообновлениями)
    
    # Функция для проверки и управления состоянием интерфейса
    manage_interface() {
        local iface="$1"
        local iface_description="$2"
        local desired_state="$3"
    
        state=$(curl -s localhost:79/rci/show/interface/$iface/state | tr -d '"')
        if [ "${state}" != "${desired_state}" ]; then
            if [ "${desired_state}" = 'up' ]; then
                curl -s -X POST "https://api.telegram.org/botВАШ_API/sendMessage" -d "chat_id=ВАШ_CHATID&text=Снимаем заглушку с $iface_description пинг восставновлен.%0AИнформация о текущем IP-адресе:%0A$ip_info"
            else
                curl -s -X POST "https://api.telegram.org/botВАШ_API/sendMessage" -d "chat_id=ВАШ_CHATID&text=Ставим заглушку на $iface_description нет пинга"
            fi
            curl -s -d "{\"${desired_state}\":\"true\"}" "localhost:79/rci/interface/$iface"
        fi
    }
    
    # Бесконечный цикл проверки наличия соединения каждые 5 секунд SLEEP 5.
    while true; do
    	ip_info=$(curl --interface "$out_iface" ipinfo.io?token=ВАШ_ТОКЕН)
    	if [ "$timer" -eq 720 ]; then
           	curl -s -X POST "https://api.telegram.org/botВАШ_API/sendMessage" -d "chat_id=ВАШ_CHATID&text=Интерфейс $out_iface_description%0AИнформация о текущем IP-адресе:%0A$ip_info"
        	timer="0"
        fi
    	timer=$((timer + 1))
        # Выполняем пинг, отправляя 3 эхо-пакета
        if ping -c 3 -I $out_iface $ip_to_ping &> /dev/null; then
            echo "Минимум один пакет был успешным."
            if ! ip rule show | grep -q "from $subnet lookup $table"; then
                # Правила для подсети не существует, добавляем его и получаем информацию о текущем IP и отправляем ее в Телеграм
                echo "Добавляем правило для $subnet сети $in_iface_description в таблицу $table через интерфейс $out_iface_description"
                ip rule add from $subnet table $table
                manage_interface "$in_iface" "$in_iface_description" 'up'
                curl -s -X POST "https://api.telegram.org/botВАШ_API/sendMessage" -d "chat_id=ВАШ_CHATID&text=Добавлено правило для $subnet сети $in_iface_description в таблицу $table через интерфейс $out_iface_description%0AИнформация о текущем IP-адресе:%0A$ip_info"
            else
                echo "Правило существует для $subnet сети $in_iface_description в таблице $table и есть пинг для $out_iface_description"
                manage_interface "$in_iface" "$in_iface_description" 'up'
            fi
        else
            echo "Все 3 пакета были неуспешными. Выполняю действия по реагированию..."
            manage_interface "$in_iface" "$in_iface_description" 'down'
            curl -s -X POST "https://api.telegram.org/botВАШ_API/sendMessage" -d "chat_id=ВАШ_CHATID&text=Отсутствует ping для $out_iface_description. Выключили $in_iface_description"
        fi
        # Подождите 5 секунд перед отправкой следующей серии пакетов
        sleep 5
    done

     

    Принцип какой. если пропал пинг на нашем выходном соединении - считается что соединение недоступно и скрипт отключает интерфейс на которым принимаем трафик. Что бы не заморачиваться с IPTABLES.
    Как только пинг на выходном соединении появляется - скрипт снова включает интерфейс который принимает клиентов.
    При запуске и во время работы скрипта проверяется наличие правила маршрутизации, если его нет - добавляем, если есть дубликат не создается.

    Главное что мне сейчас не нравится. То что я не понимаю команды синтаксис запуска скриптов для автозапуска.
    Автозапуск у меня сейчас выглядит вот так /opt/etc/init.d/S52homevpn
    Содержимое ниже.

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

    sh /opt/scripts/vpn.sh &

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

  2. 18 минут назад, vasek00 сказал:
    "ip rule" + "ip ro show table XXXX"

    Этих не хватит.

    Для перезагрузки используют /opt/etc/init.d скрипт с "S110Run" или хуки от /opt/ndm/...

      Показать содержимое
    ~ # ip rule
    0:      from all lookup local 
    10:     from all fwmark 0xffffcff lookup main 
    200:    from all fwmark 0xffffd00 lookup 42 
    201:    from all fwmark 0xffffd00 blackhole
    202:    from all fwmark 0xffffd01 lookup 43 
    203:    from all fwmark 0xffffd01 blackhole
    204:    from all fwmark 0xffffd02 lookup 44 
    ...
    
    
    ~ # ip ro show table 42
    default dev nwg0  scope link 
    10.2.0.1 dev nwg4  scope link 
    ....

    где

    42 у меня например ip policy Policy0/description Cloud

    44 у меня ip policy Policy2/description Anti

    Номера 42 и т.д. идут пока по порядку согласно конф файла

    ip policy Policy0 -------> 42
        description Cloud
    ...
    !
    ip policy Policy1 -------> 43
        description In-2
    ...
    !
    ip policy Policy2 ------> 44
        description Anti
    ...


     

     

    В моем случае в этих  

    "ip rule" + "ip ro show table XXXX"

    нет никакой информативность что бы соотнести интерфейс с таблицей и дать правильное правило для интерфейса

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

    ~ # ip rule

    0: from all lookup local

    198: from 172.16.81.0/24 lookup 43

    199: from 172.16.83.0/24 lookup 42

    200: from all fwmark 0xffffd00 lookup 42

    201: from all fwmark 0xffffd00 lookup unspec blackhole

    202: from all fwmark 0xffffd01 lookup 43

    203: from all fwmark 0xffffd01 lookup unspec blackhole

    204: from all fwmark 0xffffd02 lookup 44

    205: from all fwmark 0xffffd02 lookup unspec blackhole

    400: from 46.35.237.221 lookup 58

    401: from 172.20.12.1 lookup 59

    402: from 172.20.12.2 lookup 60

    403: from 10.21.252.227 lookup 61

    32766: from all lookup main

    32767: from all lookup default

    Установил ndmq
    в Entware из коробки не было. - как понимаю он может выполнять команды CLI через командную строку.

    ndmq -p 'show ip policy'  - НЕ РАБОТАЕТ, осталось теперь что бы гуру Кинетиков и Сетевых настроек подсказали какой командой я могу вытянуть policy через ndmq
    ДОкументация на ГИтхабе не нашел

    opkg install http://bin.entware.net/mipselsf-k3.4/keenetic/archive/
    ndmq_1.0.2-7_mipsel-3.4_kn.ipk http://bin.entware.net/mipselsf-k3.4/keenetic/archive/libndm_1.8.0-1_mipsel-3.4_kn.ipk

  3. 1 час назад, vasek00 сказал:

    На форуме куча есть примеров через wget - например

    wget -qO - --post-data='[{"log":{"once":true}}]' localhost:79/rci/show

    Есть и еще - поиск

     

    Для меня проще команды "ip rule" + "ip ro show table XXXX" + достаточно один раз посмотреть вывод "show ip policy"

    Policy0
    "description": "Cloud",
    "mark": "ffffd00",
    "table4": 42
    ....
    "route": [
                        {
    ...
                            "interface": "Wireguard0",
    ...                    },
                        {
    ....
                            "interface": "Wireguard4",
    ...
           "Policy2": {
                "description": "Anti",
                "mark": "ffffd02",
                "table4": 44,
                "route4": {
    ...
                       {
    ...
                            "interface": "Wireguard4",
    ...
    сопоставить с конф файлом
    ip policy Policy0
        description Cloud
        permit global Wireguard0

     

    opkg install ip-full ip-bridge

     

    Нет, wget с логом не то, там нет упоминаний и отсылки table и к интерфейсам пригодных для скармливания   "ip rule"
    Здесь как раз таки надо обращаться какой то командой к роутеру что бы вытащить через entware эту инфу о "policy", либо смотреть какой то командой в сетевых параметрах, где упоминается соотношения имени интерфейса к присвоенным им политикой номера таблиц.
    Вся задача и заключается в том, что у меня на роутере настроены пару стабильных VPN с разной локацией, и пару прокси трактовых прокси, с другой локацией - и в случае, если я очень далеко, нужно что бы при перезагрузке у меня все автоматически вставало на ноги. без входа в ВЕБ интерфейс и моего участия.

  4. В 19.09.2023 в 20:55, aleeko сказал:

    становится интереснее....
    иначе получится так, что все будет отваливаться при перезапуске интерфейса или перезагрузке роутера
    - а скрипты по автозапускам, с проверкой поднятых интерфейсов видимо надо искать в других ветках...
    Вы использовали у себя скрипты автозапуска?

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

    #!/bin/bash

    # Параметры Telegram бота
    TELEGRAM_BOT_TOKEN="ВАШ_ТОКЕН"
    TELEGRAM_CHAT_ID="ВАШ_ЧАТ_ID"
    LOG_FILE="/var/log/add_routes_vpn.log"

    # Функция для логгирования
    log_message() {
      local message="$1"
      echo "$(date +"%Y-%m-%d %H:%M:%S") - $message" >> "$LOG_FILE"
    }
      
    # Функция для получения информации о текущем IP-адресе
    get_ip_info() {
      local interface="$1"
      local info="$(curl --interface "$interface" ipinfo.io?token=ВАШ_ТОКЕН)"
      echo "$info"
    }

    # Функция для проверки наличия правила
    rule_exists() {
      local subnet="$1"
      local table="$2"
      local rules=$(ip rule show)

      # Ищем строку с нужными параметрами
      if [[ "$rules" =~ "from $subnet lookup $table" ]]; then
        return 0  # Правило существует
      else
        return 1  # Правило не существует
      fi
    }
        
    # Функция для отправки уведомления в Telegram
    send_notification() {
      local message="$1"
      curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" -d "chat_id=$TELEGRAM_CHAT_ID&text=$message"
    }
    # Функция для проверки наличия маршрута
    check_route() {
      local subnet="$1"
      local table="$2"
      local interface="$3"

    # Проверяем, есть ли уже условие в таблицах
    if rule_exists "$subnet" "$table"; then
        ip_info="$(get_ip_info "$interface")"
        send_notification "Правило для $subnet существует в таблице $table%0AНа интерфейсе $interface IP-адрес%0A$ip_info"
    else
        # Если условие не существует, то добавляем его и получаем инфо о текущем IP и отправляем ее в Телеграм
        ip rule add from "$subnet" table "$table"
        ip_info="$(get_ip_info "$interface")"
        send_notification "Добавлено правило $subnet в таблицу $table через интерфейс $interface%0AИнформация о текущем IP-адреса%0A$ip_info"
    fi
    }

    # Проверяем наличие маршрутов и отправляем уведомления
    check_route "172.16.XX.0/24" "42" "t2s_br0"   
    check_route "172.16.XX.0/24" "43" "nwg2"       
    #check_route "172.16.XX.0/24" "44" "t2s_br1"   
     

    Возможно кому-то пригодится.
    Вот как работает у меня автозагрузка на начальном этапе.
    Установлено в КРОН на 5 минут.
    Для удобства чтения, используйте нормальный Bash Shell Reader, что бы видеть разметку кода, где текст, функции, операторы, переменные... - иначе для меня это становится нечитаемыми иероглифами...

    Если есть идеи что может сломаться или что бы вы добавили -  пишите.
    Лично у меня вопрос... кто знает?!
    При работе через интерфейс мы можем добавлять новые таблицы, и таблицы интерфейсов могут получить новые значения.
    Как через скрипт получить информацию, в какой именно таблице сейчас прячется интерфейс nwg2 или любой другой? - что бы каждый раз не лазать ручками редактировать скрипт?

  5. 14 часа назад, vasek00 сказал:

    Вам предложен вариант как это можно сделать.

    с проверкой поднятых интерфейсов видимо надо искать в других ветках...

    видимо так, на данном форуме есть куча вариантов описанных что и как только приложить некоторые усилия.

    Как говорится "без труда не выловишь и рыбку из пруда", второе "Подразумевается, что на нашем форуме пишут люди заинтересованные и технически подкованные, способные на минимальный анализ происходящего"

    Моему восторгу нет предела! Это Гениально и Просто! 
    Ручками пока все работает. И можно назначить отдельные выходные интерфейсы для каждого  отдельно взятого клиента сервера WG.
    Огромное вам спасибо что вы здесь есть!
    Я сам программирую и понимаю программный код, в тех случая когда это все выглядит как традиционное программирование.
    Но понимание устройства сетей и их настройки - ну никак мне не заходит....
    Для меня открытие, что ПРИОРИТЕТЫ ПОДКЛЮЧЕНИЙ в интерфейсе  - это таблицы в Entware.
    И я до сих пор не могу понять, почему разработчики не внедрят опция выбора выходящего интерфейса в Вебморду. На форуме часто встречаются этот вопрос.

    Теперь надо все проверить как и какие будут присваиваться DNS - какие утечки будут, все это научится держать на автозагрузке и периодической проверке.
    Спасибо

    PS данные из CLI формируются в формате JSON - их удобно читать и изучать в моем случае в любом JSON Editor - в привычном для меня интерфейсе для меня стало более понятным все.

  6. 21 минуту назад, vasek00 сказал:

    Логика проста - сначала все ручками чтоб работало, а потом уже скрипт для автом. запуска.

    становится интереснее....
    иначе получится так, что все будет отваливаться при перезапуске интерфейса или перезагрузке роутера
    - а скрипты по автозапускам, с проверкой поднятых интерфейсов видимо надо искать в других ветках...
    Вы использовали у себя скрипты автозапуска?

  7. В 08.09.2023 в 21:38, vasek00 сказал:

    Все мои настройки и описания проверены при работе в профилях, т.е. есть

    1. основной профиль где расположены по росту вверху провайдер 1 RT (pppoe - основной), провайдер 2 Inet-2 (просто провод DHCP - резервный) и далее ниже уже идут все остальные Cloud-Warp, и еще ниже Proton и т.д.. Галки на WG каналах для выхода в интернет стоят (тогда их можно использовать в других профилях).

    2. профиль Cloud - галка только на канале Cloud-Warp (WG) на остальных галки нет

    3. профиль Anti - галка только на канале Proton (WG Proton) на остальных галки нет

      Скрыть содержимое
    PPPoE0 - основной провайдер GigabitEthernet0/Vlan9 - это Inet-2 второй провайдер (vlan9 это просто вырезанный LAN порт, ни каких vlan нет)
    
    interface Wireguard0
        description Cloud-warp
        security-level public
    
    interface Wireguard4
        description WG-proton
        security-level public
    
    ip policy Policy0
        description Cloud
        permit global Wireguard0
        no permit global GigabitEthernet0/Vlan9
        no permit global PPPoE0
        no permit global Wireguard4
        no permit global Proxy0
    
    ip policy Policy2
        description Anti
        permit global Wireguard4
        no permit global PPPoE0
        no permit global GigabitEthernet0/Vlan9
        no permit global Wireguard0
        no permit global Proxy0

    Настройки wireguard стандартны, описаны в базе знаний.

      Скрыть содержимое

     

    Есть клиент, допустим мобильный телефон - клиент подключается к серверу Wireguard настроенный на Keenetic - с последующим выходом через нужный интерфейс (который мы указали в статических маршрутах), а не через Основное подключение.

     

    Сервер WG на роутере для удаленных клиентов

    interface Wireguard3
        description PKN-WG
        security-level public
        ip address 10.16.130.101 255.255.255.0
    ....
        wireguard peer Z8cL......bTY= !A73
           endpoint 10.16.130.6:ххххх
    ....        
        !
        wireguard peer y09......MCA= !T505
            endpoint 10.16.130.18:ххххх
    ....        

    В данном случае данные клиенты получат IP который им присвоен в настройках WG сервера. Так как проблемы часто возникают именно с DNS то в данном варианте использования за это отвечает AdguardHome который - это локальный сервис роутера и он слушает сеть 192.168 и 127.0.0.1 порт 53. Куда и что прописать будет чуток ниже.

    AdguardHome
    
    dns:
      bind_hosts:
        - 192.168.130.101
        - 127.0.0.1
      port: 53

    Вспоминаем что это основной профиль и его канал выхода это РТ (pppoe).

    Мы хотим нашего клиента смартфон чтоб он выходил через профиль Cloud -> воспользуемся самой прошивкой, т.е. при создание профиля создается table маршрутизации где default нужный нам Wireguard0 а в другом профиле table другая default Proton

      Скрыть содержимое
    ~ # ip ro show table 42
    default dev nwg0  scope link 
    
    ~ # ip ro show table 44
    default dev nwg4  scope link

    это можно найти в web cli - 192.168.1.1/a набрав "show ip policy"

    По умолчанию наш удаленный клиент после подключения использовать основной профиль роутера, но мы можем ему сменит канал выхода направив его в нужную нам table за счет того что он клиент имеет IP от WG например выше - 10.16.130.6. Заворот данного клиента делается через

    ip rule add from IP_удал_клиента/24 table 42
    
    или
    
    ip rule add from IP_удал_клиента/24 table 44

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

    ip nat Wireguard3

    По DNS воспользуемся тем что добаление сервера DNS в профилях создает стат маршрут на интерфейс который deault в данном профиле (без разницы какой это профиль - основной или созданные). Например

      Показать содержимое
    ~ # ip ro show table 42
    default dev nwg0  scope link 
    ...
    192.168.130.101 dev nwg0  scope link 

    Пока это работает, но можно и какой то свой например такой 10.2.0.1 DNS от конф. Proton

    ~ # ip ro show table 44
    default dev nwg4  scope link 
    10.2.0.1 dev nwg4  scope link 

     

    В итоге проверяем speedtest на удаленном клиенте

    1. по умолчанию IP будет от роутера на клиенте который по WG к роутеру

    2. после добавления rule то speedtest то на клиенте показывает адрес от профиля в который мы его направили (IP от wireguard0 или wireguard4).

    В данном варианте никакого контроля правил iptables нет, вопрос только в одной строчке

    "ip rule add from 10.16.130.6 table 42"
    

    Перечитывал несколько раз, и если я правильно понимаю, часть настроек вы делаете через Entware (имею ввиду через подключение SSH к роутеру) - верно?
    То есть обойтись возможностями интерфейса не получится? - так?

    PS Сам спросил  - сам ответил )
    Да. О том что нужно использовать Entware вы говорите в этой статье.



     PPS. Я так понимаю, такой же логики следует придерживаться, если я буду заворачивать трафик в прокси настроенный на Кинетике?

     

  8. В 03.09.2023 в 18:19, vasek00 сказал:

    Для того чтоб wireguard работал через нужный сетевой необходимо чтоб был прописан стат маршрут до сервера wireguard через нужный сетевой интерфейс.

    Пример. Есть два входных интернет канала, по умолчанию основной РТ, второй Inet-2 в резерве. Поднимем warp wireguard через резервный канал.

    1. канал warp работает через основной, отключаем wireguard (через WEB другие подключения).

    2. прописываем стат маршрут через Inet-2 на нужный нам сервер wireguard 

    Сен 3 17:50:51 ndm Network::RoutingTable: added static route: 188.114.хх.хх/32 via 10.10.10.1 (GigabitEthernet0/Vlan9). 

    делается через WEB - раздел марщрутизация (до узла, нужный IP сервера 188.114.хх.хх/32. нужный инетрефес у меня Inet-2 или "via 10.10.10.1" и выбираем его)

    3. идем в WEB cli (192.168.1.1/a и включаем его "interface Wireguard0 up" в моем случае его номер "0", находится по конф файлу или так же WEB cli набрав просто "interface Wireguard" и клавишу "tab". Если он один то не чего искать не надо, это если их несколько)

    4. проверяем что все ОК на клиенте в браузере набираем speedtest и он должен показать IP клиента, в данном случае IP от cloudflare warp 104.28.ххх.ххх. По логу это выглядит так

      Показать содержимое
    Сен 3 17:52:05 ndm Network::Interface::Base: "Wireguard0": "base" changed "conf" layer state "disabled" to "running".
    Сен 3 17:52:05 ndm Network::Interface::Base: "Wireguard0": interface is up.
    Сен 3 17:52:05 kernel wireguard: Wireguard0: peer "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" (8) created
    Сен 3 17:52:05 ndm Wireguard::Interface: "Wireguard0": added a host route to peer "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" (188.114.хх.хх) via 10.10.10.1 (GigabitEthernet0/Vlan9).

    в отличие от ранее когда он поднят на основном канале

    162.159.хх.хх dev ppp0  scope link
    [I] Aug 15 09:17:52 ndm: Wireguard::Interface: "Wireguard0": added a host route to peer "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" (162.159.хх.хх) via PPPoE0 (PPPoE0). 

     

      Показать содержимое

    -5.thumb.jpg.3912a07fe5f33db1f486520171874bfd.jpg

     
    Это будет работать до тех пора пока есть стат маршрут прописанный выше по п.2

    Не получилось у меня пока заставить работать как у вас?
    Можно вас попросить больше подробностей?
    Необходимо ли что то дополнительно настраивать в межсетевом экране?
    Включена ли у вас опция "Использовать для выхода в интернет" - в интерфейсе Inet-2

    И самое главное - правильно ли мы понимаем друг друга? 
    Есть клиент, допустим мобильный телефон - клиент подключается к серверу Wireguard настроенный на Keenetic - с последующим выходом через нужный интерфейс (который мы указали в статических маршрутах), а не через Основное подключение.
    Интерфейсе Inet-2 у вас подключен физически к роутеру в качестве резервного канала? Или это VPN или Прокси с выходом интернет?

  9. 1 час назад, aleeko сказал:

    PS - стрелочку слева нажал. Было всего 13, я 14-й .... 
    Как то мало нуждающихся (((
    А с другими протоколами ВПН  работает выбор интереса? В какой то официальной статье от Кинетика читал относительно OPenVPN - что для работоспособности выхода надо обязательно выбирать ЛЮБОЙ ИНТЕРФЕЙС а не какой то конкретный

    https://help.keenetic.com/hc/ru/articles/360000880359-Сервер-OpenVPN

    Статья от Обновлено 20.07.2023

    Важно! Начиная с версии KeeneticOS 3.4.1 сервер работает только при указании в "Подключаться через" - "Любое интернет-подключение".

  10. 2 минуты назад, krass сказал:

    слева нажать на стрелочку со значением 14

    PS - стрелочку слева нажал. Было всего 13, я 14-й .... 
    Как то мало нуждающихся (((
    А с другими протоколами ВПН  работает выбор интереса? В какой то официальной статье от Кинетика читал относительно OPenVPN - что для работоспособности выхода надо обязательно выбирать ЛЮБОЙ ИНТЕРФЕЙС а не какой то конкретный

  11. 4 минуты назад, gvan сказал:

    Вы так и не показали свой скрипт. Или хотя бы чему у вас равна переменная $BACSTORDIR. 

    У меня именно такой скрипт, как я привел в примере. Предварительный переход в каталог команде find мешать никак не может. Да, наверно можно обойтись и без него. 

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

    #!/opt/bin/sh

    # VERSION 2.1

    # Скрипт сохраняет резервную копию entware, конфига роутера и прошивки

    prefix="/opt"
    PATH=${prefix}/bin:${prefix}/sbin:/sbin:/bin:/usr/sbin:/usr/bin

    #=====================================================================================
    # Конфигурационные параметры скрипта
    #=====================================================================================
    # Префикс для записи сообщений в syslog
    TAG="Backup"

    # Каталог, куда сохранять бэкапы
    BACSTORDIR=backup/

    # Какие компоненты бэкапить (1|0)
    # Entware. Всегда сохраняется новая копия
    IsEnt=1
    # Конфигурация роутера. Сохраняется копия, если были изменения в конфиге
    IsConf=1
    # Прошивка. Создается резервная копия, если прошивка изменялась
    IsFirm=1

    # Префикс для имени файла с бэкапом
    BACNAME=entware

    # Что архивировать
    BACDIR=/opt/

    # Какие каталоги пропускать при бэкапе entware
    EXCLUDE="
    tmp
    var/log
    var/cache
    share/nginx/html
    var/mysql
    backup
    "

    # При определении изменялся ли конфиг, не учитывать данные строки (через экраннированный символ "ИЛИ" -> "\|".
    # При сравнении копий конфига не учитываются служебные строки, начинающиеся на '! $$$', и строка 'clock date', т.к. она обновляется при считывании конфига
    # Лучше не трогать :)
    EXCLCONFCMD='\! \$\$\$\|clock date'

    # Путь к резервной копии прошивки на USB FLASH. Определить в CLI по команде 'ls ?'. Обычно это метка диска в виде 'LABEL:/'
    BACFIRMDIR=OS:/backup/

    # Сколько дней хранить бэкапы.
    DAYSTOR=5

    #=====================================================================================
    # Начало скрипта
    #=====================================================================================

    # Текущая дата для формирования имени файла с архивом
    DATE=`date +%Y-%m-%d`

    logger -t $TAG "Starting process"
    cd $BACDIR

    # Делаем архив entware
    if [ "$IsEnt" = "1" ]
        then
        logger -t $TAG "Starting backup entware"
        echo "$EXCLUDE" | tar -X - -cf - * | gzip > ${BACSTORDIR}${BACNAME}-${DATE}.tgz
        else
        logger -t $TAG "Skiping backup entware"
    fi

    # Делаем архив конфига
    if [ "$IsConf" = "1" ]
        then
        logger -t $TAG "Starting backup config"
        ndmq -p "show running-config" -P message > ${BACSTORDIR}config-${DATE}
        if [ -f "${BACSTORDIR}config-cur" ]
            then
            OLDCONF=`grep -v "${EXCLCONFCMD}" ${BACSTORDIR}config-cur`
            CURCONF=`grep -v "${EXCLCONFCMD}" ${BACSTORDIR}config-${DATE}`
            if [ "$OLDCONF" != "$CURCONF" ]
                then
                logger -t $TAG "Config is changed. Do new copy."
                cp -f ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur-new
                mv -f ${BACSTORDIR}config-cur ${BACSTORDIR}config-${DATE}
                gzip -f ${BACSTORDIR}config-${DATE}
                mv ${BACSTORDIR}config-cur-new ${BACSTORDIR}config-cur
                else
                logger -t $TAG "Config is not changed. Renew current config copy."
                mv -f ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur
            fi
            else
            logger -t $TAG "Current config copy not found. Is it first run? Do config copy."
            cp ${BACSTORDIR}config-${DATE} ${BACSTORDIR}config-cur
            gzip -f ${BACSTORDIR}config-${DATE}
        fi
        else
        logger -t $TAG "Skiping backup config"
    fi

    # Делаем архив прошивки
    if [ "$IsFirm" = "1" ]
        then
            logger -t $TAG "Starting backup firmware"
            REL=`ndmq -p 'show version' -P 'release'`
            ndmq -p "copy flash:/firmware ${BACFIRMDIR}firmware-${DATE}" -P message
            if [ -f "${BACSTORDIR}firmware-$REL" ]
                then
                    CMPFIRM=`cmp ${BACSTORDIR}firmware-$REL ${BACSTORDIR}firmware-${DATE}`
                    if [ -n "$CMPFIRM" ]
                        then
                            logger -t $TAG "Firmware is changed. Do new copy."
                            cp -f ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-$REL-new
                            mv -f ${BACSTORDIR}firmware-$REL ${BACSTORDIR}firmware-${DATE}
                            mv ${BACSTORDIR}firmware-$REL-new ${BACSTORDIR}firmware-$REL
                        else
                            logger -t $TAG "Firmware is not changed. Renew current firmware copy."
                            mv -f ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-$REL
                    fi
                else
                    logger -t $TAG "Current firmware copy not found. Is it first run? Do firmware copy."
                    cp ${BACSTORDIR}firmware-${DATE} ${BACSTORDIR}firmware-$REL
            fi
        else
            logger -t $TAG "Skiping backup firmware"
    fi

    logger -t $TAG "Finished"  
    # Выводим в лог список удаленных файлов-архивов
    logger -t $TAG "Remove old archives"
    FILES=`find $BACSTORDIR -mtime +${DAYSTOR} -print -delete`
    logger -t $TAG "Removed: $FILES"
    logger -t $TAG "Copying to Yandex Disk..."
    rclone copy $BACKSTORDIR  rem:/KN-1010_backup --log-file backup.log
    logger -t $TAG "Backup and Sync finishes"
    logger -t $TAG "Exiting"

    У меня вот такой теперь. в моем случае, что бы работало как у вас, переменную
    BACSTORDIR=backup/
    надо указывать как BACSTORDIR=/opt/backup/

     

  12. Понял в чем дело . В последней секции скрипта мы переходим в $BACSTORDIR и потом ищем опять в find  $BACSTORDIR.
    Получается производим поиск find  в $BACSTORDIR/$BACSTORDIR/фильтр_поиска

    а такой директории не существует

    cd $BACSTORDIR - лишний

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

     

    logger -t $TAG "Finished"
    cd $BACSTORDIR
    
    # Выводим в лог список удаленных файлов-архивов
    logger -t $TAG "Remove old archives"
    FILES=`find $BACSTORDIR -mtime +${DAYSTOR} -print -delete`
    logger -t $TAG "Removed: $FILES"
    logger -t $TAG "Exiting"

     

  13. В 14.03.2021 в 12:56, gvan сказал:

    Да, вижу, что кое-что побилось. Выкладываю файл backup.zip

    Подскажите, почему может игнорироваться выполнение строки
     

    FILES=`find $BACSTORDIR -mtime +${DAYSTOR} -print -delete`

    В логе роутера вижу что якобы идет удаление лишних файлов, но ничего не удаляется

    Спасибо

  14. В 20.11.2021 в 14:19, TheBB сказал:

    первая страница, первый пост, внизу:

    9 октября сего (2021) года, ещё новее нету.

     

    Это нормально, что при установке db maria ругается?
    Спасибо

    И можно ли прикрутить к марии веб интерфейс? phpmyadmin не нашел на форуме инфо об этом

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

    mysql_install_db

    Could not find plugin directory.

    Will continue with "/opt/lib/mariadb/plugin".

    WARNING: The host 'Keenetic_Giga' could not be looked up with /opt/bin/resolveip.

    This probably means that your libc libraries are not 100 % compatible

    with this binary MariaDB version. The MariaDB daemon, mysqld, should work

    normally with the exception that host name resolving will not work.

    This means that you should use IP addresses instead of hostnames

    when specifying MariaDB privileges !

    Installing MariaDB/MySQL system tables in '/opt/var/lib/mysql' ...

    2022-02-18 19:18:57 0 [Warning] InnoDB: Linux Native AIO disabled.

    2022-02-18 19:19:09 0 [Warning] You need to use --log-bin to make --expire-logs-days or --binlog-expire-logs-seconds work.

    OK

     

    To start mysqld at boot time you have to copy

    support-files/mysql.server to the right place for your system

     

     

    Two all-privilege accounts were created.

    One is root@localhost, it has no password, but you need to

    be system 'root' user to connect. Use, for example, sudo mysql

    The second is root@localhost, it has no password either, but

    you need to be the system 'root' user to connect.

    After connecting you can set the password, if you would need to be

    able to connect as any of these users with a password and without sudo

     

    See the MariaDB Knowledgebase at https://mariadb.com/kb or the

    MySQL manual for more instructions.

     

    You can start the MariaDB daemon with:

    cd '/opt' ; /opt/bin/mysqld_safe --datadir='/opt/var/lib/mysql'

     

    You can test the MariaDB daemon with mysql-test-run.pl

    cd '/opt/mysql-test' ; perl mysql-test-run.pl

     

    Please report any problems at https://mariadb.org/jira

     

    The latest information about MariaDB is available at https://mariadb.org/.

    You can find additional information about the MySQL part at:

    https://dev.mysql.com

    Consider joining MariaDB's strong and vibrant community:

    https://mariadb.org/get-involved/

     

    ~ # mysqladmin -u root password 'Passw0rd'

    mysqladmin: connect to server at 'localhost' failed

    error: 'Can't connect to local server through socket '/opt/var/run/mysqld/mysqld.sock' (2)'

    Check that mariadbd is running and that the socket: '/opt/var/run/mysqld/mysqld.sock' exists!

    и интерфейс не такой красивый как у вас получается

     

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

    1233292760_2022-02-1819_39_18.thumb.png.ad36f94db641d1f192e3ce0cf3e71430.png

     

  15. В 31.12.2021 в 17:49, TheBB сказал:

    Держите! https://nginx.org/ru/docs/

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

    А можно ли несколько сайтов на одном IP?

    Ткните пожалуйста носом
    Спасибо

  16. Только что, dududuk сказал:

    В журнале чехарда, ощущение что ничего не работает

    http://prntscr.com/26y0far

     

    Хочу глянуть где подросток шастает в интернете, это возможно с помощью adguardhome? 

    Регистрируйте хосты по Mac или по ip и шпионьте. Это уже в открытых источниках инструкции эдгард есть… мануал с оф сайта копировать бессмысленно 

    • Thanks 1
  17. 2 часа назад, zyxmon сказал:

     попробуйте rclone

    Спасибо, действительно мощный инструмент! И на официальном сайте подробный мануал.

    С ним все работает. Но в интернете также пишут, что пользователям блокируют токены и теряют возможность работы через rclone

  18. Покопался в интернете
    https://qna.habr.com/q/677787
    Как оказывается Яндекс умышленно ставит таймауты на каждый 1 мб загрузки
    Новость двух летней давности... может сейчас стало еще хуже.
    ТОесть тема с использованием яндекса как бекап хранилища через веб дав мертвая, а ранее так удобно было использовать веб дав для яндекса...

    Предполагаю, что сам по себе davfs неплохо может справляться со своей задачей, осталось только найти нормальное хранилище.
    Но в текущий момент при копировании файлов через mc, консоль зависает очень надолго при копировании файла 32 мб

  19. 5 часов назад, zyxmon сказал:

    Не знаю, почему у Вас mount не увидел хелпер и не вызвал его, может опечатались в команде. По идее все рано, какой командой монтировать.

    А могли бы вы показать свой конфиг davfs2.conf?
    У меня невероятно низкая скорость копирования 

  20. 3 минуты назад, zyxmon сказал:

    Удивительно, но тема 2016 года, у которой пропала шапка (при каком то апгрейде форума) еще кого-то

    Спасибо за ответ. Интересует  - делаю автоматическое резервное копирование entware и настроек кинетика. Поискал также сам в интернете инфо об ошибке. Нашел про chmod... и некоторые иные моменты.

    но  mount -t davfs https://webdav.yandex.ru _точка_монтирования_ -o rw в моем случае по прежнему не работает,

    и продолжает сообщать об ошибке mount: /opt/home/yandex: unknown filesystem type 'davfs'.

    у меня работает вариант

    mount.davfs https://webdav.yandex.ru /opt/home/yandex -o rw

    Также как и отмонтирование

    umount.davfs /opt/home/yandex - правда с некоторыми предупреждениями в консоли

     

  21. В 29.08.2021 в 13:02, zyxmon сказал:

    lsmod и cat /proc/filesystems в студию.

    Столкнулся с той же проблемой, но автор запроса пропал.
    unknown filesystem type 'davfs'

    lsmod

    Цитата

    nf_nat_sip 8176 0 - Live 0x8b2b8000

    nf_conntrack_sip 19677 1 nf_nat_sip, Live 0x8b2b0000

    fastvpn 138638 0 - Live 0x8b100000 (PO)

    hw_nat 63793 0 - Live 0x8b0c0000 (PO)

    igmpsn 11907 0 - Live 0x8b028000 (PO)

    xhci_mtk 3312 0 - Live 0x8be8f000

    xhci_hcd 96967 1 xhci_mtk, Live 0x8bbe0000

    nf_nat_ftp 1392 0 - Live 0x8b840000

    nf_conntrack_ftp 5472 1 nf_nat_ftp, Live 0x8be06000

    zram 13356 1 - Live 0x8bd54000

    ntc 50500 2 - Live 0x8bd70000 (PO)

    mt7615_ap 1675876 5 - Live 0x8c200000 (PO)

    ubifs 265158 1 - Live 0x8c880000

    ubi 103716 2 ubifs, Live 0x8c840000

    mt7621_eth 124643 1 hw_nat, Live 0x8d1e0000 (PO)

    nacct 36281 0 - Live 0x8d1d0000 (PO)

    rndis_host 5353 0 - Live 0x8d126000

    snd_pcm_oss 37009 0 - Live 0x8d130000

    snd_usb_audio 112947 0 - Live 0x8d100000

    cdc_ether 5314 1 rndis_host, Live 0x8dbec000

    huawei_cdc_ncm 1616 0 - Live 0x8da5d000

    snd_pcm 63701 2 snd_pcm_oss,snd_usb_audio, Live 0x8dbf0000

    option 33136 0 - Live 0x8dbd0000

    cdc_ncm 16120 1 huawei_cdc_ncm, Live 0x8dbc0000

    usb_wwan 4903 1 option, Live 0x8da7c000

    hid_generic 656 0 - Live 0x8d07b000

    usbextras 1899 0 - Live 0x8da50000 (O)

    snd_usbmidi_lib 18899 1 snd_usb_audio, Live 0x8da70000

    exfat 64998 0 - Live 0x8da60000 (O)

    nls_utf8 912 0 - Live 0x8daf3000

    snd_seq_midi 4016 0 - Live 0x8db9d000

    zstd 1456 1 - Live 0x8d05c000

    evdev 10448 0 - Live 0x8d078000

    kalmia 2736 0 - Live 0x8da9a000

    snd_hwdep 4462 1 snd_usb_audio, Live 0x8da46000

    nf_nat_rtsp 4512 0 - Live 0x8da42000 (O)

    nls_cp1251 3696 0 - Live 0x8daa5000

    usbhid 25477 0 - Live 0x8daf8000

    snd_mixer_oss 11961 1 snd_pcm_oss, Live 0x8d07c000

    usb_storage 42203 2 - Live 0x8dae0000

    cdc_acm 15312 0 - Live 0x8da20000

    usblp 9712 0 - Live 0x8dac0000

    hid 100211 2 hid_generic,usbhid, Live 0x8d0e0000

    snd_rawmidi 16458 2 snd_usbmidi_lib,snd_seq_midi, Live 0x8d070000

    sd_mod 28576 3 - Live 0x8db90000

    sr_mod 12915 0 - Live 0x8da3c000

    nls_cp437 4464 0 - Live 0x8d8e6000

    sierra 6816 0 - Live 0x8d8d6000

    sg 18144 0 - Live 0x8dac8000

    snd_seq_midi_event 4431 1 snd_seq_midi, Live 0x8da34000

    usbnet 19753 5 rndis_host,cdc_ether,huawei_cdc_ncm,cdc_ncm,kalmia, Live 0x8dbb0000

    ext4 385411 1 - Live 0x8d080000

    snd_seq 44067 2 snd_seq_midi,snd_seq_midi_event, Live 0x8da80000

    tfat 361613 0 - Live 0x8d000000 (PO)

    zstd_decompress 51404 1 zstd, Live 0x8dad0000

    deflate 1584 1 - Live 0x8db9a000

    snd_seq_device 2239 3 snd_seq_midi,snd_rawmidi,snd_seq, Live 0x8ff3e000

    nls_cp866 3952 0 - Live 0x8ff7b000

    snd_timer 17118 2 snd_pcm,snd_seq, Live 0x8db88000

    tntfs 525287 0 - Live 0x8db00000 (PO)

    jffs2 95356 0 - Live 0x8da00000

    cdc_wdm 8645 1 huawei_cdc_ncm, Live 0x8d898000

    snd 32661 10 snd_pcm_oss,snd_usb_audio,snd_pcm,snd_usbmidi_lib,snd_hwdep,snd_mixer_oss,snd_rawmidi,snd_seq,snd_seq_device,snd_timer, Live 0x8ff70000

    zstd_compress 188202 1 zstd, Live 0x8ff40000

    aead 3937 0 - Live 0x8f73e000

    usbserial 19563 3 option,usb_wwan,sierra, Live 0x8ff28000

    nf_nat_pptp 1584 0 - Live 0x8d8cd000

    nf_nat_h323 5328 0 - Live 0x8d8d0000

    usbcore 143423 20 xhci_mtk,xhci_hcd,rndis_host,snd_usb_audio,cdc_ether,huawei_cdc_ncm,option,cdc_ncm,usb_wwan,usbextras,snd_usbmidi_lib,kalmia,usbhid,usb_storage,cdc_acm,usblp,sierra,usbnet,cdc_wdm,usbserial, Live 0x8ff00000

    nf_conntrack_pptp 3520 1 nf_nat_pptp, Live 0x8d9de000

    wireguard 108282 0 - Live 0x8d8a0000

    oid_registry 2147 0 - Live 0x8fee7000

    crc32c_generic 1328 0 - Live 0x8d85f000

    cdrom 26229 1 sr_mod, Live 0x8d890000

    resetnds 1106 0 - Live 0x8f712000 (PO)

    hmac 2544 0 - Live 0x8fee6000

    des_generic 18411 0 - Live 0x8d880000

    mtdoops_proc 5760 0 - Live 0x8d87a000 (O)

    input_core 28485 2 evdev,hid, Live 0x8d870000

    nf_conntrack_h323 36319 1 nf_nat_h323, Live 0x8d860000

    zlib_deflate 19576 2 deflate,jffs2, Live 0x8d858000

    jbd2 60706 1 ext4, Live 0x8d840000

    nls_base 5456 8 exfat,nls_utf8,nls_cp1251,nls_cp437,tfat,nls_cp866,tntfs,usbcore, Live 0x8f7d2000

    ip6_udp_tunnel 1751 1 wireguard, Live 0x8d9d9000

    xxhash 8491 2 zstd_decompress,zstd_compress, Live 0x8f760000

    sch_cake 32320 0 - Live 0x8d9f0000 (O)

    nf_conntrack_proto_gre 3006 1 nf_conntrack_pptp, Live 0x8f76a000

    phr 55559 4 mt7615_ap,mt7621_eth, Live 0x8d9e0000 (PO)

    mbcache 4308 2 ext4, Live 0x8f764000

    nf_conntrack_rtsp 4880 1 nf_nat_rtsp, Live 0x8f7a2000 (O)

    ndm_storage 1120 0 - Live 0x8f713000

    exportfs 3488 0 - Live 0x8d839000

    crc_itu_t 1067 0 - Live 0x8f717000

    zlib_inflate 14146 2 deflate,jffs2, Live 0x8f7d8000

    crc16 1063 2 ubifs,ext4, Live 0x8f71b000

    loop 17120 0 - Live 0x8d9a8000

    md5 1712 0 - Live 0x8f719000

    soundcore 4540 1 snd, Live 0x8d80e000

    scsi_mod 92858 4 usb_storage,sd_mod,sr_mod,sg, Live 0x8d820000

    udp_tunnel 2567 1 wireguard, Live 0x8f71d000

    crypto_null 2626 1 aead, Live 0x8fefc000

    tsmb 578017 1 - Live 0x8d900000 (PO)

    usb_common 1598 1 usbcore, Live 0x8fef6000

    nf_nat_proto_gre 1088 1 nf_nat_pptp, Live 0x8f6b9000

    md4 3120 0 - Live 0x8fee0000

    fuse 85694 0 - Live 0x8f720000

    grace 1665 0 - Live 0x8f707000

    cat  /proc/filesystems

    Цитата

    nodev sysfs

    nodev rootfs

    nodev tmpfs

    nodev bdev

    nodev proc

    nodev debugfs

    nodev sockfs

    nodev pipefs

    nodev ramfs

    nodev devpts

    squashfs

    fuseblk

    nodev fuse

    nodev fusectl

    nodev jffs2

    tntfs

    tfat

    tfat12

    tfat16

    ext3

    ext2

    ext4

    exfat

    nodev ubifs

     

  22. Продолжаю самостоятельный поиск в интернет и наткнулся на статью с фрагментом конфигурации сервера
    https://vc.ru/dev/155768-stroim-vpn-tunnel-v-lokalnuyu-set-s-pomoshchyu-wireguard
     

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


    Цитата

    [Interface]
    PrivateKey =
    <PEER_LAN_PRIVATE_KEY>
    Address = 10.0.0.2/32
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wlp2s0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wlp2s0 -j MASQUERADE


    Являются ли строки PostUp PostDown решением моего вопроса?
    Именно в этих строках указывается через какой интерфейс выпускать клиентов в интернет?
    Может кто то помочь с расшифровкой данных строк конфига?

    Спасибо

×
×
  • Create New...