<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[IT Notes]]></title><description><![CDATA[IT Notes]]></description><link>https://help.dc24.cloud</link><generator>RSS for Node</generator><lastBuildDate>Thu, 15 Oct 2026 22:49:14 GMT</lastBuildDate><atom:link href="https://help.dc24.cloud/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Відновлення Edimax OAP1300 через UART + TFTP]]></title><description><![CDATA[Колега приніс мертву точку доступу Edimax OAP1300. Живлення є, на serial-консолі видно U-Boot — і далі нічого. Вона вічно крутилася в TFTP-циклі відновлення. Ось як я оживив її, скопіювавши розділ про]]></description><link>https://help.dc24.cloud/edimax-oap1300-uart-tftp</link><guid isPermaLink="true">https://help.dc24.cloud/edimax-oap1300-uart-tftp</guid><category><![CDATA[embedded]]></category><category><![CDATA[embedded linux]]></category><category><![CDATA[linux kernel]]></category><category><![CDATA[iot]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Wed, 09 Sep 2026 11:01:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/643661078c876776a479a254/3bee9c91-46cd-41dc-b758-99283f8dab8d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Колега приніс мертву точку доступу Edimax OAP1300. Живлення є, на serial-консолі видно U-Boot — і далі нічого. Вона вічно крутилася в TFTP-циклі відновлення. Ось як я оживив її, скопіювавши розділ прошивки з ідентичної робочої точки.</p>
<p><strong>Залізо:</strong> Edimax OAP1300 — Qualcomm IPQ4018, 256 МБ RAM, Macronix <strong>MX25L25635E 32 МіБ SPI-NOR</strong>, U-Boot 2012.07 ("ELX version: 1.0.0").</p>
<hr />
<h2>1. Що насправді було не так</h2>
<p>Сам U-Boot був цілий. Завантажувачі QCA (SBL1, MIBIB, QSEE) — цілі. Калібрування радіо — ціле. Не стартувала тільки ОС.</p>
<p>На розділі прошивки за адресою <code>0x180000</code> лежав <strong>файл оновлення з веб-інтерфейсу Edimax</strong> (<code>OAP1300_v2.4.2.5.bin</code>), записаний у флеш «як є». А цей файл — це:</p>
<pre><code class="language-plaintext">[ заголовок Edimax з рядками версій ][ AES-зашифрований payload ]
</code></pre>
<p>Ентропія payload — 7.99 біт/байт, тобто він зашифрований. Розшифрувати й покласти його у флеш вміє тільки апдейтер самої прошивки. А <code>bootipq</code> в U-Boot чекає на <code>0x180000</code> <strong>готовий FIT-образ</strong> (магія <code>d0 0d fe ed</code>), бачить <code>00 00 00 00</code> — і мовчки виходить.</p>
<blockquote>
<p><strong>Не повторюйте цього.</strong> Ніколи не робіть <code>sf write</code> файлу <code>.bin</code> з сайту Edimax напряму на <code>0x180000</code>. Він зашифрований. Образ, який ви пишете туди, має починатися з <code>d0 0d fe ed</code>.</p>
</blockquote>
<hr />
<h2>2. Що потрібно</h2>
<p><strong>Залізо</strong></p>
<ul>
<li><p>Друга, <strong>робоча OAP1300</strong> як донор (ідентичне залізо)</p>
</li>
<li><p>USB–UART адаптер (CP2102) на serial-хедер — <code>115200 8N1</code></p>
</li>
<li><p><strong>Тупий / некерований PoE-свіч</strong> — <em>не</em> керований офісний свіч</p>
</li>
<li><p>Mac або Linux-машина з дротовим Ethernet-портом</p>
</li>
</ul>
<p>Тупий свіч — принципово. Керований офісний свіч через STP ізолював порт точки, і <strong>кожна TFTP-передача таймаутила</strong> — це блокувало відновлення тижнями. Некерований PoE-свіч, у якому тільки точка й комп'ютер, без аплінку, просто форвардить кадри й ні в що не втручається.</p>
<p><strong>Файли</strong></p>
<p>Роботу робить один файл: <code>work_hlos_rootfs.bin</code> — це те, що реально лежить у флеші донора в області HLOS + rootfs (<code>0x180000</code>–<code>0x1000000</code>, <code>0xe80000</code> байт): готовий FIT-ядро (<em>ARM OpenWrt Linux-3.14.43</em>), за ним squashfs-корінь. Жодних даних, унікальних для конкретного пристрою, він не містить.</p>
<hr />
<h2>3. Підключення</h2>
<pre><code class="language-plaintext"> OAP1300 ──PoE+дані── [ тупий PoE-свіч ] ──дані── Mac (en18)
 (мертва точка)          без аплінку              192.168.102.90/25

 serial-хедер OAP1300 ──── CP2102 ──── Mac USB   (115200 8N1)
</code></pre>
<p>У свічі — тільки точка й Mac. Serial — це окремий шлях.</p>
<img src="https://cdn.hashnode.com/uploads/covers/643661078c876776a479a254/e04fa8ec-85c2-4f00-8340-5501e568889f.jpg" alt="Адаптер CP2102 USB-UART, підключений до serial-хедера TX / GND / RX на платі OAP1300" style="display:block;margin:0 auto" />

<p><em>Три перемички йдуть на пади</em> <code>TX</code> <em>/</em> <code>GND</code> <em>/</em> <code>RX</code> <em>поряд з U13 на платі.</em></p>
<hr />
<h2>4. Підготовка хоста (macOS)</h2>
<pre><code class="language-bash"># en18 = дротовий порт Mac
sudo ifconfig en18 inet 192.168.102.90 netmask 255.255.255.128 up
sudo arp -s 192.168.102.9 00:03:7f:ba:db:ad
sudo python3 tftp_recv.py
# TFTP server listening on 0.0.0.0:69  dest=/private/tftpboot
# waiting for tftpput from U-Boot...
</code></pre>
<p>Лишіть це працювати. Покладіть <code>work_hlos_rootfs.bin</code> у <code>/private/tftpboot/</code>.</p>
<blockquote>
<p>Вбудований <code>tftpd</code> у macOS часто не відповідає. <code>tftp_recv.py</code> — це маленька заміна (~150 рядків), яка обробляє обидва напрямки й опції <code>blksize</code>, які узгоджує U-Boot.</p>
</blockquote>
<hr />
<h2>5. Відновлення мертвої точки</h2>
<h3>Крок 1 — зловити U-Boot prompt</h3>
<p>Подайте живлення на точку, бомблячи <code>Ctrl-C</code> на serial-консолі.</p>
<pre><code class="language-plaintext">U-Boot 2012.07  ·  ELX version: 1.0.0
Hit any key to stop autoboot:  2  1  0
(IPQ40xx) #
</code></pre>
<h3>Крок 2 — направити U-Boot на хост</h3>
<pre><code class="language-plaintext">setenv ethaddr 00:03:7f:ba:db:ad
setenv ipaddr 192.168.102.9
setenv serverip 192.168.102.90
sf probe 0
# SF: Detected MX25L25635E with page size 4 KiB, total 32 MiB
ping 192.168.102.90
# host 192.168.102.90 is alive
</code></pre>
<p><code>ethaddr</code> виставлено в SROM MAC, щоб запис ARL внутрішнього свіча й статичний ARP на хості збігалися.</p>
<p><strong>Якщо ping не проходить — зупиніться тут.</strong> Полагодьте лінк, перш ніж чіпати флеш.</p>
<h3>Крок 3 — завантажити образ у RAM</h3>
<pre><code class="language-plaintext">tftpboot 0x84000000 work_hlos_rootfs.bin
# ...
# Bytes transferred = 15204352 (e80000 hex)
</code></pre>
<p>Переконайтеся, що розмір рівно <code>0xe80000</code>. Недотягнута передача тут перетворюється на биту прошивку.</p>
<h3>Крок 4 — стерти й записати розділ прошивки</h3>
<p>Тільки від <code>0x180000</code>. ART на <code>0x170000</code>, U-Boot і environment не чіпаємо.</p>
<pre><code class="language-plaintext">sf erase 0x180000 0xe80000      # ~60 с
sf write 0x84000000 0x180000 0xe80000     # ~60 с
</code></pre>
<h3>Крок 5 — перевірити зворотним читанням</h3>
<pre><code class="language-plaintext">sf read 0x86000000 0x180000 0xe80000
cmp.b 0x84000000 0x86000000 0xe80000
(IPQ40xx) #      # тиша = ідентично. будь-яке "differ" = переписати.
</code></pre>
<h3>Крок 6 — перезавантажити й дати відпрацювати <code>bootipq</code></h3>
<p>Просто <code>reset</code>. <strong>Не</strong> запускайте вручну <code>bootm 0x84000000#config@4</code>. Тільки <code>bootipq</code> робить правку device-tree, яка каже ядру, що флеш — 32 МіБ; без неї розділ <code>/factory</code> (він лежить вище 16 МіБ) не монтується, і точка падає в режим калібрування ("ART").</p>
<pre><code class="language-plaintext">reset
## Booting kernel from FIT Image at 84000000 ...
   Using 'config@4' configuration
   Verifying Hash Integrity ... crc32+ sha1+ OK
   Uncompressing Kernel Image ... OK
Starting kernel ...
</code></pre>
<h3>Крок 7 — переконатися, що вона піднялась як AP</h3>
<pre><code class="language-plaintext">Configuring QCA WiFi device[0] ... Wlan is in AP Mode
 DES SSID SET=OAP1300-ECB828_A
CMD[led_ctl 5g off]
cmd&gt;  WAL channel change freq=2427 ... rx_ok=1 tx_ok=1
</code></pre>
<p>Радіо сканує, VAP піднятий, немає <code>art mode</code>, немає I/O-помилок <code>mtdblock11</code>. Збирайте пристрій і налаштовуйте через веб-інтерфейс як нову точку.</p>
<hr />
<h2>6. Карта флешу</h2>
<p>З <code>smeminfo</code> в U-Boot. Відновлення чіпає один рядок.</p>
<table>
<thead>
<tr>
<th>Розділ</th>
<th>Початок</th>
<th>Розмір</th>
<th>Роль</th>
</tr>
</thead>
<tbody><tr>
<td>SBL1</td>
<td><code>0x000000</code></td>
<td><code>0x040000</code></td>
<td>первинний завантажувач QCA</td>
</tr>
<tr>
<td>MIBIB</td>
<td><code>0x040000</code></td>
<td><code>0x020000</code></td>
<td>таблиця розділів</td>
</tr>
<tr>
<td>QSEE</td>
<td><code>0x060000</code></td>
<td><code>0x060000</code></td>
<td>secure world</td>
</tr>
<tr>
<td>CDT</td>
<td><code>0x0c0000</code></td>
<td><code>0x010000</code></td>
<td>конфіг борду</td>
</tr>
<tr>
<td>DDRPARAMS</td>
<td><code>0x0d0000</code></td>
<td><code>0x010000</code></td>
<td>тайминги RAM</td>
</tr>
<tr>
<td>APPSBLENV</td>
<td><code>0x0e0000</code></td>
<td><code>0x010000</code></td>
<td>environment U-Boot</td>
</tr>
<tr>
<td>APPSBL</td>
<td><code>0x0f0000</code></td>
<td><code>0x080000</code></td>
<td>U-Boot 2012.07</td>
</tr>
<tr>
<td>ART</td>
<td><code>0x170000</code></td>
<td><code>0x010000</code></td>
<td>калібрування радіо — унікальне, <strong>не чіпати</strong></td>
</tr>
<tr>
<td><strong>HLOS + rootfs</strong></td>
<td><code>0x180000</code></td>
<td><code>0xe80000</code></td>
<td>FIT-ядро + squashfs — <strong>пишемо з донора</strong></td>
</tr>
<tr>
<td>/factory + config</td>
<td><code>0x1b80000</code></td>
<td>—</td>
<td>squashfs + JFFS2, верхня частина флешу</td>
</tr>
</tbody></table>
<hr />
<h2>7. Як зняти образ з донора</h2>
<p>Якщо у вас немає <code>work_hlos_rootfs.bin</code>, зніміть його з робочої точки в її U-Boot prompt. Тільки читання — на донор нічого не пишеться.</p>
<pre><code class="language-plaintext">setenv ipaddr 192.168.102.9
setenv serverip 192.168.102.90
sf probe 0
sf read 0x84000000 0x180000 0xe80000
tftpput 0x84000000 0xe80000 work_hlos_rootfs.bin
# Bytes transferred = 15204352 (e80000 hex)
bootipq        # відправити донор назад у продакшн
</code></pre>
<blockquote>
<p>Передача 15 МБ друкує ~20 с <code>#</code> у консоль. Якщо відкрити нову serial-сесію, поки це ще «стікає», ви прочитаєте застарілі байти. Натисніть <code>Ctrl-C</code> кілька разів і зачекайте 2–3 с, перш ніж довіряти тому, що читаєте далі.</p>
</blockquote>
<hr />
<h2>8. Глухі кути, для протоколу</h2>
<ul>
<li><p><strong>Відновлення по UART.</strong> У цьому U-Boot немає <code>loadb</code> / <code>loadx</code> / <code>loady</code>. TFTP — єдиний спосіб залити байти у флеш.</p>
</li>
<li><p><strong>OpenWrt EAP1300 initramfs.</strong> Вантажиться, потім плата робить хардовий ресет на ~1.5 с — апаратний watchdog OAP1300 цим образом не «гладиться».</p>
</li>
<li><p><strong>Клонування ART чи всіх 32 МіБ.</strong> Не потрібно й не бажано — власне калібрування й MAC мертвої точки були цілі. Битим був тільки розділ FIT.</p>
</li>
<li><p><strong>«</strong><code>bootipq</code> <strong>не працює».</strong> Працює. Ранні логи виглядали як збій через проблему з serial-буфером вище; ручний обхід <code>bootm ...#config@4</code> потім давав симптом режиму калібрування. Щойно на місці валідний FIT, звичайний через <code>bootipq</code> працює.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Edimax OAP1300 Recovery over UART + TFTP]]></title><description><![CDATA[A colleague handed me a dead Edimax OAP1300 access point. It powered on, the serial console showed U-Boot, and then… nothing. It sat in the TFTP recovery loop forever. This is how I brought it back by]]></description><link>https://help.dc24.cloud/edimax-oap1300-recovery-over-uart-tftp</link><guid isPermaLink="true">https://help.dc24.cloud/edimax-oap1300-recovery-over-uart-tftp</guid><category><![CDATA[embedded]]></category><category><![CDATA[embedded linux]]></category><category><![CDATA[linux kernel]]></category><category><![CDATA[iot]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Wed, 09 Sep 2026 10:22:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/643661078c876776a479a254/96644e94-df56-426f-85dd-fadb0c31cd20.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A colleague handed me a dead Edimax OAP1300 access point. It powered on, the serial console showed U-Boot, and then… nothing. It sat in the TFTP recovery loop forever. This is how I brought it back by copying the firmware region off an identical, working unit.</p>
<p><strong>Hardware:</strong> Edimax OAP1300 — Qualcomm IPQ4018, 256 MB RAM, Macronix <strong>MX25L25635E 32 MiB SPI-NOR</strong>, U-Boot 2012.07 ("ELX version: 1.0.0").</p>
<hr />
<h2>1. What was actually wrong</h2>
<p>U-Boot itself was fine. The QCA bootloaders (SBL1, MIBIB, QSEE) were fine. The RF calibration was fine. Only the OS wouldn't start.</p>
<p>The firmware partition at <code>0x180000</code> held the Edimax <strong>web-UI update file</strong> (<code>OAP1300_v2.4.2.5.bin</code>) written to flash raw. That file is:</p>
<pre><code class="language-plaintext">[ Edimax header with version strings ][ AES-encrypted payload ]
</code></pre>
<p>Entropy of the payload is 7.99 bits/byte — it's encrypted. Only the running firmware's own updater can decrypt it and place it in flash. U-Boot's <code>bootipq</code> expects a <strong>bare FIT image</strong> at <code>0x180000</code> (magic <code>d0 0d fe ed</code>), read <code>00 00 00 00</code>, and bailed out without printing anything.</p>
<blockquote>
<p><strong>Do not repeat this.</strong> Never <code>sf write</code> the <code>.bin</code> from the Edimax website straight to <code>0x180000</code>. It's encrypted. The image you flash there must start with <code>d0 0d fe ed</code>.</p>
</blockquote>
<hr />
<h2>2. What you need</h2>
<p><strong>Hardware</strong></p>
<ul>
<li><p>A second, <strong>working OAP1300</strong> as the donor (identical hardware)</p>
</li>
<li><p>USB–UART adapter (CP2102) on the serial header — <code>115200 8N1</code></p>
</li>
<li><p>A <strong>dumb / unmanaged PoE switch</strong> — <em>not</em> a managed office switch</p>
</li>
<li><p>A Mac or Linux box with a wired Ethernet port</p>
</li>
</ul>
<p>The dumb switch matters. A managed office switch STP-isolated the AP's port and <strong>every single TFTP transfer timed out</strong> — this blocked the recovery for weeks. An unmanaged PoE switch with only the AP and the computer on it, no uplink, forwards frames without interfering.</p>
<p><strong>Files</strong></p>
<p>One file does the job: <code>work_hlos_rootfs.bin</code> — the donor's on-flash HLOS + rootfs region (<code>0x180000</code>–<code>0x1000000</code>, <code>0xe80000</code> bytes). It's a bare FIT kernel (<em>ARM OpenWrt Linux-3.14.43</em>) followed by the squashfs root, and carries no per-unit data.</p>
<hr />
<h2>3. Wiring</h2>
<pre><code class="language-plaintext"> OAP1300 ──PoE+data── [ dumb PoE switch ] ──data── Mac (en18)
 (dead unit)              no uplink                192.168.102.90/25

 OAP1300 serial header ──── CP2102 ──── Mac USB   (115200 8N1)
</code></pre>
<p>Only the AP and the Mac on the switch. Serial is a separate path.</p>
<img src="https://cdn.hashnode.com/uploads/covers/643661078c876776a479a254/e04fa8ec-85c2-4f00-8340-5501e568889f.jpg" alt="CP2102 USB-UART adapter wired to the OAP1300 TX / GND / RX serial header" style="display:block;margin:0 auto" />

<p><em>The three jumpers connect to the</em> <code>TX</code> <em>/</em> <code>GND</code> <em>/</em> <code>RX</code> <em>pads next to U13 on the board.</em></p>
<hr />
<h2>4. Prepare the host (macOS)</h2>
<pre><code class="language-bash"># en18 = the Mac's wired port
sudo ifconfig en18 inet 192.168.102.90 netmask 255.255.255.128 up
sudo arp -s 192.168.102.9 00:03:7f:ba:db:ad
sudo python3 tftp_recv.py
# TFTP server listening on 0.0.0.0:69  dest=/private/tftpboot
# waiting for tftpput from U-Boot...
</code></pre>
<p>Leave that running. Put <code>work_hlos_rootfs.bin</code> in <code>/private/tftpboot/</code>.</p>
<blockquote>
<p>macOS's built-in <code>tftpd</code> frequently won't answer. <code>tftp_recv.py</code> is a ~150-line stand-in that handles both directions and the <code>blksize</code> options U-Boot negotiates.</p>
</blockquote>
<hr />
<h2>5. Recover the dead unit</h2>
<h3>Step 1 — catch the U-Boot prompt</h3>
<p>Power the AP while hammering <code>Ctrl-C</code> on the serial console.</p>
<pre><code class="language-plaintext">U-Boot 2012.07  ·  ELX version: 1.0.0
Hit any key to stop autoboot:  2  1  0
(IPQ40xx) #
</code></pre>
<h3>Step 2 — point U-Boot at the host</h3>
<pre><code class="language-plaintext">setenv ethaddr 00:03:7f:ba:db:ad
setenv ipaddr 192.168.102.9
setenv serverip 192.168.102.90
sf probe 0
# SF: Detected MX25L25635E with page size 4 KiB, total 32 MiB
ping 192.168.102.90
# host 192.168.102.90 is alive
</code></pre>
<p><code>ethaddr</code> is set to the SROM MAC so the internal switch's ARL entry and the host's static ARP line agree.</p>
<p><strong>If ping fails, stop here.</strong> Fix the link before touching flash.</p>
<h3>Step 3 — pull the image into RAM</h3>
<pre><code class="language-plaintext">tftpboot 0x84000000 work_hlos_rootfs.bin
# ...
# Bytes transferred = 15204352 (e80000 hex)
</code></pre>
<p>Confirm the size is exactly <code>0xe80000</code>. A short transfer here becomes a bad flash.</p>
<h3>Step 4 — erase and write the firmware region</h3>
<p>Only <code>0x180000</code> onward. ART at <code>0x170000</code>, U-Boot, and the environment are left alone.</p>
<pre><code class="language-plaintext">sf erase 0x180000 0xe80000      # ~60 s
sf write 0x84000000 0x180000 0xe80000     # ~60 s
</code></pre>
<h3>Step 5 — verify by read-back</h3>
<pre><code class="language-plaintext">sf read 0x86000000 0x180000 0xe80000
cmp.b 0x84000000 0x86000000 0xe80000
(IPQ40xx) #      # silent = identical. any "differ" = re-write.
</code></pre>
<h3>Step 6 — reboot and let <code>bootipq</code> run</h3>
<p>Just <code>reset</code>. <strong>Do not</strong> hand-run <code>bootm 0x84000000#config@4</code>. Only <code>bootipq</code> performs the device-tree fixup that tells the kernel the flash is 32 MiB — without it, the <code>/factory</code> partition (which lives above 16 MiB) fails to mount and the unit drops into calibration ("ART") mode.</p>
<pre><code class="language-plaintext">reset
## Booting kernel from FIT Image at 84000000 ...
   Using 'config@4' configuration
   Verifying Hash Integrity ... crc32+ sha1+ OK
   Uncompressing Kernel Image ... OK
Starting kernel ...
</code></pre>
<h3>Step 7 — confirm it came up as an AP</h3>
<pre><code class="language-plaintext">Configuring QCA WiFi device[0] ... Wlan is in AP Mode
 DES SSID SET=OAP1300-ECB828_A
CMD[led_ctl 5g off]
cmd&gt;  WAL channel change freq=2427 ... rx_ok=1 tx_ok=1
</code></pre>
<p>Radio scanning, VAP up, no <code>art mode</code>, no <code>mtdblock11</code> I/O error. Reassemble the unit and configure it through the web UI like a new AP.</p>
<hr />
<h2>6. Flash map</h2>
<p>From <code>smeminfo</code> in U-Boot. The recovery touches one row.</p>
<table>
<thead>
<tr>
<th>Partition</th>
<th>Start</th>
<th>Size</th>
<th>Role</th>
</tr>
</thead>
<tbody><tr>
<td>SBL1</td>
<td><code>0x000000</code></td>
<td><code>0x040000</code></td>
<td>QCA primary bootloader</td>
</tr>
<tr>
<td>MIBIB</td>
<td><code>0x040000</code></td>
<td><code>0x020000</code></td>
<td>partition table</td>
</tr>
<tr>
<td>QSEE</td>
<td><code>0x060000</code></td>
<td><code>0x060000</code></td>
<td>secure world</td>
</tr>
<tr>
<td>CDT</td>
<td><code>0x0c0000</code></td>
<td><code>0x010000</code></td>
<td>board config</td>
</tr>
<tr>
<td>DDRPARAMS</td>
<td><code>0x0d0000</code></td>
<td><code>0x010000</code></td>
<td>RAM timings</td>
</tr>
<tr>
<td>APPSBLENV</td>
<td><code>0x0e0000</code></td>
<td><code>0x010000</code></td>
<td>U-Boot environment</td>
</tr>
<tr>
<td>APPSBL</td>
<td><code>0x0f0000</code></td>
<td><code>0x080000</code></td>
<td>U-Boot 2012.07</td>
</tr>
<tr>
<td>ART</td>
<td><code>0x170000</code></td>
<td><code>0x010000</code></td>
<td>RF calibration — unit-specific, <strong>keep</strong></td>
</tr>
<tr>
<td><strong>HLOS + rootfs</strong></td>
<td><code>0x180000</code></td>
<td><code>0xe80000</code></td>
<td>FIT kernel + squashfs — <strong>written from donor</strong></td>
</tr>
<tr>
<td>/factory + config</td>
<td><code>0x1b80000</code></td>
<td>—</td>
<td>squashfs + JFFS2, upper flash</td>
</tr>
</tbody></table>
<hr />
<h2>7. Taking the image off a donor</h2>
<p>If you don't have <code>work_hlos_rootfs.bin</code>, pull it from a working unit at its U-Boot prompt. Read-only — nothing is written to the donor.</p>
<pre><code class="language-plaintext">setenv ipaddr 192.168.102.9
setenv serverip 192.168.102.90
sf probe 0
sf read 0x84000000 0x180000 0xe80000
tftpput 0x84000000 0xe80000 work_hlos_rootfs.bin
# Bytes transferred = 15204352 (e80000 hex)
bootipq        # send the donor back to production
</code></pre>
<blockquote>
<p>A 15 MB transfer prints ~20 s of <code>#</code> to the console. If you open a new serial session while that's still draining you'll read stale bytes. Send <code>Ctrl-C</code> a few times and wait 2–3 s before trusting what you read next.</p>
</blockquote>
<hr />
<h2>8. Dead ends, for the record</h2>
<ul>
<li><p><strong>UART restore.</strong> This U-Boot has no <code>loadb</code> / <code>loadx</code> / <code>loady</code>. TFTP is the only way to get bytes onto the flash.</p>
</li>
<li><p><strong>OpenWrt EAP1300 initramfs.</strong> Boots, then the board hard-resets at ~1.5 s — the OAP1300's hardware watchdog isn't serviced by that image.</p>
</li>
<li><p><strong>Cloning ART or the full 32 MiB.</strong> Not needed and not wanted — the dead unit's own calibration and MAC were fine. Only the FIT region was bad.</p>
</li>
<li><p><strong>"</strong><code>bootipq</code> <strong>is broken."</strong> It isn't. Early logs looked like it failed because of the serial-buffer issue above; the manual <code>bootm ...#config@4</code> workaround then caused the calibration-mode symptom. Once a valid FIT is in place, plain <code>bootipq</code> works.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Freepbx 17 (Debian) отказоустойчивый кластер, бесплатно]]></title><description><![CDATA[Для реалезации отказоустойчевого кластера на Freepbx 17 будем использовать CARP протокол. Устанавливаем два сервера Freepbx на которых будет настроен отказоустойчивый кластер.
Freepbx01(Master) - 192.]]></description><link>https://help.dc24.cloud/freepbx-17-debian</link><guid isPermaLink="true">https://help.dc24.cloud/freepbx-17-debian</guid><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Thu, 12 Mar 2026 08:12:41 GMT</pubDate><content:encoded><![CDATA[<p>Для реалезации отказоустойчевого кластера на <strong>Freepbx 17</strong> будем использовать <strong>CARP</strong> протокол. Устанавливаем два сервера Freepbx на которых будет настроен отказоустойчивый кластер.</p>
<p><code>Freepbx01(Master) - 192.168.121.214</code></p>
<p><code>Freepbx02(Slave) - 192.168.121.215</code></p>
<p><code>HA(общий адрес) - 192.168.121.14</code></p>
<ol>
<li><strong>Редактируем файлы конфигурации:</strong></li>
</ol>
<p><code>Freepbx01(Master) - 192.168.121.214</code></p>
<pre><code class="language-plaintext">cat /etc/network/interfaces
</code></pre>
<pre><code class="language-plaintext">
auto lo
iface lo inet loopback

auto ens192
iface ens192 inet static
    address 192.168.121.214
    netmask 255.255.255.0
    gateway 192.168.121.1

    ucarp-vid 3
    ucarp-vip 192.168.121.14
    ucarp-password 12qwae21sS
    ucarp-advbase 1
    ucarp-advskew 0
    ucarp-master yes
iface ens192:ucarp inet static
        address 192.168.121.14
        netmask 255.255.255.0
</code></pre>
<p><strong>Carp</strong> интерфейс появился 192.168.121.14. Также добавляю скрипт который будет мониторить состояние сервиса <strong>asterisk</strong>, и если по какой то причине он не работает, то интерфейс <strong>CARP</strong> будет отключен, соответственно все устройства переподключатся на резервный сервер, так как он станем Мастером.</p>
<pre><code class="language-plaintext">sudo mkdir -p /var/log/ucarp-watchdog
sudo touch /var/log/ucarp-watchdog/watchdog.log
sudo chmod 664 /var/log/ucarp-watchdog/watchdog.log
</code></pre>
<p>sudo mcedit /usr/local/bin/<a href="http://ucarp-watchdog.sh">ucarp-watchdog.sh</a></p>
<pre><code class="language-plaintext">#!/bin/bash

LOG="/var/log/ucarp-watchdog/watchdog.log"
NIC="ens192"
TARGET_IP="192.168.121.14/24"    # IP з префіксом, який має бути на інтерфейсі
ASTERISK_BINARY="/usr/sbin/asterisk"

mkdir -p /var/log/ucarp-watchdog

echo "$(date '+%F %T') UCARP Watchdog started" &gt;&gt; "$LOG"

ASTERISK_WAS_DOWN=0       # 0 = раніше був UP (або стартовий стан), 1 = виявлено DOWN
NETWORK_RESTARTED=0      # 0 = ще не рестартували після останнього підняття Asterisk, 1 = рестарт вже зроблено

while true; do
    # Лог часу перевірки
    TS="$(date '+%F %T')"
    echo "$TS CHECK: start" &gt;&gt; "$LOG"

    # Перевіряємо чи процес Asterisk існує (повний шлях)
    if pgrep -f "$ASTERISK_BINARY" &gt; /dev/null ; then
        echo "$TS CHECK: Asterisk process FOUND" &gt;&gt; "$LOG"

        # Якщо раніше був DOWN (тобто тепер відновився) — помітимо відновлення
        if [ $ASTERISK_WAS_DOWN -eq 1 ]; then
            echo "$TS INFO: Asterisk recovered" &gt;&gt; "$LOG"
            # скидаємо прапорець NETWORK_RESTARTED, щоб дозволити рестарт мережі при потребі
            NETWORK_RESTARTED=0
            ASTERISK_WAS_DOWN=0
        fi

        # Перевіряємо наявність CARP-IP на інтерфейсі
        if ip a show dev "$NIC" | grep -qF "$TARGET_IP"; then
            echo "$TS INFO: $TARGET_IP is present on $NIC" &gt;&gt; "$LOG"
            # якщо IP є — нічого не робимо
            NETWORK_RESTARTED=1
        else
            echo "$TS WARN: $TARGET_IP NOT found on $NIC" &gt;&gt; "$LOG"
            # Якщо Asterisk працює і ми ще не рестартували мережу під час цієї сесії → рестарт
            if [ $NETWORK_RESTARTED -eq 0 ]; then
                echo "$TS ACTION: restarting networking.service because Asterisk is running but $TARGET_IP is missing" &gt;&gt; "$LOG"
                systemctl restart networking.service &gt;&gt; "$LOG" 2&gt;&amp;1
                if [ $? -eq 0 ]; then
                    echo "$TS OK: networking.service restarted" &gt;&gt; "$LOG"
                else
                    echo "$TS ERROR: networking.service restart failed" &gt;&gt; "$LOG"
                fi
                NETWORK_RESTARTED=1
            else
                echo "$TS INFO: networking already restarted once while Asterisk is up; skipping" &gt;&gt; "$LOG"
            fi
        fi

    else
        # Asterisk не працює
        echo "$TS CHECK: Asterisk process NOT FOUND" &gt;&gt; "$LOG"

        # Якщо тільки-но впав — вбити ucarp і поставити прапорець DOWN
        if [ $ASTERISK_WAS_DOWN -eq 0 ]; then
            echo "$TS ACTION: Asterisk DOWN detected → killing UCARP" &gt;&gt; "$LOG"
            pkill ucarp &gt;&gt; "$LOG" 2&gt;&amp;1 || true
            ASTERISK_WAS_DOWN=1
        else
            echo "$TS INFO: Asterisk still down" &gt;&gt; "$LOG"
        fi

        # Скидаємо прапорець NETWORK_RESTARTED, щоб при наступному піднятті Asterisk була нова спроба рестарту мережі
        NETWORK_RESTARTED=0
    fi

    echo "$TS CHECK: end" &gt;&gt; "$LOG"
    sleep 60
done
</code></pre>
<p>sudo chmod +x /usr/local/bin/<a href="http://ucarp-watchdog.sh">ucarp-watchdog.sh</a></p>
<p>sudo nano /etc/systemd/system/ucarp-watchdog.service</p>
<pre><code class="language-plaintext">[Unit]
Description=UCARP Asterisk Watchdog
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ucarp-watchdog.sh
Restart=always
RestartSec=5
User=root
StandardOutput=append:/var/log/ucarp-watchdog/watchdog.log
StandardError=append:/var/log/ucarp-watchdog/watchdog.log

[Install]
WantedBy=multi-user.target
</code></pre>
<pre><code class="language-plaintext">sudo systemctl daemon-reload
sudo systemctl enable ucarp-watchdog
sudo systemctl start ucarp-watchdog
</code></pre>
<p>Проверка</p>
<p>systemctl status ucarp-watchdog</p>
<p>tail -f /var/log/ucarp-watchdog/watchdog.log</p>
<ol>
<li><code>Freepbx02(Secondory) - 192.168.121.215</code></li>
</ol>
<pre><code class="language-plaintext">auto lo
iface lo inet loopback

auto ens192
iface ens192 inet static
    address 192.168.121.215
    netmask 255.255.255.0
    gateway 192.168.121.1

    ucarp-vid 3
    ucarp-vip 192.168.121.14
    ucarp-password 12qwae21sS
    ucarp-advbase 1
    ucarp-advskew 100
    ucarp-master no

iface ens192:ucarp inet static
        address 192.168.121.14
        netmask 255.255.255.0
</code></pre>
<h1><strong>Install zabbix</strong></h1>
<pre><code class="language-plaintext">apt install zabbix-agent2
</code></pre>
<p>mcedit /etc/sudoers</p>
<pre><code class="language-plaintext">zabbix &gt;&lt;------&gt;ALL=(ALL) NOPASSWD: /usr/sbin/asterisk
</code></pre>
<p>usermod -aG asterisk zabbix systemctl restart zabbix-agent2</p>
<p>Время</p>
<p>ln -sf /usr/share/zoneinfo/Europe/Kiev /etc/localtime</p>
<h2><strong>Настройка file2ban уведомлений через Graylog</strong></h2>
<p>mcedit /etc/rsyslog.d/30-fail2ban.conf</p>
<pre><code class="language-plaintext">module(load="imfile")

input(
  type="imfile"
  File="/var/log/fail2ban.log"
  Tag="fail2ban:"
  Severity="info"
  Facility="local0"
)

local0.* action(
  type="omfwd"
  target="192.168.96.20"
  port="514"
  protocol="udp"
)
</code></pre>
<p>sudo systemctl restart rsyslog</p>
<p>Вариант 2 отправка всех системных логов. mcedit /etc/rsyslog.conf</p>
<pre><code class="language-plaintext">*.* @Ip_your_server:12223
</code></pre>
<p>Отправка логов Asterisk mcedit /etc/rsyslog.conf добавляю</p>
<pre><code class="language-plaintext">#Asterisk full log                        
module(load="imfile")                     
input(type="imfile"                       
      File="/var/log/asterisk/full"       
      Tag="asterisk"                      
      Severity="info"                     
      Facility="local6")                  

#File2ban log
input(type="imfile"
      File="/var/log/fail2ban.log"
      Tag="fail2ban"
      Severity="info"
      Facility="local6")
</code></pre>
<p>Перезапуск</p>
<pre><code class="language-plaintext">systemctl restart rsyslog
systemctl status rsyslog
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Заменяем EFI загрущик BIOS -м]]></title><description><![CDATA[После обновления Centos 9 до последней версии ядра он перестал загружаться. Это связано с тем что мы используем его на старой версии esxi. Centos 9 не поддерживает bios загрузчик. Ставим руками.
sudo dnf install grub2-pc-modules
Добавляю новий диск 1...]]></description><link>https://help.dc24.cloud/zamenyaem-efi-zagrushik-bios-m</link><guid isPermaLink="true">https://help.dc24.cloud/zamenyaem-efi-zagrushik-bios-m</guid><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Thu, 11 Sep 2025 08:40:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757580069160/9874cf47-d023-47f2-a559-5e7198521dee.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>После обновления Centos 9 до последней версии ядра он перестал загружаться. Это связано с тем что мы используем его на старой версии esxi. Centos 9 не поддерживает bios загрузчик. Ставим руками.</p>
<p>sudo dnf install grub2-pc-modules</p>
<p>Добавляю новий диск 10мб /dev/sdb</p>
<pre><code class="lang-plaintext">parted /dev/sdb
mklabel gpt
mkpart primary 1MiB 3MiB
set 1 bios_grub on
quit
grub2-install --target=i386-pc /dev/sdb
grub2-mkconfig -o /boot/grub2/grub.cfg
</code></pre>
<p>Перезагрузка, после в ВМ установить тип загрузки BIOS и выбираем загрузку с нашого нового диска.</p>
]]></content:encoded></item><item><title><![CDATA[Matrix]]></title><description><![CDATA[Coturn (TURN-сервер)
Аутентификация

lt-cred-mech

Включает Long-Term Credentials (LTC) механизм аутентификации.

Клиенты должны передавать логин и пароль для соединения с TURN-сервером.



use-auth-secret

Включает механизм динамической аутентификац...]]></description><link>https://help.dc24.cloud/matrix</link><guid isPermaLink="true">https://help.dc24.cloud/matrix</guid><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Thu, 20 Mar 2025 14:48:42 GMT</pubDate><content:encoded><![CDATA[<p><strong>Coturn (TURN-сервер)</strong></p>
<h3 id="heading-autentifikaciya"><strong>Аутентификация</strong></h3>
<ol>
<li><p><code>lt-cred-mech</code></p>
<ul>
<li><p>Включает <strong>Long-Term Credentials (LTC) механизм аутентификации</strong>.</p>
</li>
<li><p>Клиенты должны передавать логин и пароль для соединения с TURN-сервером.</p>
</li>
</ul>
</li>
<li><p><code>use-auth-secret</code></p>
<ul>
<li><p>Включает механизм <strong>динамической аутентификации</strong>.</p>
</li>
<li><p>Вместо статических паролей клиенты получают временные ключи (HMAC), сгенерированные сервером.</p>
</li>
</ul>
</li>
<li><p><code>static-auth-secret=579d650b6e2d82c40519340ff5decd211a656725494b63e8d3e0e99a989b3316</code></p>
<ul>
<li><p><strong>Секретный ключ</strong> для генерации временных паролей (используется с <code>use-auth-secret</code>).</p>
</li>
<li><p>Клиенты и сервер используют его для создания временных учетных данных (username, password).</p>
</li>
<li><p>Пароли создаются по алгоритму <strong>HMAC-SHA1</strong> и действуют ограниченное время.</p>
</li>
</ul>
</li>
<li><p><code>cert=/etc/letsencrypt/live/</code><a target="_blank" href="http://mx.dc24.cloud/fullchain.pem"><code>mx.dc24.cloud/fullchain.pem</code></a></p>
<ul>
<li><p><strong>Путь к SSL-сертификату</strong> (используется для TLS/DTLS).</p>
</li>
<li><p>Позволяет серверу шифровать соединения.</p>
</li>
</ul>
</li>
<li><p><code>pkey=/etc/letsencrypt/live/</code><a target="_blank" href="http://mx.dc24.cloud/privkey.pem"><code>mx.dc24.cloud/privkey.pem</code></a></p>
<ul>
<li><p><strong>Приватный ключ</strong> для SSL-сертификата.</p>
</li>
<li><p>Должен соответствовать сертификату (<code>fullchain.pem</code>).</p>
</li>
</ul>
</li>
<li><p><code>no-tcp-relay</code></p>
<ul>
<li><p>Отключает <strong>ретрансляцию трафика по TCP</strong>.</p>
</li>
<li><p>Полезно для снижения нагрузки на сервер (TURN обычно передаёт видео/аудио по UDP).</p>
</li>
</ul>
</li>
<li><p><code>no-multicast-peers</code></p>
<ul>
<li><p>Отключает поддержку <strong>многоадресной передачи (multicast)</strong>.</p>
</li>
<li><p>Уменьшает нагрузку, если сервер не работает с multicast-группами.</p>
</li>
</ul>
</li>
<li><p><code>fingerprint</code> – это настройка, которая <strong>включает контрольную сумму (CRC32) в заголовках сообщений STUN/TURN</strong>.</p>
<p> 🔹 <strong>Зачем нужен этот параметр?</strong></p>
<ul>
<li><p><strong>Обеспечивает целостность данных</strong> – клиент может проверить, что сообщение не повреждено.</p>
</li>
<li><p><strong>Повышает безопасность</strong> – помогает защититься от некоторых видов атак на подмену данных.</p>
</li>
<li><p><strong>Упрощает совместимость с WebRTC</strong> – многие браузеры и клиенты WebRTC требуют <code>fingerprint</code>.</p>
</li>
</ul>
</li>
<li><h3 id="heading-parametr-ec-curve-namesecp384r1-v-coturn"><strong>Параметр</strong> <code>ec-curve-name=secp384r1</code> в Coturn</h3>
<p> Этот параметр <strong>указывает, какую эллиптическую кривую использовать для шифрования в TLS</strong>.</p>
<h3 id="heading-chto-takoe-secp384r1">🔹 <strong>Что такое</strong> <code>secp384r1</code>?</h3>
<ul>
<li><p><code>secp384r1</code> – это эллиптическая кривая <strong>P-384 (NIST)</strong>.</p>
</li>
<li><p>Обеспечивает <strong>384-битное шифрование</strong>, что <strong>безопаснее, чем стандартная P-256 (secp256r1)</strong>.</p>
</li>
<li><p>Используется в ECDH (Elliptic Curve Diffie-Hellman) для создания <strong>защищённого обмена ключами</strong>.</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-pochemu-eto-vazhno">🔹 <strong>Почему это важно?</strong></h3>
<p>    Использование эллиптической криптографии (ECC) делает шифрование: ✅ <strong>Безопаснее</strong> – выше уровень защиты по сравнению с RSA 2048.<br />    ✅ <strong>Быстрее</strong> – меньшая нагрузка на CPU.<br />    ✅ <strong>Совместимо</strong> – поддерживается всеми современными браузерами и WebRTC.</p>
<h3 id="heading-kak-vklyuchit-v-coturn">🔹 <strong>Как включить в Coturn?</strong></h3>
<p>    Добавь в <code>/etc/turnserver.conf</code>:</p>
<ol start="10">
<li><p>Добавь в <code>/etc/turnserver.conf</code>:</p>
<pre><code class="lang-plaintext">ec-curve-name=secp384r1
</code></pre>
<p>Затем <strong>перезапусти Coturn</strong>:</p>
<pre><code class="lang-plaintext">systemctl restart coturn
</code></pre>
<h3 id="heading-kakie-est-alternativy">🔹 <strong>Какие есть альтернативы?</strong></h3>
<ul>
<li><p><code>secp256r1</code> (P-256) – быстрее, но менее безопасен.</p>
</li>
<li><p><code>secp521r1</code> (P-521) – максимально безопасен, но медленнее.</p>
</li>
</ul>
</li>
</ol>
<p>    Если хочешь <strong>баланс между безопасностью и скоростью</strong>, <code>secp384r1</code> – лучший выбор. 🚀</p>
<h3 id="heading-kak-shifruetsya-trafik-pri-webrtc-i-turn"><strong>Как шифруется трафик при WebRTC и TURN?</strong></h3>
<h4 id="heading-1-udp"><strong>1️⃣ UDP:</strong></h4>
<ul>
<li><p>TURN <strong>не шифрует</strong> сам UDP-трафик, он просто ретранслирует пакеты.</p>
</li>
<li><p>Однако WebRTC использует <strong>SRTP (Secure Real-time Transport Protocol)</strong>, который шифрует <strong>UDP-трафик аудио и видео</strong>.</p>
</li>
<li><p><strong>SRTP использует AES (обычно AES-128-GCM или AES-256-GCM)</strong>.</p>
</li>
<li><p>Ключи для шифрования передаются через <strong>DTLS (Datagram Transport Layer Security)</strong>.</p>
</li>
</ul>
<h4 id="heading-2-tcp"><strong>2️⃣ TCP:</strong></h4>
<ul>
<li><p><strong>SRTP работает только с UDP</strong>, потому что он предназначен для <strong>потоковой передачи в реальном времени</strong>.</p>
</li>
<li><p>Если WebRTC использует TCP, то применяется <strong>TLS (Transport Layer Security)</strong>.</p>
</li>
<li><p><strong>TURN-трафик по TCP можно зашифровать через TLS (TURN over TLS, порт 5349)</strong>.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Windows SRV2025 устранение ошибок]]></title><description><![CDATA[Быстро проверяет, есть ли повреждения в системном образе Windows. Не выполняет исправления, только сообщает, есть ли проблемы.
DISM /Online /Cleanup-Image /CheckHealth

Выполняет более глубокую проверку системного образа на наличие повреждений.Показы...]]></description><link>https://help.dc24.cloud/windows-srv2025-ustranenie-oshibok</link><guid isPermaLink="true">https://help.dc24.cloud/windows-srv2025-ustranenie-oshibok</guid><category><![CDATA[windows fix]]></category><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Wed, 19 Mar 2025 08:13:02 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1742371943435/ab612632-5bb8-4cdc-a514-073d36f2b981.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Быстро проверяет, есть ли повреждения в системном образе Windows. Не выполняет исправления, только сообщает, есть ли проблемы.</p>
<pre><code class="lang-plaintext">DISM /Online /Cleanup-Image /CheckHealth
</code></pre>
<p>Выполняет более глубокую проверку системного образа на наличие повреждений.Показывает, есть ли ошибки, но не исправляет их.</p>
<pre><code class="lang-plaintext"> DISM /Online /Cleanup-Image /ScanHealth
</code></pre>
<p>Если были найдены ошибки, эта команда автоматически скачивает и исправляет поврежденные файлы из Центра обновления Windows.</p>
<pre><code class="lang-plaintext">DISM /Online /Cleanup-Image /RestoreHealth
</code></pre>
<p>Восстановления компонентов с помощью дисков</p>
<pre><code class="lang-plaintext">dism /online /cleanup-image /restorehealth /source:wim:D:\sources\install.wim:6 /limitaccess
</code></pre>
<p>Проверка целостности системных файлов</p>
<pre><code class="lang-plaintext">sfc /scannow
</code></pre>
<p>Включите компоненты обновлений Windows</p>
<pre><code class="lang-plaintext">sc config trustedinstaller start=auto
sc config wuauserv start=auto
sc config cryptsvc start=auto
sc config bits start=auto
net start trustedinstaller
net start wuauserv
net start cryptsvc
net start bits
</code></pre>
<p>Сброс компонентов Центра обновления Windows</p>
<pre><code class="lang-plaintext">net stop wuauserv
net stop cryptSvc
net stop bits
net stop msiserver
ren C:\Windows\SoftwareDistribution SoftwareDistribution.old
ren C:\Windows\System32\catroot2 catroot2.old
net start wuauserv
net start cryptSvc
net start bits
net start msiserver
</code></pre>
<p>Диагностика файловой системы</p>
<pre><code class="lang-plaintext">chkdsk C: /f /r
</code></pre>
<p><strong>Управление Обновлениями через powerShel, удаление зависших обновлений.</strong></p>
<p>Проверьте список установленных обновлений:</p>
<pre><code class="lang-plaintext"> Get-HotFix
</code></pre>
<p><strong>В стандартных модулях PowerShell</strong>. <code>Remove-WindowsUpdate</code> не является стандартной командой в PowerShell. Устанавливаем.</p>
<pre><code class="lang-plaintext">Install-Module -Name PSWindowsUpdate -Force -SkipPublisherCheck
Import-Module PSWindowsUpdate
</code></pre>
<p>Удаляем ненужный update на примере <strong>KB5043080</strong></p>
<pre><code class="lang-plaintext">Remove-WindowsUpdate -KBArticleID KB5043080  -Confirm:$false
</code></pre>
<p>Проверка журнала обновлений Windows</p>
<p><strong>C:\Windows\Logs\CBS\CBS.log</strong></p>
]]></content:encoded></item><item><title><![CDATA[Анонимный интернет VPN+TOR+VPN]]></title><description><![CDATA[https://www.mvps.net/
Pfsense c настроеным ВПН для пользователей.
2 интерфейса Lan соединен с Ubuntu 10.0.01/24
На Ubuntu устанавливаю TOR
sudo apt update
sudo apt install tor -y
systemctl status tor
sudo systemctl enable tor
sudo systemctl start tor...]]></description><link>https://help.dc24.cloud/anonimnyj-internet-vpntorvpn</link><guid isPermaLink="true">https://help.dc24.cloud/anonimnyj-internet-vpntorvpn</guid><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Mon, 24 Feb 2025 19:18:36 GMT</pubDate><content:encoded><![CDATA[<p><a target="_blank" href="https://www.mvps.net/">https://www.mvps.net/</a></p>
<p>Pfsense c настроеным ВПН для пользователей.</p>
<p>2 интерфейса Lan соединен с Ubuntu 10.0.01/24</p>
<p>На Ubuntu устанавливаю TOR</p>
<pre><code class="lang-plaintext">sudo apt update
sudo apt install tor -y
systemctl status tor
sudo systemctl enable tor
sudo systemctl start tor
</code></pre>
<p>Файл конфигурации Tor находится здесь:</p>
<pre><code class="lang-plaintext">mcedit /etc/tor/torrc
</code></pre>
<pre><code class="lang-bash">DNSPort 53
SocksPort 0.0.0.0:9050
TransPort 9040
AutomapHostsOnResolve 1
VirtualAddrNetworkIPv4 10.192.0.0/10
SocksPolicy accept 10.10.7.0/24
SocksPolicy accept 10.0.0.0/24
SocksPolicy accept 127.0.0.1
</code></pre>
<p><strong>Установка и настройка Privoxy на Ubuntu 22.04</strong></p>
<p>Privoxy — это прокси-сервер с поддержкой фильтрации, который можно использовать совместно с Tor для анонимного веб-серфинга.</p>
<pre><code class="lang-bash">sudo apt update
sudo apt install privoxy -y
</code></pre>
<p>В самый верх конфига——— mcedit /etc/privoxy/config</p>
<pre><code class="lang-bash">forward-socks5t / 127.0.0.1:9050 .
listen-address  0.0.0.0:8118
</code></pre>
<p>Проверяем</p>
<pre><code class="lang-bash">netstat -tulnp | grep 8118
tcp        0      0 0.0.0.0:8118            0.0.0.0:*               LISTEN      2394/privoxy
</code></pre>
<h3 id="heading-perezapusk-sluzhby-privoxy"><strong>Перезапуск службы Privoxy</strong></h3>
<p>После внесения изменений перезапускаем сервис:</p>
<pre><code class="lang-bash">systemctl restart privoxy
</code></pre>
<p>Проверяем статус:</p>
<pre><code class="lang-bash">systemctl status privoxy
</code></pre>
<h3 id="heading-proverka-raboty-privoxy"><strong>Проверка работы Privoxy</strong></h3>
<p>Проверяем доступность прокси-сервера:</p>
<pre><code class="lang-bash">curl -x http://127.0.0.1:8118 -s https://check.torproject.org | grep -i <span class="hljs-string">"congratulations"</span>
</code></pre>
<p>Если всё настроено правильно, в выводе будет сообщение, подтверждающее, что вы используете Tor.</p>
<h3 id="heading-avtozapusk-privoxy-pri-zagruzke"><strong>Автозапуск Privoxy при загрузке</strong></h3>
<p>Чтобы Privoxy автоматически запускался при старте системы:</p>
<pre><code class="lang-bash">sudo systemctl <span class="hljs-built_in">enable</span> privoxy
</code></pre>
<p>Возвращаемся на pfsense и настраиваем VPN но через прокси</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739982150971/b194755c-433e-4f59-9b5d-d1ee7f182453.png" alt class="image--center mx-auto" /></p>
<p><strong>10.0.0.2 -Ubuntu -LAN</strong></p>
<p><strong>10.0.0.1 -Pfsense -LAN</strong></p>
]]></content:encoded></item><item><title><![CDATA[Перенос профелей пользователей Windows Serv 2016/2019/2022/2025]]></title><description><![CDATA[Создаем Profile.iso На диск должен лежать файл Unattend.xml
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-Shell-Setup" processo...]]></description><link>https://help.dc24.cloud/perenos-profelej-polzovatelej-windows-serv-2016201920222025</link><guid isPermaLink="true">https://help.dc24.cloud/perenos-profelej-polzovatelej-windows-serv-2016201920222025</guid><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Tue, 11 Feb 2025 08:22:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1739262105914/00a26fa2-a1d3-43cb-ab1e-c74fb92aaf1e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Создаем Profile.iso На диск должен лежать файл <strong>Unattend.xml</strong></p>
<pre><code class="lang-plaintext">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;unattend xmlns="urn:schemas-microsoft-com:unattend"&gt;
    &lt;settings pass="oobeSystem"&gt;
        &lt;component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"&gt;
            &lt;FolderLocations&gt;
                &lt;ProfilesDirectory&gt;d:\Users&lt;/ProfilesDirectory&gt;
            &lt;/FolderLocations&gt;
        &lt;/component&gt;
    &lt;/settings&gt;
&lt;/unattend&gt;
</code></pre>
<ul>
<li><p>Установить винду, когда система попросит ввести пароль для Администратора, нажимаем <strong>Shift+F10</strong>(командная строка)</p>
</li>
<li><p><strong>diskmgmt.msc</strong> Переназначаем диски. Диск где будут профиля должен называется D:\</p>
</li>
<li><p>Profile.iso монтируем в сдром например как R</p>
</li>
<li><p>Вводим команду:</p>
</li>
<li><pre><code class="lang-plaintext">      %windir%\system32\sysprep\sysprep.exe /oobe /reboot /unattend:r:\unattend.xml
</code></pre>
</li>
<li><p>Где r:\ место с файлом <strong>unattend.xml</strong></p>
</li>
</ul>
<p>Если просто нужно убрать SID с ОС то запускаем.</p>
<ul>
<li><pre><code class="lang-plaintext">    %windir%\system32\sysprep\sysprep.exe /generalize /oobe /reboot
</code></pre>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Pfsense HAProxy]]></title><description><![CDATA[Общие настройки frontend
 

Настраиваем Backend
 

Настройка для HTTPS
 
 

Настройка для HTTP с выполнением редиректа на HTTPS
 
 

Настраиваем Frontend для HTTPS
 
 
 
 

Настраиваем Frontend для HTTP
 
 
 
 
 | Action | Parameters | Condition acl ...]]></description><link>https://help.dc24.cloud/pfsense-haproxy</link><guid isPermaLink="true">https://help.dc24.cloud/pfsense-haproxy</guid><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Thu, 21 Nov 2024 09:14:02 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1732180740796/4ea13cc8-9cf5-452c-a572-b5292e1c5196.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ol>
<li><p>Общие настройки frontend</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732179339217/bf015181-c8e7-42fc-825b-84295c65f61e.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><p>Настраиваем Backend</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732179411054/ebdc02de-689a-469b-a60c-6480ccb71c8d.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><p>Настройка для HTTPS</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732179535329/60622115-640a-4ee8-8f3d-7f7447c7fd06.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732179643673/7c6cab64-43cf-4fc9-95c6-a6f012a4a9a9.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li><p>Настройка для HTTP с выполнением редиректа на HTTPS</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732179770968/deabfc79-d6f4-4fb2-b5ac-07f09d7c5887.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732179836556/4f9ae835-f2cf-4265-947b-c533af9526c9.png" alt class="image--center mx-auto" /></p>
<ol start="5">
<li><p>Настраиваем Frontend для HTTPS</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732179931661/aa652d44-c5ae-49db-a390-44a20ffd89ef.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732179958874/8867e659-48cf-439f-a996-b1244c300e17.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732179985463/aace579e-bedc-4c74-a545-f4e038719f93.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732180018897/498d480e-253d-4b21-b01e-ee2368758314.png" alt class="image--center mx-auto" /></p>
<ol start="6">
<li><p>Настраиваем Frontend для HTTP</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732180094151/1c35d2c7-3fd4-449c-a63e-8ddba7d7fb02.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732180123010/abc475e5-c7f5-4c75-b68b-e81efc247195.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732180145431/76740410-3e24-418b-a14d-aad7a440c85b.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732180193141/6a66c1f1-07e3-406a-9146-eb2bd4cf2f73.png" alt class="image--center mx-auto" /></p>
<p> | Action | Parameters | Condition acl names | Actions |  |
 | --- | --- | --- | --- | --- |
 |  | http-request redirect | See below | redirect1 |  |
 |  | rule: code 301 location <a target="_blank" href="https://autotrade.kiev.ua%25%5Bpath%5D?%25%5Bquery%5D">https://autotrade.kiev.ua%[path]?%[query]</a> |  |  |  |
 |  | http-request redirect | See below | redirect2 |  |
 |  | rule: code 301 location <a target="_blank" href="https://%25%5Bhdr\(host\)%5D%25%5Bpath%5D?%25%5Bquery%5D">https://%[hdr(host)]%[path]?%[query]</a> |  |  |  |
 |  | http-request redirect | See below | redirect3 |  |
 |  | rule: code 301 location <a target="_blank" href="https://%25%5Bhdr\(host\)%5D%25%5Bpath%5D?%25%5Bquery%5D">https://%[hdr(host)]%[path]?%[query]</a> |  |  |  |
 |  | http-request redirect | See below | redirect4 |  |
 |  | rule: code 301 location <a target="_blank" href="https://autotrade.kiev.ua%25%5Bpath%5D?%25%5Bquery%5D">https://autotrade.kiev.ua%[path]?%[query]</a> |  |  |  |
 |  | http-request redirect | See below | redirect5 |  |
 |  | rule: code 301 location <a target="_blank" href="https://autotrade.kiev.ua%25%5Bpath%5D?%25%5Bquery%5D">https://autotrade.kiev.ua%[path]?%[query]</a> |  |  |  |
 |  | http-request redirect | See below | redirect6 |  |
 |  | rule: code 301 location <a target="_blank" href="https://autotrade.kiev.ua%25%5Bpath%5D?%25%5Bquery%5D">https://autotrade.kiev.ua%[path]?%[query]</a> |  |  |  |
 |  | http-request redirect | See below | redirect7 |  |
 |  | rule: code 301 location <a target="_blank" href="https://idp.com.cy%25%5Bpath%5D?%25%5Bquery%5D">https://idp.com.cy%[path]?%[query]</a> |  |  |  |
 |  | http-request redirect | See below | redirect8 |  |
 |  | rule: code 301 location <a target="_blank" href="https://duettestates.com.cy%25%5Bpath%5D?%25%5Bquery%5D">https://duettestates.com.cy%[path]?%[query]</a> |  |  |  |
 |  | Use Backend | See below | redirect9 |  |
 |  | backend: <a target="_blank" href="http://autotrade.kiev.ua">autotrade.kiev.ua</a>-81 |  |  |  |
 |  | Use Backend | See below | redirect10 |  |</p>
<p> Если есть необходимость сайту получать реальный ip клиента то нужно установить галочку <strong>Use Client-IP to connect to backend servers</strong> в вашем <a target="_blank" href="https://gw01.dc24.cloud:4443/haproxy/haproxy_pools.php">Backend</a> и указать интерфейс на котором находится <a target="_blank" href="https://gw01.dc24.cloud:4443/haproxy/haproxy_pools.php">Backend</a>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1732689505791/740e7186-0f80-478f-9910-53e630caeac3.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[MAC OS - Шпаргалка]]></title><description><![CDATA[Скрыть пользователя Mac OS с включенным filevault

Выполняем команды в терминале
 sudo dscl . create /Users/hiddenuser IsHidden 1

 hiddenuser - пользователь которого необходимо скрыть

Для того что бы скрыть каталог
 sudo chflags hidden /Users/hidde...]]></description><link>https://help.dc24.cloud/mac-os-shpargalka</link><guid isPermaLink="true">https://help.dc24.cloud/mac-os-shpargalka</guid><category><![CDATA[filevault]]></category><category><![CDATA[Hide a user account from the login]]></category><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Wed, 03 Jul 2024 05:21:02 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-skryt-polzovatelya-mac-os-s-vklyuchennym-filevault">Скрыть пользователя Mac OS с включенным filevault</h2>
<ol>
<li><p>Выполняем команды в терминале</p>
<pre><code class="lang-plaintext"> sudo dscl . create /Users/hiddenuser IsHidden 1
</code></pre>
<p> hiddenuser - пользователь которого необходимо скрыть</p>
</li>
<li><p>Для того что бы скрыть каталог</p>
<pre><code class="lang-plaintext"> sudo chflags hidden /Users/hiddenuser
</code></pre>
</li>
<li><p>Отменить все</p>
<pre><code class="lang-plaintext"> sudo dscl . create /Users/hiddenuser IsHidden 0
 sudo dscl delete Local/Defaults/SharePoints/Hidden\ User’s\ Public\ Folder/ exit
</code></pre>
</li>
<li><p>Если включен filevault то при старте системы скрытый пользоватеть будет отображаться, для решения выполняем</p>
<pre><code class="lang-plaintext"> sudo fdesetup list
</code></pre>
<p> Получаем список пользователей у которых есть права на использование filevault</p>
</li>
</ol>
<p>После чего забираем права у пользователя который не должен отображаться</p>
<pre><code class="lang-plaintext">sudo fdesetup remove -user hiddenuser
</code></pre>
<p>После перезагрузки остается один пользователь</p>
<ol>
<li><h2 id="heading-tunel-mac-os">Tunel mac os</h2>
</li>
</ol>
<pre><code class="lang-plaintext">ssh -L 8888:localhost:80 [пользователь]@[ssh_хост]
</code></pre>
<p>Здесь:</p>
<ul>
<li><p><code>8888</code> — локальный порт на вашем Mac, к которому вы будете подключаться.</p>
</li>
<li><p><a target="_blank" href="http://localhost:80"><code>localhost:80</code></a> — это удалённый хост и порт, на который будет перенаправляться трафик. Если хотите перенаправить на другой хост, замените <a target="_blank" href="http://localhost"><code>localhost</code></a> на нужный хост.</p>
</li>
<li><p><code>[пользователь]@[ssh_хост]</code> — это ваш логин и адрес SSH-сервера, на который вы подключаетесь.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Exchange multi domains Autodiscover]]></title><description><![CDATA[Автообнаружение с несколькими доменами и сертификатом с одним именем.

Создайте записи SRV в домене и во внешнем DNS
 Чтобы создать запись SRV во внутреннем DNS, выполните следующие действия:

Войдите в контроллер домена, на котором размещена зона li...]]></description><link>https://help.dc24.cloud/exchange-multi-domains-autodiscover</link><guid isPermaLink="true">https://help.dc24.cloud/exchange-multi-domains-autodiscover</guid><category><![CDATA[exchange-multi-domains-autodiscover]]></category><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Mon, 12 Feb 2024 14:06:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1707745893816/768c1145-f0a9-48cc-b89f-6d6e38eaf4e9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-avtoobnaruzhenie-s-neskolkimi-domenami-i-sertifikatom-s-odnim-imenem"><strong>Автообнаружение с несколькими доменами и сертификатом с одним именем.</strong></h1>
<ol>
<li><h3 id="heading-sozdajte-zapisi-srv-v-domene-i-vo-vneshnem-dns"><strong>Создайте записи SRV в домене и во внешнем DNS</strong></h3>
<p> Чтобы создать запись SRV во внутреннем DNS, выполните следующие действия:</p>
<ol>
<li><p>Войдите в контроллер домена, на котором размещена <a target="_blank" href="http://xn--litwareinc-yqi7fvdn.com">зона litwareinc.com</a>.</p>
</li>
<li><p>Щелкните правой кнопкой мыши <a target="_blank" href="http://xn--litwareinc-5si6em5e.com">зону litwareinc.com</a> и выберите «Другие новые записи».</p>
</li>
</ol>
</li>
</ol>
<ol start="2">
<li><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1707746084773/c20df823-2ee9-4009-81e4-5974231c5c95.png" alt class="image--center mx-auto" /></li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1707746126240/6ea03411-e138-4805-b47b-257dbf2eff23.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-dlya-vneshnego-dns">Для внешнего DNS</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1707746282175/7a626d61-a78d-4427-8ec6-b84c300bbf3d.png" alt class="image--center mx-auto" /></p>
<p>Также нужно обязательно удалить запись "А" autodiscover.(ваш домен) так как мы для автонатройки будем использовать запись SRV</p>
<p>Для проверки записи используем сайт <a target="_blank" href="https://www.nslookup.io/">https://www.nslookup.io/</a></p>
<p>Запрос в том же формате что и в DNS</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1707747323505/744c6bc1-3add-41fb-a87c-d08573d66a4b.png" alt class="image--center mx-auto" /></p>
<p>Можно через cmd</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1707747393496/e2add7c1-57a6-4d50-9419-c699a8d311e4.png" alt class="image--center mx-auto" /></p>
<p>Проверяем с внешним DNS</p>
<p><strong>nslookup -type=SRV <em>autodiscover.</em></strong><a target="_blank" href="http://tcp.dc24.cloud"><strong>tcp.</strong></a><strong>домен 8.8.8.8</strong></p>
<p>Пробуем подключить outlook из вне. Получаем предупреждение что будет использоваться другое доменное имя.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1707746390786/2993d142-f49c-48e6-8394-cc50fbcacf77.png" alt class="image--center mx-auto" /></p>
<p>Соглашается.</p>
<p>Далее вы столкнетесь с ошибкой аунтификации, если у вас в AD не прописаны домены.</p>
<p>Идем в "Active Directory - домены и доверие" правой кнопкой -свойства</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1707746605481/780ff054-7fac-4652-b98b-ee466986dca6.png" alt class="image--center mx-auto" /></p>
<p>Прописываем все свои домены.</p>
<p>После чего переходим в ту учетную запись которая не может войти и указываем правильный домен для нее.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1707746705858/d95da4cc-60fa-4b8e-9521-78267f2684d9.png" alt class="image--center mx-auto" /></p>
<p>ВСЕ!!!</p>
]]></content:encoded></item><item><title><![CDATA[HP Switch 1910 шпаргалка]]></title><description><![CDATA[ssh
_cmdline-mode on
Пароль 512900
Уcтановка DNS
ssh
_cmdline-mode on
Пароль 512900
system-view
interface Vlan-interface2
Для установки второго dns повторяем команду
dns server 192.168.1
dns server 192.168.1
dns server 192.168.1
dns resolve
display d...]]></description><link>https://help.dc24.cloud/hp-switch-1910-shpargalka</link><guid isPermaLink="true">https://help.dc24.cloud/hp-switch-1910-shpargalka</guid><category><![CDATA[hp1910]]></category><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Wed, 31 Jan 2024 08:27:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1706689632855/e5b78103-b278-42d5-afe4-bf0bd8cfba45.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>ssh</p>
<p>_cmdline-mode on</p>
<p>Пароль 512900</p>
<h1 id="heading-uctanovka-dns">Уcтановка DNS</h1>
<pre><code class="lang-plaintext">ssh
_cmdline-mode on
Пароль 512900
system-view
interface Vlan-interface2
Для установки второго dns повторяем команду
dns server 192.168.1
dns server 192.168.1
dns server 192.168.1
dns resolve
display dns server
save
</code></pre>
<h1 id="heading-blok-porta-novyj-mas">Блок порта (Новый МАС)</h1>
<p>HP 1910 Включаем ssh демона</p>
<p>Подключаемся</p>
<p>Включить режим администрирования <em>cmdline-mode on Пароль: 512900</em></p>
<p><em>system-view Скрытый режим для разработчика</em></p>
<ol>
<li><pre><code class="lang-plaintext"> system-view
 interface gig1/0/9
 port-securit port-security enable
</code></pre>
</li>
</ol>
<p>hidecmd Включить port-securit port-security enable</p>
<p>Включить ловушку вторжения port-security trap intrusion</p>
<p>Выбор интерфейса interface gig1/0/17</p>
<p>Максимальное количество маков нв интерфейсе port-security max-mac-count 1</p>
<p>Режим обучения port-security port-mode autolearn</p>
<ol>
<li><pre><code class="lang-plaintext"> port-security port-mode autolearn
</code></pre>
</li>
</ol>
<p>Действие при обнаружении подменного mac (блокируем mac) /disableport отключаем порт port-security intrusion-mode blockmac Показать количество всех заблокированных MAC-адресов display port-security mac-address block count</p>
<p>Отображение информации обо всех заблокированных MAC-адресах display port-security mac-address block</p>
<p>Информация о настройках на порте display port-security</p>
<p>Отменить редим безопасного порта</p>
<ol>
<li><pre><code class="lang-plaintext"> interface gig1/0/9
 undo port-security port-mode
 undo port-security intrusion-mode
 undo port-security port-mode
 save

 display port-security
</code></pre>
</li>
</ol>
<p>GigabitEthernet 1/0/1</p>
<p>interface gig1/0/9</p>
<p>port-security max-mac-count 1</p>
<p>port-security port-mode autolearn</p>
<p>port-security intrusion-mode blockmac</p>
<p>display port-security mac-address security</p>
<p>Обеденение свитчей по протоколу IRF lldp enable</p>
<p>display stack members</p>
]]></content:encoded></item><item><title><![CDATA[Exchange настройка внутреннего и внешнего URL-адреса]]></title><description><![CDATA[Настройте внутренний URL-адрес в Exchange с помощью PowerShell. Когда внутренний и внешний URL отличается то могут возникать проблемы с сертификатом ssl. Для решения проблемы приводим URL внешний и внутренний к одному виду. Создаем скрипт.
$subdomain...]]></description><link>https://help.dc24.cloud/exchange-nastrojka-vnutrennego-i-vneshnego-url-adresa</link><guid isPermaLink="true">https://help.dc24.cloud/exchange-nastrojka-vnutrennego-i-vneshnego-url-adresa</guid><category><![CDATA[URL exchange]]></category><category><![CDATA[Exchange]]></category><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Wed, 31 Jan 2024 08:17:11 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1706688954699/16fdc8a7-b766-438d-a307-03af194781a4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Настройте внутренний URL-адрес в Exchange с помощью PowerShell. Когда внутренний и внешний URL отличается то могут возникать проблемы с сертификатом ssl. Для решения проблемы приводим URL внешний и внутренний к одному виду. Создаем скрипт.</strong></p>
<pre><code class="lang-plaintext">$subdomain = "mail" #enter subdomain
$domain = "idp.com.ua" #enter domain
$servername = "idp-exh01" #enter server name

Get-ClientAccessServer -Identity $servername | Set-ClientAccessServer -AutoDiscoverServiceInternalUri "https://autodiscover.$domain/Autodiscover/Autodiscover.xml"
Get-EcpVirtualDirectory -Server $servername | Set-EcpVirtualDirectory -ExternalUrl "https://$subdomain.$domain/ecp" -InternalUrl "https://$subdomain.$domain/ecp"
Get-WebServicesVirtualDirectory -Server $servername | Set-WebServicesVirtualDirectory -ExternalUrl "https://$subdomain.$domain/EWS/Exchange.asmx" -InternalUrl "https://$subdomain.$domain/EWS/Exchange.asmx"
Get-MapiVirtualDirectory -Server $servername | Set-MapiVirtualDirectory -ExternalUrl "https://$subdomain.$domain/mapi" -InternalUrl "https://$subdomain.$domain/mapi"
Get-ActiveSyncVirtualDirectory -Server $servername | Set-ActiveSyncVirtualDirectory -ExternalUrl "https://$subdomain.$domain/Microsoft-Server-ActiveSync" -InternalUrl "https://$subdomain.$domain/Microsoft-Server-ActiveSync"
Get-OabVirtualDirectory -Server $servername | Set-OabVirtualDirectory -ExternalUrl "https://$subdomain.$domain/OAB" -InternalUrl "https://$subdomain.$domain/OAB"
Get-OwaVirtualDirectory -Server $servername | Set-OwaVirtualDirectory -ExternalUrl "https://$subdomain.$domain/owa" -InternalUrl "https://$subdomain.$domain/owa"
Get-PowerShellVirtualDirectory -Server $servername | Set-PowerShellVirtualDirectory -ExternalUrl "https://$subdomain.$domain/powershell" -InternalUrl "https://$subdomain.$domain/powershell"
Get-OutlookAnywhere -Server $servername | Set-OutlookAnywhere -ExternalHostname "$subdomain.$domain" -InternalHostname "$subdomain.$domain" -ExternalClientsRequireSsl $true -InternalClientsRequireSsl $true -DefaultAuthenticationMethod NTLM
</code></pre>
<p>В скрипте все понятно. Просто меняем $subdomain $domain $servername на свои. Запускаем от имени администратора. Перезагружаем сервер.</p>
<p>Проверяем что все отработало, и ссылки правильные. Запускаем Exchange powershell</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706690645839/89163e7d-8353-41d3-81ca-9b21c4f9a740.png" alt class="image--center mx-auto" /></p>
<p>Вводим команды</p>
<pre><code class="lang-plaintext">Get-ClientAccessService -Identity idp-exh01 | Format-List Identity, AutoDiscoverServiceInternalUri
Get-EcpVirtualDirectory -Server idp-exh01 | Format-List InternalUrl, ExternalUrl
Get-WebServicesVirtualDirectory -Server idp-exh01 | Format-List InternalUrl, ExternalUrl
Get-MapiVirtualDirectory -Server idp-exh01 | Format-List InternalUrl, ExternalUrl
Get-MapiVirtualDirectory -Server idp-exh01 | Format-List InternalUrl, ExternalUrl
Get-OabVirtualDirectory -Server idp-exh01 | Format-List InternalUrl, ExternalUrl
Get-OwaVirtualDirectory -Server idp-exh01 | Format-List InternalUrl, ExternalUrl
Get-PowerShellVirtualDirectory -Server idp-exh01 | Format-List InternalUrl, ExternalUrl
Get-OutlookAnywhere -Server idp-exh01 | Format-List ExternalHostname, InternalHostname
</code></pre>
<p>Результат команды выглядит так:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706691000553/37c28707-9a57-4f11-91e6-805de91e6d15.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[HPE G7 iLO Remote Console doesn’t launch]]></title><description><![CDATA[Для просмотра серверов используем firefox с настройками:


enter “about:config” as your url
Accept warnings
Search for “tls”
change “security.tls.version.enable-deprecated” to “true”
possibly change “security.tls.version.min” to “1” or “1.2” but prob...]]></description><link>https://help.dc24.cloud/hpe-g7-ilo-remote-console-doesnt-launch</link><guid isPermaLink="true">https://help.dc24.cloud/hpe-g7-ilo-remote-console-doesnt-launch</guid><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Tue, 26 Dec 2023 08:10:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1703578182061/943f50ae-885c-4df7-9402-737432c507a4.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ol>
<li><h1 id="heading-dlya-prosmotra-serverov-ispolzuem-firefox-s-nastrojkami">Для просмотра серверов используем firefox с настройками:</h1>
</li>
</ol>
<p>enter “about:config” as your url</p>
<p>Accept warnings</p>
<p>Search for “tls”</p>
<p>change “security.tls.version.enable-deprecated” to “true”</p>
<p>possibly change “security.tls.version.min” to “1” or “1.2” but probably best not too</p>
<ol>
<li>Что бы посмотреть консоль нужно установить приложение от HP</li>
</ol>
<p>[https://support.hpe.com/connect/s/softwaredetails?language=en_US&amp;softwareId=MTX_bc8e3ffa59904ec3b505d9964d](file:////Users/sia/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_filelist.xml)</p>
<p>Или у нас на шаре O:\IT-WORK\Install\HP Servers\Remote Console</p>
<p>Просто вводим ip сервера к которому подключаемся и пароль.</p>
]]></content:encoded></item><item><title><![CDATA[Exchange Update SSL certificate (powershell)]]></title><description><![CDATA[Запрос на подпись сертификата (CSR)
 New-ExchangeCertificate -Server "idp-exh01.idp.com.ua" -GenerateRequest -FriendlyName "mail.idp.com.ua" -PrivateKeyExportable $true -SubjectName "c=UA, s=UA, ou=IT, cn=idp-exh01.idp.com.ua" -DomainName idp-exh01.i...]]></description><link>https://help.dc24.cloud/exchange-update-ssl-certificate-powershell</link><guid isPermaLink="true">https://help.dc24.cloud/exchange-update-ssl-certificate-powershell</guid><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Thu, 09 Nov 2023 08:52:50 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1699520020688/2d6deefc-2549-4675-91fe-c01a711319cc.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ol>
<li><p>Запрос на подпись сертификата (CSR)</p>
<pre><code class="lang-plaintext"> New-ExchangeCertificate -Server "idp-exh01.idp.com.ua" -GenerateRequest -FriendlyName "mail.idp.com.ua" -PrivateKeyExportable $true -SubjectName "c=UA, s=UA, ou=IT, cn=idp-exh01.idp.com.ua" -DomainName idp-exh01.idp.com.ua,autodiscover.idp.com.ua,mail.idp.com.ua
</code></pre>
</li>
<li><p>Идем на сайт и вводим ответ с превед. команди <a target="_blank" href="https://ap.www.namecheap.com/domains/ssl/reissue/20419142/idp-exh01.idp.com.ua/apps/DetailsPage/">https://ap.www.namecheap.com/domains/ssl/reissue/20419142/idp-exh01.idp.com.ua/apps/DetailsPage/</a></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1699518545176/3c4cc218-51ac-49ed-8a92-d231a37f3b6d.png" alt class="image--center mx-auto" /></p>
<ol>
<li>Подтверждаем то что мы управляем доменом.</li>
</ol>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1699518594166/b9b846ef-3666-4d09-84c7-1df55fadb5b0.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>После чего получаем сертификат на почту. Копируем его на сервер и активируем.</p>
<pre><code class="lang-plaintext"> Import-ExchangeCertificate –FileData ([byte []]$(Get-Content –Path "C:\idp-exh01_idp.com.ua_2023\idp-exh01_idp_com_ua.crt" –Encoding Byte –ReadCount 0))
</code></pre>
</li>
<li><p>На следующем этапе необходимо <strong>назначить сертификат службам Exchange</strong>. Команда выглядит следующим образом:</p>
<pre><code class="lang-plaintext"> Get-ExchangeCertificate –ThumbPrint | Enable-ExchangeCertificate –Services IIS,SMTP,IMAP,POP
</code></pre>
<ol>
<li><p>Если последея команда не отработала, то делаем через веб.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1699519827254/980063ad-a611-42fb-94bd-069176837471.png" alt class="image--center mx-auto" /></p>
<ol>
<li>Старый сертификат удаляем</li>
</ol>
</li>
</ol>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Восстановление VM после потери системы хранения.]]></title><description><![CDATA[Востановление VeeamBackup + Linux_Repository+ Vcenter



Переходим на любой ESXI

Если NFS не смонтирован то монтироуем

Переходим на ESXI и добавляем NFS
 
 
 

Копируем виртуальные машины VeeamBackup + Linux_Repository+ Vcenter с NFS на новую систе...]]></description><link>https://help.dc24.cloud/vosstanovlenie-vm-posle-poteri-sistemy-hraneniya</link><guid isPermaLink="true">https://help.dc24.cloud/vosstanovlenie-vm-posle-poteri-sistemy-hraneniya</guid><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Wed, 01 Nov 2023 07:39:34 GMT</pubDate><content:encoded><![CDATA[<ol>
<li><h2 id="heading-vostanovlenie-veeambackup-linuxrepository-vcenter">Востановление VeeamBackup + Linux_Repository+ Vcenter</h2>
</li>
</ol>
<ol>
<li><p>Переходим на любой ESXI</p>
</li>
<li><p>Если NFS не смонтирован то монтироуем</p>
</li>
<li><p>Переходим на ESXI и добавляем NFS</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698761516882/c8e6a0a7-5eb8-43d5-aa14-f8168a987206.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698761543411/bdb88713-7b1e-4fbf-b26f-bc17bf6fc939.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698761577223/829e7dae-dc8d-424e-b2f3-e960d5956efd.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Копируем виртуальные машины VeeamBackup + Linux_Repository+ Vcenter с NFS на новую систему зранения. Или монтируем с NFS</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698826692275/78c0511d-8f4b-402c-9913-aa0d0ec51edf.png" alt class="image--center mx-auto" /></p>
<ol>
<li>Монтируем виртуальные машины</li>
</ol>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698911435939/f55bb670-9bac-4abd-be4c-50210879f16a.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-kopirovanie-cherez-scp">Копирование через SCP</h2>
<ol>
<li><p>Включаю ssh на esxi, логинимся</p>
</li>
<li><p>Бекап лежит на qnap (192.168.126.18) на USB, заходим и смотрим где конкретно</p>
<p> mount |grep USB</p>
<p> /share/external/DEV3303_1 on /share/NFSv=4/USBDisk1 type none (rw,bind)</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698657231046/108d44fa-01d8-4dd1-88e5-60a86c767846.png" alt class="image--center mx-auto" /></p>
<p> Копируем используя scp. Запускаем команду с  ESXI</p>
<pre><code class="lang-plaintext"> scp -r admin@192.168.126.18:/share/external/DEV3303_1/est-idp-vmb01_vm-76958_/ /vmfs/volumes/62c5a03f-8e5bd8c5-2dd9-00215ab1c4d2/copy_vm/est-idp-vmb01_vm-76958
 _/
</code></pre>
<p> От куда:</p>
<p> admin@192.168.126.18:/share/external/DEV3303_1/est-idp-rep02_vm-115475_/*</p>
<p> Куда:</p>
<p> /vmfs/volumes/62c5a03f-8e5bd8c5-2dd9-00215ab1c4d2/copy_vm</p>
</li>
</ol>
<p>После идем на ESXI и монтируем машинки</p>
]]></content:encoded></item><item><title><![CDATA[Linux - immutable backup veeambackup]]></title><description><![CDATA[Зашифрованый диск linux LUKS
Откроем терминал и запустим установку cryptsetup (LUKS)
apt install cryptsetup parted

Подготавливаем диск. Запустим консольный или графический редактор разделов, выберем нужный физический диск, удалим с него все разделы ...]]></description><link>https://help.dc24.cloud/linux-immutable-backup-veeambackup</link><guid isPermaLink="true">https://help.dc24.cloud/linux-immutable-backup-veeambackup</guid><category><![CDATA[Linux - immutable backup veeambackup]]></category><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Tue, 31 Oct 2023 07:34:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1698748609698/8d0792fd-fd47-43f6-9e27-bdf268f1d1a8.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-zashifrovanyj-disk-linux-luks">Зашифрованый диск linux LUKS</h2>
<p>Откроем терминал и запустим установку cryptsetup (LUKS)</p>
<pre><code class="lang-plaintext">apt install cryptsetup parted
</code></pre>
<p>Подготавливаем диск. Запустим консольный или графический редактор разделов, выберем нужный физический диск, удалим с него все разделы и создадим один новый, который будем шифровать.Файловую систему создаваемого раздела указываем как <strong>raw</strong> (без форматирования).</p>
<pre><code class="lang-plaintext">parted
</code></pre>
<p>Приступаем к шифрованию диска</p>
<pre><code class="lang-plaintext">  sudo cryptsetup --verify-passphrase luksFormat /dev/sda -c aes-xts-plain64 -s 256 -h sha512
</code></pre>
<p>Описание параметров команды:</p>
<p><strong>—verify-passphrase</strong> — требование дважды ввести пароль для исключения ошибки ввода;</p>
<p><strong>/dev/sda</strong> — раздел диска, который мы будем шифровать;</p>
<p><strong>-c aes-xts-plain64</strong> — алгоритм шифрования (в нашем примере это <a target="_blank" href="https://ru.wikipedia.org/wiki/Advanced_Encryption_Standard">AES</a> в режиме сцепления блоков шифротекста <a target="_blank" href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B4%D0%B8%D1%81%D0%BA%D0%B0#XEX-based_tweaked-codebook_mode_with_ciphertext_stealing_(XTS)">XTS</a>);</p>
<p><strong>-s 256</strong> — стойкость шифра (256 бит);</p>
<p><strong>-h sha512</strong> — алгоритм хеширования (<a target="_blank" href="https://ru.wikipedia.org/wiki/SHA-2">SHA-512</a>).</p>
<p>Утилита cryptsetup сначала предупредит об уничтожении всех данных на шифруемом разделе и потребует ввести на клавиатуре <strong>YES</strong> (в верхнем регистре) для подтверждения, а затем пароль и его подтверждение.</p>
<p>Необходимо придумать как можно более сложный пароль, но при этом следует помнить, что в случае его утери, данные на зашифрованном разделе восстановить будет невозможно.</p>
<p>Через пару минут на накопителе будет создан зашифрованный раздел.</p>
<p>Создаём ФС внутри раздела</p>
<p>С уже созданным разделом мы пока ещё не можем работать, поэтому нам потребуется сначала создать на нём файловую систему. Допускается создавать любую, поддерживаемую используемой ОС.</p>
<p>Подключим зашифрованный раздел:</p>
<pre><code class="lang-plaintext">

если второй 

 sudo cryptsetup luksOpen /dev/sdc storage1
Отключить
 sudo cryptsetup luksClose /dev/mapper/storage
</code></pre>
<p>Создаём файловую систему ext4 или xfs внутри зашифрованного раздела.</p>
<pre><code class="lang-plaintext">sudo mkfs -t ext4 -m 1 -L storage /dev/mapper/storage

Для veembackup форматим в XFS
sudo mkfs.xfs  /dev/mapper/storage
</code></pre>
<p>Описание параметров:</p>
<p><strong>-t ext4</strong> — файловая система (ext4);</p>
<p><strong>-m 1</strong> — изменяем зарезервированный объём свободного места на разделе для суперпользователя (с 5% до 1%);</p>
<p><strong>-L storage</strong> — задаём метку тома аналогично внутреннему названию (storage);</p>
<p><strong>/dev/mapper/storage</strong> — смонтированный зашифрованный раздел, где <strong>storage</strong> — указанное при подключении внутреннее название.</p>
<p>Статус диска:</p>
<pre><code class="lang-plaintext"> cryptsetup -v status storage
</code></pre>
<p>Проверяем файловую систему</p>
<pre><code class="lang-plaintext">lsblk -f
</code></pre>
<p><strong>Монтируем том в папку</strong></p>
<p>blkid получаем UUID диска и монтируем или по имени</p>
<pre><code class="lang-plaintext">mount -U bde1f8a8-6e54-401a-a8dd-eecd69008464 /VeeamBackup
или
mount /dev/mapper/storage /VeeamBackup_PLD/
</code></pre>
<p><code>После перезагрузки сервера, нужно расшифровать диск</code></p>
<p><code>sudo cryptsetup luksOpen /dev/sdb storage</code></p>
<p><code>вводим пароль.</code></p>
<h2 id="heading-podklyuchenie-iscsi-blochnogo-hranilisha"><strong>Подключение  ISCSI блочного хранилища</strong></h2>
<p>Установка:</p>
<pre><code class="lang-plaintext">apt update
apt install open-iscsi
</code></pre>
<p>Затем перейдем в <strong>/etc/iscsi</strong> и откроем файл <strong>iscsid.conf</strong>. Найдем и раскомментируем опцию:</p>
<p><strong><em>node.startup = automatic</em></strong></p>
<p>иже обязательно закомментируем:</p>
<p><strong><em>node.startup = manual</em></strong></p>
<p>Затем зададим параметры аутентификации инициатора, раскомментировав опции:</p>
<p><strong><em>node.session.auth.authmethod = CHAP<br />node.session.auth.username = username<br />node.session.auth.password = password</em></strong></p>
<p>Сохраним файл и перезапустим службу:</p>
<pre><code class="lang-plaintext">service open-iscsi restart
</code></pre>
<p>Список целей</p>
<pre><code class="lang-plaintext">iscsiadm -m discovery -p 10.0.4.18 -t st
</code></pre>
<p>Из чего становится понятно, что мы должны подключиться к порталу 10.0.4.18 в режиме обнаружения и получить него все доступные цели</p>
<p>Подключаем все цели:</p>
<pre><code class="lang-plaintext">iscsiadm -m node --login
</code></pre>
<p>Отключить цель на примере iqn.2004-04.com.qnap:ts-451u:iscsi.disk02.0bd088:</p>
<pre><code class="lang-plaintext">iscsiadm --mode node --targetname iqn.2004-04.com.qnap:ts-451u:iscsi.disk02.0bd088 --portal 10.0.4.18 -u
</code></pre>
<p>Форматируем в  xfs</p>
<pre><code class="lang-plaintext">lsblk
sudo mkfs.xfs -f /dev/sdb
</code></pre>
<p>Автоматическое монтирование диска:</p>
<p>Определение UUID дисков:</p>
<p>Для того чтобы определить UUID дисков, вы можете воспользоваться командой <code>blkid</code>. Эта команда позволяет вам узнать UUID для всех дисков и разделов в системе. Пример использования:</p>
<pre><code class="lang-plaintext">blkid
/dev/sdc: UUID="d75c50ff-a4b9-41ce-b254-a103d23f5ef1" TYPE="xfs"
/dev/sdd: UUID="6ea8f5f0-d947-4585-805b-3fbde98052d6" TYPE="xfs"
</code></pre>
<p>Создание скрипта для монтирования:</p>
<p>Вы можете создать скрипт, который будет монтировать диски на основе их UUID. Например, создайте скрипт с именем <code>mount_disks.sh</code> и откройте его для редактирования:</p>
<pre><code class="lang-plaintext">#!/bin/bash

# UUID дисков
UUID_DISK1="UUID_диска_1"
UUID_DISK2="UUID_диска_2"

# Точки монтирования
MOUNT_POINT_DISK1="/путь/к/месту_монтирования_диска_1"
MOUNT_POINT_DISK2="/путь/к/месту_монтирования_диска_2"

# Монтирование дисков
mount -U $UUID_DISK1 $MOUNT_POINT_DISK1
mount -U $UUID_DISK2 $MOUNT_POINT_DISK2
</code></pre>
<pre><code class="lang-plaintext">chmod +x mount_disks.sh
</code></pre>
<p>Запустите скрипт, чтобы монтировать диски:</p>
<pre><code class="lang-plaintext">./mount_disks.sh
</code></pre>
<p>Создаю демон для автомонтирования:</p>
<p>Создайте файл службы в директории <code>/etc/systemd/system</code>. Например, <code>mcedit /etc/systemd/system/my-iscsi-service.service</code>:</p>
<pre><code class="lang-plaintext">[Unit]
Description=My iSCSI Service
After=remote-fs.target
Wants=remote-fs.target

[Service]
Type=simple
ExecStart=/путь/к/вашему/скрипту.sh

[Install]
WantedBy=multi-user.target
</code></pre>
<pre><code class="lang-plaintext">sudo systemctl daemon-reload
sudo systemctl enable my-iscsi-service
sudo systemctl start my-iscsi-service
</code></pre>
<p><strong>Атрибуты файлов</strong></p>
<p>Для просмотра атрибутов и их изменения можно использовать команды ниже.</p>
<p>Просмотр:</p>
<pre><code class="lang-plaintext">lsattr
</code></pre>
<p>Изменение:</p>
<pre><code class="lang-plaintext">chattr -i
</code></pre>
<h2 id="heading-ssh-certificat-nastrojka-klyuchej-ssh">SSH certificat (<strong>Настройка ключей SSH</strong> )</h2>
<p>ssh-keygen -b 4096 </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1699349098276/3f99164f-7e56-474a-ba6f-118d109acbe3.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Restoring a virtual machine from a snapshot 3par]]></title><description><![CDATA[Открываем HP 3PAR Management Console 4.7.3

Переходим в Provisioning - 3par -Virtual Volumes -Unexported

Отображаеться список Snapshot которие у вас есть. Выбираем нужный Snapshot, правый клик и export
 

После выбираем хост к которому мы хотим подк...]]></description><link>https://help.dc24.cloud/restoring-a-virtual-machine-from-a-snapshot-3par</link><guid isPermaLink="true">https://help.dc24.cloud/restoring-a-virtual-machine-from-a-snapshot-3par</guid><category><![CDATA[VirtualMachine]]></category><category><![CDATA[SnapshotRecovery]]></category><category><![CDATA[DataRestoration]]></category><category><![CDATA[Restoring a virtual machine 3par]]></category><category><![CDATA[BackupAndRestore]]></category><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Wed, 13 Sep 2023 10:55:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1694596224932/d33bfa1c-0ad9-4ef8-81af-8d59114710df.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ol>
<li><p>Открываем HP 3PAR Management Console 4.7.3</p>
</li>
<li><p>Переходим в <em>Provisioning - 3par -Virtual Volumes -Unexported</em></p>
</li>
<li><p>Отображаеться список Snapshot которие у вас есть. Выбираем нужный Snapshot, правый клик и export</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694596649071/53f9accd-5c1f-4693-9302-17f8c85ba8ed.png?auto=compress,format&amp;format=webp" alt /></p>
<ol>
<li><p>После выбираем хост к которому мы хотим подключить свой сторедж. Также назначаем LUN. Next...</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694596791527/9b4e861e-6538-4a72-9f83-4cd1bbb4522b.png?auto=compress,format&amp;format=webp" alt /></p>
<ol>
<li><p>Переходим в vsphere и подключаем database. Проверяем Storage Devices и видем что появилось новое устройство. У меня оно с LUN 33</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694597050138/0766d075-9e1e-40b0-9be9-fb0ba5d7e640.png?auto=compress,format&amp;format=webp" alt /></p>
<ol>
<li>После чего правый клик на ESXI к которому будет подключен сторедж и <em>Storege- New Datastore</em></li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
<p>            <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694603420889/7f9f3787-20db-4f11-9ebb-c841bb5a3351.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p>Выбираем тип database Type- VMFS. Дальше монтируем как обычный Storege.</p>
</li>
<li><p>Теперь в системе отображается наш диск, переходим в него и монтируем необходимую VM. Можно полноценно работать с VM, и выполнить ее перенос в не рабочее время на свой основной диск с помощю миграции или клонирования.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694597673556/0ded6795-b921-4930-b1be-22352dd47eb8.png?auto=compress,format&amp;format=webp" alt /></p>
</li>
<li><p>После успешной миграции выполняем отключение нашего snapshot storege.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694597982613/76253ac5-484e-43f1-863e-eaa5c6e02c58.png?auto=compress,format&amp;format=webp" alt /></p>
</li>
<li><p>Возвращаемся в HP 3PAR Management Console 4.7.3 и переходим в <em>Provisioning - 3par -Virtual Volumes -Exported.</em> Выполняем Unexport.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694598123833/9700ff25-1124-4194-84c2-0a27d6a2f3ce.png?auto=compress,format&amp;format=webp" alt /></p>
</li>
<li><p>Соглашаемся</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694598236686/fb5b4692-d658-4af0-a227-4c334cbca931.png?auto=compress,format&amp;format=webp" alt /></p>
</li>
<li><p>Быстрый и эффективный способ восстановить VM.</p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Postfix+SPF+DMARC+DKIM]]></title><description><![CDATA[Установка компонент


yum install opendkim opendkim-tools


Настройка доменов


Если у вас (как и у меня) используется много (почтовых) доменов, вот способ достаточно быстро создать ключи:прежде всего, создайте текстовый файл со всеми доменами (у мен...]]></description><link>https://help.dc24.cloud/postfixspfdmarcdkim-1</link><guid isPermaLink="true">https://help.dc24.cloud/postfixspfdmarcdkim-1</guid><category><![CDATA[postfix]]></category><category><![CDATA[spf]]></category><category><![CDATA[DMARC]]></category><category><![CDATA[DKIM]]></category><category><![CDATA[email security]]></category><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Mon, 10 Jul 2023 09:48:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1688982385381/f56e5e19-130d-4974-b34a-77f565eec623.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ol>
<li><h1 id="heading-ustanovka-komponent">Установка компонент</h1>
</li>
</ol>
<pre><code class="lang-plaintext">yum install opendkim opendkim-tools
</code></pre>
<ol>
<li><h1 id="heading-nastrojka-domenov">Настройка доменов</h1>
</li>
</ol>
<p>Если у вас (как и у меня) используется много (почтовых) доменов, вот способ достаточно быстро создать ключи:<br />прежде всего, создайте текстовый файл со всеми доменами (у меня это /etc/opendkim/domains.txt):</p>
<p>Когда у вас есть все домены в файле, выполните следующее:</p>
<pre><code class="lang-plaintext">while IFS= read -r name; do mkdir -- "/etc/opendkim/keys/$name"; done &lt;/etc/opendkim/domains.txt
</code></pre>
<p>это создаст подкаталог для каждого домена.</p>
<ol>
<li><h1 id="heading-sozdanie-klyuchej">Создание ключей</h1>
</li>
</ol>
<p>затем создайте ключи:<br />поскольку это руководство предназначено для большого количества доменов (электронной почты), у меня есть небольшой скрипт (который я хотел бы назвать: <strong>DKIM-KeyCreat.sh</strong>)<br />В то время как ключ по умолчанию генерация по-прежнему имеет длину 1024 бита, скрипт создаст ключ длиной 2048 бит.<br />Синтаксис:</p>
<p>-b 2048 - создает 2048-битный ключ<br />-d - указывает домен.tld. (это происходит из текстового файла, содержащего ваши домены построчно<br />-D - указывает каталог, в который записывается пара ключей<br />-s - указывает селектор.</p>
<pre><code class="lang-plaintext">#!/usr/bin/bash

filename="$1"
while read -r line; do
    name="$line"
    selector="$name$2"
    opendkim-genkey -b 2048 -d $name -D /etc/opendkim/keys/$name -s $selector
    ls -l /etc/opendkim/keys/$name
done &lt; "$filename"
</code></pre>
<p>Для идентификации каждого домена необходим селектор. Селектор представляет собой произвольное имя.</p>
<p>Когда вы посмотрите на сценарий, вы увидите, что переменная селектора состоит из имени домена (из файла, который вы предоставляете) и «суффикса селектора», который я предлагаю использовать в качестве даты, ГГГГммдд.<br />Это обеспечит уникальное имя, например: <strong>domain.tld20220825</strong>.</p>
<p>Этот скрипт должен быть запущен следующим образом:</p>
<pre><code class="lang-plaintext">./DKIM-KeyCreat.sh /etc/opendkim/keys/domains.txt [selector suffix]
пример
./DKIM-KeyCreat.sh /etc/opendkim/keys/domains.txt 20220825
</code></pre>
<p>чтобы просмотреть созданные ключи, вы можете запустить следующее:</p>
<pre><code class="lang-plaintext">while IFS= read -r name; do cat /etc/opendkim/keys/$name/$name*[selector suffix]*.txt ; done &lt;/etc/opendkim/keys/domains.txt
</code></pre>
<p>Теперь, когда у вас созданы все ключи, вам нужно выполнить настройку,специально для создания большого количества доменов, вот несколько базовых скриптов, которые немного облегчат вам жизнь:</p>
<ol>
<li><h1 id="heading-zapolnyaem-fajl-opendkimconf">Заполняем файл opendkim.conf</h1>
</li>
</ol>
<p>Это содержимое файла /etc/opendkim.conf</p>
<pre><code class="lang-plaintext">SendReports     yes   
ReportAddress "domain1.net Postmaster &lt;postmaster@domain1.net&gt;"
ReportAddress "domain2.net Postmaster &lt;postmaster@domain1.net&gt;"
ReportAddress "domain3.net Postmaster &lt;postmaster@domain1.net&gt;"
SoftwareHeader  yes
Canonicalization        relaxed/simple
</code></pre>
<p>Вот небольшой скрипт <strong>DkimConf-create.sh</strong>, чтобы было проще заполнить файл и придать ему нужный формат:</p>
<pre><code class="lang-plaintext">#!/usr/bin/bash
filename="$1"
while read line; do
    name="$line"
    echo "ReportAddress \"$name Postmaster &lt;postmaster@yourmaindomain.com&gt;\""
done &lt; "$filename"
</code></pre>
<p>Применение:</p>
<pre><code class="lang-plaintext">./DkimConf-create.sh /path/to/domainlist &gt;&gt; /etc/opendkim.conf
</code></pre>
<ol>
<li><h1 id="heading-zatem-dlya-keytable">Затем для KeyTable</h1>
</li>
</ol>
<ol>
<li>/etc/opendkim/KeyTable</li>
</ol>
<pre><code class="lang-plaintext">domain1._domainkey.domain1.net domain1.net:domain1:/etc/opendkim/keys/domain1.net/domain1.private
domain2._domainkey.domain2.net domain2.net:domain2:/etc/opendkim/keys/domain2.net/domain2.private
domain3._domainkey.domain3.net domain3.net:domain3:/etc/opendkim/keys/domain3.net/domain3.privat
</code></pre>
<p><strong>KeyTable-create.sh</strong> скрипт "заливки" для больших объемов доменов:</p>
<pre><code class="lang-plaintext">#!/usr/bin/bash
filename="$1"
selector="$name$2"
while read -r line; do
    name="$line"
    selector="$name$2"
    echo "$selector._domainkey.$name $name:$selector:/etc/opendkim/keys/$name/$selector.private"
done &lt; "$filename"
</code></pre>
<p>использование:</p>
<pre><code class="lang-plaintext">./KeyTable-create.sh /path/to/domainlist [selector suffix] &gt;&gt; /etc/opendkim/KeyTable
</code></pre>
<p>/etc/opendkim/SigningTable</p>
<pre><code class="lang-plaintext">*@domain1.net domain1._domainkey.domain1.net
*@domain2.net domain2._domainkey.domain2.net
*@domain3.net domain3._domainkey.domain3.net
</code></pre>
<p><em>Если закоментировать строку для домена в файле SigningTable то DKIM не будет работать для этого домена</em></p>
<ol>
<li><h1 id="heading-zapolnyaem-signingtable">Заполняем SigningTable</h1>
</li>
</ol>
<p><strong>SigningTable-create.sh</strong> скрипт для заполнения файла SigningTable:</p>
<pre><code class="lang-plaintext">#!/usr/bin/bash
filename="$1"
while read -r line; do
    name="$line"
    selector="$name$2"
    echo "$name $selector._domainkey.$name"
done &lt; "$filename"
</code></pre>
<p>использовать следующим образом:</p>
<pre><code class="lang-plaintext">SigningTable-create.sh /path/to/domainlist [selector suffix] &gt;&gt; /etc/opendkim/SigningTable
</code></pre>
<p>/etc/opendkim/TrustedHosts</p>
<pre><code class="lang-plaintext">mx01.mydomain.net # 1st mail exchanger (MX-Record)
mx02.mydomain.net # 2nd mail exchanger (MX-Record)
192.168.4.5/32 (Mailhost/Exchange Server
</code></pre>
<ol>
<li><h1 id="heading-nastrojka-dns-zapisej">Настройка DNS записей</h1>
</li>
</ol>
<p>Нужно иметь DNS для всех доменов:<br />Предостережение:<br />при создании 2048-битного ключа содержимое сгенерированного текстового файла нельзя просто скопировать 1:1,<br />содержимое файла выглядит так:</p>
<pre><code class="lang-plaintext">
# cat /etc/opendkim/keys/domain1.tld/domain1.tld20220825.txt
domain1.tld20220825._domainkey  IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzAzvlGEEl5XLGNwHd/3d8f40+rkqvWVqq82iJFGyFcwXuP90hyyeOhvhZYOtktyrnNWqBEoClp0/0NZyZhxr80kIMLvWawhWtnPllIVOyPMsJ/HZFinWoBGNjW2dXykv7UKsLaGmDcm18k/l+HEcMIncnYGCkEIX6KQDlO8A+pqnfSMZxUP4D9lqUhIPPcl1drGb88boT3rOkO"
          "zBRMzerrrr1qsaXI835PfRb4icDZOxE6c9s3qhWnEmci+qumc69VM02dqsXkDgswYyyn0dWyc1A0GRv9+qMdla3KJw28O7gvWFM7l/Yi/OSJ+tntDD2PhdROwMc368GHwqWT+fFhwIDAQAB" )  ; ----- DKIM key domain1.tld20220825 for domain1.tld
</code></pre>
<p>Все файли находятся <strong>/etc/opendkim/keys/</strong></p>
<p>В DNS ключ вводим одной строчкой без кавычек!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1688737084385/cebc5e52-c8e7-4845-b271-07b4f6fa53c1.png" alt class="image--center mx-auto" /></p>
<p>Проверка успешно добавленной записи: <a target="_blank" href="https://toolbox.googleapps.com/apps/dig/#TXT/">https://toolbox.googleapps.com/apps/dig/#TXT/</a></p>
<p><a target="_blank" href="https://mxtoolbox.com/SuperTool.aspx?action=dkim#">https://mxtoolbox.com/SuperTool.aspx?action=dkim#</a></p>
<p><em>пример:</em> <a target="_blank" href="http://autotrade.kiev.ua"><em>autotrade.kiev.ua</em></a><em>:autotrade.kiev.ua20230706</em></p>
<p>20230706 - селектор который задается при создании ключа</p>
<p>Еще одна проверка:</p>
<p>Отправить письмо на '<a target="_blank" href="mailto:check-auth@verifier.port25.com">check-auth@verifier.port25.com</a>' прийдет письмо ответ со всей инфой</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1688980226570/4545da57-d1a3-4830-9ef5-9f8714c15bfe.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Windows 2022 бекап и восстановление  принтеров]]></title><description><![CDATA[Устанавливаем компонент Print-Server в PSRV в Windows PowerShell
 Install-WindowsFeature -Name Print-Server, RSAT-Print-Services

 Панель управления\Все элементы панели управления\Администрирование
 Запускаем Управление печатью и устанавливаем все не...]]></description><link>https://help.dc24.cloud/windows-2022-bekap-i-vosstanovlenie-printerov</link><guid isPermaLink="true">https://help.dc24.cloud/windows-2022-bekap-i-vosstanovlenie-printerov</guid><category><![CDATA[Windows 2022 бекап и восстановление  принтеров ]]></category><category><![CDATA[Backup printer]]></category><category><![CDATA[Backup printers]]></category><category><![CDATA[бекап и восстановление  принтеров ]]></category><category><![CDATA[Print Server]]></category><dc:creator><![CDATA[Shevchenko Ivan]]></dc:creator><pubDate>Fri, 16 Jun 2023 11:05:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1686913867070/51d920fa-bf3f-42e5-bb8a-deccb7bacfa9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ol>
<li><p>Устанавливаем компонент Print-Server в PSRV в Windows PowerShell</p>
<pre><code class="lang-plaintext"> Install-WindowsFeature -Name Print-Server, RSAT-Print-Services
</code></pre>
<p> <em>Панель управления\Все элементы панели управления\Администрирование</em></p>
<p> Запускаем <strong>Управление печатью</strong> и устанавливаем все необходимие принтера.</p>
<ol>
<li><h2 id="heading-backup">Backup</h2>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1686830969905/df53b936-ffaa-4bc8-8c78-1dcf4e087180.png" alt class="image--center mx-auto" /></p>
<p> Можем переносить на другой сервер и выполнять восстановление.</p>
</li>
<li><h2 id="heading-recovery">Recovery</h2>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1686831129623/e11da3b8-969f-4161-9e27-588c09226528.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1686831162869/fd40c332-a92b-400f-ac05-337dc0dbecfd.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1686831181989/815eb970-dddc-4934-a117-0805dd5b270e.png" alt class="image--center mx-auto" /></p>
<p> Ждем 10 минут и получаем рабочий принт-сервер со всеми настройками!</p>
<p> Файл бекапа можна запускать на любом PC и они будут установлены на нем!</p>
</li>
<li><h2 id="heading-isklyuchenie-iz-gpo-skripta-skript-primenyaetsya-k-polzovatelyu">Исключение из GPO скрипта (скрипт применяется к пользователю)</h2>
<p> Для того что бы исключить скрипт работающий через GPO, для определенных ip, нужно перейти в GPO-Делегирование-Дополнительно.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687513975650/6325a5d3-f824-4b5a-b973-c15c30711fcc.png" alt class="image--center mx-auto" /></p>
<p> Дальше просто добавляем ПК на которых не должна выполняться групповая политика и делаем запретить.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687514136152/6e2bb4ea-4434-444d-8a95-8caadf2058ab.png" alt class="image--center mx-auto" /></p>
<p> После чего выполняем на ПК, <strong>cmd</strong> из под <strong>Администратора</strong></p>
</li>
<li><pre><code class="lang-plaintext"> gpupdate /force
</code></pre>
<p> Полезные команды:</p>
</li>
<li><pre><code class="lang-plaintext"> gpresult /R
 gpresult /R /user (Пользователь по которому получаем результат GPO)
 пример:
 gpresult /R /user Romanov
</code></pre>
</li>
</ol>
</li>
</ol>
]]></content:encoded></item></channel></rss>