Задать вопрос
  • Как организовать запись входящих/исходящих звонков определенных абонентов?

    @dronmaxman
    VoIP Administrator
    Мой пример.

    [internal]
     same => _XXX.,Dial(SIP/${EXTEN},60,WwtTrU(sub-mixmonitor,${CALLERID(num)},${EXTEN},${UNIQUEID}))
     same => n,HangUp() 
    
    [sub-mixmonitor]
    exten => s,1,Noop(------------MixMonitor---------------)
    ; same => n,DumpChan()
    ; same => n,NoCDR()
     same => n,Noop(DIALEDPEERNUMBER ${DIALEDPEERNUMBER} )
     same => n,Set(FILE_UNIQUEID=${ARG3})
     same => n,Noop(UNIQUEID = ${FILE_UNIQUEID})
     same => n,GotoIf($[${DB_EXISTS(RECORD/${ARG1})}]?go-record)
     same => n,GotoIf($[${DB_EXISTS(RECORD/${ARG2})}]?go-record)
     same => n,Goto(end_sub)
     same => n(go-record),Set(WAV=/var/spool/asterisk/monitor/${FILE_UNIQUEID})
     same => n,Set(filedate=${STRFTIME(${EPOCH},,%Y%m%d_%H-%M-%S)})
     same => n,Set(foldername=${STRFTIME(${EPOCH},,%Y/%m)})
     same => n,Set(filename=${filedate}_${ARG1:-10}_${ARG2:-10}_${FILE_UNIQUEID})
     same => n,Set(MP3=/var/spool/asterisk/monitor/mp3/${foldername}/${filename})
     same => n,System(mkdir -p /var/spool/asterisk/monitor/mp3/${foldername})
     same => n,Set(monopt=nice -n 19 /usr/bin/lame -b 32  --silent "${WAV}.wav"  "${MP3}.mp3" && rm -rf "${WAV}.wav" && chmod o+r "${MP3}.mp3")
     same => n,Noop(${CDR(record)})
     same => n,Noop(CHANNEL ${CHANNEL(exten)})
     same => n,Set(CDR(realdst)=${ARG2});
     same => n,Set(CDR(record)=${FILE_UNIQUEID})
     same => n,Set(CDR(recordingfile)=${filename}.mp3)
     same => n,MixMonitor(${WAV}.wav,b,${monopt})
     same => n(end_sub),return
    Ответ написан
    Комментировать
  • Как удалить данные о профиле при сетевом подключении?

    @dronmaxman
    VoIP Administrator
    cmd

    net use \\192.168.1.105\Learn /delete

    klist purge
    Ответ написан
    Комментировать
  • Как запретить скачивание/запуск исполняемых файлов и все сайты с онлайн играми?

    @dronmaxman
    VoIP Administrator
    Настраиваеш групповую политику, четко определяеш список Exe которые можно запускать, все остальное в лес.

    По доступу, блокировка через DNS оптимальный выбор. Можно поставить какой нибудь PiHole или AdGuard DNS и через них банить все запросы на левые сайты.

    Остает еще дыра с DOH для самых продвинутых, но адреса DOH известны и их можно заблокировать на Firewall.
    Ответ написан
    3 комментария
  • Можно ли настроить NAT в пределах одной сети?

    @dronmaxman
    VoIP Administrator
    /ip firewall mangle
    add chain=prerouting comment="NAT Loopback detect" dst-address=192.168.0.1 dst-port=3389 protocol=tcp in-interface-list=LAN connection-state=new action=mark-packet new-packet-mark=nat-loopback passthrough=yes
    
    /ip firewall nat
    add chain=srcnat packet-mark=nat-loopback action=masquerade comment="NAT Loopback replace address" 
    
    /ip firewall nat
    add chain=dstnat dst-address=192.168.0.1 protocol=tcp dst-port=3389 action=dst-nat to-addresses=192.168.0.10 to-port=3389
    Ответ написан
    1 комментарий
  • Почему не срабатывает route?

    @dronmaxman
    VoIP Administrator
    Потому что интерфейс пропадает, винде это не нравиться)
    Лучше сделать батник, который будет запускать VPN и прописывать маршрут каждый раз.
    Ответ написан
    1 комментарий
  • Астериск, как звонить с нужного транка?

    @dronmaxman
    VoIP Administrator
    exten => _0[1-3]XXX,1,Noop(---- call to AST A1 ----)
     same => n,Set(CALLEID(num)=02${CALLRID(num)}) ;; Подменяем номер звонящего, что бы работал обратный звонок
     same => n,Dial(SIP/trunkA1/${EXTEN:3},15,Tt)
     same => n,HangUp() ;; Обрываем звонок по окончании или если произошла ошибка что бы не звонить в пожарную службу
    Ответ написан
    4 комментария
  • Как сделать домен с SSL вместо IP для WG-Easy (реп. DigneZzZ/dwg)?

    @dronmaxman
    VoIP Administrator
    Не забудь поменять MYEMAIL@gmail.com на свой.
    version: "3"
    services:
      traefik:
        image: "traefik:v2.10"
        container_name: "traefik"
        command:
          #- "--log.level=DEBUG"
          - "--api.insecure=true"
          - "--providers.docker=true"
          - "--providers.docker.exposedbydefault=false"
          - "--entrypoints.web.address=:80"
          - "--entrypoints.websecure.address=:443"
          - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
          - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
          #- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
          - "--certificatesresolvers.myresolver.acme.email=MYEMAIL@gmail.com"
          - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
        ports:
          - "80:80"
          - "443:443"
    #      - "8080:8080"
        volumes:
          - "./letsencrypt:/letsencrypt"
          - "/var/run/docker.sock:/var/run/docker.sock:ro"
        networks:
          private_network:
            ipv4_address: 10.2.0.120
    
      unbound:
        image: "mvance/unbound:1.17.0"
        container_name: unbound
        restart: unless-stopped
        hostname: "unbound"
        volumes:
          - "./unbound:/opt/unbound/etc/unbound/"
        networks:
          private_network:
            ipv4_address: 10.2.0.200
    
      wg-easy:
        depends_on: [unbound, adguardhome]
        environment:
          - WG_HOST=MYHOST_IP
          - PASSWORD=openode
          - WG_PORT=51820
          - WG_DEFAULT_ADDRESS=10.10.10.x
          - WG_DEFAULT_DNS=10.2.0.100
          - WG_ALLOWED_IPS=10.2.0.0/24, 0.0.0.0/0, ::/0
          - WG_PERSISTENT_KEEPALIVE=25
          - WG_MTU=1280
        #image: ditek/wg-easy
        image: weejewel/wg-easy
        container_name: wg-easy
        volumes:
          - .:/etc/wireguard
        ports:
          - "51820:51820/udp"
    #      - "51821:51821/tcp"
        restart: unless-stopped
        cap_add:
          - NET_ADMIN
          - SYS_MODULE
        sysctls:
          - net.ipv4.ip_forward=1
          - net.ipv4.conf.all.src_valid_mark=1
        dns:
          - 10.2.0.100
          - 10.2.0.200
        networks:
          private_network:
            ipv4_address: 10.2.0.3
        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.vpn.rule=Host(`vpn.site.com`)"
          - "traefik.http.routers.vpn.entrypoints=websecure"
          - 'traefik.http.routers.vpn.tls=true'
          - "traefik.http.routers.vpn.tls.certresolver=myresolver"
          - "traefik.http.services.vpn.loadbalancer.server.port=51821"
    
      adguardhome:
        depends_on: [unbound]
        image: adguard/adguardhome
        container_name: adguardhome
        restart: unless-stopped
        environment:
          - TZ=America/Los_Angeles
        volumes:
          - ./work:/opt/adguardhome/work
          - ./conf:/opt/adguardhome/conf
        networks:
          private_network:
            ipv4_address: 10.2.0.100
    
    networks:
      private_network:
        ipam:
          driver: default
          config:
            - subnet: 10.2.0.0/24
    Ответ написан
  • Удалил launchpad (каталог приложений на мак )из док, как вернуть?

    @dronmaxman
    VoIP Administrator
    Ответ написан
    Комментировать
  • Что потенциально Windows может знать о том что происиходит в Linux, установленные на один жесткий диск?

    @dronmaxman
    VoIP Administrator
    нет, поумолчанию windows даже не умеет работать с файловой системой linux, а следовательно для него это выглядит как дисковый раздел в неизвестном формате. Какой там может быть сбор данных если она даже прочитать это не может)
    Ответ написан
    6 комментариев
  • Как в телеботе получить от пользователя фотографию и сохранить в переменную?

    @dronmaxman
    VoIP Administrator
    import telebot
    import pandas as pd
    
    TOKEN = '972378863:AAEq29oLt61234sdfsdf3pQ1tXRpzmM'
    bot = telebot.TeleBot(TOKEN)
    
    
    @bot.message_handler(content_types=['photo'])
    def handle_photo(message):
        file_id = message.photo[-1].file_id
        
        for chat_id in chats_ids:
            bot.send_photo(chat_id, file_id)
    
    @bot.message_handler(content_types=['document'])
    def handle_document(message):
        file_id = message.document.file_id
        
        for chat_id in chats_ids:
             bot.send_document(chat_id, file_id)
    
    
    file_data = pd.read_excel('./tgid.xlsx')
    
    # Читаем id из колонки chat_id
    chats_ids = file_data['chat_id'].tolist()
    
    bot.polling()
    Ответ написан
  • Как изменить маштаб видео?

    @dronmaxman Автор вопроса
    VoIP Administrator
    Расширение которое решилу мою задачу.

    https://chromewebstore.google.com/detail/zoom-to-f...

    Так же браузер EDGE на macOS можно маштабировать видео через Command+UP
    Ответ написан
    Комментировать
  • Докер и прочие контейнеризаторы - для доставки контента или также для разработки?

    @dronmaxman
    VoIP Administrator
    >Или все же это инструмент в первую очередь для доставки контента?
    Докер упрощает процесс доставки контента, но это не едиственный его плюс. Он позволяет быстро создать,воссоздать,повторить аналогичное окружение и зависимости которые необходимы твоему приложению в любом (почти) месте где есть поддержка docker.

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

    > Как с этим дела в реальной жизни, на реальном среднестатистическом проекте?
    Повсеместно испольуется. Следующий шаг развития докер это k8s, а это mainstream. Если ты умееш работать с докером, то освоить k8s уже намного проще.

    Если сильно упростить то контейнер докер это виртуальная машина на linux внутри которой крутиться одно приложение. В идеологии докера каждое приложение должно быть в отдельном контейнере - mysql,redis,php.

    Докер позволяет обойти проблему зависимостей.

    Помню когда первый раз столкнулся с docker, это была система анализа логов от ruckus. По своей структуре это был centos на котором было запущено 8-9 контейнеров docker. Таким подходом ruckus как минимум решил для себя проблему установки обновлений, тебе не надо ставить обновления на саму ОС, тебе достаточно обновить контейнер. Если контейнер не запустился, то просто откати его. Все библиотеки и зависимости внутри контейнеров. Это настолько упростило процесс разработки и доставки обновлений, что сложно и представить.
    Ответ написан
    Комментировать
  • Можно ли купить операционную систему macOS?

    @dronmaxman
    VoIP Administrator
    может купит операционную систему macOS легально как нибудь?

    Она продается вместе с оборудованием, легально можно установить только на технику apple.

    а к их операционной системе я привык.

    Поставь linux и настрой окружение что бы было похоже на macOS или хакинтош.
    Ответ написан
    Комментировать
  • Ошибка при использовании grep на сервере?

    @dronmaxman
    VoIP Administrator
    grep -I -n -H 
    
    
    -I -- process a binary file as if it did not contain matching data; 
    -n -- prefix each line of output with the 1-based line number within its input file
    -H -- print the file name for each match
    
    grep -RInH "Pomeo" /*
    Ответ написан
    Комментировать
  • Если IP сервера в спамбане влияет ли это на домен?

    @dronmaxman
    VoIP Administrator
    что IP сервера не загрязняет домен,

    В спам лист может попасть как адрес там и домен, особенно если они на одном IP адресе. Но в твоем случае это влияет только на отправку почты. Некоторые блокировщики не различают причину попадания IP адреса в BAN список, если адрес в списке значит на всякий случай мы ему все закроем).

    Ты конечно в спам списке, но это не повод откидывать твои письма, такие крупные агрегаторы как mail.ru или gmail.com обычно пропускаю такие письма но помечаю как спам.

    По хорошему пройди тест и настрой почту согласно рекомендаций.
    https://www.mail-tester.com/
    Ответ написан
    Комментировать
  • Как различить двух операторов на одном телефоне?

    @dronmaxman
    VoIP Administrator
    Необходимо их различать.

    Что бы различать в cdr, можно задействовать доп поле userfield

    1500 - допустим внутренний номер оператора
    *220 - номер по которому операторы меняют свое имя каждое утро, можно добавить проверку что бы они не забывали это делать.
    
    [app-register-operator]
    exten => _*220,1,Answer
     same => n,Noop(-------app-register-operator----)
     same => n,Set(MYPIN=NOPIN)
     same => n,Read(${MYPIN},enterPin,,,4,15)
     same => n,Goto(go-${MYPIN})
     same => n(go-2232,Noop(------register-ping-${MYPIN}------)
     same => n,Set(DB(AOPERATOR/1500)="Operator1")
     same => n,HangUP()
     same => n(go-3321),Noop(------register-ping-${MYPIN}------)
     same => n,Set(DB(AOPERATOR/1500)="Operator2")
     same => n,HangUP()
     same => n(go-NOPIN),Noop(------register-ping-${MYPIN}------)
     same => n,Set(DB(AOPERATOR/1500)="NotSet")
     same => n,HangUP()
    
    
    [dial]
    exten => _X.,1,Noop(----Internal-Call----)
     same => n,GotoIf($[${DB(AOPERATOR/${CALLERID(num)})}= NotSet]?:go-notset)
     same => n,Set(CDR(userfield)=${DB(AOPERATOR/${CALLERID(num)})}) ;; добавляем в CDR имя в специальное поле в DB cdr, или любое другое поле
     same => n,Dial(SIP/${EXTEN})
     same => n,HangUp()
     same => n(go-notset),PlayBack(phoneNotRegister_PleaseRegisterBeforeCall)
      same => n,HangUp()
    
    Добавить задание в крон которое будет скидывать значение после работы
    asterisk -rx "database put AOPERATOR 1500 NotSet"


    Через SIP можно заставить телефон перезагрузиться, соответственно написать app который будет по короткому номеру генерить новый конфиг для телефона и отправлять ему команду reboot.
    /etc/asterisk/sip_notify.conf
    Ответ написан
    Комментировать
  • Как скрыть в Winbox Neighbors для всех, кроме management интерфейса?

    @dronmaxman
    VoIP Administrator
    ip neighbor
    Нажимаем Discovery Setting и настраиваем на свой вкус.
    Ответ написан
    5 комментариев
  • Облачный AD, почта и удаленный филиал, какая архитектура дешевле?

    @dronmaxman
    VoIP Administrator
    свой exchange или подписка

    Ты просто не осознаеш какой это геморой обслуживать собственный сервер (корректно настроить все записи MX+DKIM+SPF, постоянно проверять что провайдер не банит адрес твоего сервера, что твой адрес не попал в спам лист, куча жалом на спам, у одного не приходят письма, у второго не отправляются, у третьего все в спам попадает, аааа...). Пока компания согласна на подписку и облако, то не стоит использовать свои почтовые сервера. Exchange больше не будет, майки полностью уходят в облако.

    azure ad как услуга

    Конечно azure и не надо никаких VPN.
    Ответ написан
    2 комментария
  • Как на c# организовать обмен сообщениями между сервером и клиентом, если нет белого айпи?

    @dronmaxman
    VoIP Administrator
    сервер в интернете нужен лишь чтобы себе компанию найти, а дальше хостем выступает один игрок.

    Не всегда, если клиенты не могут соединиться напрямую, то соединение идет через промежуточные сервера. Думаю что поможет понимание в работе upnp, STUN, TURN.
    Как пробивать НАТ?
    Ответ написан
    Комментировать