Jump to content

ankar84

Forum Members
  • Posts

    407
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by ankar84

  1. 5 минут назад, vasek00 сказал:

    Вопрос по времени запуска сразу плюсом раза в ДВА по отношению к обычному 2014

    Тогда, видимо, лучше оставить все как есть. А кто желает, пусть сжимает самостоятельно.

  2. 19 часов назад, vladrnd сказал:

    ну вот как-то он периодически отвечает не по мужски, через раз ... вторичный DNS ответил, первичный (dnsproxy2) проскочил запрос.

    Предлагаю ознакомиться с темой, возможно там есть ответ на ваш запрос:

    От себя добавлю (хотя это есть в моем первом посте) - рекомендую использовать dnscrypt-proxy2 как единственный DNS сервер на роутере и дать ему выбирать самый быстрый из серверов из предложенных ему вами. Именно так поступает, насколько я понял, @vasek00

     

     

  3. В итоге полное решение на данный момент это вынесение оповещательной части бота в отдельный сервис (демон). По аналогии создал /opt/bin/bashbotevent.sh:

    #!/opt/bin/bash
    
    tail -f -n 0 /opt/var/log/syslog.log | while read line ; do
    	if [[ $line =~ "ndm: Core::Scgi::Auth: authentication failed for user" ]] ; then /opt/bin/tg_say.sh "$line"; fi
    done

    В этот скрипт со временем будут добавлять реакции на нужные мне события.

    И создал новый /opt/etc/init.d/S52bashbotevent:

    #!/bin/sh
    
    ENABLED=yes
    PROCS=bashbotevent.sh
    ARGS=""
    PREARGS="screen -dmS bashbot.socket"
    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

    Оба сделал исполняемыми

    chmod +x /opt/bin/bashbotevent.sh
    
    chmod +x /opt/etc/init.d/S52bashbotevent

    И после 

     # /opt/etc/init.d/S52bashbotevent start
    

    Бот реагирует и на команды и присылает сообщения о не успешных попытках авторизации.

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

    Основное - хочется в моменте получать от бота сообщения, о том, что кто-то успешно или не успешно подключается на WebUI, по FTP или подключается к серверу VPN.

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

    Что уже сделал.

    # vi /opt/bin/tg_say.sh
    
    #  chmod +x /opt/bin/tg_say.sh

    tg_say.sh:

    #!/opt/bin/bash
    
    API_TOKEN='токен моего бота'
    CHAT_ID='айди моего с ботом чата'
    
    if [ -z "$CHAT_ID" ]; then
        echo 'Please, define CHAT_ID first! See "chat":{"id":xxxxxxx string below:'
        /opt/bin/wget -qO - https://api.telegram.org/bot$API_TOKEN/getUpdates
        exit 1
    fi
    
    MSG="<b>$(hostname)</b>: $@"
    
    /opt/bin/wget -q "https://api.telegram.org/bot$API_TOKEN/sendMessage?chat_id=$CHAT_ID&parse_mode=html&text=$MSG" 2>&1
    
    if [ $? -eq 0 ]; then
        echo 'Message sent successfully.'
    else
        echo 'Error while sending message!'
        exit 1
    fi

    Поправил /opt/etc/init.d/S51bashbot как тут рекомендовали с установкой screen через opkg install screen

    #!/bin/sh
    
    ENABLED=yes
    PROCS=bashbot.sh
    ARGS=""
    PREARGS="screen -dmS bashbot.socket"
    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

    И теперь пробую править bashbot.sh с помощью наработок и советов этой темы:

    #!/opt/bin/bash
    
    TOKEN='токен моего бота'
    NAMEA='мой логин в телеграм'
    URL='https://api.telegram.org/bot'$TOKEN
    MSG_URL=$URL'/sendMessage?chat_id='
    UPD_URL=$URL'/getUpdates?offset='
    KMSG_URL=$URL'/sendMessage'
    OFFSET=0
    TIMEOUT='&timeout=30'
    
    
    function send_message {
    	res=$(curl --insecure --data-urlencode "text=$2" "$MSG_URL$1&")
    }
    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\": true}")
    }
    
    while true; do {
    	res=$(curl --insecure $UPD_URL$OFFSET$TIMEOUT)
    
    	TARGET=$(echo $res | JSON.sh | egrep '\["result",0,"message","chat","id"\]' | cut -f 2)
    	OFFSET=$(echo $res | JSON.sh | egrep '\["result",0,"update_id"\]' | cut -f 2)
    	MESSAGE=$(echo $res | JSON.sh -s | egrep '\["result",0,"message","text"\]' | cut -f 2 | cut -d '"' -f 2)
    	USER=$(echo $res | JSON.sh | egrep '\["result",0,"message","from","username"\]' | cut -f 2 | cut -d '"' -f 2)
    
    	[ -z "$MESSAGE" ] || echo "[$(date +%Y.%m.%d_%H:%M:%S)][$USER] $MESSAGE" >> /opt/var/log/bashbot.log
    	OFFSET=$((OFFSET+1))
    	tail -f с | \
    	while read line ; do
    		if [[ $line =~ "ndm: Core::Scgi::Auth: authentication failed for user" ]] ; then /opt/bin/tg_say.sh "$line"; fi
    	done
    	if [ $OFFSET != 1 ]; then
    		case $MESSAGE in
    			'/help') send_keyboard "Bot knows commands:" "/help" "/top" "/meminfo" "/cpuinfo" "/uname" "/log";;
    			'/start') msg="Just few commands are implemented. Blame @ryzhov_al if something goes wrong.";;
    			'/top') msg="$(top -n1 | head -n3)";;
    			'/meminfo') msg="$(cat /proc/meminfo)";;
    			'/cpuinfo') msg="$(cat /proc/cpuinfo)";;
    			'/uname') msg="$(uname -a)";;
    			'/log') msg="$(cat /opt/var/log/bashbot.log)";;
    			*) msg=$(ndmq -p "$MESSAGE" -x);;
    
    		esac
    		[ $USER = $NAMEA ] || send_message "$TARGET" "Sorry. Private bot"
    		[ $USER = $NAMEA ] && send_message "$TARGET" "$msg"
    	fi
    
    } &>/dev/null; done

    Но в таком виде сообщения о не успешной авторизиции приходят, но бот не реагирует на посылаемые ему команды.

    Я не очень понимаю, где мне брать журнал "реального времени".

    То есть для сбора логов у меня в Entware установлен syslog-ng, который собирает все логи и пишет их в файл (/opt/var/log/syslog.log) но в этом случае получается, что стоит мне перезапустить бота и он тут же высыпет мне россыпь сообщений о неудачной авторизации в WebUI (мои предыдущие тесты). А мне хочется, что бы бот начал смотреть "живой" лог роутера и парсил его на лету.

    Файлов в /var/log/ у меня нет.

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

     

    UPD: Кажется первая проблема решена с помощью параметра -n 0 команды tail. Теперь бот реагирует только на актуальные события, которые произошли после его запуска, а не на все, что нашел в логе. То есть часть парсера логов теперь выглядит вот так:

    	tail -f -n 0 /opt/var/log/syslog.log | while read line ; do
    		if [[ $line =~ "ndm: Core::Scgi::Auth: authentication failed for user" ]] ; then /opt/bin/tg_say.sh "$line"; fi
    	done

     

    • Upvote 1
  5. 22 минуты назад, vasek00 сказал:

    или еще проще по монитору WEB
    Память 35% (45/128 Мб)

    С моим листом в около 2 Мб потребление RAM побольше. На текущий момент смотрю - 35% (90/256 Мб)

    25 минут назад, vasek00 сказал:

    и жертвуем быстродействием в другом, где запросов по DNS со страниц при просмотрах достаточно

    Все верно, именно поэтому и увеличил размер кэша.

    Домашние в основном в инстаграмчиках сидят и прочих тайм-киллерах, так что их адреса один раз полученные с задержкой в 100 мс из кэша не исчезают (я надеюсь).

    27 минут назад, vasek00 сказал:

    Чем же он так популярен, говорят по скорости но никто из пользователей не подтвердил реальность его быстродействия проверив его например через DNSBench (предварительно прописав два адреса CloudFlarе серверов)

    Лично я не писал, что он самый быстрый. А то, что он последние пару месяцев популярный, имхо, с этим сложно спорить. Проект только запустили, об этом трубили многие профильные и не очень издания, красивый адрес опять же.

    Но тут суть вообще в том, что fallback_resolver используется при очень определенных условиях и не слишком часто, а именно только для разрешения адреса со списком dnscrypt серверов в случае, если системный резолвер не доступен или отключен. Так что можно оставить сервер Quad9 DNS.

    • Upvote 1
  6. Прошу прощения, но скорее всего второй селф получился не по проблеме, а из-за моих экспериментов по оптимизации переадресации портов и правил межсетевого экрана.

    Когда поднял на роутеле L2TP\IPSec сервер, то сделал и проброс 500UDP+4500UDP и их же разрешил в межсетевом экране. А потом выяснилось, что эти правила и пробросы автоматически создаются при включении компонента L2TP\IPSec сервер.

    Поэтому я удалил в итоге все свои правила в межсетевом экране (а их было около 10). 4 правила помогли мне удалить на канале в телеграме. Эти правила были для Андроид устройств в сети и то, что они все запросы дублировали на 8.8.8.8. В итоге в OPKG сделал правило перенапраления всех запросов на 53 порт на DNS сервер роутера, коим у меня служит dnscrypt-proxy2.

    Так вот. Осталось 2 правила проброса - для FTP и HTTPS, которые я вчера и отключил (через WEB по HTTPS) и благополучно забыл про это. А сегодня проверил удаленно FTP - не работает, включил оба правила - заработал FTP и доступ по HTTPS на внешний адрес по KeenDNS имени.

    Так что селф тест в проблемном состоянии все еще собираю.

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

    • Thanks 1
  7. В следующем посте будет селф в моменте с недоступным по внешнему адресу вебом. 

    Есть мысль, что проблема случается при закачке трансмишеном. Пока не качаешь, работает стабильно. Сегодня поставил один файл на закачку, словил проблему. Хотя может просто совпало.

    • Thanks 1
  8. 20 часов назад, KorDen сказал:

    Эти 33% из-за того что вы в этот момент смотрите на главную страницу, на которой рисуются графики и проч

    У меня на главной плавает 0-4% при отсутствии нагрузки со стороны клиентов.

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

  10. 41 минуту назад, AndreyUA сказал:

    у меня тоже на ultra почему-то не доступен веб интерфейс извне. На omni нет такой проблемы.

    Да, у меня тоже Ультра. Притом перезагрузишься, работает какое-то время и потом перестаёт отвечать. Может утекает что-то.

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

    А включить и выключить режим отладки пробовали?

    Да, включил, попробовал зайти на внешнее имя, отключил. Роутер начал генерировать файл, потом эта ошибка.

    В логах вижу вот такое:

    Цитата

    [W] May 12 17:21:42 ndm: Core::Watchdog: Event sender holds SSL_SERVER (12) lock 660 seconds acquired May 12 17:10:42.
    [W] May 12 17:21:42 ndm: Main: "Event sender": backtrace:
    [W] May 12 17:21:42 ndm: Main: "Event sender":   <unknown>+0x0
    [W] May 12 17:21:42 ndm: Main: "Event sender":   <unknown>+0x0
    [W] May 12 17:21:42 ndm: Main: "Event sender":   (anonymous namespace)::Join_(Control_*)()+0x54
    [W] May 12 17:21:42 ndm: Main: "Event sender":   Thread::Stop()()+0x234
    [W] May 12 17:21:42 ndm: Main: "Event sender":   Http::SslServer::SslService_::~SslService_()()+0xac
    [W] May 12 17:21:42 ndm: Main: "Event sender":   Http::SslServer::SslService_::~SslService_()()+0x34
    [W] May 12 17:21:42 ndm: Main: "Event sender":   AutoPtr<Http::SslServer::SslService_>::Reset(Http::SslServer::SslService_*)()+0x38
    [W] May 12 17:21:42 ndm: Main: "Event sender":   Http::SslServer::RestartServer_()()+0x68
    [W] May 12 17:21:42 ndm: Main: "Event sender":   Http::SslServer::OnDbKey_(Event::DbKey const&)()+0x90
    [W] May 12 17:21:42 ndm: Main: "Event sender":   Event::Sender::Run()()+0x640
    [W] May 12 17:21:42 ndm: Main: "Event sender":   Thread::StartRoutine_(void*)()+0x1ac
    [W] May 12 17:21:42 ndm: Main: "Event sender":   <unknown>+0x0

     

    • Thanks 1
  12. Доброго дня!

    Время от времени возникает ситуация, что не доступна новый веб интерфейс (а учитывая историю изменения 2.12А.0.6 единственный веб интерфейс) по адресу https://myname.keenetic.pro

    myname взято для примера, реально используется другое имя.

    Притом в момент проблемы все перечисленное верно:

    1. Телнет на 443 по внешнему адресу, да и по имени KeenDNS проходит успешно.

    2. KeenDNS настроен в прямом режиме на белый IP

    3. Проброс к другим веб приложениям сети через KeenDNS в момент проблемы работает нормально. (например тот же transmission на роутере открывается по имени transmission.myname.keenetic.pro) 

    4. По внутреннему имени веб интерфейс работает нормально.

    image.png.74a4a336aa73a14a795e64740c4684f4.png

    В рабочем режиме (когда работает) доступ из интернета к 80 порту нет (галка не стоит) но по https вхожу без проблем.

    Версия 2.12.A.6.0-0

    Что смотреть? Что проверять? Какую службу перезапустить?

    Перезагрузка роутера помогает.

    Селфтест прикладываю к следующему посту.

    Хотя отбой, не могу приложить селфтест, так как страница общих настроек /controlPanel/system не загружается.

    • Thanks 1
  13. А вот нашел и баг в старом интерфейсе. У меня настроен IPSec VPN, который я использую ежедневно со своего смартфона на Android. А вот в веб интерфейсе настроенного подключения не видно. И в новом опять таки этих настроек я не нашел.

    UPD Нашел эту настройку на последней вкладке приложений.

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

    image.png.b4af49ab3028ddedc8cc38816f7a9c5c.png

     

  14. Доброго дня!

    Не могу найти в новом web интерфейсе список доступа для обоих WiFi точек (2.4 и 5 ГГц).

    Мне данный функционал мне необходим, так как из-за особенностей моего ТВ от LG 2014 года пришлось убрать пароль с точки доступа 5 ГГц и чтобы хоть как-то ограничивать доступ сделал эту точку скрытой (SSID) и включил белый список устройств, которые могут к ней подключаться.

    Так же не вижу настройки гостевой сети, которую так же использую.

    Пока нашел только данный функционал, который не был перенесен в новый веб интерфейс, буду еще искать.

     

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

    image.png.b215936f12fb4f5b5e8559cbfb9aebff.png

    image.png.8b3c3caa653fa0108a73c509bc6467a3.png

     

     

     

  15. @vasek00 пробовали установить как сервис? То есть запустить с опцией -service install

    У меня не вышло, похоже там все на чистый linux зашито, а не наш Entware.

    @Александр Рыжов альтернатива это безусловно хорошо, но могут ли альтернативные варианты кроме защиты от спуфинга и перехвата dns запросов предложить и блокировку не нужного контента, читай рекламы? Для меня критично.

    Плюсом на OpenNIC резолверах получаем разрешение домена .lib чем я активно пользуюсь.

  16. Попробовал запустить dnscrypt-proxy 2.0.0beta12 так как автор собрал ее для Linux/mipsle.

    При запуске проверяет все адреса по отклику и выбирает самый быстрый на момент проверки.

    Процессор почти не потребляет, а вот оперативной памяти при моем файле dnscrypt-blacklist-domains.txt в 1.3Мб занимает около 40Мб. Мне на моей Ultra это не очень страшно, а вот девайсам с меньшим количеством оперативной памяти будет конечно сложнее, да и как высказались здесь гуру - не целесообразно.

  17. 4 часа назад, Александр Рыжов сказал:
    1. Создать симлинк /opt/sbin/dnscrypt-proxy2, ссылающийся на /opt/sbin/dnscrypt-proxy,
    2. Скопировать /opt/etc/init.d/S09dnscryptproxy в /opt/etc/init.d/S09dnscryptproxy2,
    3. Поправить параметры в новом S09dnscryptproxy2 для запуска dnscrypt-proxy2 с собственными параметрами.

     

    Спасибо, получилось!

    А при обновлении dnscrypt-proxy данный метод не поломается? 

    Хотя 1.9.5 видимо последняя версия.

     

    И еще, у кого поломался резолвер fvz, можно его запустить вот так:

    dnscrypt-proxy --local-address=127.0.0.1:65053 --provider-name=2.dnscrypt-cert.dnsrec.meo.ws --provider-key=1A6A:D0A3:2B4C:5A61:A695:D153:670D:69AB:1690:3F9E:C3F7:F64F:13E5:35A3:18B2:28A5 --resolver-address=185.121.177.177:5353 -l /opt/var/log/dnscrypt-proxy-fvz-one-65053.log -m 7"

    Причина поломки - в файле dnscrypt-resolvers.csv этот резолвер указан без порта, то есть с дефолтовым 443, а сейчас там все работает на 5353

  18. В 20.01.2018 в 23:43, vasek00 сказал:

    Данное поведение было замечено еще до нового года месяца за 1-2месяца

    зачем менять что-то, все работает :

    1. подобрать по ping из текущих то что вам подходят по провайдеру

    2. включить лог на несколько дней не чего не случится

    3. в связке с dnsmasq вообще проблем не вижу

    
    dnsmasq.conf
    server=127.0.0.2#65053
    server=127.0.0.2#65153
    all-servers
    
    и два 
    
    dnscrypt-proxy --local-address=127.0.0.2:65053 --daemonize –edns-payload-size=1252 -R ххххх-ru -l /opt/tmp/dnscrypt-proxy.65053.log -m 7
    dnscrypt-proxy --local-address=127.0.0.2:65153 --daemonize –edns-payload-size=1252 -R ххххх-dns -l /opt/tmp/dnscrypt-proxy.65153.log -m 7
    
    уйдут два запроса, какой вернется первый тот и с работает.
    А если посмотреть логи то шансов в одно и то же время получить что-то типа отладки по "[DEBUG] resolver timeout (UDP)" минимальны.
    Хочеться полный анализ то в dnsmasq.conf
    log-queries
    log-facility=/opt/var/log/dnsmasq.log
    log-async=25

     

    Из-за того, что время от времени резолверы не отвечают (как сегодня очень близкий для меня по отклику и по возможностям opennic-famicoman) решил применить ваш метод с резолвом нескольких серверов одновременно посредством dnsmasq.

    В init.d создал копию запускного скрипта, только на другом порту разумеется. Запустил первый - все отлично. Пробую стартовать второй - пишет, что уже запущен. 

    Через команду запустился без проблем.

    # dnscrypt-proxy --local-address=127.0.0.1:65153 --daemon
    ze -R opennic-famicoman

    Отсюда вопрос: есть ли возможность запускать два экземпляра dnscrypt-proxy стандартным методом через 2 скрипта типа S09dnscrypt-proxy в init.d?

    Или как автоматически при перезагрузке сервера запускать два экземпляра dnscrypto-proxy?

×
×
  • Create New...