<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dal</title>
    <description>The latest articles on DEV Community by Dal (@dalroot).</description>
    <link>https://dev.to/dalroot</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4136780%2F691603e1-0fdb-421c-ac61-832067f47994.jpg</url>
      <title>DEV Community: Dal</title>
      <link>https://dev.to/dalroot</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dalroot"/>
    <language>en</language>
    <item>
      <title>How to Use Google Antigravity in Sanctioned or Restricted Regions (Fix HTTP 400, License #3501 &amp; Quota 429)</title>
      <dc:creator>Dal</dc:creator>
      <pubDate>Wed, 14 Oct 2026 23:15:13 +0000</pubDate>
      <link>https://dev.to/dalroot/how-to-use-google-antigravity-in-sanctioned-or-restricted-regions-fix-http-400-license-3501--410i</link>
      <guid>https://dev.to/dalroot/how-to-use-google-antigravity-in-sanctioned-or-restricted-regions-fix-http-400-license-3501--410i</guid>
      <description>&lt;h1&gt;
  
  
  How to Use Google Antigravity in Sanctioned or Restricted Regions
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Step-by-Step Guide to Resolving HTTP 400 Location Errors, License &lt;code&gt;#3501&lt;/code&gt; Rejection, and Quota 429 Locks
&lt;/h3&gt;




&lt;h2&gt;
  
  
  📌 Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;What is Google Antigravity and the Language Server?&lt;/li&gt;
&lt;li&gt;Why Do Standard VPNs Still Trigger Location and License Errors?&lt;/li&gt;
&lt;li&gt;What Does Antigravity Cleaner Do?&lt;/li&gt;
&lt;li&gt;Method 1: Using the Retro Desktop GUI (1-Click &amp;amp; Zero-Terminal)&lt;/li&gt;
&lt;li&gt;Method 2: Using the Command Line (CLI / TUI)&lt;/li&gt;
&lt;li&gt;Troubleshooting &amp;amp; Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;Official Project Links and Downloads&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  1. What is Google Antigravity and the Language Server?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Google Antigravity&lt;/strong&gt; is a next-generation AI coding environment built on top of modern code editor foundations, integrating Google's Gemini models directly into your development workflow for real-time coding assistance, debugging, and terminal automation.&lt;/p&gt;

&lt;p&gt;Under the hood, the application relies on two core components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Editor Frontend:&lt;/strong&gt; The visible workspace where you write code, manage files, and interact with the UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Language Server (&lt;code&gt;language_server&lt;/code&gt;):&lt;/strong&gt; This is the &lt;strong&gt;computational engine and brain behind the scenes&lt;/strong&gt;. Running quietly as a background process, the language server captures your prompts and code context, negotiates secure requests with Google's cloud AI infrastructure, and streams intelligence back into your editor.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. Why Do Standard VPNs Still Trigger Location and License Errors?
&lt;/h3&gt;

&lt;p&gt;Many developers assume that simply running a VPN or changing their IP address will provide access. However, users in restricted regions (such as Iran, Cuba, Syria, etc.) frequently encounter blocking hurdles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTTP 400 (&lt;code&gt;User location is not supported&lt;/code&gt;):&lt;/strong&gt; Immediate connection drop based on regional telemetry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License Error &lt;code&gt;#3501&lt;/code&gt;:&lt;/strong&gt; Cloud-side RPC rejection preventing model access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP 429 (&lt;code&gt;Too Many Requests&lt;/code&gt; / Quota Exceeded):&lt;/strong&gt; Rate-limiting locks caused by corrupted local state tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why does this happen?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The underlying &lt;code&gt;language_server&lt;/code&gt; inspects much more than just your outbound IP. In the background, it evaluates local persistent token databases (&lt;code&gt;Trust Tokens&lt;/code&gt;, &lt;code&gt;DIPS&lt;/code&gt;), network persistent states, and background error/telemetry reporting. When these artifacts flag a restricted environment, access is severed even through clean proxy endpoints.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. What Does Antigravity Cleaner Do?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/tawroot/antigravity-cleaner" rel="noopener noreferrer"&gt;Antigravity Cleaner&lt;/a&gt;&lt;/strong&gt; is a standalone, lightweight, and 100% offline open-source system utility written in pure Go. Without touching your private codebase or chat histories, it automates the entire unlocking workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Atomic 4-Target Auto-Fix:&lt;/strong&gt; Automatically patches the &lt;code&gt;language_server&lt;/code&gt; MultiGate auth check, the &lt;code&gt;agy&lt;/code&gt; CLI binary, editor client files (&lt;code&gt;main.js&lt;/code&gt;), and VS Code extension guards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;7-Flag Zero-Telemetry Engine:&lt;/strong&gt; Silences telemetry beacons and Git metadata leaks with &lt;code&gt;--disable_telemetry=true&lt;/code&gt; while injecting enterprise authorization flags (&lt;code&gt;--stubby_auth_mode=business_licensed_enterprise&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart No-TUN Proxy Injector:&lt;/strong&gt; Discovers your local proxy client ports (&lt;code&gt;10808&lt;/code&gt;, &lt;code&gt;2080&lt;/code&gt;, &lt;code&gt;7890&lt;/code&gt;) and routes the editor directly without burdening your operating system with root TUN mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surgical Quota 429 Reset:&lt;/strong&gt; Clears corrupted rate-limit cookies and tracking tokens across 16 local storage targets in 0.002s—leaving all user projects and chats intact.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  4. Method 1: Using the Retro Desktop GUI (1-Click &amp;amp; Zero-Terminal)
&lt;/h3&gt;

&lt;p&gt;For developers who prefer a visual interface without typing in terminal commands:&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: Download the Standalone Binary
&lt;/h4&gt;

&lt;p&gt;Navigate to the &lt;a href="https://github.com/tawroot/antigravity-cleaner/releases/latest" rel="noopener noreferrer"&gt;Official GitHub Releases Page&lt;/a&gt; and download the binary for your platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows (10/11 64-bit):&lt;/strong&gt; &lt;code&gt;antigravity-cleaner-windows-amd64.exe&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS Apple Silicon (M1–M4):&lt;/strong&gt; &lt;code&gt;antigravity-cleaner-darwin-arm64&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS Intel:&lt;/strong&gt; &lt;code&gt;antigravity-cleaner-darwin-amd64&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux (x86_64):&lt;/strong&gt; &lt;code&gt;antigravity-cleaner-linux-amd64&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 2: Launch the Patcher
&lt;/h4&gt;

&lt;p&gt;Double-click the downloaded binary to open the Windows 95-inspired retro GUI.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Execute the 3-Step Workflow
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;&lt;code&gt;① Auto-Fix&lt;/code&gt;&lt;/strong&gt;: The engine dynamically detects the running processes via &lt;code&gt;/proc&lt;/code&gt; or process tables, unlocks all 4 targets, and installs the Zero-Telemetry wrapper.&lt;/li&gt;
&lt;li&gt;Ensure your local proxy client (v2ray, Xray, Clash, etc.) is running.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;&lt;code&gt;② Launch IDE&lt;/code&gt;&lt;/strong&gt;: Antigravity launches immediately with direct proxy injection, fully operational without location or license errors.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;(Optional)&lt;/em&gt; Click &lt;strong&gt;&lt;code&gt;③ Shortcut&lt;/code&gt;&lt;/strong&gt; to install a desktop launcher for one-click access in future sessions.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  5. Method 2: Using the Command Line (CLI / TUI)
&lt;/h3&gt;

&lt;p&gt;If you prefer working directly inside your terminal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linux &amp;amp; macOS (1-Line Installer):&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/tawroot/antigravity-cleaner/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows (PowerShell):&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://raw.githubusercontent.com/tawroot/antigravity-cleaner/main/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Quick CLI Commands:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Run Diagnostics Audit:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ag-cleaner doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Apply All 4 Patches:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ag-cleaner patch all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Launch IDE with Injected Proxy:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ag-cleaner launch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  6. Troubleshooting &amp;amp; Frequently Asked Questions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What should I do if I encounter an HTTP 429 Quota Exceeded error?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Run &lt;code&gt;ag-cleaner clean&lt;/code&gt; in your terminal (or select the clean option in the GUI). This surgically removes the 16 corrupted rate-limit database files without losing any of your chats or project configs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Will running Auto-Fix terminate my ongoing work or active chats?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No. Antigravity Cleaner v5.3 includes a &lt;strong&gt;Session Immunity Shield&lt;/strong&gt; that protects parent terminal PIDs and current GUI sessions from unexpected termination during patching.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  7. Official Project Links and Downloads
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔗 &lt;strong&gt;Source Code Repository:&lt;/strong&gt; &lt;a href="https://github.com/tawroot/antigravity-cleaner" rel="noopener noreferrer"&gt;github.com/tawroot/antigravity-cleaner&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Download Latest Releases:&lt;/strong&gt; &lt;a href="https://github.com/tawroot/antigravity-cleaner/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Community &amp;amp; Announcements (Telegram):&lt;/strong&gt; &lt;a href="https://t.me/dallrep" rel="noopener noreferrer"&gt;@dallrep&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>google</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Zero-Downtime Hot Backups &amp; Safe Migration for Proxy Panels (3X-UI, Marzban, Hiddify)</title>
      <dc:creator>Dal</dc:creator>
      <pubDate>Wed, 14 Oct 2026 23:12:08 +0000</pubDate>
      <link>https://dev.to/dalroot/zero-downtime-hot-backups-safe-migration-for-proxy-panels-3x-ui-marzban-hiddify-1en8</link>
      <guid>https://dev.to/dalroot/zero-downtime-hot-backups-safe-migration-for-proxy-panels-3x-ui-marzban-hiddify-1en8</guid>
      <description>&lt;h1&gt;
  
  
  Zero-Downtime Hot Backups &amp;amp; Safe Migration for Proxy Management Panels
&lt;/h1&gt;

&lt;p&gt;When managing distributed network proxy servers and VPN orchestration panels (such as &lt;strong&gt;3X-UI&lt;/strong&gt;, &lt;strong&gt;Marzban&lt;/strong&gt;, &lt;strong&gt;PasarGuard&lt;/strong&gt;, &lt;strong&gt;Remnawave&lt;/strong&gt;, or &lt;strong&gt;Hiddify&lt;/strong&gt;), the database is under relentless write load. Client upload and download metrics, bandwidth quotas, and session lifetimes update every fraction of a second.&lt;/p&gt;

&lt;p&gt;Standard backup methods—such as ad-hoc &lt;code&gt;cp&lt;/code&gt; commands or archiving directories while services run—often cause database corruption due to uncommitted WAL pages, or require service downtime that disrupts active user tunnels.&lt;/p&gt;

&lt;p&gt;This tutorial explores how to implement atomic online hot backups, safe schema verification, and sub-minute server migration using the open-source &lt;strong&gt;Khoosheh&lt;/strong&gt; engine.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Technical Problem: SQLite WAL Inconsistencies
&lt;/h2&gt;

&lt;p&gt;Most modern panels use SQLite configured with &lt;code&gt;PRAGMA journal_mode=WAL;&lt;/code&gt;. In WAL mode:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Modifying transactions append pages to the &lt;code&gt;-wal&lt;/code&gt; file instead of altering the main &lt;code&gt;.db&lt;/code&gt; database.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;-shm&lt;/code&gt; shared-memory file maintains index mappings.&lt;/li&gt;
&lt;li&gt;If an archive tool copies &lt;code&gt;.db&lt;/code&gt; while transactions are occurring, the resulting backup will be out-of-sync or corrupt.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Atomic Solution: &lt;code&gt;PRAGMA wal_checkpoint(TRUNCATE)&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;To safely take a snapshot without locking tables or interrupting active clients, we invoke an atomic checkpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;PRAGMA&lt;/span&gt; &lt;span class="n"&gt;wal_checkpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;TRUNCATE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;PRAGMA&lt;/span&gt; &lt;span class="n"&gt;integrity_check&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This flushes all active journal frames into the database file, truncates the WAL log to zero bytes, and ensures zero data loss of user bandwidth statistics.&lt;/p&gt;




&lt;h2&gt;
  
  
  Multi-Panel Auto-Discovery Architecture
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Khoosheh&lt;/strong&gt; backup engine automates this pipeline through intelligent discovery:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Panel Type&lt;/th&gt;
&lt;th&gt;Target Files &amp;amp; Databases&lt;/th&gt;
&lt;th&gt;Backup Mechanism&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;3X-UI / X-UI&lt;/strong&gt; (Sanaei, Alireza, etc.)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/x-ui/x-ui.db&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Native Python SQLite streaming hot backup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Marzban&lt;/strong&gt; (Gozar)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;marzban.db&lt;/code&gt;, &lt;code&gt;.env&lt;/code&gt;, Docker MySQL dumps&lt;/td&gt;
&lt;td&gt;Atomic checkpoint &amp;amp; containerized dump&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PasarGuard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Client databases, &lt;code&gt;sub_bridge&lt;/code&gt;, TLS certs&lt;/td&gt;
&lt;td&gt;Volume snapshot &amp;amp; structured packaging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Remnawave&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SQLite config &amp;amp; PostgreSQL container&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;pg_dump&lt;/code&gt; stream &amp;amp; config extraction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hiddify Manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;hiddifypanel.db&lt;/code&gt;, &lt;code&gt;current-config.json&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Live DB checkpoint &amp;amp; SSL certificate preservation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Step-by-Step Implementation Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. One-Line Deployment
&lt;/h3&gt;

&lt;p&gt;On Debian or Ubuntu servers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; https://raw.githubusercontent.com/dalroot/khoosheh/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The systemd daemon launches automatically on port &lt;code&gt;2099&lt;/code&gt; (HTTP) and &lt;code&gt;2098&lt;/code&gt; (HTTPS), preventing port conflicts with standard proxy ports (such as 443, 80, 2053, or 8443).&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Access the Dashboard
&lt;/h3&gt;

&lt;p&gt;Navigate to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://YOUR_SERVER_IP:2099
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure administrative credentials during the initial setup wizard. Installed panels are automatically detected on login.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Telegram Automation &amp;amp; AES-256 Encryption
&lt;/h3&gt;

&lt;p&gt;Under the &lt;strong&gt;Settings&lt;/strong&gt; panel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure your Telegram Bot token and Admin ID.&lt;/li&gt;
&lt;li&gt;Set an optional &lt;strong&gt;AES-256 (7z)&lt;/strong&gt; encryption passphrase for all archives.&lt;/li&gt;
&lt;li&gt;Enable automated daily digests and scheduled distribution (e.g., every 6 hours).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Zero-Downtime Migration (&amp;lt; 60s Downtime)
&lt;/h3&gt;

&lt;p&gt;To migrate to a new server or node:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deploy Khoosheh on the destination server.&lt;/li&gt;
&lt;li&gt;Upload the encrypted archive to the &lt;strong&gt;Smart Restore Wizard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Khoosheh automatically saves a &lt;code&gt;.pre_restore_&amp;lt;timestamp&amp;gt;.bak&lt;/code&gt; rollback safety copy, verifies database integrity, clears stale &lt;code&gt;-wal&lt;/code&gt; cache, and restarts dependent services cleanly.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Benchmark Results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Migration Downtime:&lt;/strong&gt; &amp;lt; 60 seconds (zero tunnel disconnects).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traffic Loss:&lt;/strong&gt; 0% (exact preservation of upload/download bytes).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restore Speed:&lt;/strong&gt; Initial restoration of multi-gigabyte logs completed in &amp;lt; 5 minutes.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Open Source &amp;amp; Contributions
&lt;/h2&gt;

&lt;p&gt;Khoosheh is open-source under the &lt;strong&gt;MIT License&lt;/strong&gt;. PRs, issue reports, and community benchmarks are welcomed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/dalroot/khoosheh" rel="noopener noreferrer"&gt;github.com/dalroot/khoosheh&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discussion Board:&lt;/strong&gt; &lt;a href="https://dalroot.github.io/khoosheh/" rel="noopener noreferrer"&gt;Khoosheh Community Discussions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Research Channel:&lt;/strong&gt; &lt;a href="https://t.me/dallrep" rel="noopener noreferrer"&gt;t.me/dallrep&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>linux</category>
      <category>sqlite</category>
      <category>docker</category>
    </item>
    <item>
      <title>کالبدشکافی یک کمپین فریبکارانه بازاریابی پنهان در توییتر فارسی: پرونده کارا کابل ایوان</title>
      <dc:creator>Dal</dc:creator>
      <pubDate>Sun, 11 Oct 2026 23:26:20 +0000</pubDate>
      <link>https://dev.to/dalroot/khlbdshkhfy-ykh-khmpyn-frybkhrnh-bzryby-pnhn-dr-twyytr-frsy-prwndh-khr-khbl-ywn-4n13</link>
      <guid>https://dev.to/dalroot/khlbdshkhfy-ykh-khmpyn-frybkhrnh-bzryby-pnhn-dr-twyytr-frsy-prwndh-khr-khbl-ywn-4n13</guid>
      <description>&lt;h1&gt;
  
  
  کالبدشکافی یک کمپین فریبکارانه بازاریابی پنهان در توییتر فارسی: پرونده «کارا کابل ایوان»
&lt;/h1&gt;

&lt;p&gt;پروپاگاندا و دستکاری افکار عمومی در شبکه‌های اجتماعی همیشه ماهیت سیاسی ندارد. در ماه‌های اخیر، برخی از کانون‌های تبلیغاتی و برندهای تجاری در ایران به تاکتیک‌های پیچیده‌تری روی آورده‌اند؛ مهندسی سناریوهای چندمرحله‌ای با سوءاستفاده از دغدغه‌های امنیتی و تورمی شهروندان، آن هم پشت نقاب توییت‌های روزمره و حساب‌های شخصی.&lt;/p&gt;

&lt;p&gt;این گزارش، مستندات یک عملیات بازاریابی چریکی نامحسوس (Astroturfing) را کالبدشکافی می‌کند که بین شهریور تا مهر ۱۴۰۵ در توییتر فارسی اجرا شد و مجموعاً بیش از &lt;strong&gt;۱ میلیون و ۲۰۰ هزار بازدید&lt;/strong&gt; کسب کرد.&lt;/p&gt;


&lt;h2&gt;
  
  
  ۱. خلاصه ماجرا و نقشه راه کمپین
&lt;/h2&gt;

&lt;p&gt;برند تجاری &lt;strong&gt;«کارا کابل ایوان» (A1 Kara Cable)&lt;/strong&gt;، مستقر در شهرک صنعتی ایوانکی سمنان، با طراحی یک سناریوی روانی سه‌مرحله‌ای وارد تایم‌لاین کاربران شد:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;فاز اول — القای ترس و خطر (۱۹ شهریور / ۱۰۷ هزار ویو):&lt;/strong&gt; اکانت پرمخاطب شخصی تصویری از سوختگی شدید کلید و پریزهای خانه منتشر کرد و علت را استفاده برقکار از سیم برق بی‌کیفیت و متفرقه اعلام نمود.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;فاز دوم — معرفی منجی و نمایش محصول (۲۳ شهریور / ۸۳۶ هزار ویو):&lt;/strong&gt; تنها ۴ روز بعد، همان اکانت اعلام کرد پس از تحقیق فراوان ۲۰۰ متر سیم مسی استاندارد خریده است. در عکس پیوست، کلاف قرمز سیم طوری دقیق مقابل دوربین گرفته شده بود که نام کارخانه، لوگوی A1، شماره پروانه استاندارد و آدرس وب‌سایت آن بدون نقص ثبت شود.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;فاز سوم — تحریک طمع و مسابقه با تورم (۲۰ مهر / ۲۴۶ هزار ویو):&lt;/strong&gt; حدود یک ماه بعد، اکانت دیگری با تغییر زاویه به سمت مباحث مالی ادعا کرد در اواخر فروردین به جای طلا، سیم مسی خریده و اکنون سرمایه‌اش دو برابر شده است؛ تصویری از ستونی از کلاف‌های قرمز همان کارخانه ضمیمه این ادعا بود.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;گاف تاریخی و سند انکارناپذیر تقلب:&lt;/strong&gt; با بررسی اپتیکال برچسب کلاف‌ها مشخص شد تاریخ تولید محصول روی برچسب &lt;strong&gt;۱۴۰۵/۰۲/۱۷&lt;/strong&gt; (۱۷ اردیبهشت) است. نویسنده مدعی بود کالا را در اواخر فروردین خریده است؛ زمانی که این کابل‌ها هنوز در کارخانه تولید نشده بودند. علاوه بر این، تطابق پارت تولیدی نشان داد کلاف ارائه شده در شهریور و کلاف‌های مهر از یک سری ساخت واحد تامین شده‌اند.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  ۲. جدول جامع شواهد، زمان‌بندی و متاداده‌ها
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;مرحله سناریو&lt;/th&gt;
&lt;th&gt;تاریخ و ساعت (UTC)&lt;/th&gt;
&lt;th&gt;شناسه اکانت&lt;/th&gt;
&lt;th&gt;شناسه توییت&lt;/th&gt;
&lt;th&gt;خلاصه متن و زاویه روایت&lt;/th&gt;
&lt;th&gt;بازدید&lt;/th&gt;
&lt;th&gt;لایک&lt;/th&gt;
&lt;th&gt;ریتوییت&lt;/th&gt;
&lt;th&gt;مدرک پیوست&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;۱. تزریق ترس&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2026-09-09 17:47&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@aylarfotouhii&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2097743599672725559&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;آتش‌سوزی در منزل؛ مقصر دانستن سیم‌کشی نامرغوب برقکار&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;۱۰۷,۵۶۱&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;۲,۳۲۰&lt;/td&gt;
&lt;td&gt;۲۰&lt;/td&gt;
&lt;td&gt;تصویر پریز و فیوز برق جزغاله‌شده&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;۲. معرفی برند&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2026-09-13 15:45&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@aylarfotouhii&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2099162471650959546&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ادعای تحقیق و خرید ۲۰۰ متر سیم افشان کارا کابل ایوان&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;۸۳۶,۵۸۰&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;۶۵۴&lt;/td&gt;
&lt;td&gt;۴۷&lt;/td&gt;
&lt;td&gt;تصویر کلاف با نمایش مستقیم برچسب&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;۳. توصیه مالی&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2026-10-11 14:05&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@1balva&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2109284362399449192&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ادعای خرید مس در اواخر فروردین و سود دو برابری نسبت به طلا&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;۲۴۵,۹۱۳&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;۲,۳۳۳&lt;/td&gt;
&lt;td&gt;۴۱&lt;/td&gt;
&lt;td&gt;ستون ۵ تایی از همان کلاف‌های قرمز&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;افشاگری جامعه&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2026-10-11 19:28&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@landcruiserfj75&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2109365441961341129&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;اثبات تناقض تاریخ چاپ‌شده برچسب با ادعای خرید در فروردین&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;۶۵,۰۰۰+&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;۱,۴۰۰+&lt;/td&gt;
&lt;td&gt;۱۲۱&lt;/td&gt;
&lt;td&gt;برش باکیفیت از تاریخ تولید کارخانه&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;مجموع بازدید یکپارچه کمپین:&lt;/strong&gt; &lt;strong&gt;۱,۱۸۹,۰۵۴ بازدید مستقیم&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ۳. بازخوانی اپتیکال برچسب کارخانه و تناقض تقویمی
&lt;/h2&gt;

&lt;p&gt;در توییت اکانت &lt;code&gt;1balva@&lt;/code&gt; چنین ادعایی مطرح شده است:&lt;br&gt;
&amp;gt; &lt;em&gt;«اواخر فروردین بود پولم به خرید طلای فیزیکی نمی‌رسید، به سایت های طلای آنلاین هم اعتماد نداشتم. یه مقدار سیم مسی خریدم کم کم، تو ۶ تومن خرید کردم الان ۱۱.۵ تومن شده تقریبا ۲ برابر شد و ارزش پولم حفظ شد...»&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;بررسی بزرگ‌نمایی تصویر اصلی با کیفیت &lt;code&gt;orig&lt;/code&gt; مشخصات درج‌شده روی کلاف را آشکار می‌کند:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;تولیدکننده:&lt;/strong&gt; شرکت کارا کابل ایوان (A1 KARA CABLE CO)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;محصول:&lt;/strong&gt; سیم افشان ۱ × ۲.۵ (متراژ ۱۰۰ متر)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;تاریخ تولید حک‌شده:&lt;/strong&gt; &lt;strong&gt;۱۴۰۵/۰۲/۱۷&lt;/strong&gt; (۱۷ اردیبهشت ۱۴۰۵)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;پروانه کاربرد استاندارد ایران:&lt;/strong&gt; ۷۳۱۷۷۴۴۸۸۶&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;شماره پیامک استعلام اصالت پروانه:&lt;/strong&gt; ۱۰۰۰۱۵۱۷&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;نشانی کارخانه:&lt;/strong&gt; استان سمنان، شهرک صنعتی ایوانکی (&lt;code&gt;www.A1cable.com&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;فاصله زمانی میان اواخر فروردین (تاریخ ادعایی خرید) و ۱۷ اردیبهشت (تاریخ واقعی خروج از خط تولید) دست‌کم ۱۸ روز است. راوی کمپین ادعای تصاحب و انبار کردن کالایی را دارد که در زمان روایت، هنوز موجودیت خارجی نداشته است.&lt;/p&gt;


&lt;h2&gt;
  
  
  ۴. تطابق پارت تولیدی میان دو اکانت جداگانه
&lt;/h2&gt;

&lt;p&gt;در تصویر توییت ۲۳ شهریور اکانت آیلار فتوحی، برچسب کلافی که در دست نگه داشته شده دارای مشخصات زیر است:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;تاریخ تولید: &lt;strong&gt;۱۴۰۵/۰۲/۱۷&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;سایز: &lt;strong&gt;۱ × ۲.۵&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;شماره پروانه: &lt;strong&gt;۷۳۱۷۷۴۴۸۸۶&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;این مشخصات با برچسب کلاف‌های توییت ۲۰ مهر اکانت ۱بلوا مو نمی‌زند. در شرایط واقعی بازار سیم و کابل ساختمانی، احتمال اینکه دو خریدار مستقل در بازه‌های زمانی مختلف و در شهرهای متفاوت، دقیقاً کلاف‌هایی از یک روز مشخص تولید (۱۷ اردیبهشت) را خریداری کنند و هر دو به شیوه مشابه آن را وایرال کنند ناچیز است. شواهد تایید می‌کند هر دو محتوا حاصل توزیع مستقیم محصول توسط یک مجری تبلیغاتی مشترک بوده است.&lt;/p&gt;


&lt;h2&gt;
  
  
  ۵. تحلیل اکانت‌های منتشرکننده و حلقه بوستینگ
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ۱. پروفایل &lt;code&gt;aylarfotouhii@&lt;/code&gt; (اکانت بذرپاش سناریو)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;شناسه عددی: &lt;code&gt;1762120042148175872&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;تاریخ افتتاح: فوریه ۲۰۲۴&lt;/li&gt;
&lt;li&gt;موقعیت جغرافیایی ثبت‌شده: تبریز / تهران&lt;/li&gt;
&lt;li&gt;نقش در سناریو: بازنمایی یک دختر جوان با ادبیات روزمره و احساسی جهت جلب اعتماد حداکثری و دور کردن هرگونه شک نسبت به تبلیغاتی بودن محتوا.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ۲. پروفایل &lt;code&gt;1balva@&lt;/code&gt; (اکانت مهندسی مالی و موج‌سواری بر طلا)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;شناسه عددی: &lt;code&gt;1572152581891186688&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;تعداد دنبال‌کنندگان: ۱۱,۰۱۱ نفر&lt;/li&gt;
&lt;li&gt;نقش در سناریو: بازنمایی یک شهروند عمل‌گرا درگیر تورم که راهکار تجربی برای حفظ ارزش ریال ارائه می‌دهد.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ۳. حساب‌های درگیر در چرخه بازنشر (مانند &lt;code&gt;gil77da@&lt;/code&gt;)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;بررسی حساب‌های کوت‌کننده و مشارکت‌کننده نشان می‌دهد چندین اکانت پرمخاطب غیرشخصی با تعداد توییت‌های نامتعارف (بیش از ۳۳ هزار توییت) در ساعات ابتدایی انتشار، توییت‌ها را به عنوان تجربه زیسته واقعی بازنشر کرده‌اند تا الگوریتم توییتر پست‌ها را به تب For You کاربران عمومی بفرستد.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  ۶. درس‌های کارآگاهی برای رصد شبکه‌های اجتماعی
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;مهندسی پلکانی نیاز:&lt;/strong&gt; کمپین‌های حرفه‌ای فریبکارانه بلافاصله محصول را تبلیغ نمی‌کنند؛ ابتدا با یک دردسر روزمره (آتش‌سوزی) احساس خطر می‌سازند، سپس برند را به عنوان نجات‌بخش معرفی می‌کنند و در نهایت آن را به عنوان یک دارایی سرمایه‌ای جا می‌اندازند.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;برچسب‌های فیزیکی قابل جعل در متن نیستند:&lt;/strong&gt; طراحان کمپین متن و احساسات را به دقت می‌نویسند، اما به متاداده‌های فیزیکی محصول (تاریخ تولید، بارکد، استانداردهای صنعتی) توجه کافی ندارند. در تحلیل محتواهای وایرال، همیشه اطلاعات کارخانه‌ای کالا باید در اولویت سنجش زمانی قرار گیرد.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;شک به توصیه‌های اقتصادی غیرمعمول:&lt;/strong&gt; هر زمان روایتی شخصی در توییتر مدعی شد کالایی نامتعارف (مثل کلاف سیم برق، پیچ و مهره یا آهن‌آلات خانگی) عملکردی بهتر از طلا داشته است، پیش از هر تصمیمی ردپای کانون‌های تجاری و تولیدکنندگان همان صنف را در پشت پرده جستجو کنید.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>osint</category>
      <category>cybersecurity</category>
      <category>forensics</category>
      <category>investigation</category>
    </item>
    <item>
      <title>Recovering a Dead Ubuntu VPS After an IP Change: VNC Recovery, /32 On-Link Routing, and systemd-networkd</title>
      <dc:creator>Dal</dc:creator>
      <pubDate>Thu, 24 Sep 2026 21:40:38 +0000</pubDate>
      <link>https://dev.to/dalroot/njt-srwr-lynwkhs-ps-z-twyd-ip-z-khmwshy-khml-ssh-t-rwtyng-32-b-khnswl-vnc-o4l</link>
      <guid>https://dev.to/dalroot/njt-srwr-lynwkhs-ps-z-twyd-ip-z-khmwshy-khml-ssh-t-rwtyng-32-b-khnswl-vnc-o4l</guid>
      <description>&lt;h1&gt;
  
  
  Incident Post-Mortem: Recovering a "Dead" Ubuntu VPS After an IP Change
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;A technical walkthrough of recovering a production Ubuntu 26.04 minimal server after a provider IP reallocation caused total SSH isolation.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Incident Overview &amp;amp; Environment
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Server:&lt;/strong&gt; &lt;code&gt;germany-play&lt;/code&gt; (KVM Virtual Machine)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base OS:&lt;/strong&gt; Ubuntu 26.04 LTS (Minimal cloud template)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Previous IP:&lt;/strong&gt; &lt;code&gt;2.26.48.117/32&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reallocated IP:&lt;/strong&gt; &lt;code&gt;193.222.99.171/32&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assigned Gateway:&lt;/strong&gt; &lt;code&gt;10.0.0.1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure State
&lt;/h3&gt;

&lt;p&gt;Immediately following the IP address change in the hosting control panel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inbound SSH sessions timed out unconditionally.&lt;/li&gt;
&lt;li&gt;Inbound ping tests showed 100% packet loss.&lt;/li&gt;
&lt;li&gt;Outbound traffic from the VM could not resolve external names or reach internet destinations.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Gaining Console Access via Out-of-Band VNC
&lt;/h2&gt;

&lt;p&gt;Because network-level access (SSH) was non-functional, management had to be performed out-of-band via the provider's hypervisor web console (VNC).&lt;/p&gt;

&lt;p&gt;Inspecting the network interface from the console showed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@germany-play:~# ip addr show ens3
2: ens3: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP group default qlen 1000
    &lt;span class="nb"&gt;link&lt;/span&gt;/ether 52:54:00:ca:68:fd brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname enx525400ca68fd
    inet 2.26.48.117/32 scope global ens3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The hypervisor bridge was routing traffic toward &lt;code&gt;193.222.99.171&lt;/code&gt;, but the guest operating system interface (&lt;code&gt;ens3&lt;/code&gt;) remained bound to the decommissioned IP &lt;code&gt;2.26.48.117&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Root Cause Analysis
&lt;/h2&gt;

&lt;p&gt;Minimal Ubuntu cloud templates often omit dynamic configuration layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;cloud-init&lt;/code&gt; was not configured to re-probe network metadata dynamically.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;netplan&lt;/code&gt; was absent from the installation image.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NetworkManager&lt;/code&gt; was not installed.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;systemd-networkd&lt;/code&gt; was present but disabled (&lt;code&gt;inactive (dead)&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Point-to-Point &lt;code&gt;/32&lt;/code&gt; Subnet Constraint
&lt;/h3&gt;

&lt;p&gt;In public cloud setups utilizing &lt;code&gt;/32&lt;/code&gt; host routes, the assigned gateway (&lt;code&gt;10.0.0.1&lt;/code&gt;) does not reside within the broadcast subnet of the assigned IP (&lt;code&gt;193.222.99.171/32&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Attempting to add a default route using traditional syntax produces an error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RTNETLINK answers: Network is unreachable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To instruct the Linux kernel that the gateway is reachable directly over the link layer despite differing subnets, the route must explicitly declare the &lt;code&gt;onlink&lt;/code&gt; attribute.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Troubleshooting Obstacles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ephemeral Commands vs. Persistence
&lt;/h3&gt;

&lt;p&gt;Executing runtime commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip addr add 193.222.99.171/32 dev ens3
ip route add default via 10.0.0.1 dev ens3 onlink
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restored instant connectivity (sub-millisecond ping to &lt;code&gt;8.8.8.8&lt;/code&gt; and active SSH). However, these settings exist solely in kernel runtime state and disappear upon system reboot.&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax Placement in &lt;code&gt;systemd-networkd&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;When writing &lt;code&gt;/etc/systemd/network/10-ens3.network&lt;/code&gt;, placing the &lt;code&gt;GatewayOnLink=yes&lt;/code&gt; directive inside the &lt;code&gt;[Network]&lt;/code&gt; section resulted in systemd ignoring the key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10-ens3.network:9: Unknown key 'GatewayOnLink' in section [Network], ignoring.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;code&gt;systemd-networkd&lt;/code&gt;, &lt;code&gt;GatewayOnLink&lt;/code&gt; is valid exclusively within a dedicated &lt;code&gt;[Route]&lt;/code&gt; block.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stale File Definitions
&lt;/h3&gt;

&lt;p&gt;Residual references in &lt;code&gt;/etc/hosts&lt;/code&gt; and &lt;code&gt;/etc/network/interfaces&lt;/code&gt; caused dual-IP binding upon reboot, leaving the decommissioned IP active alongside the new address.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Verified Permanent Configuration
&lt;/h2&gt;

&lt;p&gt;The following configuration provides persistent network initialization across reboots without requiring third-party network managers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create the Network Unit
&lt;/h3&gt;

&lt;p&gt;Write &lt;code&gt;/etc/systemd/network/10-ens3.network&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[Match]&lt;/span&gt;
&lt;span class="py"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;ens3&lt;/span&gt;

&lt;span class="nn"&gt;[Network]&lt;/span&gt;
&lt;span class="py"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;193.222.99.171/32&lt;/span&gt;
&lt;span class="py"&gt;DNS&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;8.8.8.8&lt;/span&gt;
&lt;span class="py"&gt;DNS&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1.1.1.1&lt;/span&gt;

&lt;span class="nn"&gt;[Route]&lt;/span&gt;
&lt;span class="py"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;10.0.0.1&lt;/span&gt;
&lt;span class="py"&gt;GatewayOnLink&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Synchronize Legacy Files &amp;amp; Purge Stale Addresses
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Update host definition&lt;/span&gt;
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/2.26.48.117/193.222.99.171/g'&lt;/span&gt; /etc/hosts

&lt;span class="c"&gt;# Update legacy interface file&lt;/span&gt;
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/2.26.48.117/193.222.99.171/g'&lt;/span&gt; /etc/network/interfaces

&lt;span class="c"&gt;# Remove decommissioned IP from active runtime&lt;/span&gt;
ip addr del 2.26.48.117/32 dev ens3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Enable the Network Service
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;systemd-networkd
systemctl restart systemd-networkd

&lt;span class="c"&gt;# Verify kernel routing table&lt;/span&gt;
ip route
&lt;span class="c"&gt;# default via 10.0.0.1 dev ens3 proto static onlink&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Explaining the External ICMP Timeout
&lt;/h2&gt;

&lt;p&gt;Following recovery, global ICMP ping diagnostics (such as check-host.net) continued to report packet drops, even while SSH and outbound internet functioned normally.&lt;/p&gt;

&lt;p&gt;Examining firewall policies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@germany-play:~# iptables &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt;
Chain INPUT &lt;span class="o"&gt;(&lt;/span&gt;policy ACCEPT&lt;span class="o"&gt;)&lt;/span&gt;
Chain FORWARD &lt;span class="o"&gt;(&lt;/span&gt;policy ACCEPT&lt;span class="o"&gt;)&lt;/span&gt;
Chain OUTPUT &lt;span class="o"&gt;(&lt;/span&gt;policy ACCEPT&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Reason:&lt;/strong&gt; Inbound ICMP echo requests are dropped upstream by the datacenter anti-DDoS scrubbing layer. Testing TCP connectivity on service ports (port 22) confirmed complete reachability with sub-millisecond round-trip response and zero dropped connections.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Operational Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Minimal cloud templates require verifying the active network management subsystem before performing changes.&lt;/li&gt;
&lt;li&gt;Out-of-band hypervisor access (VNC/Serial) must be confirmed before reallocating production IP addresses.&lt;/li&gt;
&lt;li&gt;Point-to-point &lt;code&gt;/32&lt;/code&gt; setups require explicit &lt;code&gt;onlink&lt;/code&gt; flags for off-subnet gateways.&lt;/li&gt;
&lt;li&gt;External ICMP timeouts do not indicate service downtime; always validate through TCP port handshakes.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>networking</category>
      <category>sysadmin</category>
    </item>
    <item>
      <title>Integration Test - Automated Agent Connection</title>
      <dc:creator>Dal</dc:creator>
      <pubDate>Tue, 22 Sep 2026 04:28:42 +0000</pubDate>
      <link>https://dev.to/dalroot/integration-test-automated-agent-connection-30b8</link>
      <guid>https://dev.to/dalroot/integration-test-automated-agent-connection-30b8</guid>
      <description>&lt;h1&gt;
  
  
  Hello Dev.to
&lt;/h1&gt;

&lt;p&gt;This is an automated connectivity test post from agent integration.&lt;/p&gt;

</description>
      <category>test</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
