<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7637722543027303610</id><updated>2026-09-13T09:29:12.320+03:00</updated><category term="linux"/><category term="debian"/><category term="RouterOS"/><category term="windows"/><category term="MikroTik"/><category term="perl"/><category term="mysql"/><category term="cisco"/><category term="junos"/><category term="java"/><category term="ssh"/><category term="iptables"/><category term="android"/><category term="bash"/><category term="chrome"/><category term="ffmpeg"/><category term="grub"/><category term="ipv4"/><category term="nginx"/><category term="virtualbox"/><category term="видео"/><category term="Chromium OS"/><category term="DSCP"/><category term="Differentiated Services Code Point"/><category term="Squeeze"/><category term="avi"/><category term="bgp"/><category term="bind"/><category term="dhcp"/><category term="fstab"/><category term="gnome3"/><category term="ipv6"/><category term="kde"/><category term="kernel"/><category term="kvm"/><category term="mp4"/><category term="netbeans"/><category term="openvpn"/><category term="oracle"/><category term="password"/><category term="php5"/><category term="qos"/><category term="skype"/><category term="tcng"/><category term="tcp/ip"/><category term="tunnel"/><category term="wheezy"/><category term="wireguard"/><category term="ExtremeXOS"/><category term="adobe"/><category term="aptitude"/><category term="backup"/><category term="btrfs"/><category term="ext4"/><category term="firmware"/><category term="flac"/><category term="flash"/><category term="geoip"/><category term="gnome"/><category term="google maps"/><category term="iasl"/><category term="ios"/><category term="ipset"/><category term="netfilter"/><category term="openssl"/><category term="proxy"/><category term="script"/><category term="syslog"/><category term="telnet"/><category term="tor"/><category term="ubuntu"/><category term="viber"/><category term="web"/><category term="whois"/><category term="wifi"/><category term="wine"/><category term="xkbcomp"/><category term="тест"/><category term="32-bit To 64-bit"/><category term="AnyEvent"/><category term="AnyEvent::SNMP"/><category term="CAPsMAN"/><category term="CloudFlare"/><category term="DBI"/><category term="DHCPv6"/><category term="DIR-300"/><category term="Encrypt"/><category term="Extreme-Networks"/><category term="FreeTDS"/><category term="I/O Scheduler"/><category term="Lenny"/><category term="Let&#39;s"/><category term="MSSQL"/><category term="NTP"/><category term="Net::SNMP"/><category term="Reader"/><category term="SLAAC"/><category term="Summit"/><category term="UnixODBC"/><category term="Utf16"/><category term="Utf8"/><category term="WiFi6"/><category term="Wive-NG-RTNL"/><category term="X450a"/><category term="acl"/><category term="acpi"/><category term="acpidump"/><category term="acpixtract"/><category term="acroread"/><category term="airpan"/><category term="allshare"/><category term="amd64"/><category term="ati"/><category term="autostart"/><category term="backports"/><category term="bfs"/><category term="binfmts"/><category term="bonding"/><category term="certbot"/><category term="certonly"/><category term="chattr"/><category term="chromeos"/><category term="chroot"/><category term="commit"/><category term="config"/><category term="connect"/><category term="convert"/><category term="cos"/><category term="cpan"/><category term="cpu"/><category term="cue"/><category term="cuetools"/><category term="d-link"/><category term="dB"/><category term="dBm"/><category term="dd-wrt"/><category term="desktop"/><category term="dig"/><category term="dlna"/><category term="dns"/><category term="docker"/><category term="doh"/><category term="dpkg"/><category term="dpkg-deb"/><category term="driver"/><category term="dsdt"/><category term="duid"/><category term="dump"/><category term="edge-core"/><category term="errors"/><category term="esmtp"/><category term="ext3"/><category term="external"/><category term="extjs"/><category term="fb2"/><category term="feature"/><category term="ffserver"/><category term="forward"/><category term="fydeos"/><category term="g1 dream"/><category term="gconftool"/><category term="getcap"/><category term="getfacl"/><category term="git"/><category term="global"/><category term="grant"/><category term="guest"/><category term="hash"/><category term="homepage"/><category term="html"/><category term="http"/><category term="http2"/><category term="https"/><category term="i386"/><category term="ibf"/><category term="icon"/><category term="iftop"/><category term="information_schema"/><category term="interfaces"/><category term="internet"/><category term="inxi"/><category term="ip sla"/><category term="ip_conntrack_max"/><category term="iperf"/><category term="jabber"/><category term="jar"/><category term="java-package"/><category term="javascript"/><category term="jdk"/><category term="jks"/><category term="jun"/><category term="juniper"/><category term="keyboard"/><category term="keytool"/><category term="libreoffice"/><category term="ln"/><category term="log"/><category term="lsattr"/><category term="mac-address"/><category term="make-jpkg"/><category term="mars"/><category term="mc"/><category term="mcedit"/><category term="mib"/><category term="micromax"/><category term="mms"/><category term="modeline"/><category term="moon"/><category term="mp3"/><category term="multiple"/><category term="netsh"/><category term="network"/><category term="network-manager"/><category term="nodejs"/><category term="openfire"/><category term="openoffice"/><category term="openssh"/><category term="openvz"/><category term="pamusb"/><category term="pavucontrol"/><category term="pcap"/><category term="pdbedit"/><category term="pem"/><category term="php5-fpm"/><category term="pos"/><category term="posix"/><category term="poweroff"/><category term="pptp клиент"/><category term="private key"/><category term="proxmox"/><category term="public key"/><category term="pulseaudio"/><category term="qemu"/><category term="quota"/><category term="raspbian"/><category term="rate-limit"/><category term="razor-qt"/><category term="razorqt"/><category term="rc.local"/><category term="read"/><category term="reboot"/><category term="regexp"/><category term="renice"/><category term="ripe-db"/><category term="root"/><category term="route"/><category term="rpcap"/><category term="rsync"/><category term="rtr"/><category term="samba"/><category term="samsung"/><category term="schroot"/><category term="scp"/><category term="sdk"/><category term="sdt"/><category term="sencha"/><category term="sessions"/><category term="setcap"/><category term="setfacl"/><category term="sftp"/><category term="shadow"/><category term="sharing"/><category term="shell"/><category term="shntool"/><category term="shutdown"/><category term="sin"/><category term="slurm"/><category term="smtp"/><category term="snmp"/><category term="software raid"/><category term="sort"/><category term="speedtest"/><category term="srv"/><category term="ssl"/><category term="steghide"/><category term="store"/><category term="stty"/><category term="sudo"/><category term="sun"/><category term="sys_eval"/><category term="sysctl"/><category term="syslog-ng"/><category term="systemctl"/><category term="table"/><category term="tap"/><category term="tar"/><category term="tc"/><category term="tcl"/><category term="trial"/><category term="ttcp"/><category term="ttyS"/><category term="uird"/><category term="uml-net"/><category term="uml-utilities"/><category term="unsuppress-map"/><category term="uuid"/><category term="vendor"/><category term="version"/><category term="vpls"/><category term="vrf"/><category term="wep"/><category term="wifiwave2"/><category term="win"/><category term="winget"/><category term="wireshark"/><category term="world of warcraft"/><category term="wow"/><category term="wpa2-eap"/><category term="write"/><category term="xen"/><category term="xml"/><category term="Перепрошивка"/><category term="акселерометр"/><category term="взлом"/><category term="вопросы"/><category term="задавать"/><category term="луна"/><category term="марс"/><category term="мегабайт"/><category term="мегабит"/><category term="мир варкрафта"/><category term="плавающая ставка"/><category term="репликация"/><category term="русский язык"/><category term="сленг"/><category term="смайлики"/><category term="стеганография"/><category term="хэш"/><title type='text'>Olden Gremlin... Нотатки на колінці.</title><subtitle type='html'>&lt;p&gt;&lt;b&gt;«Чим більше навколишні знають, що з себе ви уявляєте і що від вас слід очікувати, тим сильніше це обмежує вашу свободу»&lt;/b&gt;,&lt;/p&gt; — Карлос Кастанеда.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>230</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-6414630136600768373</id><published>2026-09-13T09:29:12.320+03:00</published><updated>2026-09-13T09:29:12.320+03:00</updated><title type='text'>Перенос 2FA з Google Authenticator у GNOME Authenticator (Debian/GNOME)</title><content type='html'>&lt;h2 id=&quot;-&quot;&gt;Проблема&lt;/h2&gt;
&lt;p&gt;GNOME Authenticator (&lt;code&gt;com.belmoussaoui.Authenticator&lt;/code&gt;, Flatpak/Flathub) &lt;strong&gt;не вміє
напряму читати QR-код &amp;quot;Transfer accounts / Export accounts&amp;quot;&lt;/strong&gt; з Google
Authenticator. Цей QR несе спеціальний формат
&lt;code&gt;otpauth-migration://offline?data=...&lt;/code&gt; (base64 + Protocol Buffers), а не
звичайний &lt;code&gt;otpauth://&lt;/code&gt;, який очікує сканер додатку. Ні камера, ні
скріншот-сканер це не підхоплюють. Це підтверджений баг/обмеження проєкту,
а не помилка користувача.&lt;/p&gt;
&lt;h2 id=&quot;-extract_otp_secrets&quot;&gt;Рішення: extract_otp_secrets&lt;/h2&gt;
&lt;p&gt;Репозиторій: &lt;a href=&quot;https://github.com/scito/extract_otp_secrets&quot;&gt;https://github.com/scito/extract_otp_secrets&lt;/a&gt;
(⚠️ раніше називався &lt;code&gt;extract_otp_secret_keys&lt;/code&gt; — якщо гуглиться стара назва,
файл скрипта тепер лежить у &lt;code&gt;src/extract_otp_secrets.py&lt;/code&gt;, не в корені).&lt;/p&gt;
&lt;p&gt;Скрипт розбирає &lt;code&gt;otpauth-migration://...&lt;/code&gt; і віддає звичайні &lt;code&gt;otpauth://&lt;/code&gt;
записи (або одразу JSON/CSV/Aegis-експорт).&lt;/p&gt;
&lt;h3 id=&quot;-&quot;&gt;Кроки&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Отримати сирі дані з QR.&lt;/strong&gt;
На телефоні: Google Authenticator → меню → Transfer accounts → Export
accounts → з&amp;#39;являється QR. Відсканувати його будь-яким сканером QR (не
обов&amp;#39;язково камерою ПК) — вийде текстовий рядок
&lt;code&gt;otpauth-migration://offline?data=...&lt;/code&gt;. Якщо QR декілька (багато
акаунтів) — кожен рядок в окремий рядок текстового файлу.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Зберегти рядок(и) у текстовий файл&lt;/strong&gt;, наприклад &lt;code&gt;export.txt&lt;/code&gt;
(по одному &lt;code&gt;otpauth-migration://...&lt;/code&gt; на рядок).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Встановити скрипт в ізольований venv&lt;/strong&gt; (щоб не смітити систему):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;git clone http&lt;span class=&quot;hljs-variable&quot;&gt;s:&lt;/span&gt;//github.&lt;span class=&quot;hljs-keyword&quot;&gt;com&lt;/span&gt;/scito/extract_otp_secrets.git
&lt;span class=&quot;hljs-keyword&quot;&gt;cd&lt;/span&gt; extract_otp_secrets
&lt;span class=&quot;hljs-keyword&quot;&gt;python3&lt;/span&gt; -&lt;span class=&quot;hljs-keyword&quot;&gt;m&lt;/span&gt; venv venv &amp;amp;&amp;amp; &lt;span class=&quot;hljs-keyword&quot;&gt;source&lt;/span&gt; venv/bin/activate
pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;⚠️ &lt;code&gt;requirements.txt&lt;/code&gt; тягне важкі й непотрібні для цього кейсу пакети
(&lt;code&gt;torch&lt;/code&gt;, &lt;code&gt;opencv&lt;/code&gt;, CUDA — потрібні лише для розпізнавання QR з
фото/камери через YOLO). Якщо на вході вже готовий текстовий рядок
(&lt;code&gt;data=...&lt;/code&gt;), а не картинка — усе це зайве, але видалити з
requirements.txt важко без ризику зламати залежності, тому просто
змиритися й прибрати venv після використання (розділ &amp;quot;Прибирання&amp;quot;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Розпарсити:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;python3 src/extract_otp_secrets&lt;span class=&quot;hljs-selector-class&quot;&gt;.py&lt;/span&gt; export&lt;span class=&quot;hljs-selector-class&quot;&gt;.txt&lt;/span&gt; --json result.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Отримаєш &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;issuer&lt;/code&gt;, &lt;code&gt;secret&lt;/code&gt;, &lt;code&gt;algorithm&lt;/code&gt; для кожного акаунту.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Завести кожен акаунт у GNOME Authenticator вручну&lt;/strong&gt; — кнопка &amp;quot;+&amp;quot; →
ручний ввід (Issuer / Account / Secret) з даних &lt;code&gt;result.json&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Перенос на інші машини (робочий ПК тощо).&lt;/strong&gt;
Скрипт вміє одразу експортувати у формат, який читає &lt;strong&gt;Aegis&lt;/strong&gt;
(&lt;code&gt;--json&lt;/code&gt;/&lt;code&gt;--csv&lt;/code&gt; + опціонально шифрований контейнер) — так і зробили:
експорт у формат Aegis із паролем, файл переносимо на інший комп&amp;#39;ютер і
імпортуємо туди штатним імпортом Aegis-бекапу. Зручно, якщо кінцевий
застосунок на іншій машині підтримує Aegis-формат краще, ніж пряме
ручне заведення.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;-&quot;&gt;Прибирання (важливо!)&lt;/h2&gt;
&lt;p&gt;Проміжні файли містять секрети у відкритому вигляді:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;&lt;span class=&quot;hljs-selector-tag&quot;&gt;shred&lt;/span&gt; &lt;span class=&quot;hljs-selector-tag&quot;&gt;-u&lt;/span&gt; &lt;span class=&quot;hljs-selector-tag&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;hljs-selector-class&quot;&gt;.txt&lt;/span&gt; &lt;span class=&quot;hljs-selector-tag&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;hljs-selector-class&quot;&gt;.json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Зашифрований Aegis-експорт (з паролем) можна лишити для переносу, але
краще не тримати його довше, ніж треба, і не в хмарних синках без
додаткового шифрування диску.&lt;/p&gt;
&lt;p&gt;venv зі скриптом важить кілька гігабайт (torch + CUDA-пакети) — після
використання просто видалити разом з клоном:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-bash&quot;&gt;deactivate
rm -rf &lt;span class=&quot;hljs-keyword&quot;&gt;extract_otp_secrets &lt;/span&gt;  &lt;span class=&quot;hljs-comment&quot;&gt;# або шлях, куди клонував&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;-&quot;&gt;Підсумок / чеклист на майбутнє&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] GNOME Authenticator сам QR від Google Authenticator не читає — одразу&lt;pre&gt;&lt;code&gt;йти шляхом extract_otp_secrets, &lt;span class=&quot;hljs-keyword&quot;&gt;не&lt;/span&gt; гаяти час на спроби сканування.
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;[ ] Файл скрипта: &lt;code&gt;src/extract_otp_secrets.py&lt;/code&gt; (не в корені).&lt;/li&gt;
&lt;li&gt;[ ] Вхід: текстовий файл з &lt;code&gt;otpauth-migration://...&lt;/code&gt;, без картинок —&lt;pre&gt;&lt;code&gt;найпростіший і найшвидший шлях, важкі &lt;span class=&quot;hljs-built_in&quot;&gt;image&lt;/span&gt;-залежності можна
ігнорувати.
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;[ ] Після імпорту — &lt;code&gt;shred&lt;/code&gt; проміжних файлів, видалення venv.&lt;/li&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/6414630136600768373/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/6414630136600768373?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/6414630136600768373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/6414630136600768373'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2026/09/2fa-google-authenticator-gnome.html' title='Перенос 2FA з Google Authenticator у GNOME Authenticator (Debian/GNOME)'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-5202696269933570590</id><published>2026-08-29T10:41:33.571+03:00</published><updated>2026-08-29T10:41:33.572+03:00</updated><title type='text'>Автомонтування Google Drive через rclone на Debian + GNOME: історія для однієї філіжанки кави</title><content type='html'>&lt;p&gt;Захотілося простого: підключити Google Drive як звичайну папку в файловій системі, і щоб воно саме піднімалось при вході в систему, без танців з бубном щоразу. Здавалося б, &lt;code&gt;rclone mount&lt;/code&gt; — і готово. Виявилось трохи цікавіше.&lt;/p&gt;
&lt;h2&gt;Крок 1. rclone і конфіг, якого нема&lt;/h2&gt;
&lt;p&gt;Перша спроба:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;rclone mount gdrive: ~/GDrive --daemon
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;У відповідь:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code&gt;Failed to create file system for &quot;gdrive:&quot;: didn&#39;t find section in config file
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Логічно — remote &lt;code&gt;gdrive&lt;/code&gt; в конфізі просто не існував. Створити порожній файл командою &lt;code&gt;rclone config touch&lt;/code&gt; теж не рятує: файл є, секції нема.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Рішення:&lt;/strong&gt; інтерактивний майстер &lt;code&gt;rclone config&lt;/code&gt;. Він сам генерує правильну секцію в &lt;code&gt;~/.config/rclone/rclone.conf&lt;/code&gt; і проводить через OAuth-авторизацію в браузері — 2FA при цьому обробляється звичайним способом, через сам Google, rclone до неї жодного стосунку не має. На машині з GUI (а в мене GNOME) достатньо погодитись на &lt;code&gt;Use auto config? (y)&lt;/code&gt; — rclone підійме локальний вебсервер і сам відкриє браузер для логіну.&lt;/p&gt;
&lt;h2&gt;Крок 2. Автозапуск при логіні — перша перешкода: D-Bus&lt;/h2&gt;
&lt;p&gt;Щоб не монтувати вручну щоразу, оформив systemd user-юніт:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code class=&quot;language-ini&quot;&gt;[Unit]
Description=RClone mount Google Drive
AssertPathIsDirectory=%h/GDrive
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/rclone mount gdrive: %h/GDrive \
    --vfs-cache-mode writes \
    --config=%h/.config/rclone/rclone.conf
ExecStop=/bin/fusermount -u %h/GDrive
Restart=on-failure
RestartSec=10

[Install]
WantedBy=default.target
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;І одразу вперся в:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code&gt;Failed to connect to user scope bus via local transport: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Спробував виставити &lt;code&gt;loginctl enable-linger&lt;/code&gt;, спробував вручну експортувати змінні — не допомагало. Причина виявилась банальною і трохи соромною: у &lt;code&gt;.bashrc&lt;/code&gt; завалявся старий&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;alias systemctl=&#39;sudo systemctl&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;А &lt;code&gt;sudo&lt;/code&gt; за замовчуванням &lt;strong&gt;очищує середовище процесу&lt;/strong&gt;. Тобто щойно виставлені &lt;code&gt;XDG_RUNTIME_DIR&lt;/code&gt; і &lt;code&gt;DBUS_SESSION_BUS_ADDRESS&lt;/code&gt; до команди просто не доходили — sudo їх зрізав ще до старту &lt;code&gt;systemctl&lt;/code&gt;. Найприкріше, що для керування власними user-юнітами (&lt;code&gt;systemctl --user&lt;/code&gt;) права root взагалі не потрібні.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Рішення:&lt;/strong&gt; викликати бінарник напряму, оминаючи alias:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;/usr/bin/systemctl --user daemon-reload
/usr/bin/systemctl --user enable --now rclone-gdrive.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;І заразом не завадить &lt;code&gt;loginctl enable-linger &amp;lt;user&amp;gt;&lt;/code&gt; — щоб user-сесія (і user-юніти) піднімались навіть без активного графічного логіну.&lt;/p&gt;
&lt;h2&gt;Крок 3. Сервіс стартує і одразу падає&lt;/h2&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code&gt;Failed to create file system for &quot;gdrive:&quot;: didn&#39;t find section in config file
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Та сама помилка, що й на самому початку — але тепер конфіг точно існував. Загадка розкрилась при прямому запуску команди в терміналі (без &lt;code&gt;--daemon&lt;/code&gt;, щоб бачити живий вивід):&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;/usr/bin/rclone mount gdrive: ~/GDrive --vfs-cache-mode writes --config=/home/olden/.config/rclone/rclone.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Та сама помилка. Але варто було спробувати з великої літери:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;/usr/bin/rclone mount GDrive: ~/GDrive --vfs-cache-mode writes --config=/home/olden/.config/rclone/rclone.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;— і диск підключився. &lt;strong&gt;rclone чутливий до регістру назви remote&lt;/strong&gt;, а в конфізі секція виявилась записана як &lt;code&gt;[GDrive]&lt;/code&gt;, а не &lt;code&gt;[gdrive]&lt;/code&gt;, як я вважав. Дрібниця, яка коштувала половини вечора.&lt;/p&gt;
&lt;p&gt;Виправив у юніті:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;sed -i &#39;s/rclone mount gdrive:/rclone mount GDrive:/&#39; ~/.config/systemd/user/rclone-gdrive.service
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Крок 4. Порожня папка після, здавалося б, вдалого монтування&lt;/h2&gt;
&lt;p&gt;Сервіс піднявся, &lt;code&gt;systemctl --user status&lt;/code&gt; показував &lt;code&gt;active (running)&lt;/code&gt;, а &lt;code&gt;ls ~/GDrive&lt;/code&gt; — порожньо. При тому ручний запуск хвилиною раніше показував повний список файлів.&lt;/p&gt;
&lt;p&gt;Причина — &lt;strong&gt;накладені (stale) точки монтування&lt;/strong&gt;. Я тестував ручний запуск &lt;code&gt;rclone mount&lt;/code&gt; просто в терміналі, потім намагався його відмонтувати через &lt;code&gt;fusermount3 -u&lt;/code&gt;, але процес до кінця не прибрався. Коли systemd підняв новий &lt;code&gt;rclone mount&lt;/code&gt; поверх недомонтованого старого шару, ядро показувало нову, ще порожню точку.&lt;/p&gt;
&lt;p&gt;Розібратись допомогла така послідовність:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;/usr/bin/systemctl --user stop rclone-gdrive.service
fusermount3 -u ~/GDrive          # повторити кілька разів, якщо треба
pkill -f &quot;rclone mount&quot;          # добити зомбі-процеси
ps aux | grep rclone             # переконатись, що чисто
/usr/bin/systemctl --user start rclone-gdrive.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Після цього &lt;code&gt;ls ~/GDrive&lt;/code&gt; нарешті показав реальні файли.&lt;/p&gt;
&lt;h2&gt;Підсумок: робочий юніт&lt;/h2&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code class=&quot;language-ini&quot;&gt;[Unit]
Description=RClone mount Google Drive
AssertPathIsDirectory=%h/GDrive
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/rclone mount GDrive: %h/GDrive \
    --vfs-cache-mode writes \
    --config=%h/.config/rclone/rclone.conf
ExecStop=/bin/fusermount -u %h/GDrive
Restart=on-failure
RestartSec=10

[Install]
WantedBy=default.target
&lt;/code&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;loginctl enable-linger $USER
/usr/bin/systemctl --user daemon-reload
/usr/bin/systemctl --user enable --now rclone-gdrive.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(&lt;code&gt;Type=notify&lt;/code&gt; теж мав шанс спрацювати — версія rclone тут доволі свіжа, — але коли шукаєш причину падіння, простіше тимчасово спростити до &lt;code&gt;Type=simple&lt;/code&gt;, щоб виключити зайву змінну з рівняння.)&lt;/p&gt;
&lt;h2&gt;Висновки на майбутнє&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alias на &lt;code&gt;sudo systemctl&lt;/code&gt; і &lt;code&gt;systemctl --user&lt;/code&gt; — погана комбінація.&lt;/strong&gt; Sudo зрізає середовище, а &lt;code&gt;--user&lt;/code&gt;-юнітам права root взагалі не потрібні.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;rclone чутливий до регістру назв remote.&lt;/strong&gt; &lt;code&gt;gdrive:&lt;/code&gt; і &lt;code&gt;GDrive:&lt;/code&gt; — це два різні (точніше, один існуючий і один неіснуючий) remote.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Перед діагностикою systemd-юніта корисно спершу прогнати ту саму команду вручну в терміналі&lt;/strong&gt; — так помилка видно одразу, без прошарку journalctl.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stale FUSE-монтування — підступна штука&lt;/strong&gt;: &lt;code&gt;systemctl status&lt;/code&gt; може казати &lt;code&gt;active (running)&lt;/code&gt;, а точка монтування при цьому виявиться порожньою, бо накладена на недомонтований попередній шар. &lt;code&gt;pkill -f&lt;/code&gt; + чистий &lt;code&gt;stop&lt;/code&gt;/&lt;code&gt;start&lt;/code&gt; знімає це надійно.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Дрібниця на дрібниці, але кожна — окрема пастка, у яку легко провалитись саме тому, що симптом (одна й та сама помилка «not found in config file») мав дві геть різні причини на різних етапах.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/5202696269933570590/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/5202696269933570590?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/5202696269933570590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/5202696269933570590'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2026/08/google-drive-rclone-debian-gnome.html' title='Автомонтування Google Drive через rclone на Debian + GNOME: історія для однієї філіжанки кави'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-4857626305905227047</id><published>2026-05-13T07:58:00.001+03:00</published><updated>2026-05-13T07:58:49.095+03:00</updated><title type='text'>Дублювання репозиторію на GitHub</title><content type='html'>&lt;p&gt;Якось часто останнім часом доводиться робити дублювання власних репозиторіїв на GitHub. Залишу за дужками питання &quot;чому?&quot;, але додам до нотатків &quot;як?&quot;.&lt;/p&gt;&lt;h2&gt;Створюємо новий репозиторій.&lt;/h2&gt;&lt;p&gt;На GitHub -&amp;gt; &quot;New repository&quot;. Даємо йому назву. &quot;Create repository&quot; (не ініціалізуємо його файлами).&lt;/p&gt;&lt;h2&gt;Клонуємо старий репозиторій як дзеркало&lt;/h2&gt;
&lt;pre&gt;git clone --mirror https://github.com/посилання/на_старий_репозиторій.git
&lt;/pre&gt;&lt;h2&gt;Переходимо в директорію&lt;/h2&gt;&lt;div&gt;&lt;pre&gt;cd назва_старого_репозиторію.git&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Відправляємо дані в новий репозиторій&lt;/h2&gt;&lt;pre&gt;git push --mirror git@github.com:посилання/на_новий_репозиторій.git&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Видаляємо директорію&lt;/h2&gt;&lt;/div&gt;&lt;pre&gt;cd ..
rm назва_старого_репозиторію.git&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/4857626305905227047/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/4857626305905227047?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/4857626305905227047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/4857626305905227047'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2026/05/github.html' title='Дублювання репозиторію на GitHub'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-9169482591416905933</id><published>2025-08-26T09:05:00.004+03:00</published><updated>2025-08-26T09:11:58.490+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CloudFlare"/><category scheme="http://www.blogger.com/atom/ns#" term="MikroTik"/><category scheme="http://www.blogger.com/atom/ns#" term="RouterOS"/><category scheme="http://www.blogger.com/atom/ns#" term="wireguard"/><title type='text'>CloudFlare Client на MikroTIK (RouterOS)</title><content type='html'>&lt;p&gt;Перше, що нам знадобиться це&amp;nbsp;&lt;a href=&quot;https://github.com/ViRb3/wgcf&quot;&gt;wgcf&lt;/a&gt;&amp;nbsp;— is an unofficial, cross-platform CLI for Cloudflare Warp. Якщо ліниво збирати вручну то можна взяти готовий &lt;a href=&quot;https://github.com/ViRb3/wgcf/releases&quot;&gt;реліз&lt;/a&gt; під свою платформу. У мене &lt;a href=&quot;http://wgcf_2.2.29_linux_amd64&quot;&gt;wgcf_2.2.29_linux_amd64&lt;/a&gt;:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ wget -O wgcf https://github.com/ViRb3/wgcf/releases/download/v2.2.29/wgcf_2.2.29_linux_amd64
$ chmod +x wgcf&lt;/pre&gt;&lt;p&gt;Створимо конфігурацію для CloudFlare:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ ./wgcf register --accept-tos --name HomeVPN&lt;/pre&gt;&lt;p&gt;При цьому буде створено файл wgcf-account.toml, який містиме первинну конфігурацію.&lt;/p&gt;&lt;p&gt;В тому випадку якщо вже маємо ліцензію з оплаченим акаунтом (проте це не обов&#39;язкова умова) можна оновити конфігурацію використовуючи наявний ключ.&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;./wgcf update --license-key QB………………-……………………-……………30H&lt;/pre&gt;&lt;p&gt;Проте майте на увазі, що до одного акаунта може бути прив&#39;язано не більше п&#39;яти пристроїв. Якщо їх більше — виконання wgcf завершиться з помилкою.&lt;/p&gt;&lt;p&gt;Все, що нам залишилося це згенерувати текстовий файл конфігурації, щоб використовувати в подальшому наведені в ньому значення:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ ./wgcf generate
2025/08/26 07:58:59 Using config file: wgcf-account.toml
2025/08/26 07:59:00 Successfully generated WireGuard profile: wgcf-profile.conf&lt;/pre&gt;&lt;p&gt;Тепер ми маємо wgcf-profile.conf:
&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ cat wgcf-profile.conf
[Interface]
PrivateKey = AGX……………………………………………………………………………………………………1g=
Address = 172.…….….…/32, 2606:…………:………:…………:…………:…………:…………:…………/128
DNS = 1.1.1.1, 1.0.0.1, 2606:4700:4700::1111, 2606:4700:4700::1001
MTU = 1280
[Peer]
PublicKey = bmX…………………………………………………………………………………………………gyo=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = engage.cloudflareclient.com:2408&lt;/pre&gt;&lt;p&gt;В першу чергу нас цікавитиме параметр PrivateKey.
&lt;/p&gt;&lt;p&gt;Можемо приступити до налаштування MikroTIK. Створюємо інтерфейс клієнта:  &lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/interface wireguard add listen-port=13231 mtu=1290 name=cloudflare-warp private-key=&quot;AGX……………………………………………………………………………………………………1g=&quot;&lt;/pre&gt;&lt;p&gt;Налаштовуємо peer-параметри, всі значення беремо з wgcf-profile.conf:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/interface wireguard peers add allowed-address=0.0.0.0/0,::/0 endpoint-address=engage.cloudflareclient.com endpoint-port=2408 interface=cloudflare-warp name=cloudflare-peer public-key=&quot;bmX…………………………………………………………………………………………………gyo=&quot;&lt;/pre&gt;Ну і далі доволі стандартні кроки:
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/interface list add comment=Internet name=INTERNET
/interface list member add interface=cloudflare-warp list=INTERNET
/ip firewall nat add action=masquerade chain=srcnat out-interface=cloudflare-warp
/routing table add disabled=no fib name=to-cloudflare
/ip address add address=172.…….….…/30 interface=cloudflare-warp
/ipv6 address add address=2606:…………:………:…………:…………:…………:…………:…………/128 advertise=no interface=cloudflare-warp
/ip route add dst-address=0.0.0.0/0 gateway=172.…….….1 routing-table=to-cloudflare
/ip firewall address-list add address=192.168.88.254 comment=og-home list=TO-CF-SRC
/ip firewall mangle add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-list=TO-CF-SRC in-interface-list=LAN new-connection-mark=CF-conn
/ip firewall mangle add action=mark-connection chain=prerouting connection-mark=no-mark in-interface-list=LAN new-connection-mark=CF-conn src-address-list=TO-CF-SRC
/ip firewall mangle add action=mark-routing chain=prerouting connection-mark=CF-conn in-interface-list=LAN new-routing-mark=to-cloudflare
&lt;/pre&gt;Ну от начебто і все. Всі інші налаштування — на власний самак ;)</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/9169482591416905933/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/9169482591416905933?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/9169482591416905933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/9169482591416905933'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2025/08/cloudflare-client-mikrotik-routeros.html' title='CloudFlare Client на MikroTIK (RouterOS)'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-4136361195234137490</id><published>2025-02-18T11:20:00.001+02:00</published><updated>2025-02-18T11:20:12.920+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dhcp"/><category scheme="http://www.blogger.com/atom/ns#" term="RouterOS"/><title type='text'>Обмеження швидкості на етапі видачі ip-адреси DHCP-сервером в MikroTIK</title><content type='html'>&lt;h2 style=&quot;text-align: left;&quot;&gt;Час від часу було необхідно обмежити швидкість тим чи іншим клієнтам локальної мережі, які отримують адресу по DHCP.&lt;/h2&gt;&lt;p&gt;Що робили?&lt;/p&gt;&lt;p&gt;По-перше, створювали чергу для локальної мережі, наприклад так:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/queue simple add burst-limit=200M/200M burst-threshold=2M/2M burst-time=5s/5s max-limit=198M/198M name=lan queue=pcq-upload-src/pcq-download-dst target=bridge-local total-queue=pcq-dst-src
&lt;/pre&gt;&lt;p&gt;По-друге, фіксували за mac-адресою ту чи іншу ip-адресу. По-третє, створювали чергу, яку через parent підв&#39;язували до створеної черги локальної мережі і обмежували швидкість для саме цієї ip-адреси.&lt;/p&gt;&lt;p&gt;Така схема робоча, але не дуже зручна, коли треба обмежити швидкість, скажемо так, масово.&lt;/p&gt;&lt;p&gt;Припустимо купуємо у провайдера 100 мегабіт. У нас 10 робочих місць. Задача - кожному роздати по 10 мегабіт.&lt;/p&gt;&lt;p&gt;Звісно можна зафіксувати адреси, а можна…&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Варіант 1. Старе рішення.&lt;/h3&gt;&lt;p&gt;Перший варіант, який приходить на думку: обійти таблицю leases і під кожну виділену ip-адресу створити відповідне правило в черзі. Це вирішується якось так (позичено і перероблено з &lt;a href=&quot;https://forum.mikrotik.com/viewtopic.php?t=87219#&quot; target=&quot;_blank&quot;&gt;форуму &lt;/a&gt;MikroTIK):&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/ip dhcp-server lease
:foreach x in=[find] do={
 
    # grab variables for use below
    :local leaseaddr ([get $x address])
    :local leasemacaddr [get $x mac-address]
    :local leasehostname [get $x host-name]
    :local leasename [get $x comment]
    :local queuecomment

    :local minlimit 192.168.100.20
    :local maxlimit 192.168.100.100
 
    :local leaseinqueue false
 
    /queue simple
    :foreach y in=[find] do={
 
        #grab variables for use below
        :local queuetargetaddr [get $y target]
        :set queuecomment [get $y comment]
 
        # Isolate information  from the comment field (MAC, Hostname)
        :local queuemac [:pick $queuecomment 4 21]
        :local queuehostname [:pick $queuecomment 22 [:len $queuecomment]]
 
        # If MAC from lease matches the queue MAC then refresh the queue item
        :if ($queuemac = $leasemacaddr) do={
            # build a comment field
            :set queuecomment (&quot;dtq,&quot; . $leasemacaddr . &quot;,&quot; . $leasehostname)

            set $y target=$leaseaddr comment=$queuecomment
            :if ($leasename != &quot;&quot;) do= {
                set $y name=($leasename . &quot; (&quot; . $leasemacaddr . &quot;)&quot;)
            } else= {
                :if ($leasehostname != &quot;&quot;) do= {
                    set $y name=($leasehostname . &quot; (&quot; . $leasemacaddr . &quot;)&quot;)
                } else= {
                    set $y name=$leasemacaddr
                }
            }
            :set leaseinqueue true
        } else= {
            # if ip exists for this lease but mac is different then update mac/hostname and reset counter
            :if ($queuetargetaddr = $leaseaddr) do={
                # build a comment field
                :set queuecomment (&quot;dtq,&quot; . $leasemacaddr . &quot;,&quot; . $leasehostname)
 
                set $y comment=$queuecomment
                reset-counters $y
                :if ($leasename != &quot;&quot;) do= {
                    set $y name=($leasename . &quot; (&quot; . $leasemacaddr . &quot;)&quot;)
                } else= {
                    :if ($leasehostname != &quot;&quot;) do= {
                        set $y name=($leasehostname . &quot; (&quot; . $leasemacaddr . &quot;)&quot;)
                    } else= {
                        set $y name=$leasemacaddr
                    }
                }
                :set leaseinqueue true
            }
        }
    }
 
    # There was not an existing entry so add one for this lease
    :if ($leaseinqueue = false) do={
        # build a comment field
        :set queuecomment (&quot;dtq,&quot; . $leasemacaddr . &quot;,&quot; . $leasehostname)
        # build command
        :local cmd &quot;/queue simple add parent=lan target=$leaseaddr max-limit=100M/100M comment=$queuecomment&quot;
        :if ($leasename != &quot;&quot;) do={ 
            :set cmd &quot;$cmd name=\&quot;$leasename ($leasemacaddr)\&quot;&quot; 
        } else= {
            :if ($leasehostname != &quot;&quot;) do={
                :set cmd &quot;$cmd name=\&quot;$leasehostname ($leasemacaddr)\&quot;&quot;
            } else= {
                :set cmd &quot;$cmd name=\&quot;$leasemacaddr\&quot;&quot;
            }
        }
 
        # If within the range is executed
        :if ($leaseaddr &amp;gt;= $minlimit &amp;amp;&amp;amp; $leaseaddr &amp;lt;= $maxlimit) do={
            :execute $cmd
        }
    }
}
 
# Cleanup Routine - remove dynamic entries that no longer exist in the lease table
/queue simple
:foreach z in=[find] do={
    :local queuecomment [get $z comment]
    :local queue1stpart [:pick $queuecomment 0 3]
    :local queue2ndpart [:pick $queuecomment 4 21]
    :if ( $queue1stpart = &quot;dtq&quot;) do={
        :if ( [/ip dhcp-server lease find mac-address=$queue2ndpart] = &quot;&quot;) do={
            :log info (&quot;DTQ: Removing stale entry for MAC Address - &quot; . $queue2ndpart)
            remove $z
        }
    }
}&lt;/pre&gt;&lt;p&gt;Це дійсно працює. Цей скрипт можна додати в Scheduler і насолоджуватися його роботою. Звісно за необхідності варто змінити на свій смак встановлення локальної змінної cmd.&lt;/p&gt;&lt;p&gt;Цей метод працює на будь-яких версіях RouterOS (правда на дуже старих не перевіряв, але має працювати, бо тут нічого складного і специфічного немає.&lt;/p&gt;&lt;p&gt;Явним недоліком є саме необхідність використання Scheduler, щоб підтримувати черги в актуальному стані.&lt;/p&gt;&lt;p&gt;Про те є інший, більш елегантний метод. Більш легкий метод.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Варіант 2. Lease Script.&lt;/h3&gt;&lt;p&gt;В WinBox (або в WebFig, кому як подобається) переходимо в IP → DHCP Server. Відкриваємо налаштування свого DHCP. Переходимо у вкладку Script. Тут у нас велике поле для Lease Script, який буде виглядати приблизно так:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;:local queueName &quot;lan-$leaseActIP-$leaseActMAC&quot;;
:if ($leaseBound = &quot;1&quot;) do={
    :log info &quot;DHCP Lease START: $queueName&quot;
    :local hostName [/ip dhcp-server lease get [find where active-mac-address=$leaseActMAC &amp;amp;&amp;amp; active-address=$leaseActIP] host-name]
    /queue simple add burst-limit=50M/50M burst-threshold=1M/1M burst-time=5s/5s max-limit=49M/49M total-burst-limit=50M total-burst-threshold=1M total-burst-time=5s total-limit-at=48M total-max-limit=49M total-queue=pcq-dst-src name=$queueName parent=lan target=($leaseActIP . &quot;/32&quot;) comment=&quot;$leaseActIP [ $leaseActMAC ] $hostName&quot;;
} else={
    :log info &quot;DHCP Lease STOP: $queueName&quot;
    /queue simple remove $queueName
}&lt;/pre&gt;&lt;p&gt;І все. Скрипт викликається DHCP-сервером коли він «видає» або «забирає» ip-адресу. Відповідним чином встановлюється змінн $leaseBound, коли сервер видає адресу вона дорівнює &quot;1&quot;.&lt;/p&gt;&lt;p&gt;Звісно, що тут можна додати й інші умови, інші виключення, тощо. Можна зробити й іншу структуру самих черг. Але, сподіваюся, що все й без того прозоро й зрозуміло. Користуймося.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/4136361195234137490/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/4136361195234137490?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/4136361195234137490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/4136361195234137490'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2025/02/ip-dhcp-mikrotik.html' title='Обмеження швидкості на етапі видачі ip-адреси DHCP-сервером в MikroTIK'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-8134011318524836739</id><published>2024-09-20T08:38:00.001+03:00</published><updated>2024-09-20T08:38:30.253+03:00</updated><title type='text'>Як зробити так щоб Linux віддавав перевагу IPv4 адресації, а не IPv6?</title><content type='html'>&lt;p&gt;Багато провайдерів в Україні ще не надають користувачам IPv6. В принципі, в повсякденні, користувачі цього не помічають. Але є випадки коли все-ж-таки треба отримувати доступ до тих чи інших IPv6 ресурсів. В таких випадках доводиться користуватися &lt;a href=&quot;https://tunnelbroker.net/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Hurricane Electric’s IPv6 tunnel&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;З помічених недоліків такого підходу можу визначити два. По-перше, це не дуже швидко. Але це не скарга, бо врешті-решт це безкоштовне рішення. І за це рішення можна лише подякувати. А по-друге, хоч все й чудово працює, але подекуди виникають певні труднощі, коли ресурси на кшталт Google починають активно перевіряти тебе &quot;Підтвердьте, що ви не робот&quot;.&lt;/p&gt;&lt;p&gt;Підозрюю, що це виникає саме тому, що за замовчуванням&amp;nbsp;Linux, як в принципі і більшість операційних систем, віддає перевагу саме IPv6. Але чи можна змінити таку поведінку і, в тому випадку коли ресурс має IPv4 та IPv6 адресацію, віддавати перевагу IPv4?&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;

Поведінка за замовчуванням: getaddrinfo та RFC 3484

&lt;/h3&gt;&lt;blockquote style=&quot;border-left: 3px solid rgb(155, 104, 0); font-style: italic; margin: 0px; padding: 0px 0px 0px 20px;&quot;&gt;&lt;p&gt;Виклик &lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;getaddrinfo(3)&lt;/code&gt; може повернути декілька відповідей. Відповідно до RFC 3484 ці відповіді мають бути відсортовані таким чином, щоб відповідь із найвищим показником успіху була першою у списку. RFC надає алгоритм для сортування.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Цей алгоритм сортування за замовчуванням і набір правил, що стоять за ним, призводять до того, що IPv6 завжди має перевагу перед IPv4:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;…
EXAMPLES
       The default table according to RFC 3484 would be specified with the following configuration file:

           label  ::1/128       0
           label  ::/0          1
           label  2002::/16     2
           label ::/96          3
           label ::ffff:0:0/96  4
           precedence  ::1/128       50
           precedence  ::/0          40
           precedence  2002::/16     30
           precedence ::/96          20
           precedence ::ffff:0:0/96  10
…&lt;/pre&gt;&lt;p&gt;Це визначає підмережі IPv6 та їхній пріоритет. IPv4 фактично є вбудованою підмножиною IPv6, і ::ffff:0:0/96 вказує 32-розрядну мережу, яка і є IPv4 (подивіться на &lt;a href=&quot;https://www.ripe.net/participate/member-support/lir-basics/ipv6_reference_card.pdf&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;шпаргалку RIPE щодо префіксів адрес IPv6&lt;/a&gt;, щоб дізнатися більше). Це означає, що, наприклад, адреса IPv6 ::ffff:192.168.0.2 і адреса IPv4 192.168.0.2 ідентичні.&lt;/p&gt;&lt;p&gt;Усвідомлюючи це, тепер ми розуміємо, чому перевага буде надаватися адресам IPv6, і бачимо, як можемо легко підвищити пріоритет для IPv4. Просто перетворимо пріоритет 10 на щось на зразок 100, що є вищим за будь-що інше.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Застосування конфігурації&lt;/h3&gt;&lt;p&gt;Щоб застосувати конфігурацію, просто відредагуємо або створимо файл /etc/gai.conf і встановимо стандартну конфігурацію зі зміненим пріоритетом для IPv4:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;label  ::1/128       0
label  ::/0          1
label  2002::/16     2
label ::/96          3
label ::ffff:0:0/96  4
precedence  ::1/128       50
precedence  ::/0          40
precedence  2002::/16     30
precedence ::/96          20
precedence ::ffff:0:0/96  100&lt;/pre&gt;&lt;p&gt;Варто переконатися, що надано повну й правильну конфігурацію, оскільки якщо щось налаштовано в цьому файлі, усю конфігурацію за замовчуванням буде відкинуто.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Переконаємося, що все працює&lt;/h3&gt;&lt;p&gt;Простий спосіб перевірки – просто побачити, який тип IP-адреси використовується під час запиту того чи іншого веб-сайту. В цьому прикладі надсилаємо запит до my.ip.fi через IPv4, потім через IPv6, а потім використовуючи типове значення:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ SITE=my.ip.fi; curl -4 ${SITE} &amp;amp;&amp;amp; curl -6 ${SITE} &amp;amp;&amp;amp; curl ${SITE}
176.104.xxx.xxx
2001:470:64xx:xxxx:xxxx:xxxx:98b7:29cc
176.104.xxx.xxx&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;За замовчуванням тепер IPv4 🎉&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/8134011318524836739/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/8134011318524836739?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/8134011318524836739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/8134011318524836739'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2024/09/linux-ipv4-ipv6.html' title='Як зробити так щоб Linux віддавав перевагу IPv4 адресації, а не IPv6?'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-2462504690962757663</id><published>2024-07-04T10:50:00.002+03:00</published><updated>2024-07-04T10:50:42.867+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MikroTik"/><category scheme="http://www.blogger.com/atom/ns#" term="RouterOS"/><category scheme="http://www.blogger.com/atom/ns#" term="wireguard"/><title type='text'>Налаштування WireGuard-сервера на Mikrotik</title><content type='html'>&lt;p&gt;Раніше я був поверхнево написав про &lt;a href=&quot;https://oldengremlin.blogspot.com/2023/10/wireguard-mikrotik-linux-debian.html&quot;&gt;Встановлення з&#39;єднання wireguard між Mikrotik та Linux (Debian)&lt;/a&gt;, але є нюанс… тоді була задача поєднати швиденько Linux-хост з Mikrotik-ом, але досконало вивчати нюанси було ліньки 😢&lt;/p&gt;&lt;p&gt;Але от нещодавно відбулася подія яка примусила більш докладно підійти до процесу: злетів офісний vpn-сервер на базі Debian і було прийнято рішення перенести конфігурацію на RB3011. Окрім того, що було піднято сервіси L2TP/IPSec та інші, також захотілося більш докладно підійти до WireGuard…&lt;/p&gt;&lt;p&gt;Що сказати, незважаючи на те, що MikroTIK молодці і доволі докладно підходять до написання &lt;a href=&quot;https://help.mikrotik.com/docs/display/ROS/WireGuard&quot;&gt;документації&lt;/a&gt;, але не все, що хочеться там є. Доводиться притягати весь попередній досвід щоб розібратися що до чого і як. Звісно, можливо, десь є більш докладне документування (я переконаний, що є), але ж то було б не настільки цікавим процесом.&lt;/p&gt;&lt;p&gt;Що хотілося? Хотілося створити багато клієнтів, які б підключалися по wireguard і отримували через організований тунель доступ до ресурсів та до Інтернет.&lt;/p&gt;&lt;p&gt;Спочатку думалося, що можна створити один wireguard інтерфейс і до нього купу малу peer-ів, але… але щось в мене пішло не так. Нормально в такій схемі захотів працювати тільки перший peer, всі хто підключалися після нього чомусь пасли задніх, хоча трафік від них в wireguard-інтерфейсі через torch я бачив. Пляски з бубном не допомогали… можливо бубен був не тієї конструкції, можливо щось інше, але прийшов врешті-решт до схеми яка не те що запрацювала, а запрацювала майже ідеально.&lt;/p&gt;&lt;p&gt;Далі по кроках.&lt;/p&gt;&lt;p&gt;По-перше, під кожного клієнта створюємо окремий wireguard-інтерфейс. При цьому слухати будемо різні порти.&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; padding: 3px;&quot;&gt;/interface wireguard&lt;/code&gt;
add listen-port=12001 mtu=1420 name=wireguard1
add listen-port=12005 mtu=1420 name=wireguard5
add listen-port=12009 mtu=1420 name=wireguard9
add listen-port=13231 mtu=1420 name=wireguard13&lt;/pre&gt;&lt;p&gt;Далі до кожного інтерфейса додамо адресу в мережі /30, в якій молодшу адресу й надаму інтерфейсу:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; padding: 3px;&quot;&gt;/ip address&lt;/code&gt;
add address=192.168.77.1/30 interface=wireguard1
add address=192.168.77.5/30 interface=wireguard5
add address=192.168.77.9/30 interface=wireguard9
add address=192.168.77.13/30 interface=wireguard13&lt;/pre&gt;
&lt;p&gt;Далі для кожного інтерфейса створимо peer-а:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; padding: 3px;&quot;&gt;/interface wireguard peers&lt;/code&gt;
add allowed-address=0.0.0.0/0 client-address=192.168.77.2/30 client-endpoint=NA.NB.NC.ND client-keepalive=20s interface=wireguard1 is-responder=yes name=peer-2 private-key=auto
add allowed-address=0.0.0.0/0 client-address=192.168.77.6/30 client-endpoint=NA.NB.NC.ND client-keepalive=20s interface=wireguard5 is-responder=yes name=peer6  private-key=auto
add allowed-address=0.0.0.0/0 client-address=192.168.77.10/30 client-endpoint=NA.NB.NC.ND client-keepalive=20s interface=wireguard9 is-responder=yes name=peer-10 private-key=auto
add allowed-address=0.0.0.0/0 client-address=192.168.77.14/30 client-endpoint=NA.NB.NC.ND client-keepalive=20s interface=wireguard13 is-responder=yes name=peer-10 private-key=auto&lt;/pre&gt;

&lt;p&gt;Тут&amp;nbsp;&lt;span style=&quot;background-color: white;&quot;&gt;NA.NB.NC.ND це ip-адреса серверної частини WireGuard.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;В принципі все, що стосується налаштування саме серверної частини WireGuard ми фактично зробили. Ми створили клієнтів яким дозволили через тунель весь трафік (тобто не тільки приватні мережі, а й вихід до Інтернет).&lt;/p&gt;&lt;p&gt;Подивитися конфігурацію для налаштування клієнта, а також і QR-код, можна, наприклад, так:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; padding: 3px;&quot;&gt;/interface/wireguard/peers show-client-config number=[find interface=wireguard1 ]&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;або ж через winbox.&lt;/p&gt;&lt;p&gt;Тепер пару слів про налаштування файрволу. Звісно, що у кожного може бути своє бачення, але поділюся своїм. Весь файрвол, безумовно, наводити не стану, лише ту частину яка стосується саме WireGuard.&lt;/p&gt;

&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; padding: 3px;&quot;&gt;/interface list&lt;/code&gt;
add name=WIREGUARD
&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; padding: 3px;&quot;&gt;/interface list member&lt;/code&gt;
add interface=wireguard1 list=WIREGUARD
add interface=wireguard5 list=WIREGUARD
add interface=wireguard9 list=WIREGUARD
add interface=wireguard13 list=WIREGUARD
&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; padding: 3px;&quot;&gt;/ip firewall address-list&lt;/code&gt;
add address=192.168.77.0/24 list=WIREGUARD
&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; padding: 3px;&quot;&gt;/ip firewall filter&lt;/code&gt;
add action=accept chain=input in-interface-list=WIREGUARD
add action=jump chain=input in-interface-list=INTERNET jump-target=wireguard
&lt;i&gt;add action=fasttrack-connection chain=forward connection-state=established,related hw-offload=yes
add action=accept chain=forward connection-state=established,related&lt;/i&gt;
add action=accept chain=forward in-interface-list=WIREGUARD out-interface-list=LAN
add action=accept chain=forward in-interface-list=WIREGUARD out-interface-list=INTRANET
add action=accept chain=forward in-interface-list=WIREGUARD out-interface-list=INTERNET
add action=accept chain=wireguard dst-port=12001 protocol=udp
add action=accept chain=wireguard dst-port=12005 protocol=udp
add action=accept chain=wireguard dst-port=12009 protocol=udp
add action=accept chain=wireguard dst-port=12013 protocol=udp
&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; padding: 3px;&quot;&gt;/ip firewall nat&lt;/code&gt;
add action=masquerade chain=srcnat out-interface-list=LAN src-address-list=WIREGUARD
add action=masquerade chain=srcnat out-interface-list=INTRANET src-address-list=WIREGUARD
add action=masquerade chain=srcnat out-interface-list=INTERNET src-address-list=WIREGUARD&lt;/pre&gt;



&lt;p&gt;Ідея, сподіваюся, є прозорою і зрозумілою, тому розжовувати що тут до чого, ну от не хочу.&lt;/p&gt;&lt;p&gt;От і все. В такій конфігурації клієнти (peer-и) чудово працюють паралельно, не заважаючи один одному.&lt;/p&gt;&lt;p&gt;Звісно, що порти та назви інтерфейсів кожен може взяти і обізвати так як йому зручно. Мені було зручно щоб був збіг з останнім октетом приватної адреси… якщо ж не вистачить то буде якось інакше.&lt;/p&gt;&lt;p&gt;Про налаштування кліантів на Android писати не стану там все не просто, а дуже просто: скануєте qr-код і все працює!&lt;/p&gt;&lt;p&gt;З очевидних недоліків такої конфігурації - дуже багато інтерфейсів і адрес, які треба прописати. Тому там де можна було введено list-и.&lt;/p&gt;&lt;p&gt;Очевидний плюс: простота налаштування клієнта - в переважній більшості все зводиться до простого сканування qr-кода.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/2462504690962757663/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/2462504690962757663?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/2462504690962757663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/2462504690962757663'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2024/07/wireguard-mikrotik.html' title='Налаштування WireGuard-сервера на Mikrotik'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-1228667094044981233</id><published>2024-04-23T08:15:00.000+03:00</published><updated>2024-04-23T08:15:03.541+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="dpkg-deb"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><title type='text'>dpkg-deb: error: archive &#39;…skip….deb&#39; uses unknown compression for member &#39;control.tar.zst&#39;, giving up</title><content type='html'>&lt;p&gt;&amp;nbsp;За останні декілька днів вже два рази зіткнувся з помилкою &quot;unknown compression for member&quot; при встановленні deb-пакетів. Один раз це відбулося в Linux-контейнері &lt;a href=&quot;https://fydeos.io/download/pc/intel-iris&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;FydeOS&lt;/a&gt;, другий раз в Debian Bullseye (11.9). І так, я цілком усвідомлюю, що є новіша версія Debian і там такої помилки не буде. Але що робити якщо є?&lt;/p&gt;&lt;p&gt;Було знайдено наступний &quot;рецепт&quot; (на прикладі &lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;apache-netbeans_21-1_all.deb&lt;/code&gt;):&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ mkdir apache-netbeans_21-1
$ cd apache-netbeans_21-1/
$ ln -s ../apache-netbeans_21-1_all.deb .
$ ar x apache-netbeans_21-1_all.deb
$ zstd -d &amp;lt; control.tar.zst | xz &amp;gt; control.tar.xz
$ zstd -d &amp;lt; data.tar.zst | xz &amp;gt; data.tar.xz
$ rm apache-netbeans_21-1_all.deb
$ ar -m -c -a sdsd apache-netbeans_21-1_all.deb debian-binary control.tar.xz data.tar.xz
$ rm debian-binary control.tar.xz data.tar.xz control.tar.zst data.tar.zst
$ sudo dpkg -i apache-netbeans_21-1_all.deb&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/1228667094044981233/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/1228667094044981233?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/1228667094044981233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/1228667094044981233'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2024/04/dpkg-deb-error-archive-skipdeb-uses.html' title='dpkg-deb: error: archive &#39;…skip….deb&#39; uses unknown compression for member &#39;control.tar.zst&#39;, giving up'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-5654928504295782128</id><published>2024-04-06T07:39:00.003+03:00</published><updated>2024-04-06T07:39:21.143+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="raspbian"/><title type='text'>Key is stored in legacy trusted.gpg keyring, see the DEPRECATION section in apt-key(8) for details</title><content type='html'>&lt;h3 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Дано:&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;$ apt update&lt;/code&gt;
В кеші:1 http://raspbian.raspberrypi.org/raspbian bookworm InRelease
В кеші:2 http://archive.raspberrypi.org/debian bullseye InRelease                                                    
В кеші:3 https://download.docker.com/linux/raspbian bullseye InRelease                                               
Зчитування переліків пакунків... Виконано           
Побудова дерева залежностей... Виконано
Зчитування інформації про стан... Виконано   
1 package can be upgraded. Run &#39;apt list --upgradable&#39; to see it.
W: http://raspbian.raspberrypi.org/raspbian/dists/bookworm/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&quot;Ліки&quot;:&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;$ apt-key list | grep -A4 &quot;trusted.gpg$&quot;&lt;/code&gt;
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
/etc/apt/trusted.gpg
--------------------
pub   rsa2048 2012-04-01 [SC]
      A0DA 38D0 D76E 8B5D 6388  7281 9165 938D &lt;span style=&quot;border: thin dotted; overflow: auto; padding: 0px; text-align: left;&quot;&gt;90FD DD2E&lt;/span&gt;
uid           [невідома] Mike Thompson (Raspberry Pi Debian armhf ARMv6+VFP) &amp;lt;mpthompson@gmail.com&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;$ sudo apt-key export &lt;span style=&quot;border: thin dotted; overflow: auto; padding: 0px; text-align: left;&quot;&gt;90FDDD2E&lt;/span&gt; | sudo gpg --dearmor -o /tmp/raspi.gpg&lt;/code&gt;
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;$ file /tmp/raspi.gpg&lt;/code&gt;
/tmp/raspi.gpg: OpenPGP Public Key Version 4, Created Sun Apr  1 21:02:33 2012, RSA (Encrypt or Sign, 2048 bits); User ID; Signature; OpenPGP Certificate&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;$ sudo apt-key del 90FDDD2E&lt;/code&gt;
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
OK&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;$ sudo mv /tmp/raspi.gpg /etc/apt/trusted.gpg.d/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;$ apt update&lt;/code&gt;
В кеші:1 http://archive.raspberrypi.org/debian bullseye InRelease
В кеші:2 https://download.docker.com/linux/raspbian bullseye InRelease                                              
В кеші:3 http://raspbian.raspberrypi.org/raspbian bookworm InRelease                                                
Зчитування переліків пакунків... Виконано        
Побудова дерева залежностей... Виконано
Зчитування інформації про стан... Виконано   
1 package can be upgraded. Run &#39;apt list --upgradable&#39; to see it.&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/5654928504295782128/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/5654928504295782128?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/5654928504295782128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/5654928504295782128'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2024/04/key-is-stored-in-legacy-trustedgpg.html' title='Key is stored in legacy trusted.gpg keyring, see the DEPRECATION section in apt-key(8) for details'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-2446648664405533493</id><published>2024-03-29T13:34:00.005+02:00</published><updated>2024-03-29T13:35:35.746+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chromeos"/><category scheme="http://www.blogger.com/atom/ns#" term="Chromium OS"/><category scheme="http://www.blogger.com/atom/ns#" term="fydeos"/><title type='text'>Enable additional developer mode features: root file system write permission</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote style=&quot;background-color: rgba(0, 0, 0, 0.01); box-shadow: rgba(0, 0, 0, 0.87) 2px 0px 0px inset; color: rgba(0, 0, 0, 0.6); font-family: proxima-nova, sans-serif; font-style: italic; margin-bottom: 24px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding: 12px 30px;&quot;&gt;&lt;p style=&quot;font-size: 16px; line-height: 30px; margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important;&quot;&gt;Last Update: 2024-03-12&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;background-color: rgba(0, 0, 0, 0.01); box-shadow: rgba(0, 0, 0, 0.87) 2px 0px 0px inset; color: rgba(0, 0, 0, 0.6); font-family: proxima-nova, sans-serif; font-style: italic; margin: 24px 0px; padding: 12px 30px;&quot;&gt;&lt;p style=&quot;font-size: 16px; line-height: 30px; margin: 12px 0px;&quot;&gt;The following guide or recipe requires shell access to your FydeOS installation, therefore “developer mode” is assumed to be enabled.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;background-color: white; font-family: proxima-nova, sans-serif; line-height: 30px; margin: 12px 0px;&quot;&gt;In FydeOS, if you need to modify system files or perform custom operations, you must first disable root file system verification. This step is taken for security reasons, aimed at preventing system stability and security issues that could arise from unauthorized modifications. Here are the detailed instructions:&lt;/p&gt;&lt;ol style=&quot;background-color: white; font-family: proxima-nova, sans-serif; line-height: 30px; margin: 12px 0px;&quot;&gt;&lt;li&gt;Press&amp;nbsp;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;Control + Alt + T&lt;/code&gt;&amp;nbsp;on your FydeOS desktop to open the terminal.&lt;/li&gt;&lt;li&gt;Type&amp;nbsp;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;shell&lt;/code&gt;&amp;nbsp;and hit Enter to access the shell environment.&lt;/li&gt;&lt;li&gt;Enter&amp;nbsp;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;sudo -i&lt;/code&gt;&amp;nbsp;to get root permissions.&lt;/li&gt;&lt;li&gt;Execute&amp;nbsp;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.06); border-radius: 3px; font-family: Courier, monospace; padding: 3px;&quot;&gt;/usr/sbin/crossystem_mode-switch.sh disable-rootfs-verification&lt;/code&gt;&amp;nbsp;to turn off root file system verification.&lt;/li&gt;&lt;li&gt;Reboot your device.&lt;/li&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/2446648664405533493/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/2446648664405533493?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/2446648664405533493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/2446648664405533493'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2024/03/enable-additional-developer-mode.html' title='Enable additional developer mode features: root file system write permission'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-277241545500469998</id><published>2024-03-27T08:40:00.004+02:00</published><updated>2024-03-27T11:41:02.946+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="netfilter"/><title type='text'>Налаштовуємо netfilter в Linux для виявлення потенційно небажаного трафіка</title><content type='html'>&lt;p&gt;&amp;nbsp;Хочу поділится одним &quot;рецептом&quot;, який алгоритм роботи якого вже доволі давно було опробовано на RouterOS і от лише нещодавно переписано під netfilter.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;В чому полягає ідея?&lt;/h3&gt;&lt;p&gt;До того як з&#39;єднання буде встановлено у стан&amp;nbsp;established перевірити потік трафіку, скажемо так, на періодичність доступу. Адже, давайте скажемо чесно, доступ до наших ресурсів (до нашого хоста) з тих чи інших адрес в Інтернет, на порти, на яких не задіяно жодних сервісів, завжди виглядає як не небажаним то підозрілим.&lt;/p&gt;&lt;p&gt;Що ми робимо? Ми організовуємо set-и з&amp;nbsp;timeout-ами. Ці&amp;nbsp;timeout-и можуть бути виставлені в доволі різні значення, але ідея полягає саме в тому, щоб обмежити доступ до хоста, якщо хтось доволі сильно знахабніє у встановлений час. Set-ів може бути багато, може бути мало, в прикладі їх наведено 16. За аналогією можна зробити 10, а можна зробити й 20, тут вже лише фантазія обмежує.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Від лірики до практики.&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo nft add table ip scanDetector&lt;/pre&gt;&lt;p&gt;Створимо &quot;списки довіри&quot;. Хтось може обізвати whitelist, але я обізвав&amp;nbsp;trusted та&amp;nbsp;ignore, так вже історично склалося.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo nft add set ip scanDetector trusted { type ipv4_addr\; flags interval\; auto-merge\; comment \&quot;Truster ip and net\&quot; \; }
sudo nft add element ip scanDetector trusted { 192.168.1.0/24, 195.38.16.2, 195.38.16.8 }

sudo nft add set ip scanDetector ignore { type ipv4_addr\; flags interval\; auto-merge\; comment \&quot;Ignore ip and net\&quot; \; }
sudo nft add element ip scanDetector ignore { 0.0.0.0, 127.0.0.0/8 }&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;Тепер створимо set-и у створеній нами таблиці scanDetector:&lt;div&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo nft add set ip scanDetector level15 { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 15\&quot; \; timeout 1m \; }
sudo nft add set ip scanDetector level14 { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 14\&quot; \; timeout 2m \;  }
sudo nft add set ip scanDetector level13 { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 13\&quot; \; timeout 3m \;  }
sudo nft add set ip scanDetector level12 { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 12\&quot; \; timeout 4m \;  }
sudo nft add set ip scanDetector level11 { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 11\&quot; \; timeout 5m \;  }
sudo nft add set ip scanDetector level10 { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 10\&quot; \; timeout 10m \;  }
sudo nft add set ip scanDetector level9  { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 9\&quot; \;  timeout 15m \;  }
sudo nft add set ip scanDetector level8  { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 8\&quot; \;  timeout 20m \; }
sudo nft add set ip scanDetector level7  { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 7\&quot; \;  timeout 30m \; }
sudo nft add set ip scanDetector level6  { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 6\&quot; \;  timeout 40m \; }
sudo nft add set ip scanDetector level5  { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 5\&quot; \;  timeout 50m \; }
sudo nft add set ip scanDetector level4  { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 4\&quot; \;  timeout 1h \; }
sudo nft add set ip scanDetector level3  { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 3\&quot; \;  timeout 1h10m \; }
sudo nft add set ip scanDetector level2  { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 2\&quot; \;  timeout 1h20m \; }
sudo nft add set ip scanDetector level1  { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 1\&quot; \;  timeout 1h30m \; }
sudo nft add set ip scanDetector level0  { type ipv4_addr\; flags dynamic\; comment \&quot;SynScan Level 0\&quot; \;  timeout 3h \; }
sudo nft add set ip scanDetector scan    { type ipv4_addr\; flags dynamic\; comment \&quot;Scan Detect\&quot; \;      timeout 31d \; }&lt;/pre&gt;&lt;div&gt;&quot;Повісимо&quot;&amp;nbsp;hook і дамо йому&amp;nbsp;priority нижчий за той в якому робимо всі інші перевірки з контролю доступу:&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo nft add chain ip scanDetector input { type filter hook input priority -50 \; }&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Ну й нарешті правила, які контролюють всі пакети, які ще не пройшли перевірки, тобто мають&amp;nbsp;state new, а не established, тощо:&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;do nft add rule scanDetector input ct state new ip saddr @trusted counter log return
sudo nft add rule scanDetector input ct state new ip saddr @ignore counter log return
sudo nft add rule scanDetector input ct state new ip saddr != @scan    ip saddr @level0  add @scan    { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level0  ip saddr @level1  add @level0  { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level1  ip saddr @level2  add @level1  { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level2  ip saddr @level3  add @level2  { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level3  ip saddr @level4  add @level3  { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level4  ip saddr @level5  add @level4  { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level5  ip saddr @level6  add @level5  { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level6  ip saddr @level7  add @level6  { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level7  ip saddr @level8  add @level7  { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level8  ip saddr @level9  add @level8  { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level9  ip saddr @level10 add @level9  { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level10 ip saddr @level11 add @level10 { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level11 ip saddr @level12 add @level11 { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level12 ip saddr @level13 add @level12 { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level13 ip saddr @level14 add @level13 { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level14 ip saddr @level15 add @level14 { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr != @level15                   add @level15 { ip saddr } counter
sudo nft add rule scanDetector input ct state new ip saddr @scan update @scan { ip saddr } counter log prefix \&quot;[nft] scandetect-input-drop \&quot; drop
sudo nft add rule scanDetector input              ip saddr @scan update @scan { ip saddr } counter log prefix \&quot;[nft] scandetect-input-another-drop \&quot; drop&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Тобто, безумовно пропускаємо трафак з хостів та мереж, які було додано в set-и trusted та ignore.&amp;nbsp; Хости в списки level15…level0 додаються поступово. І це нормально. Не кожен хто до нас &quot;стукає&quot; може бути зловмисником. Але якщо стукає ну дуже вже нахабно то рано чи пізно він потрапить в список scan. Так, в set scan потрапляють лише і виключно ті хости, які були ну ду-у-у-у-уже нахабними. А вибратися з set-у scan не так вже й просто, бо якщо виявляється new-пакет з хоста, що вже є в set-і scan то час його перебування в списку оновлюється на початковий, той, що задано параметром&amp;nbsp;timeout.&lt;/div&gt;&lt;div&gt;От такий от рецепт з блокування доступу.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Масштабуємо рішення на доступ до docker-контейнерів.&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;Все це добре, але щоб контролювати транзитний трафік hook на input нам не дуже підходить. То додаємо hook на&amp;nbsp;forward:&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo nft add chain ip scanDetector forward { type filter hook forward priority -50 \; }&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Ну, а далі треба пройтися по інтерфейсах, на яких &quot;живуть&quot; docker-контейнери і на них &quot;підвісити&quot; правила. Для цього можна скористатися переглядом або всіх netfilter-правил:&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo nft list ruleset&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;або ж лише тієї частки в яких задано&amp;nbsp;chain DOCKER, в моєму випадку це:&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo nft list table filter&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;То ж сформуємо правила:&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;for IFACE in $( sudo nft list table filter | sed &#39;/chain DOCKER {/,/^$/!d;/^$/,$d&#39; | awk &#39;$4~/^oifname$/ { print $5 }&#39; | tr -d \&quot; | sort -u ); do
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr @trusted counter log return
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr @ignore counter log return
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @scan    ip saddr @level0  add @scan    { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level0  ip saddr @level1  add @level0  { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level1  ip saddr @level2  add @level1  { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level2  ip saddr @level3  add @level2  { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level3  ip saddr @level4  add @level3  { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level4  ip saddr @level5  add @level4  { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level5  ip saddr @level6  add @level5  { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level6  ip saddr @level7  add @level6  { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level7  ip saddr @level8  add @level7  { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level8  ip saddr @level9  add @level8  { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level9  ip saddr @level10 add @level9  { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level10 ip saddr @level11 add @level10 { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level11 ip saddr @level12 add @level11 { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level12 ip saddr @level13 add @level12 { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level13 ip saddr @level14 add @level13 { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level14 ip saddr @level15 add @level14 { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr != @level15                   add @level15 { ip saddr } counter
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE} ct state new ip saddr @scan update @scan { ip saddr } counter log prefix \&quot;[nft] scandetect-forward-drop \&quot; drop
    sudo nft add rule scanDetector forward iifname != ${IFACE} oifname ${IFACE}              ip saddr @scan update @scan { ip saddr } counter log prefix \&quot;[nft] scandetect-forward-another-drop \&quot; drop
done&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Все, всі правила в&amp;nbsp;table scanDetector сформовано. Заданий priority для&amp;nbsp;chain нижчий за той, що задано hook-ами в table filter, відповідно й всі ці перевірки будуть виконуватися раніше. І лише після цих перевірок пакети потралятимуть на перевірку в table filter.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Подивитися на те, що вийшло&lt;/h3&gt;&lt;div&gt;Всі set-и та правила:&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo nft list table scanDetector&lt;/pre&gt;&lt;p&gt;Подивитися на вміста set-у scan:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo nft list table scanDetector | sed &#39;/set scan {/,/^$/!d;/^$/,$d&#39;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;div style=&quot;font-size: medium; font-weight: 400;&quot;&gt;&lt;p&gt;Кількість елементів у set-і scan:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px;&quot;&gt;sudo nft list table scanDetector | sed &#39;/set scan {/,/^$/!d;/^$/,$d&#39; | egrep expires | awk -v RS=&#39;[[:space:]]+&#39; &#39;/expires/&#39; | wc -l&lt;/pre&gt;&lt;/div&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Які підводні камені?&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;Ну, наприклад, одних з неприємних моментів, при застосуванні лише цих правил, може бути блокування зовнішніх клієнтів, наприклад, web-сервісів, які можуть бути розташовані на хосту. Вірішеється це доволі просто, теж з set-ами, але це тема для зовсім іншої статті.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/277241545500469998/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/277241545500469998?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/277241545500469998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/277241545500469998'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2024/03/netfilter-linux.html' title='Налаштовуємо netfilter в Linux для виявлення потенційно небажаного трафіка'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-4336904706905282816</id><published>2024-03-24T08:53:00.002+02:00</published><updated>2024-03-24T08:53:24.105+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="virtualbox"/><title type='text'>Встановлення VirtualBox на Debian 12 (bookworm)</title><content type='html'>&lt;p&gt;Без зайвих слів, покроково:&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;wget -O- -q https://www.virtualbox.org/download/oracle_vbox_2016.asc | sudo gpg --dearmour -o /usr/share/keyrings/oracle_vbox_2016.gpg&lt;/pre&gt;&lt;/li&gt;
  &lt;li&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;echo &quot;deb [arch=amd64 signed-by=/usr/share/keyrings/oracle_vbox_2016.gpg] http://download.virtualbox.org/virtualbox/debian bookworm contrib&quot; | sudo tee /etc/apt/sources.list.d/virtualbox.list&lt;/pre&gt;&lt;/li&gt;
  &lt;li&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo apt update&lt;/pre&gt;&lt;/li&gt;
  &lt;li&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo apt install virtualbox-7.0&lt;/pre&gt;&lt;/li&gt;
  &lt;li&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;wget https://download.virtualbox.org/virtualbox/$( vboxmanage -v | cut -dr -f1 )/Oracle_VM_VirtualBox_Extension_Pack-$( vboxmanage -v | cut -dr -f1 ).vbox-extpack&lt;/pre&gt;&lt;/li&gt;
  &lt;li&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-7.0.14.vbox-extpack
vboxmanage list extpacks&lt;/pre&gt;&lt;/li&gt;
  &lt;li&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;groups ${USERNAME}
sudo usermod -a -G vboxusers ${USERNAME}&lt;/pre&gt;&lt;/li&gt;
  &lt;p&gt;&lt;/p&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/4336904706905282816/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/4336904706905282816?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/4336904706905282816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/4336904706905282816'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2024/03/virtualbox-debian-12-bookworm.html' title='Встановлення VirtualBox на Debian 12 (bookworm)'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-8877220329121619912</id><published>2024-01-11T07:16:00.001+02:00</published><updated>2024-01-11T07:16:13.538+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bash"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="poweroff"/><category scheme="http://www.blogger.com/atom/ns#" term="reboot"/><category scheme="http://www.blogger.com/atom/ns#" term="shutdown"/><title type='text'>Альтернатива poweroff та reboot в Linux</title><content type='html'>&lt;p&gt;Так чи інакше, всі сучасні, більш-менш просунуті в консолі користувачі Linux знають про команди:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ sudo reboot
$ sudo poweroff&lt;/pre&gt;&lt;p&gt;Косматі діді з бородами можуть згадати про магічні заклинання через команду shutdown, як то, в сачасній інтерпретації:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ sudo shutdown -r -t now
$ sudo shutdown -P -t now&lt;/pre&gt;&lt;p&gt;Але для справжніх джедаїв є інший шлях!&lt;/p&gt;&lt;p&gt;Якщо &quot;не хочуть&quot; працювати а ні reboot, а ні poweroff то…&lt;/p&gt;&lt;p&gt;Перезавантажуємо хост з Linux на борту:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;# echo 1 &amp;gt; /proc/sys/kernel/sysrq
# echo b &amp;gt; /proc/sysrq-trigger&lt;/pre&gt;&lt;p&gt;Те саме, тільки перед перезавантаженням робимо аналог sync&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;# echo 1 &amp;gt; /proc/sys/kernel/sysrq
# echo s &amp;gt; /proc/sysrq-trigger
# echo b &amp;gt; /proc/sysrq-trigger&lt;/pre&gt;&lt;p&gt;Ну, а наступні магічні закляття просто вимикають хост:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;# echo 1 &amp;gt; /proc/sys/kernel/sysrq
# echo о &amp;gt; /proc/sysrq-trigger&lt;/pre&gt;&lt;p&gt;Як при цьому ще й зробити sync, пропоную здогадатися самостійно ;)&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/8877220329121619912/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/8877220329121619912?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/8877220329121619912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/8877220329121619912'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2024/01/poweroff-reboot-linux.html' title='Альтернатива poweroff та reboot в Linux'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-5542401572477373278</id><published>2024-01-05T07:50:00.003+02:00</published><updated>2024-01-05T07:50:56.907+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="jar"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="mc"/><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><title type='text'>Не відкриваються jar-файли у Midnight Commander в Debian</title><content type='html'>&lt;p&gt;Дуже, дуже дратувало те, що після того як в netbeans було зібрано jar-файл, mc відмовлявся його відкривати та переглядати і видавав помилку.&lt;/p&gt;&lt;p&gt;Як це завжди буває, все вирішилося не просто, а надто просто.&lt;span&gt;&amp;nbsp;В mc переходимо в розділ меню Command&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #4d5156; font-family: arial, sans-serif; font-size: 14px;&quot;&gt;→&lt;/span&gt;&lt;span&gt;&amp;nbsp;Edit extension file (або ж дивимося файл&amp;nbsp;&lt;/span&gt;~/.config/mc/mc.ext) і бачимо, що про розширення jar просто &quot;забули&quot;.&lt;/p&gt;&lt;p&gt;Ну… буває. Нічого страшного. Просто десь після zip додаємо jar:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;# zip
shell/i/.zip
        Open=%cd %p/uzip://
        View=%view{ascii} /usr/lib/mc/ext.d/archive.sh view zip

&lt;b&gt;# jar
shell/i/.jar
        Open=%cd %p/uzip://
        View=%view{ascii} /usr/lib/mc/ext.d/archive.sh view zip
&lt;/b&gt;
# zoo
shell/i/.zoo
        Open=%cd %p/uzoo://
        View=%view{ascii} /usr/lib/mc/ext.d/archive.sh view zoo&lt;/pre&gt;&lt;p&gt;Все! Тепер jar-файли почали відкриватися по Enter.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/5542401572477373278/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/5542401572477373278?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/5542401572477373278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/5542401572477373278'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2024/01/jar-midnight-commander-debian.html' title='Не відкриваються jar-файли у Midnight Commander в Debian'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-1171918472201674986</id><published>2023-12-28T07:23:00.001+02:00</published><updated>2023-12-28T07:23:24.426+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="binfmts"/><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="wine"/><title type='text'>binfmts для exe-файлів</title><content type='html'>&lt;p&gt;В &lt;a href=&quot;https://oldengremlin.blogspot.com/2023/12/java-21-debian-ubuntu.html&quot;&gt;попередній статті&lt;/a&gt; я частково вже зачепив тему binfmts.&lt;/p&gt;
&lt;p&gt;Що це за приблуда, що це за звір такий?&lt;/p&gt;&lt;p&gt;&lt;b&gt;update-binfmts — maintain registry of executable binary formats&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Тобто в Debian (та й інших дистрибутивах Linux) ми можемо запускати бінарні файли на виконання, навіть якщо це не ELF. Просто для цього треба навчити Linux їх запускати.&lt;/p&gt;&lt;p&gt;Для початку можна подивитися на вже встановлені зв&#39;язки. Виглядатиме це приблизно так:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ sudo update-binfmts --display&lt;/b&gt;
cli (enabled):
     package = mono-runtime
        type = magic
      offset = 0
       magic = MZ
        mask = 
 interpreter = /usr/bin/cli
    detector = /usr/lib/cli/binfmt-detector-cli
jar (enabled):
     package = oracle-java16
        type = magic
      offset = 0
       magic = PK\x03\x04
        mask = 
 interpreter = /usr/lib/jvm/java-16-oracle/lib/jexec
    detector = 
python2.7 (enabled):
     package = python2.7
        type = magic
      offset = 0
       magic = \x03\xf3\x0d\x0a
        mask = 
 interpreter = /usr/bin/python2.7
    detector = 
python3.9 (enabled):
     package = python3.9
        type = magic
      offset = 0
       magic = \x61\x0d\x0d\x0a
        mask = 
 interpreter = /usr/bin/python3.9
    detector = &lt;/pre&gt;
&lt;p&gt;Як бачимо то тут встановлено зв&#39;язки для бінарних (скопмільованих) форматів - cli (exe), jar, python 2.7 та 3.9.&lt;/p&gt;&lt;p&gt;Якщо раптом закортить додати запуск exe (MZ) не через wine то достатньо просто додати наступну конфігурацію:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ sudo update-binfmts --package wine --install wine /usr/bin/wine --magic &#39;MZ&#39;&lt;/b&gt;&lt;/pre&gt;
&lt;p&gt;Дивимося:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ sudo update-binfmts --display&lt;/b&gt;
cli (enabled):
     package = mono-runtime
        type = magic
      offset = 0
       magic = MZ
        mask = 
 interpreter = /usr/bin/cli
    detector = /usr/lib/cli/binfmt-detector-cli
jar (enabled):
     package = oracle-java16
        type = magic
      offset = 0
       magic = PK\x03\x04
        mask = 
 interpreter = /usr/lib/jvm/java-16-oracle/lib/jexec
    detector = 
python2.7 (enabled):
     package = python2.7
        type = magic
      offset = 0
       magic = \x03\xf3\x0d\x0a
        mask = 
 interpreter = /usr/bin/python2.7
    detector = 
python3.9 (enabled):
     package = python3.9
        type = magic
      offset = 0
       magic = \x61\x0d\x0d\x0a
        mask = 
 interpreter = /usr/bin/python3.9
    detector = 
wine (enabled):
     package = wine
        type = magic
      offset = 0
       magic = MZ
        mask = 
 interpreter = /usr/bin/wine
    detector = &lt;/pre&gt;
&lt;p&gt;Все, після цього можна &quot;прозоро&quot; запускати exe-файли через wine. Наприклад:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ chmod +x &lt;a href=&quot;https://mikrotik.com/download&quot;&gt;./winbox-3.40.exe&lt;/a&gt;
$ ./winbox-3.40.exe&lt;/pre&gt;
&lt;p&gt;Якщо ж хочеться встановити коректне відображення кодування CP1251 то можна виконати запуск наступним чином:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ LANG=ru_RU.cp1251 luit winbox.exe&lt;/b&gt;&lt;/pre&gt;
&lt;p&gt;Видалити конфігурацію binfmts так само легко як і встановити:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ sudo update-binfmts --package wine --remove wine /usr/bin/wine&lt;/b&gt;&lt;/pre&gt;
&lt;p&gt;Ось така магія ;)&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/1171918472201674986/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/1171918472201674986?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/1171918472201674986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/1171918472201674986'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2023/12/binfmts-exe.html' title='binfmts для exe-файлів'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-5239673134576834206</id><published>2023-12-28T07:02:00.003+02:00</published><updated>2023-12-28T07:24:40.387+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><title type='text'>Java 21 &amp; Debian (Ubuntu)</title><content type='html'>&lt;p&gt;Нарешті! Нарешті це сталося!&lt;/p&gt;&lt;p&gt;Oracle почала випускати deb-пакети з Java. Принаймні Java 21 вже можна &lt;a href=&quot;https://www.oracle.com/java/technologies/downloads/#java21&quot; target=&quot;_blank&quot;&gt;завантажити&lt;/a&gt; як deb-пакет. А далі все стає просто і без зайвих танців з бубном. За потреби, видаляємо залишки openjdk:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo apt purge openjdk-17-jre-headless&lt;/pre&gt;
&lt;p&gt;Також, переда встановленням deb-пакету з Java 21, краще видалити binfmts для попередньої версії (в моєму випадку це openjdk-17):&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo update-binfmts --display
sudo update-binfmts --package openjdk-17 --remove jar /usr/bin/jexec&lt;/pre&gt;
&lt;p&gt;Встановлюємо пакет:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;sudo dpkg -i jdk-21_linux-x64_bin.deb&lt;/pre&gt;
&lt;p&gt;Все ;)&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/5239673134576834206/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/5239673134576834206?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/5239673134576834206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/5239673134576834206'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2023/12/java-21-debian-ubuntu.html' title='Java 21 &amp; Debian (Ubuntu)'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-3228640090248584783</id><published>2023-12-18T17:46:00.004+02:00</published><updated>2023-12-18T17:47:35.730+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aptitude"/><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="viber"/><title type='text'>Viber 21.0.0.1 на Debian 11.8 (Bullseye)</title><content type='html'>&lt;p&gt;&amp;nbsp;Зіткнувся з проблемою при оновленні версії Viber, а саме - припинив запускатися. При запуску в консолі виводить наступне:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ /opt/viber/Viber&lt;/b&gt;
qt.qpa.plugin: Could not load the Qt platform plugin &quot;xcb&quot; in &quot;&quot; even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: wayland, eglfs, minimalegl, minimal, offscreen, vnc, linuxfb, wayland-egl, xcb.&lt;/pre&gt;З&#39;ясувалося, що лікується доволі просто, хоч і не очевидно. Встановлюємо пакет&amp;nbsp;libxcb-cursor0:&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ sudo apt install libxcb-cursor0&lt;/b&gt;&lt;/pre&gt;&lt;div&gt;Після встановлення Viber &quot;ожив&quot;.&lt;/div&gt;&lt;div&gt;Неочевидність полягає саме в тому, що встановлення самого по собі пакету&amp;nbsp;&lt;span style=&quot;background-color: white;&quot;&gt;xcb не допомагає. Більше того, для роботи Viber, його можна й не встановлювати.&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/3228640090248584783/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/3228640090248584783?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/3228640090248584783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/3228640090248584783'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2023/12/viber-21001-debian-118-bullseye.html' title='Viber 21.0.0.1 на Debian 11.8 (Bullseye)'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-987145099020828309</id><published>2023-12-05T10:15:00.003+02:00</published><updated>2023-12-05T10:15:20.029+02:00</updated><title type='text'>Debian 11: deb uses unknown compression for member</title><content type='html'>&lt;p&gt;&amp;nbsp;Звісно, що вже є Debian 12, але подекуди доводиться використовувати старіші версії. Так от трапилося й у мене. Debian 11 &quot;матюгнувся&quot;:&lt;/p&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ &lt;b&gt;sudo dpkg -i apache-netbeans_20-1_all.deb&lt;/b&gt;
dpkg-deb: error: archive &#39;apache-netbeans_20-1_all.deb&#39; uses unknown compression for member &#39;control.tar.zst&#39;, giving up
dpkg: error processing archive apache-netbeans_20-1_all.deb (--install):
 dpkg-deb --control subprocess returned error exit status 2
Errors were encountered while processing:
 apache-netbeans_20-1_all.deb&lt;/pre&gt;
Ну, нічого страшного. Просто доведеться перепакувати deb-пакет з тим методом компресії, який відомий Debian 11.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ &lt;b&gt;ar x apache-netbeans_20-1_all.deb&lt;/b&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ &lt;b&gt;zstd -d &amp;lt; control.tar.zst | xz &amp;gt; control.tar.xz&lt;/b&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ &lt;b&gt;zstd -d &amp;lt; data.tar.zst | xz &amp;gt; data.tar.xz&lt;/b&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ &lt;b&gt;ar -m -c -a sdsd /tmp/apache-netbeans_20-1_all.deb debian-binary control.tar.xz data.tar.xz&lt;/b&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ &lt;b&gt;rm debian-binary control.tar.xz data.tar.xz control.tar.zst data.tar.zst&lt;/b&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ &lt;b&gt;sudo dpkg -i /tmp/apache-netbeans_20-1_all.deb&lt;/b&gt;
(Reading database ... 398738 files and directories currently installed.)
Preparing to unpack .../apache-netbeans_20-1_all.deb ...
Unpacking apache-netbeans (20-1) over (19-1) ...
Setting up apache-netbeans (20-1) ...
Processing triggers for gnome-menus (3.36.0-1) ...
Processing triggers for desktop-file-utils (0.26-1) ...
Processing triggers for mailcap (3.69) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...&lt;/pre&gt;
Незручність лише в тому, що така конвертація займає певний час та місце.</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/987145099020828309/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/987145099020828309?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/987145099020828309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/987145099020828309'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2023/12/debian-11-deb-uses-unknown-compression.html' title='Debian 11: deb uses unknown compression for member'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-1519553921817471351</id><published>2023-10-26T07:57:00.004+03:00</published><updated>2023-10-26T07:57:42.371+03:00</updated><title type='text'>Встановлення Zabbix-агента на Windows</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Завантажуємо &lt;a href=&quot;https://cdn.zabbix.com/zabbix/binaries/stable/6.4/6.4.7/zabbix_agent-6.4.7-windows-amd64.zip&quot;&gt;https://cdn.zabbix.com/zabbix/binaries/stable/6.4/6.4.7/zabbix_agent-6.4.7-windows-amd64.zip&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Розпаковуємо архів zabbix_agent-6.4.7-windows-amd64.zip, наприклад, в c:\zabbix&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Відкриваємо на редагування C:\Zabbix\conf\zabbix_agentd.conf і правимо:&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-family: PT Mono;&quot;&gt;LogFile=c:\Zabbix\zabbix_agentd.log&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: PT Mono;&quot;&gt;Server=127.0.0.1, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; - тут через кому перераховуємо мережі з яких буде доступним Zabbix-агент, точніше мережі на запити з яких він буде відповідати, якщо ці запити надійдуть&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: PT Mono;&quot;&gt;Hostname=Windows host&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; - тут замість &quot;Windows host&quot; пишемо свою назву, головне щоб вона збігалася з тою з якою ми будемо реєструвати цей хост на Zabbix-сервері&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;В cmd, в режимі адміністратора, виконуємо:&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-family: PT Mono;&quot;&gt;C:\Zabbix\bin\zabbix_agentd.exe --config C:\Zabbix\conf\zabbix_agentd.conf --install&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: PT Mono;&quot;&gt;C:\Zabbix\bin\zabbix_agentd.exe --config C:\Zabbix\conf\zabbix_agentd.conf --start&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;В cmd, в режимі адміністратора, та виконуємо:&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-family: PT Mono;&quot;&gt;netsh advfirewall firewall add rule name=&quot;Open Zabbix agentd port 10050 inbound&quot; dir=in action=allow protocol=TCP localport=10050&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: PT Mono;&quot;&gt;netsh advfirewall firewall add rule name=&quot;Open Zabbix agentd port 10050 outbound&quot; dir=out action=allow protocol=TCP localport=10050&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;(опціонально) &lt;/span&gt;&lt;span style=&quot;font-family: PT Mono;&quot;&gt;netsh advfirewall firewall add rule name=&quot;Open Zabbix trapper port 10051 inbound&quot; dir=in action=allow protocol=TCP localport=10051&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;(опціонально) &lt;/span&gt;&lt;span style=&quot;font-family: PT Mono;&quot;&gt;netsh advfirewall firewall add rule name=&quot;Open Zabbix trapper port 10051 outbound&quot; dir=out action=allow protocol=TCP localport=10051&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/1519553921817471351/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/1519553921817471351?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/1519553921817471351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/1519553921817471351'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2023/10/zabbix-windows.html' title='Встановлення Zabbix-агента на Windows'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-3837380273092516221</id><published>2023-10-02T16:20:00.001+03:00</published><updated>2023-10-02T16:20:31.079+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="MikroTik"/><category scheme="http://www.blogger.com/atom/ns#" term="RouterOS"/><category scheme="http://www.blogger.com/atom/ns#" term="wireguard"/><title type='text'>Встановлення з&#39;єднання wireguard між Mikrotik та Linux (Debian)</title><content type='html'>&lt;h3 style=&quot;text-align: left;&quot;&gt;Linux&lt;/h3&gt;&lt;p&gt;Встановлюємо пакети wireguard та wireguard-dkms:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;# apt install wireguard wireguard-dkms&lt;/pre&gt;&lt;p&gt;Створюємо пару ключів:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;# cd /etc/wireguard
# wg genkey &amp;gt; private-key
# wg pubkey &amp;gt; public-key &amp;lt; private-key&lt;/pre&gt;&lt;p&gt;Скоріш за все, після цього, не зможете отримати доступ з під поточного користувача до файлів&amp;nbsp;/etc/wireguard/private-key та /etc/wireguard/public-key. Хтось грається з заміною користувача та/або групи для каталогу /etc/wireguard, але я пропоную/практикую &lt;a href=&quot;https://oldengremlin.blogspot.com/2010/09/blog-post.html&quot;&gt;інший шлях&lt;/a&gt;:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ sudo setfacl -m u:username:r-x /etc/wireguard
$ sudo setfacl -m u:username:r-x /etc/wireguard/private-key
$ sudo setfacl -m u:username:r-x /etc/wireguard/public-key&lt;/pre&gt;&lt;p&gt;Отримуємо/дивимося на пару ключів:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ cat /etc/wireguard/public-key
$ cat /etc/wireguard/private-key&lt;br /&gt;&lt;/pre&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Mikrotik&lt;/h3&gt;&lt;p&gt;Тут все простіше:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/interface wireguard
add listen-port=13231 mtu=1420 name=wireguard1
/interface wireguard peers
add allowed-address=0.0.0.0/0 endpoint-address=10.10.10.11 endpoint-port=13231 interface=wireguard1 persistent-keepalive=30s public-key=&quot;…public key from /etc/wireguard/public-key…&quot;
/ip address
add address=10.3.2.1/30 interface=wireguard1
&lt;/pre&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Linux&amp;nbsp;NetworkManager&lt;/h3&gt;&lt;p&gt;Файл&amp;nbsp;/etc/NetworkManager/system-connections/wireguard1.nmconnection при цьому може виглядати якось так:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;[connection]
id=wireguard1
uuid=6b31553d-8782-4952-98e2-739ef4a05a87
type=wireguard
autoconnect=false
interface-name=wireguard1
permissions=
timestamp=1696251106

[wireguard]
listen-port=13231
private-key=…private key from /etc/wireguard/private-key…

[wireguard-peer.…public key from Mikrotik…]
endpoint=10.10.10.10:13231
persistent-keepalive=30
allowed-ips=10.3.2.0/24;192.168.88.0/24;

[ipv4]
address1=10.3.2.2/30
dns-search=
method=manual

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=ignore

[proxy]&lt;/pre&gt;&lt;p&gt;Після чого активуємо інтерфейс:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;$ sudo nmcli con up wireguard1&lt;/pre&gt;&lt;p&gt;Все просто й доступно.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/3837380273092516221/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/3837380273092516221?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/3837380273092516221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/3837380273092516221'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2023/10/wireguard-mikrotik-linux-debian.html' title='Встановлення з&#39;єднання wireguard між Mikrotik та Linux (Debian)'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-2449215557494813912</id><published>2023-09-25T14:01:00.002+03:00</published><updated>2023-09-25T14:01:23.391+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="rc.local"/><category scheme="http://www.blogger.com/atom/ns#" term="systemctl"/><title type='text'>Як ввімкнути rc.local в Debian?</title><content type='html'>&lt;p&gt;Якщо ви запускаєте&lt;span style=&quot;background-color: #f9f9f9; font-family: &amp;quot;Fira Sans&amp;quot;; font-size: 16px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f9f9f9; font-family: &amp;quot;Fira Sans&amp;quot;; font-size: 16px;&quot;&gt;дистрибутив&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f9f9f9; font-family: &amp;quot;Fira Sans&amp;quot;; font-size: 16px;&quot;&gt;Linux з використанням Systemd, то можете помітити, що при завантаженні системи інструкції з файлу&lt;/span&gt;&lt;span style=&quot;background-color: #f9f9f9; font-family: &amp;quot;Fira Sans&amp;quot;; font-size: 16px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;code style=&quot;background: rgb(222, 222, 222); font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 15px; padding: 1px;&quot;&gt;/etc/rc.local&lt;/code&gt;&lt;span style=&quot;background-color: #f9f9f9; font-family: &amp;quot;Fira Sans&amp;quot;; font-size: 16px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f9f9f9; font-family: &amp;quot;Fira Sans&amp;quot;; font-size: 16px;&quot;&gt;не виконуються. Далі в статті йдеться про те як це виправити&lt;/span&gt;&lt;span style=&quot;background-color: #f9f9f9; font-family: &amp;quot;Fira Sans&amp;quot;; font-size: 16px;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;background-color: #f9f9f9; font-family: &amp;quot;Fira Sans&amp;quot;; font-size: 16px;&quot;&gt;Якщо раптом при виконанні команди&amp;nbsp;&lt;/span&gt;&lt;code style=&quot;background: rgb(222, 222, 222); font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 15px; padding: 1px;&quot;&gt;sudo systemctl status rc.local&lt;/code&gt;&lt;span style=&quot;background-color: #f9f9f9; font-family: &amp;quot;Fira Sans&amp;quot;; font-size: 16px;&quot;&gt;&amp;nbsp; побачите подібне повідомлення:&lt;/span&gt;&lt;/div&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ sudo systemctl status rc-local&lt;/b&gt;
○ rc-local.service - /etc/rc.local Compatibility
     Loaded: loaded (/lib/systemd/system/rc-local.service; static)
    Drop-In: /usr/lib/systemd/system/rc-local.service.d
             └─debian.conf
     Active: inactive (dead)
       Docs: man:systemd-rc-local-generator(8)&lt;/pre&gt;Або інше, відмінне від &quot;Active: active&quot;, а&amp;nbsp;&lt;code style=&quot;background: rgb(222, 222, 222); font-family: &amp;quot;Roboto Mono&amp;quot;, monospace; font-size: 15px; padding: 1px;&quot;&gt;sudo systemctl enable rc-local&lt;/code&gt;&lt;span style=&quot;background-color: #f9f9f9; font-family: &amp;quot;Fira Sans&amp;quot;; font-size: 16px;&quot;&gt;&amp;nbsp; видасть&lt;/span&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ sudo systemctl enable rc-local&lt;/b&gt;
The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
Alias= settings in the [Install] section, and DefaultInstance= for template
units). This means they are not meant to be enabled using systemctl.
 
Possible reasons for having this kind of units are:
• A unit may be statically enabled by being symlinked from another unit&#39;s
  .wants/ or .requires/ directory.
• A unit&#39;s purpose may be to act as a helper for some other unit which has
  a requirement dependency on it.
• A unit may be started when needed via activation (socket, path, timer,
  D-Bus, udev, scripted systemctl call, ...).
• In case of template units, the unit is meant to be enabled with some
  instance name specified.&lt;/pre&gt;То можна виконати наступні інструкції, які мають виправити ситуацію:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ echo &quot;&lt;/b&gt;[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target&lt;b&gt;&quot; | sudo tee /etc/systemd/system/rc-local.service &amp;gt; /dev/null&lt;/b&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ printf &#39;%s\n&#39; &#39;#!/bin/bash&#39; &#39;exit 0&#39; | sudo tee -a /etc/rc.local&lt;/b&gt;
#!/bin/bash
exit 0&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ sudo chmod +x /etc/rc.local&lt;/b&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ sudo systemctl enable rc-local&lt;/b&gt;
Created symlink /etc/systemd/system/multi-user.target.wants/rc-local.service → /etc/systemd/system/rc-local.service.&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ sudo systemctl start rc-local.service&lt;/b&gt;&lt;/pre&gt;
І отримати результат:
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;&lt;b&gt;$ sudo systemctl status rc-local.service&lt;/b&gt;
* rc-local.service - /etc/rc.local Compatibility
     Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; preset: enabled)
    Drop-In: /usr/lib/systemd/system/rc-local.service.d
             `-debian.conf
     Active: active (exited) since Mon 2023-09-25 13:38:53 EEST; 15min ago
    Process: 34112 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
        CPU: 1ms

Sep 25 13:38:53 oghome systemd[1]: Starting rc-local.service - /etc/rc.local Compatibility...
Sep 25 13:38:53 oghome systemd[1]: Started rc-local.service - /etc/rc.local Compatibility.&lt;/pre&gt;За мотивами статті &lt;a href=&quot;https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd&quot;&gt;How to Enable /etc/rc.local with Systemd&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/2449215557494813912/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/2449215557494813912?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/2449215557494813912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/2449215557494813912'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2023/09/rclocal-debian.html' title='Як ввімкнути rc.local в Debian?'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-3891069982804932740</id><published>2023-09-19T08:14:00.005+03:00</published><updated>2023-09-19T08:24:54.204+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ipv4"/><category scheme="http://www.blogger.com/atom/ns#" term="openoffice"/><title type='text'>OpenOffice Calc - IPv4-адреса (з маскою) в число + маска</title><content type='html'>&lt;p&gt;&amp;nbsp;Припустимо, що в стовпці A у нас знаходяться ip-адреси з маскою, в форматі: n.n.n.n/m&lt;/p&gt;&lt;p&gt;В стовпці B ми хочемо отримати десятичне число, яке відповідає ip-адресі &lt;b&gt;n.n.n.n&lt;/b&gt;, а в стовпці C, відповідно, маску мережі &lt;b&gt;m&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Дві формули.&lt;/p&gt;&lt;p&gt;Для стовпця B:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;=VALUE(LEFT($A1;FIND(&quot;.&quot;;$A1)-1))*256^3+VALUE(MID($A1;FIND(&quot;.&quot;;$A1)+1;FIND(&quot;.&quot;;$A1;FIND(&quot;.&quot;;$A1)+1)-FIND(&quot;.&quot;;$A1)-1))*256^2+VALUE(MID($A1;FIND(&quot;.&quot;;$A1;FIND(&quot;.&quot;;$A1)+1)+1;FIND(&quot;.&quot;;$A1;FIND(&quot;.&quot;;$A1;FIND(&quot;.&quot;;$A1)+1)+1)-FIND(&quot;.&quot;;$A1;FIND(&quot;.&quot;;$A1)+1)-1))*256^1+VALUE(MID($A1;FIND(&quot;.&quot;;$A1;FIND(&quot;.&quot;;$A1;FIND(&quot;.&quot;;$A1)+1)+1)+1;FIND(&quot;/&quot;;$A1;FIND(&quot;.&quot;;$A1;FIND(&quot;.&quot;;$A1;FIND(&quot;.&quot;;$A1)+1)+1)+1)-FIND(&quot;.&quot;;$A1;FIND(&quot;.&quot;;$A1;FIND(&quot;.&quot;;$A1)+1)+1)-1))&lt;/pre&gt;Для стовпця C:&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;=VALUE(MID($A1;FIND(&quot;/&quot;;$A1)+1;FIND(&quot;/&quot;;$A1)-1))&lt;/pre&gt;Як результат, маємо щось накшталт:&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNUM4ghjjhr1RPLXGxoNyWc1S3zXTAVszBwAw-O2uutYibtpkHY1nXNjudp5_jJ-sQHWLql-0p2bTfGS5uPhuxAY50y_6NYkmm2NZUJBdtSDr2MMha1TZdjnNcY3TnfbcBP6RySHSra_-LYjCiF_LGQi-C1Aq3ulu8TNyjg2satdkaHCHjWW-ZWxpgIaqr/s445/%D0%97%D0%BD%D1%96%D0%BC%D0%BE%D0%BA%20%D0%B5%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%20%D0%B7%202023-09-19%2008-13-34.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;445&quot; data-original-width=&quot;256&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNUM4ghjjhr1RPLXGxoNyWc1S3zXTAVszBwAw-O2uutYibtpkHY1nXNjudp5_jJ-sQHWLql-0p2bTfGS5uPhuxAY50y_6NYkmm2NZUJBdtSDr2MMha1TZdjnNcY3TnfbcBP6RySHSra_-LYjCiF_LGQi-C1Aq3ulu8TNyjg2satdkaHCHjWW-ZWxpgIaqr/s320/%D0%97%D0%BD%D1%96%D0%BC%D0%BE%D0%BA%20%D0%B5%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%20%D0%B7%202023-09-19%2008-13-34.png&quot; width=&quot;184&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;За основу взято статтю&amp;nbsp;&lt;a href=&quot;https://forum.openoffice.org/en/forum/viewtopic.php?t=20938&amp;amp;sid=8fc5fe91b16816ca557e52b999d46b30&quot; style=&quot;background-color: transparent; color: #105289; direction: ltr; display: inline-block; text-decoration-line: none; unicode-bidi: embed;&quot;&gt;[Solved] IP address sorting&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/3891069982804932740/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/3891069982804932740?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/3891069982804932740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/3891069982804932740'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2023/09/openoffice-calc-ipv4.html' title='OpenOffice Calc - IPv4-адреса (з маскою) в число + маска'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNUM4ghjjhr1RPLXGxoNyWc1S3zXTAVszBwAw-O2uutYibtpkHY1nXNjudp5_jJ-sQHWLql-0p2bTfGS5uPhuxAY50y_6NYkmm2NZUJBdtSDr2MMha1TZdjnNcY3TnfbcBP6RySHSra_-LYjCiF_LGQi-C1Aq3ulu8TNyjg2satdkaHCHjWW-ZWxpgIaqr/s72-c/%D0%97%D0%BD%D1%96%D0%BC%D0%BE%D0%BA%20%D0%B5%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%20%D0%B7%202023-09-19%2008-13-34.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-2777397253155211377</id><published>2023-08-23T07:23:00.003+03:00</published><updated>2023-08-23T14:41:19.090+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="whois"/><title type='text'>Поговоримо трохи про whois</title><content type='html'>&lt;p&gt;Список AS що входять в as-set:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;ASSET=AS-UKRHUB; whois -r ${ASSET} | awk &#39;$1~/^members:/ &amp;amp;&amp;amp; $2~/^AS[0-9]+/ { print $2 }&#39;&lt;/pre&gt;&lt;p&gt;AS які супроводжує mnt-by:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;MNTBY=YZ42-RIPE-MNT; whois -r -i mnt-by ${MNTBY} -T aut-num | awk &#39;$1~/^aut-num:/ { print $2 }&#39;&lt;/pre&gt;&lt;p&gt;Які IPv4-мережі анонсує AS?&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;AS=AS12593; whois -K -r -i origin ${AS} | awk &#39;$1~/^route:$/ { print $2 }&#39;&lt;/pre&gt;&lt;p&gt;Які IPv6-мережі анонсує AS?&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;AS=AS12593; whois -K -r -i origin ${AS} | awk &#39;$1~/^route6:$/ { print $2 }&#39;&lt;/pre&gt;&lt;p&gt;Отримати інформацію по організації AS:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;AS=AS12593; whois -r $( whois -r ${AS} | awk &#39;$1~/^org:$/ { print $2 }&#39; )&lt;/pre&gt;&lt;p&gt;Список діапазонів мереж які супроводжує mnt-by:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;MNTBY=YZ42-RIPE-MNT; whois -r -i mnt-by ${MNTBY} -T inetnum | awk &#39;$1~/^inetnum:$/ { print }&#39;&lt;/pre&gt;&lt;p&gt;Список IPv4-мережі які супроводжує mnt-by:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;MNTBY=YZ42-RIPE-MNT; whois -r -i mnt-by ${MNTBY} -T route | awk &#39;$1~/^route:$/ { print $2 }&#39;&lt;/pre&gt;&lt;p&gt;Список IPv6-мережі які супроводжує mnt-by:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;MNTBY=YZ42-RIPE-MNT; whois -r -i mnt-by ${MNTBY} -T route6 | awk &#39;$1~/^route6:$/ { print $2 }&#39;&lt;/pre&gt;&lt;p&gt;Список as-set які супроводжує mnt-by:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;MNTBY=YZ42-RIPE-MNT; whois -r -i mnt-by ${MNTBY} -T as-set | awk &#39;$1~/^as-set:/ { print $2 }&#39;&lt;/pre&gt;&lt;p&gt;AS по org:&lt;/p&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;ORG=ORG-SE1-RIPE; whois -r -i org ${ORG} -T aut-num&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/2777397253155211377/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/2777397253155211377?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/2777397253155211377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/2777397253155211377'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2023/08/whois.html' title='Поговоримо трохи про whois'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-3941758660203233776</id><published>2023-08-22T16:17:00.003+03:00</published><updated>2023-08-23T06:53:25.857+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dns"/><category scheme="http://www.blogger.com/atom/ns#" term="doh"/><category scheme="http://www.blogger.com/atom/ns#" term="MikroTik"/><category scheme="http://www.blogger.com/atom/ns#" term="RouterOS"/><title type='text'>Клієнт DNS over HTTPS (DoH)</title><content type='html'>DNS over HTTPS (DoH) — це протокол для виконання DNS-запитів через протокол HTTPS. Надає певні переваги в захисті DNS-запитів. Якщо звичайний запит по 53/udp доволі легко перехопити і проаналізувати через, наприклад, Wireshark то з запитом через HTTPS цей &quot;фокус&quot; стає не таким вже й тривіальним. Mikrotik дозволяє нам налаштувати DNS over HTTPS (DoH) з тими чи іншими службами, наприклад з Google або Cloudflare.&lt;div&gt;Завантажуємо та імпортуємо сертифікат:&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/tool fetch url=https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
/certificate import file-name=DigiCertGlobalRootCA.crt.pem passphrase=&quot;&quot;&lt;/pre&gt; &lt;/div&gt;Далі, в DHCP-клієнті вимикаємо отримання DNS-серверів, наприклад, від провайдера, а також видаляємо використання будь-яких користувацьких налаштувань щодо DNS-серверів:&lt;div&gt;&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/ip dns set servers=&quot;&quot;
/ip dhcp-client set [ find ] use-peer-dns=no&lt;/pre&gt;&lt;/div&gt;Ну й налаштовуємо DNS over HTTPS (DoH) для Google:
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/ip dns set use-doh-server=https://8.8.8.8/dns-query verify-doh-cert=yes&lt;/pre&gt;або Cloudflare:&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/ip dns set use-doh-server=https://1.1.1.1/dns-query verify-doh-cert=yes&lt;/pre&gt;Після цього можна скинути наявний кеш і перевірити, що DNS over HTTPS (DoH) працює:&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/ip dns cache flush
/ping meta.ua count=4
/ip dns cache print without-paging&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/3941758660203233776/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/3941758660203233776?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/3941758660203233776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/3941758660203233776'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2023/08/dns-over-https-doh.html' title='Клієнт DNS over HTTPS (DoH)'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7637722543027303610.post-1298191712443651299</id><published>2023-08-22T07:44:00.002+03:00</published><updated>2023-08-23T06:52:52.700+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="MikroTik"/><category scheme="http://www.blogger.com/atom/ns#" term="openvpn"/><category scheme="http://www.blogger.com/atom/ns#" term="RouterOS"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>ovpn-файл до статті &quot;Налаштування OpenVPN-сервера на Mikrotik&quot;</title><content type='html'>&lt;h2 style=&quot;text-align: left;&quot;&gt;Вступ&lt;/h2&gt;&lt;p&gt;Нещодавно в статті &lt;a href=&quot;https://oldengremlin.blogspot.com/2023/08/openvpn-mikrotik-2.html&quot;&gt;Налаштування OpenVPN-сервера на Mikrotik (метод 2)&lt;/a&gt;&amp;nbsp;було наведено вміст ovpn-файла, для OpenVPN-клієнта Windows/Linux, в той самий час в статті &lt;a href=&quot;https://oldengremlin.blogspot.com/2022/09/openvpn-mikrotik.html&quot;&gt;Налаштування OpenVPN-сервера на Mikrotik&lt;/a&gt; було розглянуто лише налаштування OpenVPN-клієнта в RouterOS. Спробуємо виправити ситуацію.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Експорт сертифікатів&lt;/h2&gt;&lt;p&gt;Нарешті ми &lt;a href=&quot;https://oldengremlin.blogspot.com/2022/09/openvpn-mikrotik.html&quot;&gt;налаштували OpenVPN-сервер на Mikrotik&lt;/a&gt;&amp;nbsp;і тепер хочемо роздати нашим клієнтам ovpn-файл, щоб вони підключалися до сервера.&lt;/p&gt;Експортуємо ca та клієнтський сертифікати. Тут все просто:&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;/certificate export-certificate ca file-name=ca-v1 type=pem 
/certificate export-certificate ovpn-muter file-name=ovpn-client-v1 type=pem export-passphrase=&quot;passphrase&quot;&lt;/pre&gt;Створюємо ovpn-файл
&lt;pre style=&quot;background-color: white; border: thin solid; overflow: auto; padding: 5px 10px; text-align: left;&quot;&gt;client
dev tun
remote &amp;lt;ip address or dns name of the ovpn server&amp;gt; 1194 tcp
nobind
persist-key
persist-tun
remote-cert-tls server
data-ciphers AES-256-CBC
cipher AES-256-CBC
auth-user-pass
auth SHA1
redirect-gateway def1
verb 1
&amp;lt;ca&amp;gt;
-----BEGIN CERTIFICATE-----
вставляємо вміст з експортованого файла ca-v1.crt
-----END CERTIFICATE-----
&amp;lt;/ca&amp;gt;
&amp;lt;cert&amp;gt;
-----BEGIN CERTIFICATE-----
вставляємо вміст з експортованого файла ovpn-client-v1.crt
-----END CERTIFICATE-----
&amp;lt;/cert&amp;gt;
&amp;lt;key&amp;gt;
-----BEGIN ENCRYPTED PRIVATE KEY-----
вставляємо вміст з експортованого файла ovpn-client-v1.key
-----END ENCRYPTED PRIVATE KEY-----
&amp;lt;/key&amp;gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://oldengremlin.blogspot.com/feeds/1298191712443651299/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7637722543027303610/1298191712443651299?isPopup=true' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/1298191712443651299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7637722543027303610/posts/default/1298191712443651299'/><link rel='alternate' type='text/html' href='http://oldengremlin.blogspot.com/2023/08/ovpn-openvpn-mikrotik.html' title='ovpn-файл до статті &quot;Налаштування OpenVPN-сервера на Mikrotik&quot;'/><author><name>Alexander Russkih</name><uri>http://www.blogger.com/profile/03970191091389543393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>