Позднее Ctrl + ↑

Новое транспортное приложение

Увидел, что стали появляться наклейки с QR-кодами в транспорте для оплаты проезда. Видимо, приложение вышло из стадии тестирования и вошло в стадию эксплуатации. Что ж, посмотрим, что там наваяли... Никаких особых ожиданий от приложения не было. Несколько напрягало то, что сменился разработчик — это обычно влечет за собой полную переработку программы. Зачастую не в лучшую сторону.
Читая условия и правила использования, стал напрягаться еще больше. Программа выполнена в формате PWA (progressive web app), т. е. без интернета проезд уже не оплатить. Ладно, это понятно, норм. После удаления браузера из системы или очистки его данных (бывает нужно на некоторых сайтах), данные приложения тоже будут удалены. Уже неприятно. Вход осуществляется на выбор из трех вариантов: Яндекс, Google и VK. Уже неплохо, в старом приложении вариантов не было — только Google. Карта привязывается просто, но не совсем понятно где хранятся данные о ней, это неприятно. Написано, что хранение производится на серверах Сбера, но звучит как-то неубедительно что ли. А вот дальше началось полное безобразие.
Внешний вид очень аскетичен, на мой взгляд. Очень.

Ну ок, возможно, просто непривычно. А дальше нормально будет. Идем дальше:

Меню достаточно большое. А если бы у меня экран был поменьше, что тогда? И я почти получил ответ на этот вопрос, но чуть позже.

Настроек немного. Да, в принципе, что настраивать-то? Камерой я обычно не пользуюсь, предпочитаю ручной ввод, поэтому отключаю. Остальные пункты не совсем понятны, оставляю как есть. Попробуем оплатить проезд, нажав соответствующую кнопку:

Оп-па. Клавиатура полностью закрывает поле ввода кода. Я даже не знаю что я ввожу. Явная недоработка! Кажется, я догадываюсь, как отображалось бы меню при меньших размерах экрана смартфона. Ладно, в настройках что-то было про подсказки, попробую отключить:

Так намного лучше. А что делает настройка «Инструкция»? Просто убирает одноименный пункт главного меню. Хм, забавно. Сильно подозреваю, что «Отслеживание транспорта» делает то же самое. Этот пункт меню, кстати, просто перебрасывает на сайт, где можно посмотреть где какой автобус/трамвай/троллейбус сейчас находится. Им я пользуюсь уже давно, для меня там ничего нового нет.
По итогу. Предыдущее приложение мне нравилось намного больше по сравнению с этим:

  1. Мне не нравится формат приложения.
  2. Мне не нравится сайт, на котором нужно привязывать свою карту для оплаты.
  3. Мне не нравится внешний вид и то, что он явно «заточен» под большие экраны.
    Проезд оплачивать пока не пробовал и я не вижу никого, кто бы пользовался этим приложением. Наводит на некоторые размышления. Наверное, я пока что подожду немного с его использованием и отвяжу на всякий случай банковскую карту.
    На других маршрутах, кстати, тоже появились QR-коды, но от старых разработчиков. Судя по данным на них, проезд можно оплатить через СБПей или бота в Telegram. С учетом того, что кондукторы отказывались принимать оплату через бота, с этими наклейками тоже лучше подождать. А представляя себе работу чиновников, «нормальной» оплаты проезда, кроме наличных или банковской карты (еще транспортная есть, забыл), в ближайшее время ждать не стоит. Впрочем, думаю, что скоро СМИ отрапортуют, что всё готово, всё прекрасно работает и умолчат о том, что этим приложением никто (или почти никто) не пользуется. Опрос что ли провести? :-)

Проброс портов в OpenWrt

Мне никогда не нравилось, что в интерфейсе OpenWrt нельзя указать несколько портов при пробросе, можно указать только диапазон. А если мне нужно несколько, объединенных одним сервисом? Например, почта. Если указывать все порты, то получается, что на каждый из них нужно создавать свое правило. В итоге получается такая простыня правил, что ориентироваться в ней становится затруднительно.
По сути, эта заметка — напоминание себе как нужно правильно прокинуть порты во внутреннюю сеть, используя iptables. И, заодно, там же сделаем так, чтобы из локальной сети можно было обращаться к своим серверам по доменному имени.
Идем в раздел Network — Firewall и открываем вкладку Custom rules. Добавляем туда строку такого вида:

iptables -t nat -A zone_wan_prerouting -p tcp -m multiport --dports 25,110,143,465,587,993,995,4190 -j DNAT --to-destination 192.168.1.100

Здесь мы помещает в цепочку zone_wan_prerouting таблицы nat правило, указывающее, что сервисы, обращающиеся из внешней сети на перечисленные порты, должны перенаправляться на сервер с адресом 192.168.1.100. Параметр -р указывает протокол tcp, а параметр -m multiports позволяет указать не один порт, а несколько. Это правило позволит открыть порты для доступна извне, но при обращении к ним из локальной сети придется указывать «прямой» адрес 192.168.1.100. Если вписать свой внешний адрес (IP или DNS), то ничего не выйдет. Чтобы это стало возможным, нужно дописать еще две строки:

iptables -t nat -A zone_lan_prerouting -d 95.170.188.45 -p tcp -m multiport --dports 25,110,143,465,587,993,995,4190 -j DNAT --to-destination 192.168.1.100
iptables -t nat -A zone_lan_postrouting -d 192.168.1.100 -p tcp -m multiport --dports 25,110,143,465,587,993,995,4190 -j MASQUERADE

В первой строке мы говорим, что все обращения к внешнему адресу на указанные порты должны перенаправляться на локальный адрес 192.168.1.100. Во второй строке мы, если так можно выразиться, прячем, что обращаемся из локальной сети.
После нажатия кнопки Save содержимое поля Custom Rules будет сохранено на роутере в файле /etc/firewall.user. Для применения эти необходимо перезапустить файрволл:

/etc/init.d/firewall restart

После этого почта станет доступной из внешней сети и из локальной, причем по доменному имени или внешнему IP-адресу.

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

iptables -t nat -A zone_lan_postrouting -s 192.168.1.0/24 -d 192.168.1.100 -p tcp -m multiport --dports 25,110,143,465,587,993,995,4190 -j MASQUERADE

В этом случае внешние адреса останутся «настоящими», а все запросы из локальной сети будут отображаться как 192.168.1.1. На мой взгляд, это приемлемо.

Удаленный доступ через Rustdesk

Так уж получилось, что эту программу я открыл для себя недавно и то случайно. Rustdesk предоставляет возможность удаленного доступа к любому компьютеру на базе Linux, Windows, MacOS, а также смартфонах под управлением Android или iOS. В общем, программа всеядная, так сказать. Управлять компьютером или смартфоном можно в обоих направлениях — со смартфона компьютером или с компьютера смартфоном. Программа имеет децентрализованный сервер, т. е. вы можете установить его на свой сервер или даже NAS и подключаться через него. Это, на мой взгляд, большой плюс. Да и я, грешен, предпочитаю self-hosted решения.
Какие «плюсы» есть еще? Программа имеет открытый код и абсолютно бесплатна. Подключение осуществляется по так называемым ID (аналогично таким программам как TeamViewer, Anydesk и т. п.), то есть может работать за NAT. Меня лично особо порадовала возможность обмениваться файлами между Linux и Windows системами — этого мне сильно не хватало. Следующим «плюсом», на мой взгляд, является достаточно быстрая работа на медленных линиях. Перепробовав несколько программ удаленного доступа, выделил для себя лидеров по скорости: TightVNC и Anydesk.
До этого момента я предпочитал использовать VNC. Но тут была пара «минусов»: приходилось пробрасывать порты на шлюзах, что, при большом количестве компьютеров, превращало таблицы iptables в большую портянку. Вторым «минусом» была невозможность использования цифровой клавиатуры в ряде случаев. Точно так же себя вел и буфер обмена. Ну и третьим, как можно догадаться, была невозможность копирования файлов между Linux и Windows.
Интерфейс программы, можно сказать, аскетичен, настроек ОЧЕНЬ немного. Для кого-то это «минус», лично я считаю, что больше и не нужно.

Из интересного присутствуют возможность TCP-туннелирования, избранное, адресная книга (возможность пока не реализована) и, видимо, что-то вроде личного кабинета на сервере (тоже пока не реализовано). Также можно использовать сгенерированный программой пароль или указать свой. Присутствует возможность в качестве идентификатора указать свое имя — так подключившийся человек будет отображаться у клиента. Еще одним любопытным свойством является возможность предоставить клиенту исполняемый файл с предустановленными настройками на свой сервер. Для этого нужно всего лишь изменить имя файла, например на такое:

rustdesk-host=<host-ip-or-name>,key=<строка-открытого-ключа>

где host-ip-or-name — DNS или IP-адрес вашего сервера, а строка-открытого-ключа — публичный ключ, который выдает вам сервер после своего запуска и который хранится в файле id_******.pub.
Подводя итог краткого обзора, могу сказать, что программа имеет все шансы заместить TeamViewer, Anydesk и другие подобные программы. Я бы порекомендовал ее к использованию.

Управление Samsung TV через сеть

Не оставляю попыток получить управление своим ТВ через сеть. Периодически поглядываю через wireshark на него, но информации маловато для понимания. Существует же множество утилит, которые позволяют управлять им со смартфона, значит это возможно. Для линукса существует утилита samsungctl, но мою модель она не поддерживает (???)

Я вообще когда-нибудь получу контроль над ним через сеть?

Ниже список доступных портов, чтобы не забыть.

# nmap -v -p1-65535 -sS 192.168.1.7

Completed SYN Stealth Scan at 11:56, 3.12s elapsed (65535 total ports)
Nmap scan report for Samsung-TV.kini24.ru (192.168.1.7)
Host is up (0.00065s latency).
Not shown: 65517 closed ports
PORT      STATE SERVICE
7676/tcp  open  imqbrokerd
7678/tcp  open  unknown
8001/tcp  open  vcom-tunnel
8002/tcp  open  teradataordbms
8080/tcp  open  http-proxy
8187/tcp  open  unknown
9012/tcp  open  unknown
9119/tcp  open  unknown
9197/tcp  open  unknown
9999/tcp  open  abyss
15500/tcp open  unknown
32768/tcp open  filenet-tms
32769/tcp open  filenet-rpc
32770/tcp open  sometimes-rpc3
32771/tcp open  sometimes-rpc5
39556/tcp open  unknown
52752/tcp open  unknown
56295/tcp open  unknown
MAC Address: 7C:64:56:FE:76:2A (Unknown)

Порты Samsung AllShare: 7676, 7678, 8187, 9119, 9197

Полное сканирование портов:

PROTOCOL STATE         SERVICE
1        open          icmp
2        open|filtered igmp
6        open          tcp
17       open          udp
136      open|filtered udplite
255      open|filtered unknown
7676/tcp  open  imqbrokerd
7678/tcp  open  unknown
8001/tcp  open  vcom-tunnel
8002/tcp  open  teradataordbms
8080/tcp  open  http-proxy
8187/tcp  open  unknown
9012/tcp  open  unknown
9119/tcp  open  unknown
9197/tcp  open  unknown
9999/tcp  open  abyss
15500/tcp open  unknown
26101/tcp open  unknown
32768/tcp open  filenet-tms
32769/tcp open  filenet-rpc
32770/tcp open  sometimes-rpc3
32771/tcp open  sometimes-rpc5
40046/tcp open  unknown
57772/tcp open  unknown
60850/tcp open  unknown
1900/udp  open|filtered upnp
5353/udp  open|filtered zeroconf
8001/udp  open|filtered vcom-tunnel
32768/udp open|filtered omad
MAC Address: 7C:64:56:FE:76:2A (Unknown)

Переезд на KVM

Проверяем поддержку виртуальных машин:

egrep -c '(vmx|svm)' /proc/cpuinfo

Ответом должно быть число больше нуля — компьютер поддерживает виртуализацию.

Устанавливаем KVM:

sudo apt install qemu qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager

Добавляем текущего пользователя в группу, чтобы иметь возможность управлять виртуальными машинами:

sudo gpasswd -a $USER libvirt

Проверяем состояние службы:

sudo systemctl status libvirtd

Проверяем, что всё установлено правильно:

kvm-ok

«Правильный» ответ:

INFO: /dev/kvm exists
KVM acceleration can be used

Список виртуальных машин:

virsh -c qemu:///system list --all

Если хотим, чтобы ВМ была в той же подсети, что и хост, то удаляем мосты по умолчанию:

virsh net-list --all
virsh net-destroy default
virsh net-undefine default

Смотрим свой сетевой интерфейс:

ip a s

И создаем новый мост, редактируя файл /etc/netplan/01-netcfg.yaml:

# Let NetworkManager manage all devices on this system
network:
  version: 2
  ethernets:
    enp6s0:
      dhcp4: no
      dhcp6: no
  bridges:
    kvm-br0:
      interfaces: [enp6s0]
      addresses: [192.168.1.5/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [192.168.1.1, 8.8.8.8, 1.1.1.1]
        search: [kini24.ru]

На gateway4 будет ругаться, скорее всего, поэтому меняем его на:

routes:
      - to: default
        via: 192.168.1.1
        on-link: yes

Применяем изменения:

sudo netplan --debug generate
sudo netplan apply

Установка операционной системы:

sudo virt-install --virt-type=kvm --name=ubuntu --ram=2048 --vcpus=2 --os-variant=ubuntu20.04 --hvm --cdrom=ubuntu-20.04.4-live-server-amd64.iso --network=bridge=bridge0,model=virtio --graphics vnc --disk path=/var/lib/libvirt/images/ubuntu.qcow2,size=40,bus=virtio,format=qcow2

Или устанавливаем систему, используя установленный Virt-Manager.

Источники:

Видеонаблюдение для Linux

Программу видеонаблюдения для ОС Linux найти достаточно сложно: часть из них стоит достаточно дорого для дома, часть просто не работает, другие не работают с имеющимся оборудованием. И так далее. Проблем много, много больше, чем с клиентами для Windows. Перебрав кучу программ, остановился на двух их них.
Для начала поясню, чего я ожидал от них вообще.

  1. Поддержка имеющегося у меня оборудования. Да, камеры и регистратор у меня от братьев-китайцев. Если быть точнее, то XiongMai. Сходного оборудования у китайцев много, поэтому выбор был очевиден. Плюс цена, конечно.
  2. PTZ (управление положением камеры) мне не особо нужен. Если будет — хорошо.
  3. Поддержка разрешения 4К и выше. Часть программ отвалилась сразу.
  4. Поддержка кодирования H.265. До свидания практически те же программы, что и в п. 3.
  5. Желательно аналогичный клиент для Android и Windows. Люблю единообразие :-)
  6. Работа с архивом. Тут всё совсем плохо, скажу сразу. Ведение своего архива мне не нужно от слова «совсем» — предпочитаю возложить это на регистратор.
  7. Обнаружение людей/лиц. Не критично, но желательно.
  8. Просмотр всех камер в одном окне. Иначе можно тупо создать ярлык, который будет запускать, например, VLC и подключаться к определенной камере. Это неудобно, имхо.

Первую программу, которая у меня нормально заработала, я обнаружил в репозитории Linux, как ни странно. Называется она CCTV Viewer:

Главное окно программы

Количество настроек у программы минимально. В принципе, всё, что вам нужно знать — URL подключения к камере или видеорегистратору. Выбираем нужный «кадр» в главном окне, справа вводим адрес подключения и всё. Если хотите звук, то в настройках программы нужно выставить соответствующую галочку.
Программа потребляет минимум ресурсов и просто работает. Поддержки PTZ и архивов нет, обнаружения лиц и людей — тоже. Клиентов для других ОС тоже нет. Еще одним «минусов» является тот факт, что программа устанавливается из snap’ов, что менее безопасно для пользователя, нежели репозиторий.

Вторая программа... Ну тут я просто долго «тупил». Потому что она используется у меня на работе уже много лет. Но подключение каждой камеры требует приобретения лицензии (2400 рублей за камеру на момент написания текста). Наверное, меня останавливало именно это. Я знал про существование демо-версии, но не был в курсе налагаемых на нее ограничений. Что ж, теперь знаю :-)
Это программа от компании DevLine. Архитектура — клиент-серверная. Иначе говоря, вам нужно установить две части: сервер и клиент. В случае с линуксом, это устанавливается одним пакетом.

Главное окно программы Окно настроек

Итак сервер. Поддержка до 16 камер, работа с ONVIF, автообнаружение камер в сети, аналитика, оповещения и прочие https://devline.ru/moduli/, бОльшая часть из которых мне не особо нужны. А вот наличие клиента для Android и Windows, а также свой веб-сервер на базе HTML5 — очень хорошо.
Из «минусов»: отсутствие поддержки «чужих» архивов (на видеорегистраторе) и, как сегодня оказалось, периодическим пропадание звука с камер. Лечится перезапуском сервиса.
Ресурсов потребляет немного, но существенно больше по сравнению с первой программой. Впрочем, для домашнего видеонаблюдения всё равно годится. По опыту могу сказать, что крайне желательно иметь еще и дискретную видеокарту для снижения нагрузки на процессор.

Да, я знаю о существовании такие программ как motion, zoneminder. Motion я довольно долго использовал в свое время потому, что она позволяла запускать внешние скрипты при наступлении события. Это, в свою очередь, давало очень большое поле для фантазии. Zoneminder мне тогда не понравился, но чем — сейчас уже и не вспомню.

Создание зеркала Nod32 на Synology

Заметка на память

  1. Распаковываем архив со скриптом в /volume1/web/nod
  2. В Web Station создаем виртуальный хост с именем nod. Открываем порты 443 и 80.
  3. Корневым каталогом указываем /web/nod/www
  4. В планировщике задач создаем новую с произвольным именем. В качестве команды для выполнения указываем
/usr/local/bin/php74 -f /volume1/web/nod/update.php &

Пользователь root.

  1. Подключаемся к NAS по SSH, создаем файл /etc/nginx/sites-enabled/nod.conf:
touch /etc/nginx/sites-enabled/nod.conf
  1. Открываем файл на редактирование:
vi /etc/nginx/sites-enabled/nod.conf

Для начала редактирования нужно нажать английскую клавишу «i». Затем вставляем из буфера обмена текст из пункта 7.

  1. Правим этот файл и приводим к виду:
map $http_user_agent $ver {
        "~^.*(EEA|EES|EFSW)+\s+Update.*BPC\s+(\d+)\..*$" "ep$2";
        "~^.*Update.*BPC\s+(\d+)\..*$" "v$1";
}

server {
                listen 80;
                listen 2221;
                server_name nod.home.mikhailov.by;

                # Optional: Charset
                charset utf-8;

                # Path to the root of your installation
                root /volume1/web/nod/www;

                # Index file
                index index.html;

                # Доп. заголовки
                add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
                add_header Cache-Control "no-cache, public, must-revalidate";

                ################# Nginx Rewrite #################

                location ~* \.ver$ {
                        auth_basic "Restricted";
                        auth_basic_user_file /volume1/web/nod/htpasswd;

                        if ($ver ~ "^ep[6-9]$") {
                                rewrite ^/(dll/)?update.ver$ /eset_upd/$ver/$1update.ver break;
                        }

                        if ($ver ~ "^v(5|9)$") {
                                rewrite ^(.*) /eset_upd/$ver/update.ver break;
                        }

                        if ($ver ~ "^v[3-8]$") {
                                rewrite ^(.*) /eset_upd/v3/update.ver break;
                        }

                        if ($ver ~ "^v1[0-1]$") {
                                rewrite ^(.*) /eset_upd/v10/dll/update.ver break;
                        }
                        if ($ver ~ "^v1[2-9]$") {
                                rewrite ^(.*) /eset_upd/$ver/dll/update.ver break;
                        }
                }

                ################################################
}
  1. Завершаем редактирование нажатием клавиши Esc. Затем нужно ввести двоеточие и следом за ним буквы wq. Внизу слева должно получиться следующее:
:wq

Теперь нажимаем Enter. Буква w означает запись, буква q — выход из программы. Если возникнут вопросы по редактору, гуглим vi.

  1. В папке /volume1/web/nod создаем файл htpasswd.
  2. Добавляем в него пользователя:
htpasswd -b /volume1/web/nod/htpasswd username password
  1. Перезапускаем nginx:
nginx -s reload
  1. Проверяем доступность зеркала и запрос пароля

Повторный бан «Народного мониторинга»

На этот раз последний

Итак, на днях в чате взаимопомощи обсуждалась ситуация, когда датчик перестает передавать показания по причине отсутствия электроэнергии или интернета. В последнем случае, конечно, можно завести резервный канал. Но кто будет это делать только ради одного «мониторинга»? А таких достаточно много, как мне кажется.
Мысль я поддержал. Пользователь @Constanine приводил свои доводы, на мой взгляд, неубедительные: иметь ИБП и резервный канал от другого провайдера. Только смысл в них, если, например, из-за отключения электроэнергии вырубилось оборудование провайдера? Потихоньку беседа переключилась на то, какие датчики можно выводить в публичный доступ, а какие нельзя. Со своей стороны я попросил актуализировать/дополнить справку на сайте проекта, на что в ответ получил:
— А не слишком ли многого вы от нас хотите?
Простите, но не так уж и много. Если я пришел на проект, почитал документацию по передаче данных, вывел кучу датчиков в паблик, а мне их убрали обратно в приват — я просто хочу знать причину, а не выяснять у всех и каждого почему так получилось.
Как мне кажется, @Constantine — человек достаточно резкий, невоздержанный, читающий сообщения «по диагонали». В начале моей с ним «перепалки» он отвечал, как заведенный: «Зато у нас есть бонусы!» Да мне всё равно на бонусы, я про них в курсе, достаточно давно на проекте. И вообще в своих вопросах я о них не спрашивал. Я просто просил дополнить информацию на сайте. Даже готов был заняться этим, если у них нет человека, который этим уже занимается.
В общем, минут через 5 @Constantine просто отключает мне возможность отправлять сообщения в чат. Еще через минуту просто трет историю в чате, оаставляя только одно мое, самое первое, сообщение. Жаль, я не догадался сделать скриншоты. Ну что тут скажешь? Надоело пытаться отвечать на «неудобные» вопросы? Да, давайте всех банить, что уж!
Я тоже человек не гордый, не хотите — не надо. Удалил все датчики и свой профиль из проекта. Вышел из чата, группы в ВК, забыл только про твиттер. Исправил как только пришло первое сообщение оттуда. Отключил отправку данных со всех своих датчиков — это буквально 2 кнопки нажать. Если поддержка не может адекватно реагировать на вопросы — зачем мне вообще связываться с такой компанией? Я бы еще понял, если бы не то что матерился или наезжал, а просто писал резко. Но нет, всё было достаточно корректно, я даже извинялся пару раз.
В общем, надоело. Каждое слово, каждое объяснение нужно вытягивать. Справки нормальной нет. Как-то в приложении «Народный мониторинг 2019» нашел FAQ с вопросами, которые, во-первых, мне показались интересными, а, во-вторых, которые я так и не нашел на сайте. Хотя приложение берет все данные именно с сайта.
После того, как «Народный мониторинг» обнаружил, что другой проект — rp5, крадет у них информацию, мне кажется, что именно меня заподозрили в том, что я виновен в этом. Возможно, поэтому они так резко начали относиться ко мне. И всё это только из-за того, что другим участникам «Народного мониторинга» предложил отправлять данные и на rp5. Впрочем, меня попросили не рекламировать другие сайты, что я и сделал. Вот только «НМ» ошибся: никакие данные с их проекта я никому не сливал и даже не собирался. Да, я отправлял данные со своих датчиков и на rp5, помимо «Народного мониторинга». Как и на WeatherUnderground, OpenWeatherMap и множество других сайтов. А на то, что происходило между ними, какие у них взаимоотношения — мне глубоко «фиолетово». Данные мои => отправляю куда хочу.

That’s all, folks!

Старая гифка

Некоторые вещи порой сложно найти. Особенно такие старые. Эта гифка еще с тех времен, когда я в интернет выходил через модем, а трафик был достаточно дорогой. Оставлю на память здесь

Ранее Ctrl + ↓