<?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: A.z</title>
    <description>The latest articles on DEV Community by A.z (@azbuilddev).</description>
    <link>https://dev.to/azbuilddev</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%2F4171436%2F0c497dbb-7269-4e2a-a920-b49d9e3045fc.png</url>
      <title>DEV Community: A.z</title>
      <link>https://dev.to/azbuilddev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/azbuilddev"/>
    <language>en</language>
    <item>
      <title>The hardest part of my NAS dashboard was getting traffic to reach it</title>
      <dc:creator>A.z</dc:creator>
      <pubDate>Fri, 09 Oct 2026 10:27:49 +0000</pubDate>
      <link>https://dev.to/azbuilddev/the-hardest-part-of-my-nas-dashboard-was-getting-traffic-to-reach-it-1ecf</link>
      <guid>https://dev.to/azbuilddev/the-hardest-part-of-my-nas-dashboard-was-getting-traffic-to-reach-it-1ecf</guid>
      <description>&lt;p&gt;I built &lt;a href="https://github.com/AzBuildDev/nas-device-flow" rel="noopener noreferrer"&gt;NAS Device Flow&lt;/a&gt; to choose which devices on my home Wi-Fi use rule-based proxy routing. The daily interaction is a switch beside each device. Shipping the first regular release, &lt;a href="https://github.com/AzBuildDev/nas-device-flow/releases/tag/v0.1.0" rel="noopener noreferrer"&gt;0.1.0&lt;/a&gt;, made me spend more time on the path to that switch: installation, DHCP leases, and making the page explain what it actually knows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuai0z70ctuj729f213bf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuai0z70ctuj729f213bf.png" alt="NAS Device Flow with fictional devices and generated traffic" width="800" height="826"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The screenshot is a demo, with fictional devices and generated traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  A switch cannot repair an old gateway
&lt;/h2&gt;

&lt;p&gt;The NAS runs a Linux controller and a separate Mihomo routing container. My Wi-Fi router remains the access point and upstream Internet router. For automatic onboarding, NAS DHCP advertises the routing container as the client's gateway and DNS server.&lt;/p&gt;

&lt;p&gt;A client can retain its old gateway until it renews its DHCP lease. In my original deployment, a tablet needed to forget the Wi-Fi network and rejoin before it picked up the new configuration. Turning its proxy switch on did not change the gateway stored on the tablet.&lt;/p&gt;

&lt;p&gt;That is why the panel separates a saved routing preference from observed gateway activity. A valid lease means the client received configuration. A sampled connection means the core saw traffic. Neither proves that a proxy request succeeded.&lt;/p&gt;

&lt;h2&gt;
  
  
  An address that looks tidy can still be taken
&lt;/h2&gt;

&lt;p&gt;An installer can read the host interface, subnet and default route. It cannot establish that an arbitrary address is free just because a device did not answer ARP. A sleeping printer, a static assignment or a DHCP reservation can still conflict later.&lt;/p&gt;

&lt;p&gt;In 0.1.0, I removed prefilled guesses for the core IP, panel IP and future DHCP range. Those fields start empty. Each has an explanation, and the operator checks router reservations and static devices before entering them. Validation catches invalid ranges and responsive conflicts, but does not turn silence into proof.&lt;/p&gt;

&lt;p&gt;The two static addresses have different jobs. The core IP becomes the clients' gateway and DNS address. The panel IP opens the management page. The future DHCP pool supplies client addresses and must exclude the router, NAS, core, panel and other fixed devices. Installation leaves DHCP off; enabling it is a separate step after a single-client routing test and disabling the other DHCP servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test from the client that will use the page
&lt;/h2&gt;

&lt;p&gt;The temporary installer opens at the NAS management IP on port 9088. The production panel has its own macvlan address.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.docker.com/engine/network/drivers/macvlan/" rel="noopener noreferrer"&gt;Linux macvlan restricts direct host-to-container communication&lt;/a&gt;. A failed test from a browser running on the NAS can be misleading. The installation guide now explicitly asks for a test from another device on the same LAN. Changing the NAS gateway to work around that test can create another problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What shipped
&lt;/h2&gt;

&lt;p&gt;The main panel still puts devices first: direct or smart routing per device, upload/download charts, sampled proxy traffic in decimal MB, and subscription controls tucked away from the everyday switches. It now supports Chinese, English, Japanese, Spanish, French and Korean, plus system, light and dark appearance. The installer is Chinese/English.&lt;/p&gt;

&lt;p&gt;The release includes a prebuilt Linux x86-64 controller image and a NAS Compose installation file. I checked 105 automated tests, container startup and isolated DHCP exchanges in CI. The image and downloadable attachments have verified checksums. Router name provenance also follows the configured adapter instead of falling back to Huawei when a source is absent.&lt;/p&gt;

&lt;p&gt;The original deployment runs on a UGREEN DXP4800. Fresh full-LAN installations on other NAS hardware remain unverified; OpenWrt and MikroTik naming adapters have simulated tests only. This is IPv4, with no automatic gateway failover. Docker Desktop on macOS or Windows is not a supported gateway host. The included regional routing preset targets mainland China and needs review for other regions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/AzBuildDev/nas-device-flow" rel="noopener noreferrer"&gt;Source and release&lt;/a&gt; · &lt;a href="https://github.com/AzBuildDev/nas-device-flow/blob/v0.1.0/docs/nas-gui-install.md" rel="noopener noreferrer"&gt;NAS installation guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would like feedback on how the installer explains the network changes, especially where a label might suggest more certainty than the program has. That has been a useful lesson from building this: a simple switch still needs an honest description of the network underneath it.&lt;/p&gt;

&lt;p&gt;This article and the implementation were developed with substantial Codex assistance under my direction. Automated tests are not an independent security audit.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>docker</category>
      <category>networking</category>
    </item>
    <item>
      <title>I built a NAS dashboard for per-device smart routing</title>
      <dc:creator>A.z</dc:creator>
      <pubDate>Thu, 08 Oct 2026 13:47:52 +0000</pubDate>
      <link>https://dev.to/azbuilddev/i-built-a-nas-dashboard-for-per-device-smart-routing-hgg</link>
      <guid>https://dev.to/azbuilddev/i-built-a-nas-dashboard-for-per-device-smart-routing-hgg</guid>
      <description>&lt;p&gt;I wanted to choose which devices on my home Wi-Fi use rule-based proxy routing, without installing a client on every phone or changing network settings each time. That became &lt;a href="https://github.com/AzBuildDev/nas-device-flow" rel="noopener noreferrer"&gt;NAS Device Flow&lt;/a&gt;, a small self-hosted dashboard running on my NAS.&lt;/p&gt;

&lt;p&gt;The main screen puts devices first. Each device has a switch: enable it to apply the configured routing rules, or disable it for direct access. Traffic charts are visible at the top; subscription management lives in settings so it does not get in the way of the everyday task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F350f2poy4vhkdagrokp5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F350f2poy4vhkdagrokp5.png" alt="NAS Device Flow with fictional devices and sample traffic" width="800" height="826"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This screenshot uses fictional devices and generated traffic. Update, October 9, 2026: 0.1.0 is now the first regular release, within the documented hardware and network scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the traffic reaches the NAS
&lt;/h2&gt;

&lt;p&gt;My Wi-Fi router remains the access point and upstream router. The NAS runs a Linux gateway container and a controller, with Mihomo handling the proxy rules. For automatic onboarding, DHCP supplies the NAS gateway and DNS address to clients. Existing clients need to renew their leases before they follow those settings.&lt;/p&gt;

&lt;p&gt;That last sentence turned out to matter. One tablet kept its old gateway after the DHCP change. Toggling a dashboard switch could not fix a lease that still pointed somewhere else. The release now includes an explicit opt-in authoritative DHCP mode for deployments where this is the only DHCP server, and tests for an old lease being rejected and replaced with the correct gateway and DNS. The upstream router's DHCP must be disabled first in that mode.&lt;/p&gt;

&lt;p&gt;A device with its switch enabled still follows the configured rules. It does not send every connection through a proxy. The included regional preset is intended for mainland China, with domestic destinations direct and other matching destinations proxied; users elsewhere should review and adapt it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remembering devices
&lt;/h2&gt;

&lt;p&gt;The controller uses MAC addresses to retain device choices. DHCP leases, neighbor information and optional router adapters help discover devices and supply names. You can give a device a friendly name when discovery has no useful answer.&lt;/p&gt;

&lt;p&gt;Returning with the same MAC preserves its choice even if its IP changes. A rotating private Wi-Fi address becomes a new device record. Two devices with the same hostname are not automatically merged. The setting for newly discovered devices defaults to direct access and only affects new records.&lt;/p&gt;

&lt;p&gt;There is a Huawei adapter tested against my hardware. OpenWrt and MikroTik adapters currently have mock coverage, not hardware validation. Device names are useful labels, not a guarantee that the dashboard knows the exact model of every client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making the dashboard useful day to day
&lt;/h2&gt;

&lt;p&gt;Besides the device switches, it shows upload and download rates, sampled proxy traffic beside each device, subscription controls, and basic gateway information. The interface supports Chinese, English, Japanese, Spanish, French and Korean, with a manual language choice that is remembered in the browser.&lt;/p&gt;

&lt;p&gt;The traffic counter uses decimal MB. It accumulates sampled connection deltas and saves checkpoints, so it is an operational estimate rather than a billing meter. The interface also separates a configured proxy choice from observed gateway activity: a switch alone is not proof that a device's traffic actually reached the gateway.&lt;/p&gt;

&lt;p&gt;Local authentication includes a password-change flow that verifies the current password and invalidates existing sessions after a successful change.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is ready, and what still needs work
&lt;/h2&gt;

&lt;p&gt;The current &lt;a href="https://github.com/AzBuildDev/nas-device-flow/releases/tag/v0.1.0" rel="noopener noreferrer"&gt;v0.1.0 release&lt;/a&gt; has 105 automated tests. CI also checks container startup and an isolated Linux DHCP renewal path. My deployment runs on a UGREEN DXP4800, but a fresh installation across other NAS models and router combinations still needs validation.&lt;/p&gt;

&lt;p&gt;The gateway requires Linux and macvlan networking. Docker Desktop on macOS or Windows is not a supported gateway host; those systems can use the web interface. IPv6 routing and automatic gateway failover are not implemented. If the NAS is your gateway, its availability matters to the devices using it.&lt;/p&gt;

&lt;p&gt;The controller is MIT-licensed. Mihomo and other dependencies retain their own licenses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/AzBuildDev/nas-device-flow" rel="noopener noreferrer"&gt;Source, installation instructions and limitations&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would appreciate feedback on the device workflow, DHCP migration and naming adapters. In particular, I want the panel to make it easy to tell the difference between a saved preference and traffic that is actually using the gateway.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was prepared with AI assistance and checked against the project's documented behavior and tests.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
  </channel>
</rss>
