MYCSS

2021-12-17

Перший код в LUA. Скрипт для роутера з OpenWRT. MQTT та Telegram статус підключених WiFi clients.

З метою оптимізації мого попереднього коду (Нотатки : Простий скрипт для wifi device tracker в OpenWRT : відсилання повідомлень до MQTT ) в SHELL script так як його можливості дещо обмежені. Перевів код на LUA -  швидка і компактна скриптова мова програмування.

Мета коду - зробити автоматизацію вдома на основі присутності людей. Один з варіантів визначення присутності це за тим чи підключений мобільний телефон особи до домашньої Wi-Fi мережі.

Результати роботи визначення статусу в телеграм групі
Так як мобільний телефон при підключенні до мережі Wi-Fi використовує унікальні MAC адреси, то за активністю MAC адрес можна припустити по наявність особи вдома.

2021-12-11

Нотатка для себе, Proxmox QEMU agent для VM - запуск команд

Як взаємодіє гіпервізор з віртуальними машинами ?
Один з варіантів використати агент для віртуальної машини. 

У Proxmox це qemu-agent [1],  від існує для різних операційних систем.
Так для FreeBSD існує версія пакунку "qemu-guest-agent-5.0.1  QEMU guest-agent utilities", з функціоналом але дещо обмеженим.

Для роботи з агентом є команда  qm guest.

 qm guest cmd <vmid> <command>
 qm guest exec-status <vmid> <pid>
 qm guest passwd <vmid> <username> [OPTIONS]
 qm guest exec <vmid> [<extra-args>] [OPTIONS]

2021-11-27

Нотатки: ZFS for postgresql database, Restore pleroma database, ZFS Snapshot for postgresql db

FreeBSD, Postgress SQL Database v14.
Відновлення бази даних Pleroma на сервері з резервної копії.

pkg install postgresql14-server
pkg install postgresql14-contrib
zfs create -o mountpoint=none zroot/var/db
zfs create -o mountpoint=/var/db/postgres
zroot/var/db/postgres
zfs list
zfs zfs set atime=off zroot/var/db/postgres
zfs set atime=off zroot/var/db/postgres
zfs set relatime=on zroot/var/db/postgres
zfs set recordsize=8k zroot/var/db/postgres
chown -R postgres:postrgres /var/db/postgres
chmod 750 /var/db/postgres
service postgresql initdb
pkg install sudo

restore_db.sh

#!/usr/bin/env sh
DBSAVE=. #DBFILE=pleroma_2021-11-09-0000.sql.gz sudo -u postgres psql < pleroma_init.sql cd ${DBSAVE} DBFILE=$( ls -1 *.sql.gz | tail -1 ) echo ${DBFILE} zcat ${DBSAVE}/${DBFILE} | sudo -u postgres psql -d pleroma

pleroma_init.sql:

REVOKE CONNECT ON DATABASE  pleroma FROM public;
SELECT pg_terminate_backend(pg_stat_activity.pid)
 FROM pg_stat_activity
 WHERE pg_stat_activity.datname = 'pleroma';
CREATE USER pleroma WITH ENCRYPTED PASSWORD '.......................................';
DROP DATABASE pleroma;
CREATE DATABASE pleroma OWNER pleroma;
\c pleroma;
--Extensions made by ecto.migrate that need superuser access
CREATE EXTENSION IF NOT EXISTS citext;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
GRANT CONNECT ON DATABASE pleroma TO public;
zfs-snapshot-pgsql.sh
#!/usr/bin/env sh
DATASQL=data14
DATABASE=/var/db/postgres/${DATASQL}
DBDATASET=zroot/var/db/postgres
DBDATASET_CLONE=zroot/var/db/postgres-clonedb
DATABASE_CLONE=/var/db/postgres-clonedb
SHAREDSQL=/usr/local/share/postgresql
zfs list -t snapshot
zfs destroy ${DBDATASET}@snap1
touch ${DATABASE}/backup_in_progress
#START BACKUP SQL by SQL SNAPSHOT
sql="SELECT pg_start_backup('snapshot', true);"
sudo -u postgres psql -c "$sql"
#Fix state of DATABSE DIRECTORY to ZFS snapshot
zfs snapshot ${DBDATASET}@snap1
sql="SELECT pg_stop_backup();"
sudo -u postgres psql -c "$sql"
rm ${DATABASE}/backup_in_progress
#STOP BACKUP SQL by SQL SNAPSHOT
zfs list -t snapshot 
#CLONE ZFS SNAPSHOT to new SQL DATABSE DIRECTORY
zfs clone -o mountpoint=${DATABASE_CLONE} ${DBDATASET}@snap1 ${DBDATASET_CLONE}
#Backup by file archive
tar -cf ~/backup.tar ${DATABASE_CLONE}
#Backup by pg_dump to SQL by start tmp instance of pgsql on port 5433
rm ${DATABASE_CLONE}/${DATASQL}/postmaster.*
cp ${SHAREDSQL}/postgresql.conf.sample ${DATABASE_CLONE}/${DATASQL}/postgresql.conf
sudo -u postgres pg_ctl -D ${DATABASE_CLONE}/${DATASQL} -o "-p 5433" start
umask 077
sudo -u postgres pg_dump pleroma -p 5433 --clean --create | gzip >  pleroma_`date +%F-%H%M`.sql.gz
sudo -u postgres pg_ctl -D ${DATABASE_CLONE}/${DATASQL} stop -m immediate
umount  ${DATABASE_CLONE}
zfs destroy ${DBDATASET_CLONE}


 

 Ref.: 

2021-11-13

Squid ipv6 preffer

https://wiki.squid-cache.org/Features/IPv6

acl to_ipv6 dst ipv6

# Magic entry. Place first in your config. This makes sure Squid has the IP available.
http_access deny to_ipv6 !all

tcp_outgoing_address 10.255.0.1 !to_ipv6
tcp_outgoing_address dead:beef::1 to_ipv6

2021-09-11

Нотатка для тих хто буде вимагати паперовий витяг про податковий номер

За інформацією з: Паспорт громадянина України — Вікіпедія

З 8 серпня 2020 року РНОКПП на зворотньому боці паспорта має таку ж юридичну силу, як і довідка про присвоєння РНОКПП[32][33].

Ідентифікаційний код на ID-картці та свідоцтві про народження отримав таку ж юридичну силу, як і довідка про присвоєння РНОКПП :: Державна міграційна служба України


Податковий кодекс України

Документ 2755-VI, чинний, поточна редакція — Редакція від 01.08.2021

Стаття 70. Державний реєстр фізичних осіб - платників податків

70.9. …..

{Абзац четвертий пункту 70.9 статті 70 із змінами, внесеними згідно із Законом № 1797-VIII від 21.12.2016}

Підтвердженням достовірності реєстраційного номера облікової картки платника податків є документ, що засвідчує реєстрацію особи у Державному реєстрі (картка платника податків), або дані про реєстраційний номер облікової картки платника податків з Державного реєстру, внесені до паспорта громадянина України або свідоцтва про народження.

{Пункт 70.9 статті 70 доповнено абзацом п'ятим згідно із Законом № 786-IX від 14.07.2020}

Особа за власним вибором пред’являє один із зазначених документів для надання даних про реєстраційний номер облікової картки платника податків.

{Пункт 70.9 статті 70 доповнено абзацом шостим згідно із Законом № 786-IX від 14.07.2020}

Особа може пред’явити копію документа, що засвідчує реєстрацію особи в Державному реєстрі, у тому числі і в електронному вигляді, за умови наявності в одержувача інформації технічної можливості здійснити перевірку відповідності реєстраційних даних фізичної особи даним Державного реєстру в електронній формі інформаційно-телекомунікаційними засобами з використанням засобів технічного та криптографічного захисту інформації відповідно до вимог законодавства з питань захисту інформації.

{Пункт 70.9 статті 70 доповнено абзацом сьомим згідно із Законом № 786-IX від 14.07.2020}

 
Для роздрукування:

Нотатка для тих хто буде вимагати паперовий витяг про податковий номер

 

2021-09-10

Pleroma - change to new domain directly on database postgress

Pleroma - is social networking software compatible with other Fediverse software such as Mastodon, Misskey, Pixelfed and many others.

Якщо було змінено основний домен то змінити усі записи що існують на новий домен зі старого домену можна за допомогою цієї послідовності SQL обробок у базі даних postgress. Для засовування замінити OLD.DOMAIN, та NEW.DOMAIN, реальними значеннями у редакторі.

sudo -u postgres  psql -d pleroma -c "\
 ALTER TABLE ONLY public.chats \
    ALTER CONSTRAINT chats_recipient_fkey DEFERRABLE INITIALLY DEFERRED;

 BEGIN;
  UPDATE public.users SET ap_id = replace(ap_id, '://OLD.DOMAIN', '://NEW.DOMAIN');
  UPDATE public.chats SET recipient = replace(recipient, '://OLD.DOMAIN', '://NEW.DOMAIN');
 COMMIT;

 ALTER TABLE ONLY public.chats \
    ALTER CONSTRAINT chats_recipient_fkey NOT DEFERRABLE;

 UPDATE public.users SET avatar = replace(avatar::TEXT, '://OLD.DOMAIN', '://NEW.DOMAIN')::jsonb;
 UPDATE public.users SET follower_address = replace(follower_address, '://OLD.DOMAIN', '://NEW.DOMAIN');
 UPDATE public.users SET following_address = replace(following_address, '://OLD.DOMAIN', '://NEW.DOMAIN');
 UPDATE public.users SET banner = replace(banner::TEXT, '://OLD.DOMAIN', '://NEW.DOMAIN')::jsonb;
 UPDATE public.users SET bio = replace(bio, '://OLD.DOMAIN', '://NEW.DOMAIN');
 UPDATE public.activities SET data = replace(data::TEXT, '://OLD.DOMAIN', '://NEW.DOMAIN')::jsonb;
 UPDATE public.activities SET actor = replace(actor, '://OLD.DOMAIN', '://NEW.DOMAIN');
 UPDATE public.activities SET recipients = replace(recipients::TEXT, '://OLD.DOMAIN', '://NEW.DOMAIN')::varchar[]
 UPDATE public.apps SET redirect_uris = replace(redirect_uris, '://OLD.DOMAIN', '://NEW.DOMAIN');
 UPDATE public.apps SET website = replace(website, '://OLD.DOMAIN', '://NEW.DOMAIN');
 UPDATE public.instances SET host = replace(host, 'OLD.DOMAIN', 'NEW.DOMAIN');
 UPDATE public.instances SET favicon = replace(favicon, '://OLD.DOMAIN', '://NEW.DOMAIN');
 UPDATE public.lists SET following = replace(following::TEXT, '://OLD.DOMAIN', '://NEW.DOMAIN')::varchar[]
 UPDATE public.lists SET ap_id = replace(ap_id, '://OLD.DOMAIN', '://NEW.DOMAIN');
 UPDATE public.objects SET data = replace(data::TEXT, '://OLD.DOMAIN', '://NEW.DOMAIN')::jsonb;
"
актуально для  v2.3.0.

Нотатки: SAS expanders. Роз'яснення підключення. Варіанти підключення.

 

 SAS expanders explained

 

Simple Cascading Expansion Cabling (Maximum Physical Disk Support)

 
Fault-tolerant Asymmetric Expansion Cabling (Maximum Physical Disk Support)


За матеріалами:


2021-07-24

Перегляд на мобільному "Олімпіада - 2020" з каналу суспільного телебачення

Зараз почалася літня Олімпіада 2020 у Токіо, і хотів переглянути церемонію відкриття сьогодні з офіційного сайту суспільного телебачення на мобільному.
Але чомусь на мобільному пристрої у браузері Google Chrome, після проходження авторизації для легального перегляду, нічого не показувало. Хоч на стаціонарному комп'ютері, та на іншому смартфоні - все показувало.

Почав перебрати налаштування браузера у моєму смартфоні. І з'ясував, що причина це були заборонені Cookies  файли для третіх сторін. Додав виключення для сайту мовника, і тепер все показує.

Може комусь і згодиться вирішення цієї проблеми.




2021-07-02

Нотатка для себе. Proxmox відновлюємо конфігурацію з майже "померлого" диску.

Ситуація така - помер системний диск Proxmox.

З даними віртуальних машин не проблема вони на інших ZFS дисках, а ось файл конфігурації невідомий.

Добре що були резервні копії віртуальних машин на NFS спільному ресурсі, і в них є копія конфігураційного файлу, але для деяких не дуже важливих віртуальних машин копій не було.

Тому пошуки ...

Диск не завантажувався, тому завантажуємося з USB Live Ubuntu, а проблемний диск підключаємо через SATA-USB адаптер потім.

dmesg

Виявлено три розділи:  sdb: sdb1 sdb2 sdb3

2021-07-01

Нотатка для себе. Proxmox config backup script DerDanilo

Proxmox  має вбудований механізм створення  резервних копій образів віртуальних машин, але копія налаштувань самого гіпервізору відсутня в community version.

Тому спільнота створює власні механізми, один з них проєкт від DerDanilo:  https://github.com/DerDanilo/proxmox-stuff


Де є скрипт резервного копіювання основних файлів до архівної теки,  і опис як відновити.

Ось його копія:

#!/bin/bash
# Version	      0.2.2 - BETA ! !
# Date		      02.20.2020
# Author 	      DerDanilo 
# Contributors    aboutte, xmirakulix, bootsie123

# set vars

# always exit on error
set -e

# permanent backups directory
# default value can be overridden by setting environment variable before running prox_config_backup.sh
# example: export BACK_DIR="/mnt/pve/media/backup
_bdir=${BACK_DIR:-/mnt/backups/proxmox}

# number of backups to keep before overriding the oldest one
MAX_BACKUPS=5

# temporary storage directory
_tdir=${TMP_DIR:-/var/tmp}

_tdir=$(mktemp -d $_tdir/proxmox-XXXXXXXX)

function clean_up {
    echo "Cleaning up"
    rm -rf $_tdir
}

# register the cleanup function to be called on the EXIT signal
trap clean_up EXIT

# Don't change if not required
_now=$(date +%Y-%m-%d.%H.%M.%S)
_HOSTNAME=$(hostname -f)
_filename1="$_tdir/proxmoxetc.$_now.tar"
_filename2="$_tdir/proxmoxpve.$_now.tar"
_filename3="$_tdir/proxmoxroot.$_now.tar"
_filename4="$_tdir/proxmoxcron.$_now.tar"
_filename5="$_tdir/proxmoxvbios.$_now.tar"
_filename6="$_tdir/proxmoxpackages.$_now.list"
_filename_final="$_tdir/proxmox_backup_"$_HOSTNAME"_"$_now".tar.gz"

##########

function description {
    clear
    cat </dev/null)" != "" ] ; then
	echo backing up custom video bios...
	tar --warning='no-file-ignored' -cvPf "$_filename5" /usr/share/kvm/*.vbios
    fi
    # copy installed packages list
    echo "Copying installed packages list from APT"
    apt-mark showmanual | tee "$_filename6"
}

function compressandarchive {
    echo "Compressing files"
    # archive the copied system files
    tar -cvzPf "$_filename_final" $_tdir/*.{tar,list}

    # copy config archive to backup folder
    # this may be replaced by scp command to place in remote location
    cp $_filename_final $_bdir/
}

function stopservices {
    # stop host services
    for i in pve-cluster pvedaemon vz qemu-server; do systemctl stop $i ; done
    # give them a moment to finish
    sleep 10s
}

function startservices {
    # restart services
    for i in qemu-server vz pvedaemon pve-cluster; do systemctl start $i ; done
    # Make sure that all VMs + LXC containers are running
    qm startall
}

##########


description
are-we-root-abort-if-not
check-num-backups

# We don't need to stop services, but you can do that if you wish
#stopservices

copyfilesystem

# We don't need to start services if we did not stop them
#startservices

compressandarchive

2021-06-10

Нотатка для себе. SR-IOV та Intel 82576/82575 в віртуальному середовищі Proxmox для FreeBSD, Ubuntu.

В Proxmox було встановлено мережеву карту 1Gb Intel 82576 з метою використання функціоналу SR-IOV для ефективного використання для віртуальних мереж.

SR-IOV

SR-IOV

Proxmox була налаштована для PCI(e) Passthrough , IOMMU  до VM.

2021-06-08

Нотатка для себе. Відновити GPT таблицю, випадково стерту в Proxmox з ZFS.

Proxmox. ZFS. HDD 3 TB.

Так сталося що випадково проініціалізував не той диск за допомогою команди fdisk: g   create a new empty GPT partition table.

Так я зрозумів що накоїв і диск ZFS працював зі старою partitional table доки не перезавантажиться система, тому почав створювати свіжі резервні копії, на мережевий диск ceph. І відновив віртуальні машини на іншому сервері.

Після копіювання, перезавантажив систему - диск пустий.

Відновлення

Спроба запуску TestDisk для аналізу і відновлення, знайдено в режимі Intel ост таку таблицю, вона не правдива. Не підходить.

TestDisk scan ZFS
Тому так як є інший Proxmox сервер з ZFS диском на 3ТБ, я виконав перенесення структури з робочого диску на не робочий.

2021-05-29

Нотатка для себе. Proxmox Ceph

Ceph destroy

#rm -rf /etc/systemd/system/ceph*
#killall -9 ceph-mon ceph-mgr ceph-mds
#rm -rf /var/lib/ceph/mon/  /var/lib/ceph/mgr/  /var/lib/ceph/mds/
#pveceph purge
#apt purge ceph-mon ceph-osd ceph-mgr ceph-mds
#rm /etc/init.d/ceph

LVM

#pvdisplay
File descriptor 7 (pipe:[1486785]) leaked on pvdisplay invocation. Parent PID 382397: bash
  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               ceph-adc898bc-44ea-43a1-8279-964e06acc8d5
  PV Size               931.51 GiB / not usable 1.71 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              238467
  Free PE               0
  Allocated PE          238467
  PV UUID               3LBrIs-Eh8t-wljP-WDMv-DxiX-CKAd-vXCyHf
#vgremove ceph-adc898bc-44ea-43a1-8279-964e06acc8d5
File descriptor 7 (pipe:[1486785]) leaked on vgremove invocation. Parent PID 382397: bash
Do you really want to remove volume group "ceph-adc898bc-44ea-43a1-8279-964e06acc8d5" containing 1 logical volumes? [y/n]: y
Do you really want to remove and DISCARD active logical volume ceph-adc898bc-44ea-43a1-8279-964e06acc8d5/osd-block-ca1b00e7-bafc-4c7a-97aa-a83bcd784173? [y/n]: y
  Logical volume "osd-block-ca1b00e7-bafc-4c7a-97aa-a83bcd784173" successfully removed
  Volume group "ceph-adc898bc-44ea-43a1-8279-964e06acc8d5" successfully removed

#pvremove   /dev/sdc
File descriptor 7 (pipe:[1486785]) leaked on pvremove invocation. Parent PID 382397: bash
  Labels on physical volume "/dev/sdc" successfully wiped.

2021-05-25

Нотатка для себе. SR-IOV VLAN Linux Proxmox

Для використання в віртуальних машинах у Proxmox віртуальних мережевих інтерфейсів.

Пристрої SR-IOV можуть спільно використовувати один фізичний порт з кількома віртуальними машинами.

Віртуальні функції мають майже рідну продуктивність і забезпечують кращу продуктивність, ніж паравіртуалізовані драйвери та емуляційний доступ. Віртуальні функції забезпечують захист даних між віртуальними машинами на тому ж фізичному сервері, коли дані управляються та контролюються апаратним забезпеченням.

How SR-IOV works

16.2. PCI Device Assignment with SR-IOV Devices Red Hat Enterprise Linux 7

Advantages of SR-IOV

SR-IOV devices can share a single physical port with multiple virtual machines.
When an SR-IOV VF is assigned to a virtual machine, it can be configured to (transparently to the virtual machine) place all network traffic leaving the VF onto a particular VLAN. The virtual machine cannot detect that its traffic is being tagged for a VLAN, and will be unable to change or eliminate this tagging.
Virtual Functions have near-native performance and provide better performance than paravirtualized drivers and emulated access. Virtual Functions provide data protection between virtual machines on the same physical server as the data is managed and controlled by the hardware.
These features allow for increased virtual machine density on hosts within a data center.
SR-IOV is better able to utilize the bandwidth of devices with multiple guests.  

2021-05-24

Нотатка для себе. CARP monitoring script pfsense.

Маю два сервери pfsense (2.5.1-RELEASE ) у різних віртуальних машинах з налаштованими Proxy сервер - Squid, та Virtual IP type CARP.

Virtual IP type CARP.

Задача мати на напоготові резервний Proxy сервер у випадку коли ведуться роботи на одному з гіпервізорів. 

Для цього існує пункт налаштування "Squid General Settings/


pfSense Proxy Server - CARP Status VIP

2021-05-16

Нотатка для себе. Hosting, Multple ISP, pf routing

Нотатка є віртуальна машина з FreeBSD v13, та двома інтерфейсами для vtnet0 (ISP1) так vtnet1 (ISP2).

Роль сервера - хостинг. Але ISP2 має швидкість 10Gbit/s, тому треба певні сайти віддавати через ISP1, інші через ISP2 з метою оптимізації.

rc.conf

#ISP1

ifconfig_vtnet0="inet 10.110.6.6  netmask 255.255.255.0"
defaultrouter="10.110.6.1"

ifconfig_vtnet0_ipv6="inet6 2105:1c00:7:1::6 prefixlen 64"
ipv6_defaultrouter="2105:1c00:7:1::1" #ISP2 ifconfig_vtnet1="inet 10.220.6.97 netmask 255.255.255.0"
ifconfig_vtnet1_ipv6="inet6 2001:10:10:10::97 prefixlen 64"

За замовчуванням трафік іде через vtnet0 (ISP1).
Для організації відповіді для запиту з інтерфейсу vtnet1 не через шлюз vtnet0, а через шлюз vtnet1 створено  правило для firewall pf.

pf.conf

ext_if1 = vtnet0
ext_gw1 = 10.110.6.1

ext_if2 = "vtnet1"
ext_gw2 = "10.220.6.1"
ext_gw2v6 = "2001:10:10:10::1"

#ipv4 reply-to
pass in on $ext_if2 reply-to ($ext_if2 $ext_gw2) inet from any to $ext_if2

#ipv6 reply-to pass in reply-to ($ext_if2 $ext_gw2v6) inet6 from !$ext_if2:network to $ext_if2. pass out route-to ($ext_if2 $ext_gw2v6) inet6 from $ext_if2 to !$ext_if2:network

2021-03-17

Нотатка. GIT пошук зміненіх файлів та переніс змінених файлів через архів

Задача створити архів з файлами що були зміненні.
Для введення проекту використовувався git тому всі зміни запротокольовані.

git log --oneline
633d17514 (tag: v3.3.0) Bump version to 3.3.0 (#15433)
e43532c9c Normalize locale files (#15434)
f1f96ebf0 Fix being able to import more than allowed number of follows (#15384)
4580129c9 New Crowdin updates (#15413)
ba748a83f Fix logo button style (#15428)
e89648574 Fix error when changing ACL on missing objects during suspension (#15420)
ba0b79fc5 Fix undefined method error when batch-removing statuses with ElasticSearch on (#15421)
7e6d3a7d9 Fix unfollow action button style (#15418)
b08d2d4f7 Fix media modal buttons not showing up on mobile (#15417)
4950e59cd Use existing FeaturedTag serializer and delete AccountFeaturedTag serializer (#15415)
de57efd05 Fix mentions not being deleted efficiently (#15416)
473abc35a Fix trying to privatize empty media attachments (#15414)
git diff --name-only 633d17514 4580129c9 > filelist.txt

2021-03-03

Нотатка. sociallogin of nextcloud use authentication via oauth2 from mastodon

Нотатка.
Задача - авторизуватися в nextcloud з використанням бази даних користувачів mastodon.
 

mastodon

Server mastodon - https://mastodon.lexxai.pp.ua
 
New Applications - https://mastodon.lexxai.pp.ua/settings/applications/new
Name: nextcloud
Application website: https://cloud.lexxai.pp.ua
Redirect URI: https://cloud.lexxai.pp.ua/apps/sociallogin/custom_oauth2/mastodon
Scopes: read:accounts


mastodon - new application oauth2

2021-02-09

Нотатка: Забезпечити безпечне мережеве з'єднання між двома офісами і віддаленим користувачем через OpenVPN

Задача

Забезпечити безпечне мережеве з'єднання між двома офісами і віддаленим користувачем.

Умови

  • Головний офіс (Office 1) має білій IPv4 до якого можуть підключатися клієнти, локальна мережа 10.0.1.0/24.
  • Віддалений офіс (Office 2) має підключення за NAT маршрутизатором, тому до нього підключитися не можливо за IPv4, але він може підключатися будь куди, локальна мережа 10.1.2.0/24.
  • Віддалений користувач за звичай за домашнім WiFi маршрутизатором з IPv4 та NAT, до нього підключитися не можливо за IPv4, але він може підключатися будь куди.
  • Офіси мають в локальний мережі програмний сервер маршрутизатор pfSense.

Вирішення

  • Підключити віддалений офіс (Office 2) до головного офісу (Office 1), за допомогою технології VPN.
  • Підключити віддаленого користувача до головного офісу (Office 1) та забезпечити доступ до локальної мережі обох офісів Office 1 та Office 2.

За даних умов вибирається VPN підключення на базі сервера OpenVPN, через підключення UDP IPv4.

Схематично план підключення зображено на малюку.

OpenVPN client - OpenVPN client

2021-01-31

Нотатки : Простий скрипт для wifi device tracker в OpenWRT : відсилання повідомлень до MQTT

Скрипт для ash сценарію в OpenWRT.
Пошук активних WiFi пристроїв за їх MAC адресою, і якщо такий є то надсилання повідомлення до MQTT брокера зі станом пристрою при зміні стану. А інший скрипт надсилає стан вже до Телеграм каналу..


#!/bin/sh

uUser1='00:13:33:44:11:77'
uUser2='00:3D:33:5D:11:39'
users="User1 User2"

next=

function publish()
{
 mosquitto_pub -t "$1" -m "$2" -r
}

#MAIN
sleep 120

for m in $users; do
  eval p${m}=0
done

while true; do
 for m in $users; do
  um=$(eval "echo \${u${m}}")
  us=$(iwinfo wlan0 assoclist | grep -m 1 -c $um )
  ps=$(eval "echo \${p${m}}")
  if [ "$us" -ne $ps ];then
   eval p${m}=$us
   if [ -n "$next" ];then
     publish "tele/wifi_$m/LWT" "$us"
   fi
  fi
 done
 next=1
 sleep 90
done

Так як масивів в ash не має, то приходиться використовувати eval для  симуляції віртуального масиву.

Створив версію для LUA: Перший код в LUA. Скрипт для роутера з OpenWRT. MQTT та Telegram статус підключених WiFi clients.


2021-01-23

Proxmox ACME DNS NSUPDATE letsencrypt.org


Завдання отримання letsencrypt.org сертифікату в Proxmox за перевіркою  динамічного оновлення запису в DNS за допомогою ключа tsig і власно контрольованого BIND сервера.
Це потрібно в тих ситуаціях коли доступ до web сервера обмежений для зовнішньої перевірки серверами letsencrypt.org при застосуванні стандартного методу: http-01 challenge.

tsig

tsig-keygen -a HMAC-SHA512 ns240 > ns240.key

ns240.key:

key "ns240" 
{ algorithm hmac-sha512;
  secret "VLv54K+dqSSk9lF75GKREQI8BT0ZYBs9BraQY3D/6f5b1Aw41NN86BwxRNATu7iDoEAiqTCUOk7B6SfxG7Q30A==";
};

BIND

named.conf:

key "ns240.key" {
 algorithm hmac-sha512;
secret "VLv54K+dqSSk9lF75GKREQI8BT0ZYBs9BraQY3D/6f5b1Aw41NN86BwxRNATu7iDoEAiqTCUOk7B6SfxG7Q30A==";
};
        
zone "lexxai.pp.ua"
{
type master;
file "/usr/local/etc/namedb/master/db.lexxai.pp.ua";
allow-query { any; };
update-policy {
grant ns240.key. name _acme-challenge.ns240.lexxai.pp.ua. TXT;
grant ns241.key. name _acme-challenge.ns241.lexxai.pp.ua. TXT;
};
};

PROXMOX

Proxmox ACME DNS plugin
NSUPDATE_SERVER=ns1.lexxai.pp.ua
NSUPDATE_KEY=/home/nskey/ns240.key
NSUPDATE_ZONE=lexxai.pp.ua
key path: /home/nskey/ns240.key
chown nobody:nogroup /home/nskey/ns240.key

2021-01-17

Використання Google Cloud IoT MQTT з консольного BASH сценарію та Mosquitto

Google Cloud Platform надає можливість використати IoT Core для підключення IoT пристроїв за протоколом MQTT та HTTP.
Приклади налаштування, і основи роботи є на багатьох ресурсах і у відео:

Моя задача створити безпечне підключення до Google IoT Core з консолі свого пристрою і використати мінімум програм:

Зв'язок mqtt topic (ts2) з google topic event (b01)

Публікація до google topic event (b01) з mosquitto_pub

Перегляд отриманих повідомлень в google sub підписки на mqtt topic (ts2)
 
Підписка до topic - error

Скрипти для автоматизації підключення.

Головна особливість для зв'язку з Google Cloud Platform, те що потрібно автентифікувати пристрій котрий надсилає #MQTT повідомлення за допомогою JWT.
Автентифікація пристрою за JWT
 

Нотатки: TP Link MP 3420 відновлення. OpenWrt 19.07.5.

TP-LINK MP 3420v2 extUSB

[OpenWrt Wiki] TP-Link TL-MR3420 & TL-MR3220  

Нотую для себе, деякі послідовності.
Так як за своєї помилки прибив роутер, то мені і відновлювати.
Так як мені потрібен функціонал якого не має в рідній прошивці, такі як VLAN, MultiAP ... То компілюю OpenWrt для цього роутера з останньою версією. Але флеш пам'ять цього пристрою всього 4МБ і 32МБ оперативної пам'яті, тому використовую зовнішній USB диск, як розширений простір (ext_root). А у подальшому можливо буде заміна флеш на 8МБ.

2021-01-16

Нові роботи коханої: в'язанні шапки спицями

Нові роботи коханої: в'язання сукні

 

Нові роботи коханої: палантин гачком

 


Нові роботи коханої: в'язання сукні

Нарешті перемога довгов'язу, результат напрацювання одного року.

2021-01-10

Нотатки : Простий скрипт для MQTT в OpenWRT : відсилання Telegram повідомлень з Emoji. Tasmota.

Маю роутер з #OpenWRT, і локально інстальованим брокером #MQTT  #mosquitto.

Роутер - OpenWRT, ext USB disk, RAM 64M

Сповіщення

Що б виконати простіші операції з сповіщення в телеграм каналі, написаний даний скрипт, що надсилає до телеграм каналу повідомлення при певних умовах.
Такі умови можуть бути від різних сенсорів розумного будинку, наприклад: 

  • стан вхідних дверей : зачинені / відчинені
  • стан замку в дверях : закрито / відкрито
  • стан охорони :  поставлено на охорону / знято з охорони
  • стан пристрою - датчику руху : працює / не працює
  • стан пристрою - лампи освітлення : працює / не працює

Emoji

Завдання це стан цих сенсорів показати відповідними зрозумілими зображеннями використовуючи Emoji:

Приклад використання зображень - емодзі

Список доступних зображень "Full Emoji List, v13.1"

Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready