Jump to content

John9110

Forum Members
  • Posts

    11
  • Joined

  • Last visited

Posts posted by John9110

  1. пришлось реализовать все более костыльно:

    сертификаты получаются отдельно на кинетик и отдельно на NAS.

    с доменного имени 4го уровня происходит перенаправление на http порт NAS, а уже там происходит редирект с http на https.

    дополнительно настроил:

    Цитата

    4. прописал через CLI заодно статическое имя на domain4.domain3.keenetic.link посредством команды ip host XXX (подробнее тут: https://help.keenetic.com/hc/ru/articles/213969609-Каким-образом-можно-указать-доменные-имена-устройствам-в-локальной-сети-Keenetic-). Это, чтобы из локалки ходить по той же ссылке в броузере на xpenology.

    А также в настройках NAS - Панель управления - Внешний доступ - дополнительно - Указал полный внешний адрес вида domain4.domain3.keenetic.link в поле имени хоста.

    Минусы:

    для получения сертификата на NAS (и обновления оного) прийдется каждый раз изменять правила переадресации 80го порта на NAS.

  2. Здравствуйте, прошу помощи.

    Имеется:

    • Keenetic Giga 3 (c установленным Entware);
    • NAS под операционной системой DSM от Synology.

    На роутере получено доменное имя XXXX.keenetic.link, доступ на роутер осуществляется по HTTPS по стандартным портам.

    Для доступа к веб интерфейсу NAS проброшены порты 5080(http) и 5443(https), на NAS настроен автоматический редирект с HTTP на HTTPS, однако при настройке с веб-интерфейса роутера происходит редирект с nas.XXXX.keenetic.link на 192.168.1.10:5443, при настройке с CLI (ip http proxy nas upstream http nas.XXXX.keenetic.link 5080) редирект происходит относительно правильно (ст.

    Для подключения к NAS по HTTPS по доменному имени nas.XXXX.keenetic.link требуется сертификат. Имеется возможность получения сертификата от Lets Encrypt на NAS, однако, насколько я понял, при создании доменного имени nas.XXXX.keenetic.link сертификат был уже создан, и получения сертификата на самом NAS не работает.

    Как возможно решить данные проблемы?

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

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

    #!/opt/bin/bash
     
    TOKEN=''
    URL='https://api.telegram.org/bot'$TOKEN
    MSG_URL=$URL'/sendMessage?chat_id='
    UPD_URL=$URL'/getUpdates?offset='
    update_id=0
    TARGET= #chat_id
    KMSG_URL=$URL'/sendMessage'
    proxy='--socks5 127.0.0.1:9055' # TOR
    send_fw_avalible=0

    send_message() {
        if [[ -z $3 ]]
        then
            res1=$(curl $proxy -s -X POST -H "Charset: UTF-8" $URL/sendMessage -d chat_id=$1 -d "text=$2")
        else
            if [[ $3 == 'inline_keyboard' ]]
            then
            inline_keyboard='{"inline_keyboard":[
            [{"text":"'$4'","callback_data":"'$5'"},
            {"text":"'$6'","callback_data":"'$7'"}]
            ]}'
            res=$(curl $proxy -s -X POST -H "Charset: UTF-8" $URL/sendMessage -d chat_id=$1 -d "reply_markup=${inline_keyboard}" -d "text=$2")
            fi
        fi
    }
    edit_message () {
    res=$(curl $proxy -s -X POST -H "Charset: UTF-8" $URL/editMessageText -d chat_id=$callback_query_message_chat_id -d message_id=$callback_query_message_message_id -d "text=$1")
    }

    while true; do {
        res=''
        until [[ -n $res ]]; do {
        res=$(curl $proxy $UPD_URL$update_id)
        } done
        update_id=$(echo $res | JSON.sh | egrep '\["result",0,"update_id"\]' | cut -f 2)
        callback_query=$(echo -e $res | JSON.sh | egrep '\["result",0,"callback_query"\]' | cut -f 2)
         callback_query_data=$(echo -e $res | JSON.sh | egrep '\["result",0,"callback_query","data"\]' | cut -f 2 | cut -d '"' -f 2)
        callback_query_id=$(echo $res|JSON.sh|egrep '\["result",0,"callback_query","id"\]' | cut -f 2)
        callback_query_message_chat_id=$(echo $res|JSON.sh|egrep '\["result",0,"callback_query","message","chat","id"\]' | cut -f 2)
        callback_query_message_message_id=$(echo $res|JSON.sh|egrep '\["result",0,"callback_query","message","message_id"\]' | cut -f 2)
        callback_query_message_text=$(echo -e $res|JSON.sh|egrep '\["result",0,"callback_query","message","text"\]' | cut -f 2 | cut -d '"' -f 2)

        message_from_id=$(echo $res|JSON.sh|egrep '\["result",0,"message","from","id"\]' | cut -f 2)
        message_text=$(echo -e $res|JSON.sh|egrep '\["result",0,"message","text"\]' | cut -f 2 | cut -d '"' -f 2)
        message=$(echo -e $res|JSON.sh|egrep '\["result",0,"message"\]' | cut -f 2)
        update_id=$((update_id+1))
     # # # commands
    if [ $update_id != 1 ]
    then
        if [[ $message_from_id == $TARGET || $callback_query_message_chat_id == $TARGET ]]
        then
            if [[ -n $callback_query ]]
            then
                curl $proxy -s $URL/answerCallbackQuery?callback_query_id=$callback_query_id
                case $callback_query_data in
                'Breboot')
                    edit_message "Сейчас будет произведен перезапуск интерфейса."
                    ndmq -p 'interface PPPoE0 down' -P MESSAGE
                    sleep 1
                    ndmq -p 'interface PPPoE0 up' -P MESSAGE
                    sleep 10
                    ndmq -p 'ndns get-update auto' -P MESSAGE
                    /opt/etc/init.d/S35tor restart
                    ;;
                'Bnoreboot')
                    edit_message "Перезапуск интерфейса не произведен. Вы можете выполнить перезапуск вручную."
                    ;;
                *) ;;
                esac
            fi
                
            if [[ -n $message ]]
            then
                case $message_text in
                '/start') 
                    send_message "$message_from_id" "Старт"
                    ;;
                '/info')
                        
                    ;;
                '/reboot') 
                    send_message "$message_from_id" "Сейчас будет произведен перезапуск интерфейса."
                    ndmq -p 'interface PPPoE0 down' -P MESSAGE
                    sleep 1
                    ndmq -p 'interface PPPoE0 up' -P MESSAGE
                    sleep 10
                    ndmq -p 'ndns get-update auto' -P MESSAGE
                    ;;
                    *) send_message "$message_from_id" "$message_text" "inline_keyboard" "Yes" "BYes" "No" "bNo";;
                esac
            fi
        else
            echo "[$(date +%Y.%m.%d_%H:%M:%S)][$message_from_id][$message_text]" >> /opt/var/log/bashbot.log
            send_message "$message_from_id" "Это приватный бот, доступ запрещен!"
        fi
    else
    fw_installed=$(ndmq -p 'components list beta' -x | egrep -m 1 '\<installed>'|cut -d ">" -f 2|cut -d "<" -f 1)
    fw_avalible=$(ndmq -p 'components list beta' -x | egrep -m 1 '\<version>'|cut -d ">" -f 2|cut -d "<" -f 1)

    if [[  "$fw_installed" != "$fw_avalible" && "$send_fw_avalible" == 0 ]]
    then
    send_message "$TARGET" "Возможно доступно обновление прошивки роутера." 
    send_fw_avalible=1
    fi
        ip_web=$(curl https://wtfismyip.com/text) #curl'ом с сайта вытаскиваем ip-адрес 
        ip_local=$(ndmq -p 'show interface PPPoE0' -x|grep address|cut -d ">" -f 2|cut -d "<" -f 1)
        ip_temp=$(tail -n 1 /opt/root/TempIP)
        if [[ -n "$ip_web" && -n "$ip_local" ]]
        then
            if [[ "$ip_web" == "$ip_local" ]]
            then
                if [[ "$ip_local" != "$ip_temp" ]]
                then
                    echo $ip_local> /opt/root/TempIP
                    send_message "$TARGET" "Ваш новый белый IP-адрес $ip_local"
                fi
            else
                if [[ "$ip_local" != "$ip_temp" ]]
                then
                    echo $ip_local> /opt/root/TempIP
                    send_message "$TARGET" "Обнаружен серый IP-адрес. Перезапустить интерфейс?" "inline_keyboard" "Yes" "Breboot" "No" "Bnoreboot"
                fi
            fi
        else
            send_message "$TARGET" "Не удалось получить IP-адрес:
    IP_Web=$ip_web
    IP_Local=$ip_local"
        fi
    fi

    } &>/dev/null; done

     

    • Upvote 4
  4. Крайне некрасиво выглядит журнал во всплывающем окне. хотелось бы иметь возможность открыть его на весь экран, либо в новой вкладке.

  5. В 10.01.2018 в 00:12, exared сказал:
    Скрытый текст

     

    Добавьте в скрипт приведенную ниже функцию, предварительно задав новую переменную KMSG_URL:

    
    
    KMSG_URL=$URL'/sendMessage'

     

    
    
    function send_keyboard {
        local text="$1"; shift 1; local keyboard=init
        OLDIFS=$IFS; IFS=$(echo -en "\"")
        for f in $*;do [ "$f" != " " ] && local keyboard="$keyboard, [\"$f\"]";done
        IFS=$OLDIFS; local keyboard=${keyboard/init, /}
        res=$(curl -s "$KMSG_URL" --header "content-type: multipart/form-data" -F "chat_id=$TARGET" -F "text=$text" -F "reply_markup={\"keyboard\": [$keyboard],\"one_time_keyboard\": false}")
    }
      Скрыть содержимое

    c87484e3e4258cd7b4bfe58d0f93b829.png


    Аргументы функции: первый - сообщение в чате, последующие - надписи на кнопках. При нажатии на кнопку соответствующая надпись может быть использована как команда. Поэтому кириллица в аргументах функции (кроме первого) нежелательна.
    Поле one_time_keyboard указывает клиенту скрыть или нет клавиатуру после использования (после нажатия на кнопку). Её по-прежнему можно будет открыть через иконку в поле ввода сообщения. По умолчаниюFalse
    Пример использования:

    
    
    send_keyboard "I can help you find and share classical music" "Get random music" "Send music to friends"


     

     

     

    Может поможете, как использовать Inline keyboard?

  6. Имеется Keenetic Giga III с KeenDNS с доступом извне по HTTPS xxx.mykeenetic.com, также имеется в локалке NAS Synology.

    Имеется ли возможность выделить доменное имя nas.xxx.mykeenetic.com для доступа к NAS по HTTPS?

  7. Пока сделал(подглядел) разделение лога на год\месяц\день. пример внизу. Завтра увижу, делит ли лог на день.

     

    Скрытый текст
    
    options { 
    	chain_hostnames(off); 
    	sync(0); 
    
    	# The default action of syslog-ng 1.6.0 is to log a STATS line
    	# to the file every 10 minutes.  That's pretty ugly after a while.
    	# Change it to every 12 hours so you get a nice daily update of
    	# how many messages syslog-ng missed (0).
    	stats(43200); 
    };
    
    
    source src { udp(ip(192.168.1.1) port(514)); };
    
    #destination messages { file("/opt/My_Files/log/messages.txt"); };
    
    destination messages { file("/opt/My_Files/log/$YEAR/$MONTH/$DAY/messages.txt" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes));};
    
    log { source(src); destination(messages); };

     

     

    • Thanks 1
×
×
  • Create New...